字段权限
@@ -511,7 +560,8 @@
- 确 定
+ 确 定
+ 确 定
取 消
@@ -558,6 +608,7 @@ import { defaultProps } from '@/utils/tree'
import { cloneDeep } from 'lodash-es'
import { convertTimeUnit, getApproveTypeText } from '../utils'
import UserTaskListener from './components/UserTaskListener.vue'
+import { getBusinessForm, saveBusinessForm, FormVO } from '@/api/bpm/form'
defineOptions({
name: 'UserTaskNodeConfig'
})
@@ -567,6 +618,10 @@ const props = defineProps({
required: true
}
})
+const { t } = useI18n() // 国际化
+const message = useMessage() // 消息弹窗
+const tabName = ref('')
+const fieldsPermissionCustomize = ref([])
const emits = defineEmits<{
'find:returnTaskNodes': [nodeList: SimpleFlowNode[]]
}>()
@@ -971,6 +1026,35 @@ const updatePermission = (type: string) => {
: FieldPermissionType.NONE
})
}
+
+const route = useRoute();
+const tabClick = async (tab) => {
+ tabName.value = tab.props.name
+ if(tab.props.name === 'businessFields') {
+ const bpmnForm = (await getBusinessForm({
+ key: window.localStorage.getItem('businessKey'),
+ modelNodeId: props.flowNode.id
+ })) as unknown as FormVO
+ const newData = bpmnForm.fields.map( v => {
+ return JSON.parse(v)
+ })
+ fieldsPermissionCustomize.value = newData
+ }
+}
+
+const saveCustomize = async () => {
+ let newData = fieldsPermissionCustomize.value.map( v => {
+ return JSON.stringify(v)
+ })
+ let data = {
+ fields: newData,
+ formKey: window.localStorage.getItem('businessKey'),
+ modelNodeId: props.flowNode.id
+ }
+ await saveBusinessForm(data)
+ message.success(t('common.updateSuccess'))
+ settingVisible.value = false
+}
diff --git a/src/components/Task/index.vue b/src/components/Task/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3cc0ffc86d767d72ac7710d9d38419f6bb6c419e
--- /dev/null
+++ b/src/components/Task/index.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/UploadFile/src/UploadFile.vue b/src/components/UploadFile/src/UploadFile.vue
index 9d0a904ee7b27e7abc76b947a1ccfd36b26ac61f..c180fcc2fa8ba585d6ff75b7a74409aed6f80d2c 100644
--- a/src/components/UploadFile/src/UploadFile.vue
+++ b/src/components/UploadFile/src/UploadFile.vue
@@ -25,11 +25,8 @@
选取文件
-
- 大小不超过 {{ fileSize }}MB
-
-
- 格式为
{{ fileType.join('/') }} 的文件
+
+ 大小不超过 {{ fileSize }}MB,格式为 {{ fileType.join('/') }} 的文件
@@ -59,7 +56,14 @@
{{ file.name }}
-
+
+ 预览
+
+
下载
@@ -81,7 +85,7 @@ const emit = defineEmits(['update:modelValue'])
const props = defineProps({
modelValue: propTypes.oneOfType
([String, Array]).isRequired,
fileType: propTypes.array.def(['doc', 'xls', 'ppt', 'txt', 'pdf']), // 文件类型, 例如['png', 'jpg', 'jpeg']
- fileSize: propTypes.number.def(5), // 大小限制(MB)
+ fileSize: propTypes.number.def(20), // 大小限制(MB)
limit: propTypes.number.def(5), // 数量限制
autoUpload: propTypes.bool.def(true), // 自动上传
drag: propTypes.bool.def(false), // 拖拽上传
@@ -195,6 +199,25 @@ const emitUpdateModelValue = () => {
}
emit('update:modelValue', result)
}
+//预览
+const router = useRouter() // 路
+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
+ }
+ })
+}
\ No newline at end of file
+
diff --git a/src/views/Login/SocialLogin.vue b/src/views/Login/SocialLogin.vue
index e0caace83985aa4b66318417c46c58b3fb29c880..4d627e2f61836ae4399165895e828a80d3eb29a1 100644
--- a/src/views/Login/SocialLogin.vue
+++ b/src/views/Login/SocialLogin.vue
@@ -199,7 +199,7 @@ const loginData = reactive({
captchaEnable: import.meta.env.VITE_APP_CAPTCHA_ENABLE !== 'false',
tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE !== 'false',
loginForm: {
- tenantName: '芋道源码',
+ tenantName: '暖界办公',
username: 'admin',
password: 'admin123',
captchaVerification: '',
diff --git a/src/views/Login/components/LoginForm.vue b/src/views/Login/components/LoginForm.vue
index fa6612362032c28f2a8c4b3697b67fe22daf6031..16b0425ee9beb3ae2c8de39f9daec799f720f7df 100644
--- a/src/views/Login/components/LoginForm.vue
+++ b/src/views/Login/components/LoginForm.vue
@@ -116,8 +116,8 @@
- {{ t('login.otherLogin') }}
-
+
+
diff --git a/src/views/Login/components/MobileForm.vue b/src/views/Login/components/MobileForm.vue
index 7f5d9942ed78bb7f8d6edbef201e2f4e072c1656..f7ed0f1fd2771dabc61fcf0c09d6f987ec609f10 100644
--- a/src/views/Login/components/MobileForm.vue
+++ b/src/views/Login/components/MobileForm.vue
@@ -133,7 +133,7 @@ const loginData = reactive({
},
loginForm: {
uuid: '',
- tenantName: '芋道源码',
+ tenantName: '暖界办公',
mobileNumber: '',
code: ''
}
diff --git a/src/views/ai/chat/index/components/message/MessageListEmpty.vue b/src/views/ai/chat/index/components/message/MessageListEmpty.vue
index b042fd663885ede21007e220470cd3616f38ccb8..413f2b638aa00a53bc290ad72deaacd2d66d1308 100644
--- a/src/views/ai/chat/index/components/message/MessageListEmpty.vue
+++ b/src/views/ai/chat/index/components/message/MessageListEmpty.vue
@@ -3,7 +3,7 @@
-
芋道 AI
+
AI
-
+
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
index 517c204b7f0a78b38fd8a77f59093998e1d26ca8..5099097a4c4b7357ec3626e825bc47901ad14783 100644
--- a/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceOperationButton.vue
@@ -159,6 +159,7 @@
clearable
style="width: 100%"
multiple
+ filterable
placeholder="请选择抄送人"
>
-
+
-
+
-
+
-
+
}
if (pass) {
+ emit('updataData')
const nextAssigneesValid = validateNextAssignees()
if (!nextAssigneesValid) return
const variables = getUpdatedProcessInstanceVariables()
diff --git a/src/views/bpm/processInstance/detail/index.vue b/src/views/bpm/processInstance/detail/index.vue
index c3f83cf06947ec276f54a5da0af8bf64b4d8ad67..6bf73e491f12aa00dc3e79157b1783c38d73aa18 100644
--- a/src/views/bpm/processInstance/detail/index.vue
+++ b/src/views/bpm/processInstance/detail/index.vue
@@ -59,7 +59,7 @@
-
+
@@ -120,6 +120,7 @@
:normal-form-api="fApi"
:writable-fields="writableFields"
@success="refresh"
+ @updataData="updataData"
/>
@@ -184,6 +185,12 @@ const getDetail = () => {
getProcessModelView()
}
+const BusinessFormComponentRef = ref('')
+
+const updataData = () => {
+ BusinessFormComponentRef.value.submitForm()
+}
+
/** 加载流程实例 */
const BusinessFormComponent = ref
(null) // 异步组件
/** 获取审批详情 */
diff --git a/src/views/bpm/task/copy/index.vue b/src/views/bpm/task/copy/index.vue
index 91cfaafef745df20fd78d37d74a8fb9f9c543ea9..59199ff9989cad3b5a7483d6ec260fef9f25174d 100644
--- a/src/views/bpm/task/copy/index.vue
+++ b/src/views/bpm/task/copy/index.vue
@@ -131,7 +131,10 @@ const getList = async () => {
const handleAudit = (row: any) => {
const query = {
id: row.processInstanceId,
- activityId: undefined
+ activityId: undefined,
+ processDefinitionId: row.processInstanceId,
+ taskDefinitionKey: row.activityId,
+ isDetail: 1
}
if (row.activityId) {
query.activityId = row.activityId
diff --git a/src/views/bpm/task/done/index.vue b/src/views/bpm/task/done/index.vue
index 2f91e69a15d1e790ad0e580e18d23c9bcd9e16ae..8182635a8417b396298b6f463f1c4efb89fd7fd6 100644
--- a/src/views/bpm/task/done/index.vue
+++ b/src/views/bpm/task/done/index.vue
@@ -257,7 +257,10 @@ const handleAudit = (row: any) => {
name: 'BpmProcessInstanceDetail',
query: {
id: row.processInstance.id,
- taskId: row.id
+ taskId: row.id,
+ processDefinitionId: row.processInstance.processDefinitionId,
+ taskDefinitionKey: row.taskDefinitionKey,
+ isDetail: 1
}
})
}
diff --git a/src/views/bpm/task/todo/index.vue b/src/views/bpm/task/todo/index.vue
index 45a2eb449da558bddde20c918004249f3e79eba7..187bc6787082fd6968f0a8c593f3c1f9d3d852ef 100644
--- a/src/views/bpm/task/todo/index.vue
+++ b/src/views/bpm/task/todo/index.vue
@@ -148,7 +148,7 @@
prop="processInstanceId"
:show-overflow-tooltip="true"
/>
-
+
办理
@@ -221,7 +221,9 @@ const handleAudit = (row: any) => {
name: 'BpmProcessInstanceDetail',
query: {
id: row.processInstance.id,
- taskId: row.id
+ taskId: row.id,
+ processDefinitionId: row.processInstance.processDefinitionId,
+ taskDefinitionKey: row.taskDefinitionKey
}
})
}
@@ -233,4 +235,7 @@ onMounted(async () => {
// 获取流程定义列表
processDefinitionList.value = await DefinitionApi.getSimpleProcessDefinitionList()
})
+onActivated(()=>{
+ getList()
+})
diff --git a/src/views/crm/backlog/components/ContractAuditList.vue b/src/views/crm/backlog/components/ContractAuditList.vue
index 9c13237cefb997bff2eb3d5914e3d65bb225714a..4aae01cc90bb16af3cee55144728b9812aa9f5d8 100644
--- a/src/views/crm/backlog/components/ContractAuditList.vue
+++ b/src/views/crm/backlog/components/ContractAuditList.vue
@@ -214,8 +214,9 @@ const handleProcessDetail = (row: ContractApi.ContractVO) => {
/** 打开合同详情 */
const { push } = useRouter()
+const router = useRouter()
const openDetail = (id: number) => {
- push({ name: 'CrmContractDetail', params: { id } })
+ router.push({ name: 'CrmContractDetail', query: { id: id } })
}
/** 打开客户详情 */
diff --git a/src/views/crm/backlog/components/CustomerFollowList.vue b/src/views/crm/backlog/components/CustomerFollowList.vue
index 0f367a3f6ace5565b93f6a0fc1cadd5765fe31b7..17f93e5b7b2b7e6af059cd34c89230fb7a3a0762 100644
--- a/src/views/crm/backlog/components/CustomerFollowList.vue
+++ b/src/views/crm/backlog/components/CustomerFollowList.vue
@@ -31,21 +31,22 @@
-
+
{{ scope.row.name }}
+
-
-
-
+
+
+
diff --git a/src/views/crm/backlog/components/CustomerPutPoolRemindList.vue b/src/views/crm/backlog/components/CustomerPutPoolRemindList.vue
index 17f8df6b5f652a8edd9061e236d55f1687bf696d..5c326edac6c9a15d714d0d96f1c6f33ead92bc63 100644
--- a/src/views/crm/backlog/components/CustomerPutPoolRemindList.vue
+++ b/src/views/crm/backlog/components/CustomerPutPoolRemindList.vue
@@ -29,21 +29,22 @@
-
+
{{ scope.row.name }}
+
-
-
-
+
+
+
diff --git a/src/views/crm/backlog/components/CustomerTodayContactList.vue b/src/views/crm/backlog/components/CustomerTodayContactList.vue
index 87aa31d71d2a683c890b0a2354d07137f9208d67..468da176ede6d508d39378e8241e1ecf04a83c08 100644
--- a/src/views/crm/backlog/components/CustomerTodayContactList.vue
+++ b/src/views/crm/backlog/components/CustomerTodayContactList.vue
@@ -43,21 +43,22 @@
-
+
{{ scope.row.name }}
+
-
-
-
+
+
+
diff --git a/src/views/crm/backlog/index.vue b/src/views/crm/backlog/index.vue
index 49a1d4ced04c979f45b71706fa39e080c029b9a0..b74b5983284cbbcf0799bdf5651e84774927a688 100644
--- a/src/views/crm/backlog/index.vue
+++ b/src/views/crm/backlog/index.vue
@@ -1,8 +1,8 @@
-
-
+
+
-
+
@@ -63,11 +63,11 @@ const leftSides = ref([
menu: 'customerTodayContact',
count: customerTodayContactCount
},
- {
- name: '分配给我的线索',
- menu: 'clueFollow',
- count: clueFollowCount
- },
+ // {
+ // name: '分配给我的线索',
+ // menu: 'clueFollow',
+ // count: clueFollowCount
+ // },
{
name: '分配给我的客户',
menu: 'customerFollow',
@@ -83,16 +83,16 @@ const leftSides = ref([
menu: 'contractAudit',
count: contractAuditCount
},
- {
- name: '待审核回款',
- menu: 'receivableAudit',
- count: receivableAuditCount
- },
- {
- name: '待回款提醒',
- menu: 'receivablePlanRemind',
- count: receivablePlanRemindCount
- },
+ // {
+ // name: '待审核回款',
+ // menu: 'receivableAudit',
+ // count: receivableAuditCount
+ // },
+ // {
+ // name: '待回款提醒',
+ // menu: 'receivablePlanRemind',
+ // count: receivablePlanRemindCount
+ // },
{
name: '即将到期的合同',
menu: 'contractRemind',
@@ -113,13 +113,13 @@ const getCount = () => {
(count) => (customerPutPoolRemindCount.value = count)
)
CustomerApi.getFollowCustomerCount().then((count) => (customerFollowCount.value = count))
- ClueApi.getFollowClueCount().then((count) => (clueFollowCount.value = count))
+ // ClueApi.getFollowClueCount().then((count) => (clueFollowCount.value = count))
ContractApi.getAuditContractCount().then((count) => (contractAuditCount.value = count))
- ContractApi.getRemindContractCount().then((count) => (contractRemindCount.value = count))
- ReceivableApi.getAuditReceivableCount().then((count) => (receivableAuditCount.value = count))
- ReceivablePlanApi.getReceivablePlanRemindCount().then(
- (count) => (receivablePlanRemindCount.value = count)
- )
+ // ContractApi.getRemindContractCount().then((count) => (contractRemindCount.value = count))
+ // ReceivableApi.getAuditReceivableCount().then((count) => (receivableAuditCount.value = count))
+ // ReceivablePlanApi.getReceivablePlanRemindCount().then(
+ // (count) => (receivablePlanRemindCount.value = count)
+ // )
}
/** 激活时 */
diff --git a/src/views/crm/billtemplate/BillTemplateForm.vue b/src/views/crm/billtemplate/BillTemplateForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e6871a23231e1fcc01eeace537aa5aaf602daeb1
--- /dev/null
+++ b/src/views/crm/billtemplate/BillTemplateForm.vue
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确 定
+ 取 消
+
+
+
+
diff --git a/src/views/crm/billtemplate/components/index.vue b/src/views/crm/billtemplate/components/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f0a44f25ea195553d081866f02e21b74ac8e6ebd
--- /dev/null
+++ b/src/views/crm/billtemplate/components/index.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ —
+
+
+
+
+
+ + 添加产品
+
+
+
+
+
+
diff --git a/src/views/crm/billtemplate/index.vue b/src/views/crm/billtemplate/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e089d47396b95f98f4f644be89cdeeef6f36d5b0
--- /dev/null
+++ b/src/views/crm/billtemplate/index.vue
@@ -0,0 +1,215 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/billtemplateproduct/BillTemplateProductForm.vue b/src/views/crm/billtemplateproduct/BillTemplateProductForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..a6cc2be251da801908e43f6b84acb36a68fcb0ac
--- /dev/null
+++ b/src/views/crm/billtemplateproduct/BillTemplateProductForm.vue
@@ -0,0 +1,160 @@
+
+
+
+
diff --git a/src/views/crm/billtemplateproduct/index.vue b/src/views/crm/billtemplateproduct/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fcb710407d0274237ceb0806e385e705b4a0ff22
--- /dev/null
+++ b/src/views/crm/billtemplateproduct/index.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/business/BusinessForm.vue b/src/views/crm/business/BusinessForm.vue
index 4af1abe0c9bf12dc36e3147f38772a51ad2cf9f4..db39022862acccb541bf5dbbab9d7cc152e71d81 100644
--- a/src/views/crm/business/BusinessForm.vue
+++ b/src/views/crm/business/BusinessForm.vue
@@ -1,23 +1,45 @@
-
+
+ 确 定
+ 取 消
+
+
+
+
+
diff --git a/src/views/crm/business/BusinessUpdateStatusForm.vue b/src/views/crm/business/BusinessUpdateStatusForm.vue
index 4f2f761b8c291076b5dff453d1180c21fcecaca6..29ae99f1382443a4240ea1cf86e5de53fec2356f 100644
--- a/src/views/crm/business/BusinessUpdateStatusForm.vue
+++ b/src/views/crm/business/BusinessUpdateStatusForm.vue
@@ -12,13 +12,13 @@
diff --git a/src/views/crm/business/components/BusinessList.vue b/src/views/crm/business/components/BusinessList.vue
index f990606ec9b56075455cbac43997e20b18ab62c7..fe305c2081bd4a73b0ecf2658201c61bbdea9e24 100644
--- a/src/views/crm/business/components/BusinessList.vue
+++ b/src/views/crm/business/components/BusinessList.vue
@@ -1,11 +1,11 @@
-
+
创建商机
-
解除关联
-
+ -->
@@ -41,12 +41,15 @@
-
-
+
+
+
+
+
-
-
-
-
+
diff --git a/src/views/crm/business/components/BusinessListModal.vue b/src/views/crm/business/components/BusinessListModal.vue
index 3c21f06106b54ff5c050a4197d798d457312db23..28d2af21ba510e23758ca25794832e1aad56cee9 100644
--- a/src/views/crm/business/components/BusinessListModal.vue
+++ b/src/views/crm/business/components/BusinessListModal.vue
@@ -1,5 +1,5 @@
-
-
+
diff --git a/src/views/crm/business/detail/BusinessDetailsHeader.vue b/src/views/crm/business/detail/BusinessDetailsHeader.vue
index 50d1efeaf3803785737b4b931c6de12ae1bf7526..6ac590505234f828fef7b311d20894477ee68ad9 100644
--- a/src/views/crm/business/detail/BusinessDetailsHeader.vue
+++ b/src/views/crm/business/detail/BusinessDetailsHeader.vue
@@ -14,7 +14,7 @@
-
+
diff --git a/src/views/crm/business/status/BusinessStatusForm.vue b/src/views/crm/business/status/BusinessStatusForm.vue
index d6a4d6f8143f39b5869c2a686a400222bfbb40f1..c5d28338e6f25e3e30efc9849ef218b83882188e 100644
--- a/src/views/crm/business/status/BusinessStatusForm.vue
+++ b/src/views/crm/business/status/BusinessStatusForm.vue
@@ -42,12 +42,12 @@
{{ row.name }}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确 定
+ 取 消
+
+
+
+
diff --git a/src/views/crm/capitalcost/index.vue b/src/views/crm/capitalcost/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..0bbb87e1f839cbbfc63a4ae30bcb4e23d97051aa
--- /dev/null
+++ b/src/views/crm/capitalcost/index.vue
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/contact/ContactForm.vue b/src/views/crm/contact/ContactForm.vue
index 81813e6a21ea0c26ba677de1a0ad8ef848e7fc3d..eb41717f131e6a3bac69438ee57ae2bd1911eecb 100644
--- a/src/views/crm/contact/ContactForm.vue
+++ b/src/views/crm/contact/ContactForm.vue
@@ -1,5 +1,5 @@
-
+
-
-
+
+
+
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -112,8 +123,25 @@
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
-
-
-
+
+
+
-
+
+
@@ -206,23 +239,41 @@ const formData = ref({
parentId: undefined,
remark: undefined,
businessId: undefined,
+ contactRoleType: undefined,
customerDefault: false
})
const formRules = reactive({
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
- ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }]
+ ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }],
+ contactRoleType: [{ required: true, message: '角色不能为空', trigger: 'change' }] ,
+ email: [{ required: false, message: '电子邮箱不能为空', trigger: 'blur' } ,
+ {
+ pattern:
+ /^(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})$/,
+ message: "请输入正确的电子邮箱",
+ }
+ ],
+ mobile: [{ required: false, message: '手机号不能为空', trigger: 'blur' } ,
+ {pattern: /^(1[3-9][0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/, message: '请输入正确手机号'}
+ ],
})
const formRef = ref() // 表单 Ref
const userOptions = ref([]) // 用户列表
const customerList = ref([]) // 客户列表
const contactList = ref([]) // 联系人列表
+let pageNo = ref(1)
+let pageSize = ref(10)
+let total = 0
+const options = ref([]);
/** 打开弹窗 */
const open = async (type: string, id?: number, customerId?: number, businessId?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
+ // 获得客户列表
+ customerList.value = await CustomerApi.getSelfCustomerSimpleList()
resetForm()
// 修改时,设置数据
if (id) {
@@ -234,6 +285,7 @@ const open = async (type: string, id?: number, customerId?: number, businessId?:
}
} else {
if (customerId) {
+ changeCustomerId(customerId)
formData.value.customerId = customerId
formData.value.customerDefault = true // 默认客户的选择,不允许变
}
@@ -244,8 +296,7 @@ const open = async (type: string, id?: number, customerId?: number, businessId?:
}
// 获得联系人列表
contactList.value = await ContactApi.getSimpleContactList()
- // 获得客户列表
- customerList.value = await CustomerApi.getCustomerSimpleList()
+
// 获得地区列表
areaList.value = await AreaApi.getAreaTree()
// 获得用户列表
@@ -283,6 +334,11 @@ const submitForm = async () => {
}
}
+const changeCustomerId = (val) => {
+ let arr = customerList.value.filter(v => v.id === val)
+ if(arr.length) formData.value.registeredAddress = arr[0]['registeredAddress']
+}
+
/** 重置表单 */
const resetForm = () => {
formData.value = {
@@ -308,4 +364,7 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
+
+// onMounted(async() => {
+// })
diff --git a/src/views/crm/contact/components/ContactList.vue b/src/views/crm/contact/components/ContactList.vue
index 1c12ca81e601b28fe1a6bef4bef8032f03e9d3cd..a22d757bcf1b2429ff5c0793840f2038a2e86a0b 100644
--- a/src/views/crm/contact/components/ContactList.vue
+++ b/src/views/crm/contact/components/ContactList.vue
@@ -1,11 +1,11 @@
-
+
创建联系人
-
关联
-
+
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
@@ -76,6 +103,7 @@ import { BizTypeEnum } from '@/api/crm/permission'
import ContactListModal from './ContactListModal.vue'
defineOptions({ name: 'CrmContactList' })
+const { t } = useI18n() // 国际化
const props = defineProps<{
bizType: number // 业务类型
bizId: number // 业务编号
@@ -120,6 +148,7 @@ const getList = async () => {
loading.value = false
}
}
+defineExpose({ getList })
/** 搜索按钮操作 */
const handleQuery = () => {
@@ -129,8 +158,8 @@ const handleQuery = () => {
/** 添加操作 */
const formRef = ref()
-const openForm = () => {
- formRef.value.open('create', undefined, props.customerId, props.businessId)
+const openForm = (type, val?: number) => {
+ formRef.value.open(type, val, props.bizId, props.businessId)
}
/** 打开联系人详情 */
@@ -158,6 +187,19 @@ const createContactBusinessList = async (contactIds: number[]) => {
handleQuery()
}
+/** 删除按钮操作 */
+const handleDelete = async (id: number) => {
+ try {
+ // 删除的二次确认
+ await message.delConfirm()
+ // 发起删除
+ await ContactApi.deleteContact(id)
+ message.success(t('common.delSuccess'))
+ // 刷新列表
+ await getList()
+ } catch {}
+}
+
/** 解除联系人与商机的关联 */
const contactRef = ref()
const deleteContactBusinessList = async () => {
diff --git a/src/views/crm/contact/components/ContactListModal.vue b/src/views/crm/contact/components/ContactListModal.vue
index 8b655c139b7109d520ddb91172d98cec599b2551..fed360c33aebc887ca510298537cbfeeb699c99c 100644
--- a/src/views/crm/contact/components/ContactListModal.vue
+++ b/src/views/crm/contact/components/ContactListModal.vue
@@ -7,7 +7,7 @@
:inline="true"
:model="queryParams"
class="-mb-15px"
- label-width="90px"
+ label-width="120px"
>
-
+
@@ -137,7 +137,7 @@ const resetQuery = () => {
/** 添加操作 */
const formRef = ref()
const openForm = () => {
- formRef.value.open('create')
+ formRef.value.open('create', '', Number(props.customerId))
}
/** 关联联系人提交 */
diff --git a/src/views/crm/contact/detail/ContactDetailsInfo.vue b/src/views/crm/contact/detail/ContactDetailsInfo.vue
index 9e8bfff1997bc13b4a00e4cf951dd5752bee0ecf..61eb214c8b2e3ebec55fcd6df8ee3c95e8dd9c2a 100644
--- a/src/views/crm/contact/detail/ContactDetailsInfo.vue
+++ b/src/views/crm/contact/detail/ContactDetailsInfo.vue
@@ -8,29 +8,29 @@
{{ contact.name }}
{{ contact.customerName }}
+ {{ contact.ownerUserName }}
+
+
+
{{ contact.mobile }}
- {{ contact.telephone }}
+ {{ contact.post }}
{{ contact.email }}
- {{ contact.qq }}
{{ contact.wechat }}
-
- {{ contact.areaName }} {{ contact.detailAddress }}
-
- {{ contact.post }}
- {{ contact.parentName }}
-
-
-
-
- {{ formatDate(contact.contactNextTime) }}
+
+ {{ contact.birthday }}
+
+ {{ contact.hobby }}
+ {{ contact.detailAddress }}
+ {{ contact.registeredAddress }}
+
+ {{ formatDate(contact.createTime) }}
- {{ contact.remark }}
-
+
diff --git a/src/views/crm/contact/detail/index.vue b/src/views/crm/contact/detail/index.vue
index 7989d56a2d8301d3d201e6ffec7afc4d74e98a9f..69b6775658453d2bb290afea940cd53a75dc5fe9 100644
--- a/src/views/crm/contact/detail/index.vue
+++ b/src/views/crm/contact/detail/index.vue
@@ -1,21 +1,21 @@
-
-
+
+
+
+
-
-
+
+
+
-
-
+
+
+
diff --git a/src/views/crm/contact/index.vue b/src/views/crm/contact/index.vue
index ec26f1e9dfbdc5c7f189918c60df1c12aeb54893..3955a010d04885e530e56557a78b9e008bf8e95c 100644
--- a/src/views/crm/contact/index.vue
+++ b/src/views/crm/contact/index.vue
@@ -12,22 +12,8 @@
label-width="68px"
>
-
-
-
+
+
-
+
+
+
@@ -87,7 +74,7 @@
新增
-
导出
-
+ -->
@@ -116,8 +103,8 @@
-
-
+
+
-
+
-
-
+
+
+
+
+
-
+
编辑
@@ -281,8 +269,8 @@ const handleTabClick = (tab: TabsPaneContext) => {
/** 添加/修改操作 */
const formRef = ref()
-const openForm = (type: string, id?: number) => {
- formRef.value.open(type, id)
+const openForm = (type: string, id?: number, customerId?: number) => {
+ formRef.value.open(type, id, customerId)
}
/** 删除按钮操作 */
@@ -327,6 +315,9 @@ const openCustomerDetail = (id: number) => {
/** 初始化 **/
onMounted(async () => {
await getList()
- customerList.value = await CustomerApi.getCustomerSimpleList()
+ customerList.value = await CustomerApi.getSelfCustomerSimpleList()
+})
+onActivated(()=>{
+ getList()
})
diff --git a/src/views/crm/contract-change-record/index.vue b/src/views/crm/contract-change-record/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7ef18c8d099bed5cfe47290a223e00e815270989
--- /dev/null
+++ b/src/views/crm/contract-change-record/index.vue
@@ -0,0 +1,471 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 重置
+
+
+
+ 新增
+
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+
+ 详情
+
+
+ 进度
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/contract/ContractChange.vue b/src/views/crm/contract/ContractChange.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c62bc436fec0f19d7250de834cbbd07e94ebbda9
--- /dev/null
+++ b/src/views/crm/contract/ContractChange.vue
@@ -0,0 +1,588 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 额度
+ 授权人
+ 延期
+ 终止
+ 关联
+ 重签
+
+
+
+
+
+
+
+
+
+
+ 甲方现授权人信息
+
+
+
+
+
+ 甲方授权人
+
+
+
+
+
+
+
+
+
+
+
+
+ 确 定
+ 取 消
+
+
+
+
diff --git a/src/views/crm/contract/ContractForm.vue b/src/views/crm/contract/ContractForm.vue
index db2eec9bfc7b59dc8623ef1be9fe03b0bb3a66c4..731993045a2e8a3e2fcdfcb6477ff0fe783b1138 100644
--- a/src/views/crm/contract/ContractForm.vue
+++ b/src/views/crm/contract/ContractForm.vue
@@ -1,29 +1,58 @@
-
+
+
+ 基础信息
+
+
+
-
-
+
+
-
+
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+ 甲方基本信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 乙方基本信息
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 合同信息
+
+
+
+
+
+ 甲方合同
+ 乙方合同
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 对接信息
+
+
+
+
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 产品清单
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ * 合同甲方关联单位
+
+
+
+
+
+ * 合同甲方授权人信息
+
+
+
+
+
-
- 保存
- 取 消
-
-
+
+
+ 确 定
+ 取 消
+
+
diff --git a/src/views/crm/contract/components/ContracStop.vue b/src/views/crm/contract/components/ContracStop.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6152adeedec1686ffd9e69477292fa8a19744fdf
--- /dev/null
+++ b/src/views/crm/contract/components/ContracStop.vue
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 合同到期
+ 甲方违反协议
+ 乙方不可抗力
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/contract/components/ContractAAuthorizedCompanyForm.vue b/src/views/crm/contract/components/ContractAAuthorizedCompanyForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..8643f8c2735096781cb19de6ed45462e512a6c2b
--- /dev/null
+++ b/src/views/crm/contract/components/ContractAAuthorizedCompanyForm.vue
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ —
+
+
+
+
+
+
+ + 添加
+
+
+
+
+
diff --git a/src/views/crm/contract/components/ContractAAuthorizedPersonForm.vue b/src/views/crm/contract/components/ContractAAuthorizedPersonForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7bc2039689c603454a4c69d9897a8d3cec5825ed
--- /dev/null
+++ b/src/views/crm/contract/components/ContractAAuthorizedPersonForm.vue
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{row.customerName}}
+
+
+
+
+
+
+
+
+
+
+
+ {{getName(getIntDictOptions(DICT_TYPE.CRM_CONTACT_ROLE_TYPE), row.authPersonType)}}
+
+
+
+
+
+
+
+
+
+
+ {{row.phoneNumber}}
+
+
+
+
+
+
+
+
+
+
+
+ {{row.wechat}}
+
+
+
+
+
+
+
+
+
+
+
+ {{row.idNumber}}
+
+
+
+
+
+
+
+
+
+
+
+ {{row.email}}
+
+
+
+
+
+
+
+ —
+
+
+
+
+
+
+ + 添加
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/contract/components/ContractAuthPersonInfo.vue b/src/views/crm/contract/components/ContractAuthPersonInfo.vue
new file mode 100644
index 0000000000000000000000000000000000000000..99768ce83d3d00e598dbfe98b92ed23da35e0666
--- /dev/null
+++ b/src/views/crm/contract/components/ContractAuthPersonInfo.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/contract/components/ContractBAuthorizedPersonForm.vue b/src/views/crm/contract/components/ContractBAuthorizedPersonForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c9a0e9ead509dd40a823755cf6d9cd337eb4a6db
--- /dev/null
+++ b/src/views/crm/contract/components/ContractBAuthorizedPersonForm.vue
@@ -0,0 +1,284 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{getName(getIntDictOptions('auth_type'), row.authType, 'value', 'label')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{getName(userOptions, row.userId, 'id', 'nickname')}}
+
+
+
+
+
+
+
+
+
+
+
+ {{row.postName}}
+
+
+
+
+
+
+
+
+
+
+
+ {{row.userRank}}
+
+
+
+
+
+
+
+
+
+
+
+ {{row.authDesc}}
+
+
+
+
+
+
+
+
+
+
+
+ {{row.phoneNumber}}
+
+
+
+
+
+
+
+
+
+
+
+ {{row.wechat}}
+
+
+
+
+
+
+
+
+
+
+
+ {{row.email}}
+
+
+
+
+
+
+
+ —
+
+
+
+
+
+
+ + 添加
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/contract/components/ContractChangeLimit.vue b/src/views/crm/contract/components/ContractChangeLimit.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1426d6b20fa70df18813c51bea0a4440d4a6e7f9
--- /dev/null
+++ b/src/views/crm/contract/components/ContractChangeLimit.vue
@@ -0,0 +1,466 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/contract/components/ContractExtension.vue b/src/views/crm/contract/components/ContractExtension.vue
new file mode 100644
index 0000000000000000000000000000000000000000..0dcd2dbe98678189e9682ba26ecac44591b7b192
--- /dev/null
+++ b/src/views/crm/contract/components/ContractExtension.vue
@@ -0,0 +1,422 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/contract/components/ContractList.vue b/src/views/crm/contract/components/ContractList.vue
index f693c9ab1f99ed91ac5d6f433b707fa81735ace8..7490ed34f5b16734dd84a0c54882f86235ce1c9e 100644
--- a/src/views/crm/contract/components/ContractList.vue
+++ b/src/views/crm/contract/components/ContractList.vue
@@ -1,7 +1,7 @@
-
+
创建合同
@@ -54,12 +54,9 @@
/>
-
-
\ No newline at end of file
diff --git a/src/views/crm/contract/contractUpload.vue b/src/views/crm/contract/contractUpload.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1314b332e9f88291f15b00a406fbb0cd844d563c
--- /dev/null
+++ b/src/views/crm/contract/contractUpload.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确 定
+ 取 消
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/contract/detail/ContractChangeDetail.vue b/src/views/crm/contract/detail/ContractChangeDetail.vue
new file mode 100644
index 0000000000000000000000000000000000000000..528a6d7a84ce808ca24c55e348581b5cd4d926ca
--- /dev/null
+++ b/src/views/crm/contract/detail/ContractChangeDetail.vue
@@ -0,0 +1,623 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 额度
+ 授权人
+ 延期
+ 终止
+ 关联
+ 重签
+
+
+
+
+
+
+
+
+
+ 甲方现授权人信息
+
+
+
+ 甲方授权人
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/contract/detail/ContractDetail.vue b/src/views/crm/contract/detail/ContractDetail.vue
new file mode 100644
index 0000000000000000000000000000000000000000..bced2e84015fdff0f1bdea38a2892ca1ada543e2
--- /dev/null
+++ b/src/views/crm/contract/detail/ContractDetail.vue
@@ -0,0 +1,1201 @@
+
+
+
+
+
+
+
+
+ 基础信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 甲方基本信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 乙方基本信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 合同信息
+
+
+
+
+
+
+
+ 单次合同
+ 框架合同
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 财务与客服对接信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 产品清单
+
+
+
+
+
+
+ 合同甲方关联单位
+
+
+
+
+
+
+
+ 合同甲方授权人信息
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/contract/detail/ContractProductList.vue b/src/views/crm/contract/detail/ContractProductList.vue
index ea23d17792ab3a29496ec9cbb8fba78f5a9dfa4a..ffc23ec3c8784a5ea30e2611b8a789eb54591ee5 100644
--- a/src/views/crm/contract/detail/ContractProductList.vue
+++ b/src/views/crm/contract/detail/ContractProductList.vue
@@ -48,9 +48,8 @@
/>
- 整单折扣:{{ erpPriceInputFormatter(contract.discountPercent) }}%
- 产品总金额:{{ erpPriceInputFormatter(contract.totalProductPrice) }} 元
+ 总金额:{{ erpPriceInputFormatter(contract.totalPrice) }} 元
diff --git a/src/views/crm/contract/detail/index.vue b/src/views/crm/contract/detail/index.vue
index 9d5e14ca49fd70f0ea360eb89fd43e86caaf35b6..c6b0d126c9f97daa5bd949657f6f371149f6ccd6 100644
--- a/src/views/crm/contract/detail/index.vue
+++ b/src/views/crm/contract/detail/index.vue
@@ -1,73 +1,66 @@
-
-
- 编辑
-
-
- 转移
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
diff --git a/src/views/crm/contract/templateForm.vue b/src/views/crm/contract/templateForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..02a82bfac8cfd7a031ed2ed54ecd14614a39787f
--- /dev/null
+++ b/src/views/crm/contract/templateForm.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+ 确 定
+ 取 消
+
+
+
+
diff --git a/src/views/crm/customer-complaints/create.vue b/src/views/crm/customer-complaints/create.vue
new file mode 100644
index 0000000000000000000000000000000000000000..01918f3dc204eec5926581552579cc1360cde7cd
--- /dev/null
+++ b/src/views/crm/customer-complaints/create.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确 定
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/customer-complaints/detail.vue b/src/views/crm/customer-complaints/detail.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b4c6b34309d06712a7f9916df9901c0a0e5845b8
--- /dev/null
+++ b/src/views/crm/customer-complaints/detail.vue
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ detailData.customerName }}
+
+
+
+ {{ detailData.feedbackProblem}}
+
+
+
+
+
+
+
+ 附件{{ index + 1 }}
+
+ ,
+
+
+
+
+
+ {{ detailData.complaintUserName }}
+
+
+
+ {{ detailData.complaintDeptName }}
+
+
+
+ {{ detailData.accusedComplaintUserName }}
+
+
+
+ {{ detailData.accusedComplaintDeptName }}
+
+
+
+
+ {{ detailData.processingEfficiency}}天
+
+
+
+ {{ detailData.creatorName}}
+
+
+
+ {{ formatDate(detailData.createTime, 'YYYY-MM-DD HH:mm:ss') }}
+
+
+
+ {{ detailData.id }}
+
+
+
+ {{ detailData.processInstanceId}}
+
+
+
+
+
+
diff --git a/src/views/crm/customer-complaints/index.vue b/src/views/crm/customer-complaints/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..389b54d28428fd254def788cc267b2d5fca19e22
--- /dev/null
+++ b/src/views/crm/customer-complaints/index.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+ 新增
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 详情
+
+
+ 进度
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/customer-suggestion/create.vue b/src/views/crm/customer-suggestion/create.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6c081309fa86f0f530555dc20efd778d784340e7
--- /dev/null
+++ b/src/views/crm/customer-suggestion/create.vue
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 确 定
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/customer-suggestion/detail.vue b/src/views/crm/customer-suggestion/detail.vue
new file mode 100644
index 0000000000000000000000000000000000000000..33ede8507e5994d9be33ae947a9a9df822df60b0
--- /dev/null
+++ b/src/views/crm/customer-suggestion/detail.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+ {{ detailData.customerName }}
+
+
+
+ {{ detailData.feedbackProblem }}
+
+
+
+ {{ detailData.suggestion }}
+
+
+
+
+ {{ detailData.feedbackUserName }}
+
+
+
+ {{ detailData.feedbackDeptName }}
+
+
+
+ {{ detailData.creatorName }}
+
+
+
+ {{ formatDate(detailData.createTime, 'YYYY-MM-DD HH:mm:ss') }}
+
+
+
+ {{ detailData.id }}
+
+
+
+ {{ detailData.processInstanceId }}
+
+
+
+
+
+
diff --git a/src/views/crm/customer-suggestion/index.vue b/src/views/crm/customer-suggestion/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fa4d9d455657f6a8929881f364c502fb001ea933
--- /dev/null
+++ b/src/views/crm/customer-suggestion/index.vue
@@ -0,0 +1,299 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+
+
+
+ 重置
+
+
+
+ 新增
+
+
+
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 详情
+
+
+ 进度
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/crm/customer/CustomerForm.vue b/src/views/crm/customer/CustomerForm.vue
index 9a904d2e737bb48d4aa17de3caa69bfe2551d2c0..8cf2822f06827b8bfa85ae9e03976a846e026fe4 100644
--- a/src/views/crm/customer/CustomerForm.vue
+++ b/src/views/crm/customer/CustomerForm.vue
@@ -1,5 +1,5 @@
-
+
-
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
确 定
@@ -151,6 +396,7 @@ import * as AreaApi from '@/api/system/area'
import { defaultProps } from '@/utils/tree'
import * as UserApi from '@/api/system/user'
import { useUserStore } from '@/store/modules/user'
+import { json } from 'stream/consumers'
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
@@ -164,6 +410,7 @@ const userOptions = ref([]) // 用户列表
const formData = ref({
id: undefined,
name: undefined,
+ startDate: undefined,
contactNextTime: undefined,
ownerUserId: 0,
mobile: undefined,
@@ -176,11 +423,26 @@ const formData = ref({
industryId: undefined,
level: undefined,
source: undefined,
- remark: undefined
+ remark: undefined,
+ clueDeveloper: undefined,
+ assist: [],
+ creditNo: undefined,
+ clueDeveloper: undefined,
+ serviceStatus: undefined,
+ legalPersonName: undefined,
+ registerCapital: undefined,
+ website: undefined,
+ registeredAddress: undefined,
+ cooperationArea: 1
})
const formRules = reactive({
name: [{ required: true, message: '客户名称不能为空', trigger: 'blur' }],
- ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }]
+ ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }],
+ clueDeveloper: [{ required: true, message: '拓展人不能为空', trigger: 'change' }],
+ cooperationType: [{ required: true, message: '合作类型不能为空', trigger: 'change' }],
+ cooperationArea: [{ required: true, message: '合作地区不能为空', trigger: 'change' }],
+ website: [{ required: true, message: '网站不能为空', trigger: 'change' }],
+ enterpriseCode: [{ required: true, message: '企业代码不能为空', trigger: 'blur' }],
})
const formRef = ref() // 表单 Ref
@@ -198,7 +460,8 @@ const open = async (type: string, id?: number) => {
} finally {
formLoading.value = false
}
- }
+ }
+ restaurants.value = await CustomerApi.getCompanyList({companyName: '小米科技有限责任公司'})
// 获得地区列表
areaList.value = await AreaApi.getAreaTree()
// 获得用户列表
@@ -206,7 +469,10 @@ const open = async (type: string, id?: number) => {
// 默认新建时选中自己
if (formType.value === 'create') {
formData.value.ownerUserId = useUserStore().getUser.id
+ formData.value.clueDeveloper = useUserStore().getUser.id
+ // formData.value.assist = useUserStore().getUser.id
}
+
}
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
@@ -236,11 +502,54 @@ const submitForm = async () => {
}
}
+// const loadAll = async (val) => {
+// restaurants.value = await CustomerApi.getCompanyList({
+// companyName: val
+// })
+// }
+
+interface RestaurantItem {
+ value: string
+ link: string
+}
+let timeout: ReturnType
+const restaurants = ref([])
+const querySearchAsync = async (queryString: string, cb: (arg: any) => void) => {
+ let data = await CustomerApi.getCompanyList({
+ companyName: queryString
+ })
+ restaurants.value = data.list.map(v => {
+ return Object.assign(v, {value: v.name})
+ })
+ const results = queryString
+ ? restaurants.value.filter(createFilter(queryString))
+ : restaurants.value
+
+ clearTimeout(timeout)
+ timeout = setTimeout(() => {
+ cb(results)
+ }, 2000 * Math.random())
+}
+const createFilter = (queryString: string) => {
+ return (restaurant: RestaurantItem) => {
+ return (
+ restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0
+ )
+ }
+}
+
+const handleSelect = (item: Record) => {
+ formData.value.legalPersonName = item.legalPersonName
+ formData.value.registerCapital = item.regCapital
+ formData.value.startDate = item.regDate
+}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
name: undefined,
+ regCapital: undefined,
+ regDate: undefined,
contactNextTime: undefined,
ownerUserId: 0,
mobile: undefined,
@@ -253,7 +562,10 @@ const resetForm = () => {
industryId: undefined,
level: undefined,
source: undefined,
- remark: undefined
+ reamark: undefined,
+ clueDeveloper: undefined,
+ assist: [],
+ clueDeveloper: undefined,
}
formRef.value?.resetFields()
}
diff --git a/src/views/crm/customer/detail/ComplaintsSuggestion.vue b/src/views/crm/customer/detail/ComplaintsSuggestion.vue
new file mode 100644
index 0000000000000000000000000000000000000000..8b58c89230d9e6455d510591187f3d50dee63e31
--- /dev/null
+++ b/src/views/crm/customer/detail/ComplaintsSuggestion.vue
@@ -0,0 +1,261 @@
+
+
+
+
+
+ 创建投诉建议
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 预览
+
+ 无附件
+
+
+
+
+
+
+
+ 详情
+
+
+ 进度
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/crm/customer/detail/CustomerDetailsHeader.vue b/src/views/crm/customer/detail/CustomerDetailsHeader.vue
index 514ec612ef7c4bc30b44f75cd3da4926ad986a07..5d18e04ada8aa202fedcfa37bbbc9256e49cb373 100644
--- a/src/views/crm/customer/detail/CustomerDetailsHeader.vue
+++ b/src/views/crm/customer/detail/CustomerDetailsHeader.vue
@@ -16,7 +16,7 @@