Merge branch 'master' of https://gitee.com/guochang-hongyun/warm-kingdom-vue3-oa
# Conflicts: # src/views/crm/customer/CustomerForm.vuepull/781/head
parent
3a1bd12787
commit
bee919cfb6
|
|
@ -7,10 +7,7 @@ VITE_DEV=true
|
|||
# VITE_BASE_URL='http://8.130.12.151:48080'
|
||||
# VITE_BASE_URL='http://lhy.free.idcfengye.com'
|
||||
# VITE_BASE_URL='http://m94844f6.natappfree.cc'
|
||||
# VITE_BASE_URL='http://172.22.3.168:48080'
|
||||
# VITE_BASE_URL='http://m94844f6.natappfree.cc'
|
||||
# VITE_BASE_URL='http://172.22.3.168:48080'
|
||||
VITE_BASE_URL='http://localhost:48080'
|
||||
VITE_BASE_URL='http://172.22.3.49:48080'
|
||||
# VITE_BASE_URL='http://172.22.3.203:48080'
|
||||
|
||||
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
"test-server": "vite --mode test",
|
||||
"ts:check": "vue-tsc --noEmit",
|
||||
"build:local": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build",
|
||||
"build:dev": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode dev",
|
||||
"build:dev": "node --max_old_space_size=5048 ./node_modules/vite/bin/vite.js build --mode dev",
|
||||
"build:test": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode test",
|
||||
"build:stage": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode stage",
|
||||
"build:prod": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode prod",
|
||||
|
|
|
|||
2095
pnpm-lock.yaml
2095
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
|
@ -45,7 +45,6 @@ const allFilterEvents = ref([])
|
|||
|
||||
watch(() => props.modelValue, (val) => {
|
||||
selectValue.value = val
|
||||
console.log('%csrc/components/SelectCustomer/src/index.vue:48 val,', 'green', val,props.customerList);
|
||||
nextTick(() => {
|
||||
let arr = options.value.filter(v => v.id === val)
|
||||
if (!arr.length) {
|
||||
|
|
@ -57,12 +56,10 @@ watch(() => props.modelValue, (val) => {
|
|||
|
||||
watch(() => props.customerList, (val) => {
|
||||
options.value = val.slice(0, 10)
|
||||
console.log('%csrc/components/SelectCustomer/src/index.vue:60 props.customerList,4444', 'color: pink;', props.modelValue,props.customerList,4444);
|
||||
nextTick(() => {
|
||||
let arr = options.value.filter(v => v.id === props.modelValue)
|
||||
if (!arr.length) {
|
||||
let selectItem = props.customerList.filter(v => v.id === props.modelValue)
|
||||
console.log('%csrc/components/SelectCustomer/src/index.vue:65 selectItem', 'color: #007acc;', selectItem);
|
||||
options.value = [...options.value, ...selectItem]
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-form :model="model" :rules="rules" label-width="120px" v-loading="loading">
|
||||
<el-form :model="model" ref="innerFormRef" :rules="rules" label-width="120px" v-loading="loading">
|
||||
<el-row>
|
||||
<!-- 动态渲染插槽内容 -->
|
||||
<template v-for="(field, index) in Object.keys(fields)" :key="index">
|
||||
|
|
@ -12,8 +12,8 @@
|
|||
</el-form>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType } from 'vue';
|
||||
<script lang="ts" >
|
||||
import { defineComponent, PropType, defineExpose } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'processForm',
|
||||
|
|
@ -35,5 +35,25 @@ export default defineComponent({
|
|||
default: false,
|
||||
},
|
||||
},
|
||||
setup(props) {
|
||||
const innerFormRef = ref(null);
|
||||
|
||||
// 暴露 validate 方法
|
||||
defineExpose({
|
||||
validate: () => {
|
||||
if (innerFormRef.value) {
|
||||
return innerFormRef.value.validate();
|
||||
} else {
|
||||
console.error('innerFormRef.value is null');
|
||||
return Promise.reject(new Error('Form reference is not available'));
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
innerFormRef,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
</script>
|
||||
|
|
@ -397,7 +397,7 @@ export enum DICT_TYPE {
|
|||
// 考核类型
|
||||
HRM_ASSESS_TYPE = 'hrm_assess_type',
|
||||
//需求部门
|
||||
HRM_EMAND_DEPARTMENT = 'hrm_emand_department'
|
||||
|
||||
HRM_EMAND_DEPARTMENT = 'hrm_emand_department',
|
||||
|
||||
HRM_CLOCK_STATUS = 'hrm-clock-status',
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
</el-col> -->
|
||||
<el-col :span="8">
|
||||
<el-form-item label="客户名称" prop="customerId">
|
||||
<SelectComponent :customerList="customerList" :disabled="formData.customerDefault || type" v-model="formData.customerId" />
|
||||
<SelectComponent :customerList="customerList" @change="changeCustomer" :disabled="formData.customerDefault || type || route.query.bizId" v-model="formData.customerId" />
|
||||
<!-- <el-select
|
||||
:disabled="formData.customerDefault || type"
|
||||
v-model="formData.customerId"
|
||||
|
|
@ -50,6 +50,24 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="维护人" prop="maintenanceUserId">
|
||||
<el-select
|
||||
v-model="formData.maintenanceUserId"
|
||||
clearable
|
||||
disabled
|
||||
placeholder=""
|
||||
class="w-1/1"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="需求提交人" prop="requestorUserId">
|
||||
<el-select
|
||||
|
|
@ -69,25 +87,7 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="维护人" prop="maintenanceUserId">
|
||||
<el-select
|
||||
v-model="formData.maintenanceUserId"
|
||||
clearable
|
||||
|
||||
:disabled="formType || type"
|
||||
:placeholder="formType ? '' : '请选择维护人'"
|
||||
class="w-1/1"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<!-- <el-col :span="8">
|
||||
<el-form-item label="归属部门" prop="deptId">
|
||||
|
|
@ -370,7 +370,7 @@ const techOptions = ref([]);
|
|||
const difficultOptions = ref([]);
|
||||
const deptTree = ref();
|
||||
const props = defineProps({
|
||||
type: propTypes.number.def(undefined)
|
||||
type: propTypes.number.def(undefined),
|
||||
})
|
||||
const subTabsName = ref('product');
|
||||
const productFormRef = ref();
|
||||
|
|
@ -500,17 +500,29 @@ const resetForm = () => {
|
|||
formRef.value?.resetFields();
|
||||
};
|
||||
|
||||
const changeCustomer = async (val) => {
|
||||
const customerRes = await CustomerApi.getCustomer(val);
|
||||
formData.value.clueDeveloper = customerRes.clueDeveloper
|
||||
formData.value.maintenanceUserId = customerRes.maintainer
|
||||
}
|
||||
|
||||
const changeCheck = (val) => {
|
||||
productFormRef.value.getData(val)
|
||||
}
|
||||
|
||||
const route = useRoute();
|
||||
onMounted(async () => {
|
||||
|
||||
console.log('%csrc/views/crm/business/BusinessForm.vue:512 props', 'color: #007acc;', route.query);
|
||||
const customerId = route.query.customerId;
|
||||
formData.value.clueDeveloper = customerId ? '' : useUserStore().getUser.id;
|
||||
formData.value.customerId = Number(route.query.bizId) || ''
|
||||
formData.value.clueDeveloper = Number(route.query.clueDeveloper) || ''
|
||||
formData.value.maintenanceUserId = Number(route.query.maintenanceUserId) || ''
|
||||
formData.value.requestorUserId = customerId ? '' : useUserStore().getUser.id;
|
||||
formType.value = route.query.id || route.params.id;
|
||||
|
||||
if (formType.value) open(formType.value, customerId)
|
||||
|
||||
customerList.value = await CustomerApi.getSelfCustomerSimpleList();
|
||||
statusTypeList.value = await BusinessStatusApi.getBusinessStatusTypeSimpleList();
|
||||
userOptions.value = await UserApi.getSimpleUserList();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<!-- 操作栏 -->
|
||||
<el-row justify="end">
|
||||
<el-button @click="openForm">
|
||||
<el-button @click="openForm" type="primary">
|
||||
<Icon class="mr-5px" icon="ep:opportunity" />
|
||||
创建商机
|
||||
</el-button>
|
||||
|
|
@ -74,6 +74,8 @@ const props = defineProps<{
|
|||
bizId: number // 业务编号
|
||||
customerId?: number // 关联联系人与商机时,需要传入 customerId 进行筛选
|
||||
contactId?: number // 特殊:联系人编号;在【联系人】详情中,可以传递联系人编号,默认新建的商机关联到该联系人
|
||||
clueDeveloper: number
|
||||
maintenanceUserId: number
|
||||
}>()
|
||||
|
||||
const loading = ref(true) // 列表的加载中
|
||||
|
|
@ -130,7 +132,15 @@ const handleQuery = () => {
|
|||
const { push } = useRouter()
|
||||
const formRef = ref()
|
||||
const openForm = () => {
|
||||
push({ name: 'CrmBusinessAdd' })
|
||||
console.log('%csrc/views/crm/business/components/BusinessList.vue:135 props', 'color: green;', props);
|
||||
push({
|
||||
name: 'CrmBusinessAdd',
|
||||
query: {
|
||||
bizId: props.bizId,
|
||||
clueDeveloper: props.clueDeveloper,
|
||||
maintenanceUserId: props.maintenanceUserId
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 打开联系人详情 */
|
||||
|
|
|
|||
|
|
@ -34,13 +34,6 @@
|
|||
</el-select> -->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入联系人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="登记人" prop="ownerUserId">
|
||||
<el-select
|
||||
|
|
@ -58,11 +51,35 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系人" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入联系人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="角色" prop="contactRoleType">
|
||||
<el-select v-model="formData.contactRoleType" placeholder="请选择角色" class="w-1/1">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTACT_ROLE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="手机" prop="mobile">
|
||||
<el-input v-model="formData.mobile" placeholder="请输入手机" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="职位" prop="post">
|
||||
<el-input v-model="formData.post" placeholder="请输入职位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<!-- <el-col :span="12">
|
||||
|
|
@ -74,31 +91,13 @@
|
|||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入邮箱" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="角色" prop="contactRoleType">
|
||||
<el-select v-model="formData.contactRoleType" placeholder="请选择角色" class="w-1/1">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTACT_ROLE_TYPE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="微信" prop="wechat">
|
||||
<el-input v-model="formData.wechat" placeholder="请输入微信" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="职位" prop="post">
|
||||
<el-input v-model="formData.post" placeholder="请输入职位" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<!-- <el-col :span="12">
|
||||
<el-form-item label="关键决策人" prop="master" style="width: 400px">
|
||||
<el-radio-group v-model="formData.master">
|
||||
<el-radio
|
||||
|
|
@ -110,7 +109,7 @@
|
|||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col>-->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="性别" prop="sex">
|
||||
<el-select v-model="formData.sex" placeholder="请选择" class="w-1/1">
|
||||
|
|
@ -128,7 +127,7 @@
|
|||
<el-input v-model="formData.birthday" placeholder="请输入生日" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col>
|
||||
<el-form-item label="爱好" prop="hobby">
|
||||
<el-input v-model="formData.hobby" placeholder="请输入爱好" />
|
||||
</el-form-item>
|
||||
|
|
@ -161,16 +160,16 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>-->
|
||||
<el-col >
|
||||
<el-form-item label="注册地址" prop="registeredAddress">
|
||||
<el-input v-model="formData.registeredAddress" disabled placeholder="请输入注册地址" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col >
|
||||
<el-form-item label="家庭地址" prop="detailAddress">
|
||||
<el-input v-model="formData.detailAddress" placeholder="请输入家庭地址" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col >
|
||||
<el-form-item label="办公地址" prop="registeredAddress">
|
||||
<el-input v-model="formData.registeredAddress" disabled placeholder="办公地址自动带出" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<!-- <el-col :span="12">
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
<template>
|
||||
<!-- 操作栏 -->
|
||||
<el-row justify="end">
|
||||
<el-button @click="openForm">
|
||||
<el-button @click="openForm" type="primary">
|
||||
<Icon class="mr-5px" icon="system-uicons:contacts" />
|
||||
创建联系人
|
||||
</el-button>
|
||||
<el-button
|
||||
<el-button type="primary"
|
||||
v-if="queryParams.businessId"
|
||||
v-hasPermi="['crm:contact:create-business']"
|
||||
@click="openBusinessModal"
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
<Icon class="mr-5px" icon="ep:circle-plus" />
|
||||
关联
|
||||
</el-button>
|
||||
<el-button
|
||||
<el-button type="danger"
|
||||
v-if="queryParams.businessId"
|
||||
v-hasPermi="['crm:contact:delete-business']"
|
||||
@click="deleteContactBusinessList"
|
||||
|
|
@ -42,7 +42,7 @@
|
|||
</el-table-column>
|
||||
<el-table-column align="center" label="手机号" prop="mobile" />
|
||||
<el-table-column align="center" label="职位" prop="post" />
|
||||
<el-table-column align="center" label="直属上级" prop="parentName" />
|
||||
<!-- <el-table-column align="center" label="直属上级" prop="parentName" />-->
|
||||
<el-table-column align="center" label="是否关键决策人" min-width="100" prop="master">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.master" />
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
:inline="true"
|
||||
:model="queryParams"
|
||||
class="-mb-15px"
|
||||
label-width="90px"
|
||||
label-width="120px"
|
||||
>
|
||||
<el-form-item label="联系人名称" prop="name">
|
||||
<el-input
|
||||
|
|
@ -54,7 +54,7 @@
|
|||
</el-table-column>
|
||||
<el-table-column align="center" label="手机号" prop="mobile" />
|
||||
<el-table-column align="center" label="职位" prop="post" />
|
||||
<el-table-column align="center" label="直属上级" prop="parentName" />
|
||||
<!-- <el-table-column align="center" label="直属上级" prop="parentName" />-->
|
||||
<el-table-column align="center" label="是否关键决策人" min-width="100" prop="master">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.master" />
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@
|
|||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="left" label="客户名称" prop="customerName" width="220">
|
||||
<el-table-column align="center" fixed="left" label="客户名称" prop="customerName" width="280">
|
||||
<!-- <template #default="scope">
|
||||
<el-link
|
||||
:underline="false"
|
||||
|
|
@ -118,11 +118,11 @@
|
|||
<el-table-column align="center" label="邮箱" prop="email" width="180" />
|
||||
<el-table-column align="center" label="职位" prop="post" width="120" />
|
||||
<el-table-column align="center" label="地址" prop="detailAddress" width="120" />
|
||||
<el-table-column align="center" label="关键决策人" prop="master" width="100">
|
||||
<!-- <el-table-column align="center" label="关键决策人" prop="master" width="100">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.master" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>-->
|
||||
<el-table-column align="center" label="直属上级" prop="parentName" width="160">
|
||||
<template #default="scope">
|
||||
<el-link :underline="false" type="primary" @click="openDetail(scope.row.parentId)">
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="变更项目" prop="endTime">
|
||||
<el-form-item label="变更项目" prop="changeItem">
|
||||
<el-radio-group v-model="formData.changeItem">
|
||||
<el-radio :value="1">额度</el-radio>
|
||||
<el-radio :value="2">授权人</el-radio>
|
||||
|
|
@ -96,7 +96,6 @@
|
|||
v-if="formData.changeItem == 1"
|
||||
ref="limitFormRef"
|
||||
:formFields="formFields"
|
||||
|
||||
:data="formData"
|
||||
:disabled="disabled"
|
||||
/>
|
||||
|
|
@ -104,18 +103,22 @@
|
|||
<ContentWrap style="border: none">
|
||||
甲方现授权人信息
|
||||
</ContentWrap>
|
||||
<ContractAuthPersonInfo
|
||||
ref="personDataRef"
|
||||
:products="formData.contractAAuthorizedPersons"
|
||||
/>
|
||||
<ContentWrap>
|
||||
<ContractAuthPersonInfo
|
||||
ref="personDataRef"
|
||||
:products="formData.contractAAuthorizedPersons"
|
||||
/>
|
||||
</ContentWrap>
|
||||
<ContentWrap style="border: none">
|
||||
甲方授权人
|
||||
</ContentWrap>
|
||||
<ContractBAuthorizedPersonForm ref="ContractBAuthorizedPersonFormRef" :customerId="formData.customerId" :contract-id="formData.id" />
|
||||
<ContentWrap>
|
||||
<ContractBAuthorizedPersonForm ref="ContractBAuthorizedPersonFormRef" :formFields="formFields" :customerId="formData.customerId" :contract-id="formData.id" />
|
||||
</ContentWrap>
|
||||
</div>
|
||||
<ContracExtension ref="contractExtensionFormRef" v-if="formData.changeItem == 3" :data="formData" />
|
||||
<ContractStop ref="contractStopFormRef" :formData="formData" v-if="formData.changeItem == 4" />
|
||||
<ContractAAuthorizedCompanyForm ref="contractAAuthorizedCompanyFormRef1" v-if="formData.changeItem == 5" :data="formData.contractAAuthorizedCompanys" />
|
||||
<ContracExtension ref="contractExtensionFormRef" :formFields="formFields" v-if="formData.changeItem == 3" :data="formData" />
|
||||
<ContractStop ref="contractStopFormRef" :formData="formData" :formFields="formFields" v-if="formData.changeItem == 4" />
|
||||
<ContractAAuthorizedCompanyForm ref="contractAAuthorizedCompanyFormRef1" :formFields="formFields" v-if="formData.changeItem == 5" :data="formData.contractAAuthorizedCompanys" />
|
||||
<ContractForm ref="contractFormRef" :type="1" v-if="formData.changeItem == 6" />
|
||||
</ContentWrap>
|
||||
</el-form>
|
||||
|
|
@ -166,9 +169,35 @@ const formFields = ref({
|
|||
creditAmount: 1,
|
||||
creditLimit: 1,
|
||||
partnerCompanyId: 1,
|
||||
changeAmount: 1,
|
||||
changeAmount: 2,
|
||||
afterAmount: 1,
|
||||
changeAmountDeadline: 1,
|
||||
changeAmountDeadline: 2,
|
||||
contractAAuthorizedCompanysother: 1,
|
||||
contractAAuthorizedCompanysunifiedCreditCode: 1,
|
||||
contractAAuthorizedCompanysinvoicingAddress: 1,
|
||||
contractAAuthorizedCompanysinvoicingTelephone: 1,
|
||||
contractAAuthorizedCompanyscompanyBank: 1,
|
||||
contractAAuthorizedCompanyscompanyAccount: 1,
|
||||
contractAAuthorizedCompanyscompanyAddress: 1,
|
||||
contractAAuthorizedCompanysother2: 1,
|
||||
contractAAuthorizedPersonsother: 1,
|
||||
contractAAuthorizedPersonscustomerName: 1,
|
||||
contractAAuthorizedPersonsauthPersonType: 1,
|
||||
contractAAuthorizedPersonsphoneNumber: 1,
|
||||
contractAAuthorizedPersonswechat: 1,
|
||||
contractAAuthorizedPersonsidNumber: 1,
|
||||
contractAAuthorizedPersonsemail: 1,
|
||||
contractAAuthorizedPersonsother2: 1,
|
||||
contractBAuthorizedPersonsother: 1,
|
||||
contractBAuthorizedPersonsauthType: 1,
|
||||
contractBAuthorizedPersonsuserId: 1,
|
||||
contractBAuthorizedPersonspostName: 1,
|
||||
contractBAuthorizedPersonsuserRank: 1,
|
||||
contractBAuthorizedPersonsauthDesc: 1,
|
||||
contractBAuthorizedPersonsphoneNumber: 1,
|
||||
contractBAuthorizedPersonswechat: 1,
|
||||
contractBAuthorizedPersonsemail: 1,
|
||||
contractBAuthorizedPersonsother2: 1,
|
||||
})
|
||||
const formData = ref({
|
||||
authPerson: [],
|
||||
|
|
|
|||
|
|
@ -176,4 +176,4 @@ const getData = () => {
|
|||
}
|
||||
|
||||
defineExpose({ validate, getData })
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@
|
|||
<template #changeAmount>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="调整金额(元)" prop="changeAmount">
|
||||
<el-input v-model="formData.changeAmount" :disabled="formFields.contractBody !== 2 || isTrue" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="请输入调整金额(元)" @input="onChangeAmount" />
|
||||
<el-input v-model="formData.changeAmount" :disabled="formFields.changeAmount !== 2 || isTrue" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="请输入调整金额(元)" @input="onChangeAmount" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</template>
|
||||
|
|
@ -180,7 +180,7 @@
|
|||
v-model="formData.changeAmountDeadline"
|
||||
value-format="YYYY-MM-DD"
|
||||
type="date"
|
||||
:disabled="formFields.contractBody !== 2 || isTrue"
|
||||
:disabled="formFields.changeAmountDeadline !== 2 || isTrue"
|
||||
placeholder="请选择调整金额截止日期"
|
||||
style="width: 100%"
|
||||
/>
|
||||
|
|
@ -293,27 +293,7 @@ const quotationProductFormRef = ref()
|
|||
const props = defineProps<{
|
||||
data: undefined,
|
||||
type: undefined,
|
||||
formFields: {
|
||||
type: Object,
|
||||
defualt: {
|
||||
cooperationType: 1,
|
||||
regType: 1,
|
||||
actualCapital: 1,
|
||||
socialEmployeeNum: 1,
|
||||
defendantRecord: 1,
|
||||
abnormalService: 1,
|
||||
equityPledge: 1,
|
||||
dishonestyRecord: 1,
|
||||
financeRecord: 1,
|
||||
judgmentRecord: 1,
|
||||
creditAmount: 1,
|
||||
creditLimit: 1,
|
||||
partnerCompanyId: 1,
|
||||
changeAmount: 1,
|
||||
afterAmount: 1,
|
||||
changeAmountDeadline: 1,
|
||||
}
|
||||
}
|
||||
formFields: {}
|
||||
}>()
|
||||
|
||||
watch(
|
||||
|
|
@ -393,8 +373,9 @@ const open = async (type: string) => {
|
|||
}
|
||||
|
||||
/** 表单校验 */
|
||||
const validate = () => {
|
||||
return formRef.value.validate()
|
||||
const validate = async () => {
|
||||
const isValid = await formRef.value.innerFormRef.validate()
|
||||
return isValid
|
||||
}
|
||||
|
||||
/** 表单值 */
|
||||
|
|
@ -438,7 +419,7 @@ const resetForm = () => {
|
|||
const route = useRoute();
|
||||
onMounted(async () => {
|
||||
isTrue.value = !!route.query.isDetail
|
||||
console.log('%csrc/views/crm/quotation/QuotationForm.vue:596 route', 'color: #007acc;', props.formFields);
|
||||
console.log('%csrc/views/crm/quotation/QuotationForm.vue:596 route', 'color: pink;', props.formFields.changeAmount !== 2 , isTrue.value);
|
||||
// formType.value = route.query.id;
|
||||
|
||||
// if (formType.value) open(formType.value)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<!-- 操作栏 -->
|
||||
<el-row justify="end">
|
||||
<el-button @click="openForm">
|
||||
<el-button @click="openForm" type="primary">
|
||||
<Icon class="mr-5px" icon="clarity:contract-line" />
|
||||
创建合同
|
||||
</el-button>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<!-- 操作栏 -->
|
||||
<el-row justify="end">
|
||||
<el-button @click="openFormAdd">
|
||||
<el-button @click="openFormAdd" type="primary">
|
||||
<Icon class="mr-5px" icon="clarity:contract-line" />
|
||||
创建方案报价
|
||||
</el-button>
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
</el-form-item>
|
||||
</el-col>
|
||||
</template>
|
||||
<template #auditStatus>
|
||||
<!-- <template #auditStatus>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合同状态" prop="auditStatus">
|
||||
<el-select v-model="formData.auditStatus" disabled clearable placeholder="请选择合同状态">
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</template>
|
||||
</template> -->
|
||||
<template #endTime>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="协议截止日期" prop="endTime">
|
||||
|
|
@ -103,11 +103,11 @@
|
|||
<ContentWrap style="border: none">
|
||||
甲方授权人
|
||||
</ContentWrap>
|
||||
<ContractBAuthorizedPersonForm :type="1" ref="ContractBAuthorizedPersonFormRef" :customerId="formData.customerId" :contract-id="formData.id" />
|
||||
<ContractBAuthorizedPersonForm :formFields="formFields" :type="1" ref="ContractBAuthorizedPersonFormRef" :customerId="formData.customerId" :contract-id="formData.id" />
|
||||
</div>
|
||||
<ContracExtension ref="contractExtensionFormRef" v-if="formData.changeItem == 3" :disabled="true" :data="formData" />
|
||||
<ContractStop ref="contractStopFormRef" :formData="formData" :disabled="true" v-if="formData.changeItem == 4" />
|
||||
<ContractAAuthorizedCompanyForm ref="contractAAuthorizedCompanyFormRef1" :type="true" v-if="formData.changeItem == 5" :data="formData.contractAAuthorizedCompanys" />
|
||||
<ContracExtension ref="contractExtensionFormRef" :formFields="formFields" v-if="formData.changeItem == 3" :disabled="true" :data="formData" />
|
||||
<ContractStop ref="contractStopFormRef" :formFields="formFields" :formData="formData" :disabled="true" v-if="formData.changeItem == 4" />
|
||||
<ContractAAuthorizedCompanyForm :formFields="formFields" ref="contractAAuthorizedCompanyFormRef1" :type="true" v-if="formData.changeItem == 5" :data="formData.contractAAuthorizedCompanys" />
|
||||
<ContractForm ref="contractFormRef" :type="1" :id="formData.id" v-if="formData.changeItem == 6" />
|
||||
</ContentWrap>
|
||||
</template>
|
||||
|
|
@ -184,6 +184,32 @@ const formFields = ref({
|
|||
changeAmount: 1,
|
||||
afterAmount: 1,
|
||||
changeAmountDeadline: 1,
|
||||
contractAAuthorizedCompanysother: 1,
|
||||
contractAAuthorizedCompanysunifiedCreditCode: 1,
|
||||
contractAAuthorizedCompanysinvoicingAddress: 1,
|
||||
contractAAuthorizedCompanysinvoicingTelephone: 1,
|
||||
contractAAuthorizedCompanyscompanyBank: 1,
|
||||
contractAAuthorizedCompanyscompanyAccount: 1,
|
||||
contractAAuthorizedCompanyscompanyAddress: 1,
|
||||
contractAAuthorizedCompanysother2: 1,
|
||||
contractAAuthorizedPersonsother: 1,
|
||||
contractAAuthorizedPersonscustomerName: 1,
|
||||
contractAAuthorizedPersonsauthPersonType: 1,
|
||||
contractAAuthorizedPersonsphoneNumber: 1,
|
||||
contractAAuthorizedPersonswechat: 1,
|
||||
contractAAuthorizedPersonsidNumber: 1,
|
||||
contractAAuthorizedPersonsemail: 1,
|
||||
contractAAuthorizedPersonsother2: 1,
|
||||
contractBAuthorizedPersonsother: 1,
|
||||
contractBAuthorizedPersonsauthType: 1,
|
||||
contractBAuthorizedPersonsuserId: 1,
|
||||
contractBAuthorizedPersonspostName: 1,
|
||||
contractBAuthorizedPersonsuserRank: 1,
|
||||
contractBAuthorizedPersonsauthDesc: 1,
|
||||
contractBAuthorizedPersonsphoneNumber: 1,
|
||||
contractBAuthorizedPersonswechat: 1,
|
||||
contractBAuthorizedPersonsemail: 1,
|
||||
contractBAuthorizedPersonsother2: 1,
|
||||
})
|
||||
const formData = ref({
|
||||
authPerson: [],
|
||||
|
|
|
|||
|
|
@ -284,7 +284,19 @@
|
|||
command="handlePrint"
|
||||
v-if="checkPermi(['crm:contract:print']) && scope.row.auditStatus === 2"
|
||||
>
|
||||
合同下载
|
||||
下载未盖章合同
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
command="handleUpload"
|
||||
v-if="checkPermi(['crm:contract:print']) && scope.row.auditStatus === 2"
|
||||
>
|
||||
合同上传
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
command="handlePrintComplate"
|
||||
v-if="checkPermi(['crm:contract:print']) && scope.row.contractFileUrl"
|
||||
>
|
||||
下载盖章合同
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
command="handleDelete"
|
||||
|
|
@ -411,6 +423,11 @@ const handleCommand = (command: string, row) => {
|
|||
case 'handleDelete':
|
||||
handleDelete(row.id)
|
||||
break
|
||||
case 'handleUpload':
|
||||
handleUpload(row.id)
|
||||
break
|
||||
case 'handlePrintComplate':
|
||||
handlePrintComplate(row.contractFileUrl)
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
|
@ -457,6 +474,16 @@ const getPrintTemplate = (row) => {
|
|||
formRef.value.open(row.id)
|
||||
}
|
||||
|
||||
const handleUpload = (val) => {
|
||||
|
||||
}
|
||||
|
||||
//盖章合同下载
|
||||
const handlePrintComplate = (val) => {
|
||||
window.open(val)
|
||||
}
|
||||
|
||||
//未盖章下载
|
||||
const onPrintContract = async (row: ContractApi.ContractVO) => {
|
||||
try {
|
||||
const res = await ContractApi.printContract(row.id)
|
||||
|
|
|
|||
|
|
@ -44,19 +44,6 @@
|
|||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="客户来源" prop="source">
|
||||
<el-select v-model="formData.source" filterable placeholder="请选择客户来源" class="w-1/1">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="公司类型" prop="cooperationType">
|
||||
<el-select v-model="formData.cooperationType" filterable placeholder="请选择合作类型" class="w-1/1">
|
||||
|
|
@ -72,8 +59,8 @@
|
|||
<el-col :span="12">
|
||||
<el-form-item label="维护人" prop="maintainer">
|
||||
<el-select
|
||||
class="w-1/1"
|
||||
placeholder="请选择维护人"
|
||||
class="w-1/1"
|
||||
placeholder="请选择维护人"
|
||||
v-model="formData.maintainer"
|
||||
filterable
|
||||
>
|
||||
|
|
@ -85,6 +72,47 @@
|
|||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="客户来源" prop="source">
|
||||
<el-select v-model="formData.source" filterable placeholder="请选择客户来源" class="w-1/1">
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="签约人" prop="contractor">
|
||||
<el-select
|
||||
class="w-1/1"
|
||||
placeholder="请选择签约人"
|
||||
v-model="formData.contractor"
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属行业" prop="industryId">
|
||||
<el-select v-model="formData.industryId" placeholder="请选择所属行业" >
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- <el-col :span="12">
|
||||
<el-form-item label="合作地区" prop="cooperationArea">
|
||||
|
|
@ -98,13 +126,45 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="服务对接人" prop="servicor">
|
||||
<el-select
|
||||
class="w-1/1"
|
||||
placeholder="请选择服务对接人"
|
||||
v-model="formData.servicor"
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="法人代表" prop="legalPersonName">
|
||||
<el-input v-model="formData.legalPersonName" disabled placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="法人代表" prop="legalPersonName">
|
||||
<el-input v-model="formData.legalPersonName" disabled placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-form-item label="技术对接人" prop="technicalLead">
|
||||
<el-select
|
||||
class="w-1/1"
|
||||
placeholder="请选择技术对接人"
|
||||
v-model="formData.technicalLead"
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- <el-col :span="12">
|
||||
<el-form-item label="负责人" prop="ownerUserId">
|
||||
|
|
@ -212,7 +272,38 @@
|
|||
<el-form-item label="注册资本" prop="registerCapital">
|
||||
<el-input v-model="formData.registerCapital" disabled placeholder="" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="结算对接人" prop="settlementLead">
|
||||
<el-select
|
||||
class="w-1/1"
|
||||
placeholder="请选择结算对接人"
|
||||
v-model="formData.settlementLead"
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="注册日期" prop="contactNextTime">
|
||||
<el-date-picker
|
||||
disabled
|
||||
v-model="formData.startDate"
|
||||
placeholder=""
|
||||
type="date"
|
||||
value-format="x"
|
||||
class="!w-1/1"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- <el-col :span="12">
|
||||
<el-form-item label="网站" prop="">
|
||||
<el-input v-model="formData.website" placeholder="请输入网站" />
|
||||
|
|
@ -242,98 +333,12 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col> -->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="注册日期" prop="contactNextTime">
|
||||
<el-date-picker
|
||||
disabled
|
||||
v-model="formData.startDate"
|
||||
placeholder=""
|
||||
type="date"
|
||||
value-format="x"
|
||||
class="!w-1/1"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="客户行业" prop="industryId">
|
||||
<el-select v-model="formData.industryId" placeholder="请选择客户行业" >
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="服务对接人" prop="servicor">
|
||||
<el-select
|
||||
class="w-1/1"
|
||||
placeholder="请选择服务对接人"
|
||||
v-model="formData.servicor"
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="技术对接人" prop="technicalLead">
|
||||
<el-select
|
||||
class="w-1/1"
|
||||
placeholder="请选择技术对接人"
|
||||
v-model="formData.technicalLead"
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="结算对接人" prop="settlementLead">
|
||||
<el-select
|
||||
class="w-1/1"
|
||||
placeholder="请选择结算对接人"
|
||||
v-model="formData.settlementLead"
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="签约人" prop="contractor">
|
||||
<el-select
|
||||
class="w-1/1"
|
||||
placeholder="请选择签约人"
|
||||
v-model="formData.contractor"
|
||||
filterable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in userOptions"
|
||||
:key="item.id"
|
||||
:label="item.nickname"
|
||||
:value="item.id"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- <el-col :span="12">
|
||||
<el-form-item label="地址" prop="areaId">
|
||||
<el-cascader
|
||||
|
|
|
|||
|
|
@ -0,0 +1,263 @@
|
|||
<template>
|
||||
<!-- 操作栏 -->
|
||||
<el-row justify="end">
|
||||
<el-button @click="openFormAdd" type="primary">
|
||||
<Icon class="mr-5px" icon="system-uicons:contacts" />
|
||||
创建投诉建议
|
||||
</el-button>
|
||||
</el-row>
|
||||
<!-- 列表 -->
|
||||
<ContentWrap class="mt-10px">
|
||||
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
|
||||
<el-table-column label="客户名称" align="center" prop="customerId" />
|
||||
<el-table-column label="反馈联系人" align="center" prop="contactId" />
|
||||
<el-table-column label="联系电话" align="center" prop="mobile" />
|
||||
<el-table-column label="电子邮箱" align="center" prop="email" />
|
||||
<el-table-column label="反馈类型" align="center" prop="feedbackType">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.CRM_FEEDBACK_TYPE" :value="scope.row.feedbackType" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="反馈级别" align="center" prop="feedbackLevel">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.CRM_FEEDBACK_LEVEL" :value="scope.row.feedbackLevel" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="紧急程度" align="center" prop="urgencyLevel">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.CRM_URGENCY_LEVEL" :value="scope.row.urgencyLevel" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="反馈时间"
|
||||
align="center"
|
||||
prop="feedbackTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/>
|
||||
<el-table-column label="当事人" align="center" prop="relatedPerson" />
|
||||
<el-table-column label="所属部门" align="center" prop="deptId" />
|
||||
<el-table-column label="客户累计计数" align="center" prop="customerFeedbackCount" />
|
||||
<el-table-column label="当事人累计计数" align="center" prop="relatedPersonFeedbackCount" />
|
||||
<el-table-column label="反馈主体" align="center" prop="feedbackCompanyEntity" />
|
||||
<el-table-column label="反馈内容" align="center" prop="feedbackContent" />
|
||||
<el-table-column label="附件" align="center" prop="attachment">
|
||||
<template #default="scope">
|
||||
<el-link
|
||||
v-if="scope.row.attachment"
|
||||
:underline="false"
|
||||
type="primary"
|
||||
@click="previewFile(scope.row.attachment)"
|
||||
>
|
||||
预览
|
||||
</el-link>
|
||||
<span v-else>无附件</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- <el-table-column
|
||||
label="创建时间"
|
||||
align="center"
|
||||
prop="createTime"
|
||||
:formatter="dateFormatter"
|
||||
width="180px"
|
||||
/> -->
|
||||
<el-table-column label="操作" align="center" min-width="120px">
|
||||
<template #default="scope">
|
||||
<!-- <el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="openFormEdit(scope.row)"
|
||||
v-hasPermi="['crm:customer-feedback:update']"
|
||||
>
|
||||
编辑
|
||||
</el-button> -->
|
||||
<el-button
|
||||
v-hasPermi="['crm:customer-feedback:query']"
|
||||
link
|
||||
type="primary"
|
||||
@click="openDetail(scope.row)"
|
||||
>
|
||||
详情
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="scope.row.auditStatus !== 0"
|
||||
link
|
||||
v-hasPermi="['crm:customer-feedback:query']"
|
||||
type="primary"
|
||||
@click="handleProcessDetail(scope.row)"
|
||||
>
|
||||
进度
|
||||
</el-button>
|
||||
<!-- <el-button
|
||||
link
|
||||
type="danger"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
v-hasPermi="['crm:customer-feedback:delete']"
|
||||
>
|
||||
删除
|
||||
</el-button> -->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!-- 分页 -->
|
||||
<Pagination
|
||||
:total="total"
|
||||
v-model:page="queryParams.pageNo"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
</ContentWrap>
|
||||
|
||||
<!-- 表单弹窗:添加/修改 -->
|
||||
<!-- <CustomerFeedbackForm ref="formRef" @success="getList" /> -->
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
||||
import { dateFormatter } from '@/utils/formatTime'
|
||||
import download from '@/utils/download'
|
||||
import { CustomerFeedbackApi, CustomerFeedbackVO } from '@/api/crm/feedback'
|
||||
import CustomerFeedbackForm from './CustomerFeedbackForm.vue'
|
||||
|
||||
/** 客户反馈 列表 */
|
||||
defineOptions({ name: 'CustomerFeedback' })
|
||||
|
||||
const message = useMessage() // 消息弹窗
|
||||
const { t } = useI18n() // 国际化
|
||||
const props = defineProps<{
|
||||
bizId: number // 业务编号
|
||||
}>()
|
||||
const loading = ref(true) // 列表的加载中
|
||||
const list = ref<CustomerFeedbackVO[]>([]) // 列表的数据
|
||||
const total = ref(0) // 列表的总页数
|
||||
const queryParams = reactive({
|
||||
pageNo: 1,
|
||||
pageSize: 10,
|
||||
customerId: undefined,
|
||||
contactId: undefined,
|
||||
mobile: undefined,
|
||||
email: undefined,
|
||||
feedbackType: undefined,
|
||||
feedbackLevel: undefined,
|
||||
urgencyLevel: undefined,
|
||||
feedbackTime: [],
|
||||
relatedPerson: undefined,
|
||||
deptId: undefined,
|
||||
customerFeedbackCount: undefined,
|
||||
relatedPersonFeedbackCount: undefined,
|
||||
feedbackCompanyEntity: undefined,
|
||||
feedbackContent: undefined,
|
||||
attachment: undefined,
|
||||
createTime: [],
|
||||
})
|
||||
const queryFormRef = ref() // 搜索的表单
|
||||
const exportLoading = ref(false) // 导出的加载中
|
||||
|
||||
/** 查询列表 */
|
||||
const route = useRouter()
|
||||
const getList = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
console.log('%csrc/views/crm/customer/detail/ComplaintsSuggestion.vue:159 route', 'color: #007acc;', route);
|
||||
queryParams.customerId = props.bizId
|
||||
console.log('%csrc/views/crm/customer/detail/ComplaintsSuggestion.vue:163 queryParams', 'color: #007acc;', queryParams);
|
||||
const data = await CustomerFeedbackApi.getCustomerFeedbackPage(queryParams)
|
||||
list.value = data.list
|
||||
total.value = data.total
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
defineExpose({ getList })
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.pageNo = 1
|
||||
getList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
queryFormRef.value.resetFields()
|
||||
handleQuery()
|
||||
}
|
||||
|
||||
//预览
|
||||
const previewFile = (fileUrls) => {
|
||||
// // 假设 fileUrls 是一个字符串,包含文件的完整 URL
|
||||
if (!fileUrls) {
|
||||
message.error('没有附件');
|
||||
return;
|
||||
}
|
||||
|
||||
// 检查文件类型
|
||||
const fileExtension = fileUrls.split('.').pop().toLowerCase();
|
||||
router.push({
|
||||
name: 'FileTemplatePreview',
|
||||
query: {
|
||||
src: encodeURIComponent(fileUrls),
|
||||
type: fileExtension
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
/** 添加/修改操作 */
|
||||
const formRef = ref()
|
||||
// const openForm = (type: string, id?: number) => {
|
||||
// formRef.value.open(type, id)
|
||||
// }
|
||||
const router = useRouter() // 路由
|
||||
const openFormAdd = () => {
|
||||
router.push({ name: 'CustomerFeedbackCreate' })
|
||||
}
|
||||
|
||||
const openFormEdit = (row: Object) => {
|
||||
|
||||
router.push({ name: 'CustomerFeedbackEdit', query: { id: row.id} })
|
||||
}
|
||||
|
||||
const openDetail = (row: Object) => {
|
||||
router.push({ name: 'CustomerFeedbackDetail', query: { id: row.id } })
|
||||
}
|
||||
|
||||
/** 查看审批 */
|
||||
const handleProcessDetail = (row) => {
|
||||
router.push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } })
|
||||
}
|
||||
|
||||
/** 删除按钮操作 */
|
||||
const handleDelete = async (id: number) => {
|
||||
try {
|
||||
// 删除的二次确认
|
||||
await message.delConfirm()
|
||||
// 发起删除
|
||||
await CustomerFeedbackApi.deleteCustomerFeedback(id)
|
||||
message.success(t('common.delSuccess'))
|
||||
// 刷新列表
|
||||
await getList()
|
||||
} catch {}
|
||||
}
|
||||
|
||||
/** 导出按钮操作 */
|
||||
const handleExport = async () => {
|
||||
try {
|
||||
// 导出的二次确认
|
||||
await message.exportConfirm()
|
||||
// 发起导出
|
||||
exportLoading.value = true
|
||||
const data = await CustomerFeedbackApi.exportCustomerFeedback(queryParams)
|
||||
download.excel(data, '客户反馈.xls')
|
||||
} catch {
|
||||
} finally {
|
||||
exportLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/** 初始化 **/
|
||||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
onActivated(()=>{
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
|
|
@ -31,9 +31,9 @@
|
|||
<!-- <el-collapse v-model="activeNames" class=""> -->
|
||||
|
||||
<el-descriptions :column="4">
|
||||
<el-descriptions-item label="客户名称">
|
||||
<!-- <el-descriptions-item label="客户名称">
|
||||
{{ customer.name }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions-item> -->
|
||||
<el-descriptions-item label="成交状态">{{ customer.dealStatus ? '已成交' : '未成交' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="客户来源">
|
||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="customer.source" />
|
||||
|
|
@ -46,10 +46,13 @@
|
|||
</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="合作地区">{{ getName(getIntDictOptions(DICT_TYPE.CRM_COOPERATION_AREA),customer.cooperationArea) }}</el-descriptions-item> -->
|
||||
<!-- <el-descriptions-item label="行业">{{ getName(getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY),customer.industryId) }}</el-descriptions-item> -->
|
||||
<el-descriptions-item label="行业">
|
||||
<el-descriptions-item label="所属行业">
|
||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="customer.industryId" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label=" 拓展人">{{ customer.developerName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="合作状态">
|
||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_STSTUS" :value="customer.customerStatus" />
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label=" 拓展人">{{ customer.clueDeveloperName }}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="线索拓展人">{{ customer.clueDeveloperName }}</el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item label="协助人">{{ customer.assistName }}</el-descriptions-item> -->
|
||||
=<el-descriptions-item label="维护人">{{ customer.maintainerName }}</el-descriptions-item>
|
||||
|
|
@ -59,6 +62,7 @@
|
|||
<el-descriptions-item label="服务对接人">{{ customer.servicorName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="结算对接人">{{ customer.settlementLeadName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="创建时间">{{ formatDate(customer.createTime) }}</el-descriptions-item>
|
||||
<el-descriptions-item label="最后跟进时间">{{ formatDate(customer.contactLastTime) }}</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="手机号">{{ customer.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电话">{{ customer.telephone }}</el-descriptions-item>
|
||||
<el-descriptions-item label="邮箱">{{ customer.email }}</el-descriptions-item>-->
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@
|
|||
/>
|
||||
</el-tab-pane> -->
|
||||
<el-tab-pane label="商机" lazy name="BusinessListRef">
|
||||
<BusinessList ref="BusinessListRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
|
||||
<BusinessList ref="BusinessListRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" :clueDeveloper="customer.clueDeveloper" :maintenanceUserId="customer.maintainer" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="方案报价" lazy name="QuotationListRef">
|
||||
<QuotationList ref="QuotationListRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
|
||||
|
|
@ -76,6 +76,9 @@
|
|||
<ReceivablePlanList :customer-id="customer.id!" @create-receivable="createReceivable" />
|
||||
<ReceivableList ref="receivableListRef" :customer-id="customer.id!" />
|
||||
</el-tab-pane> -->
|
||||
<el-tab-pane label="投诉建议" name="ComplaintsSuggestionRef">
|
||||
<ComplaintsSuggestion ref="ComplaintsSuggestionRef" :biz-id="customer.id!" />
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="操作日志">
|
||||
<OperateLogV2 :log-list="logList" />
|
||||
</el-tab-pane>
|
||||
|
|
@ -93,6 +96,7 @@ import * as CustomerApi from '@/api/crm/customer'
|
|||
import CustomerForm from '@/views/crm/customer/CustomerForm.vue'
|
||||
import CompanyDetailsInfo from './companyDetailsInfo.vue' // 工商信息
|
||||
import CustomerDetailsInfo from './CustomerDetailsInfo.vue' // 客户明细 - 详细信息
|
||||
import ComplaintsSuggestion from './ComplaintsSuggestion.vue' // 客户明细 - 详细信息
|
||||
import CustomerDetailsHeader from './CustomerDetailsHeader.vue' // 客户明细 - 头部
|
||||
import ReturnVisitrecord from './returnvisitrecord/index.vue' // 回访
|
||||
import ContactList from '@/views/crm/contact/components/ContactList.vue' // 联系人列表
|
||||
|
|
@ -227,6 +231,7 @@ const ContactListRef = ref('')
|
|||
const BusinessListRef = ref('')
|
||||
const QuotationListRef = ref('')
|
||||
const ContractListRef = ref('')
|
||||
const ComplaintsSuggestionRef = ref('')
|
||||
|
||||
const handleClick = async (val) => {
|
||||
let name = val.props.name
|
||||
|
|
@ -241,6 +246,7 @@ const handleClick = async (val) => {
|
|||
BusinessListRef: BusinessListRef.value,
|
||||
QuotationListRef: QuotationListRef.value,
|
||||
ContractListRef: ContractListRef.value,
|
||||
ComplaintsSuggestionRef: ComplaintsSuggestionRef.value
|
||||
}
|
||||
objRef[name].getList()
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@
|
|||
<el-table-column align="center" label="技术对接人" prop="technicalLeadName" width="120" />
|
||||
<el-table-column align="center" label="服务对接人" prop="servicorName" width="120" />
|
||||
<el-table-column align="center" label="结算对接人" prop="settlementLeadName" width="120" />
|
||||
<el-table-column align="center" label="行业" prop="industryId" width="100">
|
||||
<el-table-column align="center" label="所属行业" prop="industryId" width="100">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industryId" />
|
||||
</template>
|
||||
|
|
@ -176,12 +176,13 @@
|
|||
<el-table-column align="center" label="负责人" prop="ownerUserName" width="100px" />
|
||||
<el-table-column align="center" label="所属部门" prop="ownerUserDeptName" width="100px" />
|
||||
<el-table-column
|
||||
:formatter="dateFormatter"
|
||||
align="center"
|
||||
label="创建时间"
|
||||
prop="createTime"
|
||||
width="180px"
|
||||
/>
|
||||
>
|
||||
{{ moment(createTime).format('YYYY-MM-DD')}}
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="创建人" prop="creatorName" width="100px" />
|
||||
<!-- <el-table-column align="center" label="客户状态" prop="serviceStatus" width="120" /> -->
|
||||
<!-- <el-table-column align="center" label="电话" prop="telephone" width="130" />
|
||||
|
|
@ -300,6 +301,7 @@ import * as CustomerApi from '@/api/crm/customer'
|
|||
import CustomerForm from './CustomerForm.vue'
|
||||
import CustomerImportForm from './CustomerImportForm.vue'
|
||||
import { TabsPaneContext } from 'element-plus'
|
||||
import moment from 'moment';
|
||||
|
||||
defineOptions({ name: 'CrmCustomer' })
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@
|
|||
<FollowUpRecordContactForm @success="del" :contacts="formData.contacts" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" v-if="formData.bizType == BizTypeEnum.CRM_CUSTOMER">
|
||||
<!-- <el-col :span="24" v-if="formData.bizType == BizTypeEnum.CRM_CUSTOMER">
|
||||
<el-form-item label="关联商机" prop="businessIds">
|
||||
<el-button @click="handleOpenBusiness">
|
||||
<Icon class="mr-5px" icon="ep:plus" />
|
||||
|
|
@ -63,7 +63,7 @@
|
|||
</el-button>
|
||||
<FollowUpRecordBusinessForm :businesses="formData.businesses" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col>-->
|
||||
</el-row>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="手机号" align="center" prop="mobile" />
|
||||
<el-table-column label="职位" align="center" prop="post" />
|
||||
<el-table-column label="直属上级" align="center" prop="parentName" />
|
||||
<!-- <el-table-column label="直属上级" align="center" prop="parentName" />-->
|
||||
<el-table-column label="是否关键决策人" align="center" prop="master" min-width="100">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.master" />
|
||||
|
|
|
|||
|
|
@ -32,30 +32,6 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="客单价" prop="customerPrice">
|
||||
<el-input
|
||||
v-model="queryParams.customerPrice"
|
||||
placeholder="请输入客单价"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="单位" prop="unit">
|
||||
<el-select
|
||||
v-model="queryParams.unit"
|
||||
placeholder="请选择单位"
|
||||
clearable
|
||||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PRODUCT_UNIT)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="采购成本" prop="procurementCost">
|
||||
<el-input
|
||||
v-model="queryParams.procurementCost"
|
||||
|
|
@ -65,24 +41,6 @@
|
|||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="客单价 - 采购成本" prop="profit">
|
||||
<el-input
|
||||
v-model="queryParams.profit"
|
||||
placeholder="请输入客单价 - 采购成本"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="说明" prop="describe">
|
||||
<el-input
|
||||
v-model="queryParams.describe"
|
||||
placeholder="请输入说明"
|
||||
clearable
|
||||
@keyup.enter="handleQuery"
|
||||
class="!w-240px"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="创建时间" prop="createTime">
|
||||
<el-date-picker
|
||||
v-model="queryParams.createTime"
|
||||
|
|
@ -271,4 +229,4 @@ const handleExport = async () => {
|
|||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
<el-form-item label="打卡状态(正常、迟到、早退、缺卡等)" prop="clockStatus">
|
||||
<el-select v-model="formData.clockStatus" placeholder="请选择打卡状态(正常、迟到、早退、缺卡等)">
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.HRM_ CLOCK_STATUS)"
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.HRM_CLOCK_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
|
|
@ -151,4 +151,4 @@ const resetForm = () => {
|
|||
}
|
||||
formRef.value?.resetFields()
|
||||
}
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
class="!w-240px"
|
||||
>
|
||||
<el-option
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.HRM_ CLOCK_STATUS)"
|
||||
v-for="dict in getStrDictOptions(DICT_TYPE.HRM_CLOCK_STATUS)"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
|
|
@ -140,7 +140,7 @@
|
|||
<el-table-column label="岗位ID" align="center" prop="postId" />
|
||||
<el-table-column label="打卡状态(正常、迟到、早退、缺卡等)" align="center" prop="clockStatus">
|
||||
<template #default="scope">
|
||||
<dict-tag :type="DICT_TYPE.HRM_ CLOCK_STATUS" :value="scope.row.clockStatus" />
|
||||
<dict-tag :type="DICT_TYPE.HRM_CLOCK_STATUS" :value="scope.row.clockStatus" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="打卡类型(正常上下班、加班)" align="center" prop="clockType">
|
||||
|
|
@ -298,4 +298,4 @@ const handleExport = async () => {
|
|||
onMounted(() => {
|
||||
getList()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
|
|
|||
Loading…
Reference in New Issue