From 441b91381f8ec1551d37680727b70b5aba4884bb Mon Sep 17 00:00:00 2001 From: dhb52 Date: Tue, 27 Feb 2024 23:45:13 +0800 Subject: [PATCH 01/36] =?UTF-8?q?feat:=20CRM/=E6=95=B0=E6=8D=AE=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1/=E5=AE=A2=E6=88=B7=E6=80=BB=E9=87=8F=E5=88=86?= =?UTF-8?q?=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/crm/statistics/customer.ts | 24 ++++ .../components/TotalCustomerCount.vue | 113 ++++++++++++++++ src/views/crm/statistics/customer/index.vue | 125 ++++++++++++++++++ 3 files changed, 262 insertions(+) create mode 100644 src/api/crm/statistics/customer.ts create mode 100644 src/views/crm/statistics/customer/components/TotalCustomerCount.vue create mode 100644 src/views/crm/statistics/customer/index.vue diff --git a/src/api/crm/statistics/customer.ts b/src/api/crm/statistics/customer.ts new file mode 100644 index 00000000..37c93b47 --- /dev/null +++ b/src/api/crm/statistics/customer.ts @@ -0,0 +1,24 @@ +import request from '@/config/axios' + +export interface StatisticsCustomerRespVO { + count: number + category: string +} + +// 客户总量分析 API +export const StatisticsCustomerApi = { + // 客户总量(新建) + getTotalCustomerCount: (params: any) => { + return request.get({ + url: '/crm/statistics-customer/get-total-customer-count', + params + }) + }, + // 客户总量(成交) + getDealTotalCustomerCount: (params: any) => { + return request.get({ + url: '/crm/statistics-customer/get-deal-total-customer-count', + params + }) + }, +} diff --git a/src/views/crm/statistics/customer/components/TotalCustomerCount.vue b/src/views/crm/statistics/customer/components/TotalCustomerCount.vue new file mode 100644 index 00000000..c1c5dfcd --- /dev/null +++ b/src/views/crm/statistics/customer/components/TotalCustomerCount.vue @@ -0,0 +1,113 @@ + + + diff --git a/src/views/crm/statistics/customer/index.vue b/src/views/crm/statistics/customer/index.vue new file mode 100644 index 00000000..ea2edef4 --- /dev/null +++ b/src/views/crm/statistics/customer/index.vue @@ -0,0 +1,125 @@ + + + From c9d5ec26a277dcdab9612fdd2df3b65f332bba60 Mon Sep 17 00:00:00 2001 From: puhui999 Date: Wed, 28 Feb 2024 09:35:12 +0800 Subject: [PATCH 02/36] =?UTF-8?q?fix:=20=E4=B8=BB=E5=AD=90=E8=A1=A8=20demo?= =?UTF-8?q?03=20List=20props?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erp/components/Demo03CourseList.vue | 46 ++++----- .../demo03/erp/components/Demo03GradeList.vue | 46 ++++----- src/views/infra/demo/demo03/erp/index.vue | 94 ++++++++++--------- 3 files changed, 101 insertions(+), 85 deletions(-) diff --git a/src/views/infra/demo/demo03/erp/components/Demo03CourseList.vue b/src/views/infra/demo/demo03/erp/components/Demo03CourseList.vue index 9d5e2705..3dce77e9 100644 --- a/src/views/infra/demo/demo03/erp/components/Demo03CourseList.vue +++ b/src/views/infra/demo/demo03/erp/components/Demo03CourseList.vue @@ -2,39 +2,40 @@ - 新增 + + 新增 - - - - + + + + - + - diff --git a/src/views/crm/statistics/customer/components/CustomerCycle.vue b/src/views/crm/statistics/customer/components/CustomerCycle.vue new file mode 100644 index 00000000..d28f345d --- /dev/null +++ b/src/views/crm/statistics/customer/components/CustomerCycle.vue @@ -0,0 +1,112 @@ + + + diff --git a/src/views/crm/statistics/customer/components/FollowupCount.vue b/src/views/crm/statistics/customer/components/FollowupCount.vue new file mode 100644 index 00000000..e0ae1274 --- /dev/null +++ b/src/views/crm/statistics/customer/components/FollowupCount.vue @@ -0,0 +1,112 @@ + + + diff --git a/src/views/crm/statistics/customer/components/FollowupType.vue b/src/views/crm/statistics/customer/components/FollowupType.vue new file mode 100644 index 00000000..2debcb1c --- /dev/null +++ b/src/views/crm/statistics/customer/components/FollowupType.vue @@ -0,0 +1,98 @@ + + + diff --git a/src/views/crm/statistics/customer/components/TotalCustomerCount.vue b/src/views/crm/statistics/customer/components/TotalCustomerCount.vue index c1c5dfcd..84c50d04 100644 --- a/src/views/crm/statistics/customer/components/TotalCustomerCount.vue +++ b/src/views/crm/statistics/customer/components/TotalCustomerCount.vue @@ -1,6 +1,6 @@ diff --git a/src/views/crm/contract/detail/index.vue b/src/views/crm/contract/detail/index.vue index bd30489a..f3b038ed 100644 --- a/src/views/crm/contract/detail/index.vue +++ b/src/views/crm/contract/detail/index.vue @@ -48,7 +48,7 @@ - + diff --git a/src/views/crm/statistics/customer/components/CustomerConversionStat.vue b/src/views/crm/statistics/customer/components/CustomerConversionStat.vue new file mode 100644 index 00000000..fbef26b8 --- /dev/null +++ b/src/views/crm/statistics/customer/components/CustomerConversionStat.vue @@ -0,0 +1,130 @@ + + + diff --git a/src/views/crm/statistics/customer/components/CustomerCycle.vue b/src/views/crm/statistics/customer/components/CustomerDealCycle.vue similarity index 60% rename from src/views/crm/statistics/customer/components/CustomerCycle.vue rename to src/views/crm/statistics/customer/components/CustomerDealCycle.vue index d28f345d..9243e6a3 100644 --- a/src/views/crm/statistics/customer/components/CustomerCycle.vue +++ b/src/views/crm/statistics/customer/components/CustomerDealCycle.vue @@ -11,21 +11,30 @@ - - - + + + diff --git a/src/views/crm/statistics/customer/components/TotalCustomerCount.vue b/src/views/crm/statistics/customer/components/TotalCustomerCount.vue deleted file mode 100644 index 84c50d04..00000000 --- a/src/views/crm/statistics/customer/components/TotalCustomerCount.vue +++ /dev/null @@ -1,112 +0,0 @@ - - - diff --git a/src/views/crm/statistics/customer/index.vue b/src/views/crm/statistics/customer/index.vue index 89e2d009..8096814f 100644 --- a/src/views/crm/statistics/customer/index.vue +++ b/src/views/crm/statistics/customer/index.vue @@ -49,44 +49,44 @@ - + - - + + - - + + - + - - + + - - + + + diff --git a/src/views/bpm/taskAssignRule/index.vue b/src/views/bpm/taskAssignRule/index.vue deleted file mode 100644 index 0fe9bde6..00000000 --- a/src/views/bpm/taskAssignRule/index.vue +++ /dev/null @@ -1,136 +0,0 @@ - - From 960f27f6efd6e7768ab93ff5d4713cb0157981a5 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 14 Mar 2024 12:54:28 +0800 Subject: [PATCH 11/36] =?UTF-8?q?BPM=EF=BC=9A=E6=96=B0=E5=A2=9E=20flowable?= =?UTF-8?q?=20expression=20=E8=A1=A8=E8=BE=BE=E5=BC=8F=EF=BC=8C=E6=9B=BF?= =?UTF-8?q?=E4=BB=A3=E7=8E=B0=E6=9C=89=20BpmTaskAssignScript=EF=BC=8C?= =?UTF-8?q?=E6=9B=B4=E5=8A=A0=E7=81=B5=E6=B4=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../penal/task/task-components/UserTask.vue | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue b/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue index aca53a9d..18553b9f 100644 --- a/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue +++ b/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue @@ -117,6 +117,15 @@ /> + + + @@ -160,7 +169,13 @@ const resetTaskForm = () => { userTaskForm.value.assignType = undefined } if (businessObject.assignOptions && businessObject.assignOptions.length > 0) { - userTaskForm.value.assignOptions = businessObject.assignOptions?.split(',').map((item) => +item) + if (userTaskForm.value.assignType === 60) { + userTaskForm.value.assignOptions = [businessObject.assignOptions] + } else { + userTaskForm.value.assignOptions = businessObject.assignOptions + .split(',') + .map((item) => +item) + } } else { userTaskForm.value.assignOptions = [] } From 5f7ccd4e7ce73ebc8f74825902cbcd13d4b68f4d Mon Sep 17 00:00:00 2001 From: YunaiV Date: Fri, 15 Mar 2024 00:19:23 +0800 Subject: [PATCH 12/36] =?UTF-8?q?BPM=EF=BC=9A=E9=87=8D=E6=9E=84=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E5=88=86=E9=85=8D=E4=BA=BA=E7=9A=84=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=EF=BC=8C=E9=80=9A=E8=BF=87=20BpmTaskCandidateStrategy=20?= =?UTF-8?q?=E7=AD=96=E7=95=A5=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../descriptor/activitiDescriptor.json | 4 +- .../plugins/descriptor/camundaDescriptor.json | 4 +- .../descriptor/flowableDescriptor.json | 4 +- .../penal/task/task-components/UserTask.vue | 103 +++++++++--------- src/utils/dict.ts | 3 +- .../detail/TaskCCDialogForm.vue | 2 +- 6 files changed, 57 insertions(+), 63 deletions(-) diff --git a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/activitiDescriptor.json b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/activitiDescriptor.json index ef1371e2..94ba8f6c 100644 --- a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/activitiDescriptor.json +++ b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/activitiDescriptor.json @@ -334,12 +334,12 @@ "type": "String" }, { - "name": "assignType", + "name": "candidateStrategy", "isAttr": true, "type": "String" }, { - "name": "assignOptions", + "name": "candidateParam", "isAttr": true, "type": "String" } diff --git a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/camundaDescriptor.json b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/camundaDescriptor.json index ccf06d4e..8322561e 100644 --- a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/camundaDescriptor.json +++ b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/camundaDescriptor.json @@ -321,12 +321,12 @@ "type": "String" }, { - "name": "assignType", + "name": "candidateStrategy", "isAttr": true, "type": "String" }, { - "name": "assignOptions", + "name": "candidateParam", "isAttr": true, "type": "String" } diff --git a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json index 3a80c232..4ea632a0 100644 --- a/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json +++ b/src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json @@ -321,12 +321,12 @@ "type": "String" }, { - "name": "assignType", + "name": "candidateStrategy", "isAttr": true, "type": "String" }, { - "name": "assignOptions", + "name": "candidateParam", "isAttr": true, "type": "String" } diff --git a/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue b/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue index 18553b9f..013719ea 100644 --- a/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue +++ b/src/components/bpmnProcessDesigner/package/penal/task/task-components/UserTask.vue @@ -1,23 +1,27 @@ diff --git a/src/views/bpm/processInstance/detail/index.vue b/src/views/bpm/processInstance/detail/index.vue index 3ce665f6..800ff2f3 100644 --- a/src/views/bpm/processInstance/detail/index.vue +++ b/src/views/bpm/processInstance/detail/index.vue @@ -31,6 +31,16 @@ type="textarea" /> + + + + +
@@ -118,6 +128,7 @@ import TaskDelegateForm from './TaskDelegateForm.vue' import TaskAddSignDialogForm from './TaskAddSignDialogForm.vue' import { registerComponent } from '@/utils/routerHelper' import { isEmpty } from '@/utils/is' +import * as UserApi from '@/api/system/user' defineOptions({ name: 'BpmProcessInstanceDetail' }) @@ -161,7 +172,8 @@ const handleAudit = async (task, pass) => { // 2.1 提交审批 const data = { id: task.id, - reason: auditForms.value[index].reason + reason: auditForms.value[index].reason, + copyUserIds: auditForms.value[index].copyUserIds } if (pass) { await TaskApi.approveTask(data) @@ -180,21 +192,20 @@ const openTaskUpdateAssigneeForm = (id: string) => { taskUpdateAssigneeFormRef.value.open(id) } -const taskDelegateForm = ref() /** 处理审批退回的操作 */ +const taskDelegateForm = ref() const handleDelegate = async (task) => { taskDelegateForm.value.open(task.id) } -//回退弹框组件 -const taskReturnDialogRef = ref() /** 处理审批退回的操作 */ +const taskReturnDialogRef = ref() const handleBack = async (task) => { taskReturnDialogRef.value.open(task.id) } -const taskAddSignDialogForm = ref() /** 处理审批加签的操作 */ +const taskAddSignDialogForm = ref() const handleSign = async (task) => { taskAddSignDialogForm.value.open(task.id) } @@ -304,13 +315,17 @@ const loadRunningTask = (tasks) => { // 2.3 添加到处理任务 runningTasks.value.push({ ...task }) auditForms.value.push({ - reason: '' + reason: '', + copyUserIds: [] }) }) } /** 初始化 */ -onMounted(() => { +const userOptions = ref([]) // 用户列表 +onMounted(async () => { getDetail() + // 获得用户列表 + userOptions.value = await UserApi.getSimpleUserList() }) diff --git a/src/views/bpm/task/cc/index.vue b/src/views/bpm/task/copy/index.vue similarity index 74% rename from src/views/bpm/task/cc/index.vue rename to src/views/bpm/task/copy/index.vue index 50ddf889..dd41b2e1 100644 --- a/src/views/bpm/task/cc/index.vue +++ b/src/views/bpm/task/copy/index.vue @@ -11,14 +11,6 @@ placeholder="请输入流程名称" /> - - - - - - - - - + + + + + - + @@ -78,14 +75,14 @@ import { dateFormatter } from '@/utils/formatTime' import * as ProcessInstanceApi from '@/api/bpm/processInstance' -defineOptions({ name: 'BpmCCProcessInstance' }) +defineOptions({ name: 'BpmProcessInstanceCopy' }) const { push } = useRouter() // 路由 const loading = ref(false) // 列表的加载中 const total = ref(0) // 列表的总页数 const list = ref([]) // 列表的数据 -const queryParams = ref({ +const queryParams = reactive({ pageNo: 1, pageSize: 10, processInstanceId: '', @@ -98,7 +95,7 @@ const queryFormRef = ref() // 搜索的表单 const getList = async () => { loading.value = true try { - const data = await ProcessInstanceApi.getProcessInstanceCCPage(queryParams) + const data = await ProcessInstanceApi.getProcessInstanceCopyPage(queryParams) list.value = data.list total.value = data.total } finally { @@ -118,7 +115,7 @@ const handleAudit = (row: any) => { /** 搜索按钮操作 */ const handleQuery = () => { - queryParams.value.pageNo = 1 + queryParams.pageNo = 1 getList() } diff --git a/src/views/bpm/task/done/TaskDetail.vue b/src/views/bpm/task/done/TaskDetail.vue deleted file mode 100644 index ff8f313d..00000000 --- a/src/views/bpm/task/done/TaskDetail.vue +++ /dev/null @@ -1,51 +0,0 @@ - - diff --git a/src/views/bpm/task/done/index.vue b/src/views/bpm/task/done/index.vue index b190bd4f..d9b32803 100644 --- a/src/views/bpm/task/done/index.vue +++ b/src/views/bpm/task/done/index.vue @@ -46,27 +46,50 @@ - - - - - + + + + + + + + + + - - - + + + @@ -78,15 +101,11 @@ @pagination="getList" /> - - - diff --git a/src/views/bpm/processInstance/detail/TaskAddSignDialogForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskSignCreateForm.vue similarity index 85% rename from src/views/bpm/processInstance/detail/TaskAddSignDialogForm.vue rename to src/views/bpm/processInstance/detail/dialog/TaskSignCreateForm.vue index 40cd200e..9e4998c1 100644 --- a/src/views/bpm/processInstance/detail/TaskAddSignDialogForm.vue +++ b/src/views/bpm/processInstance/detail/dialog/TaskSignCreateForm.vue @@ -7,8 +7,8 @@ :rules="formRules" label-width="110px" > - - + + { formLoading.value = true formData.value.type = type try { - await TaskApi.taskAddSign(formData.value) + await TaskApi.signCreateTask(formData.value) message.success('加签成功') dialogVisible.value = false // 发送操作成功的事件 @@ -89,8 +90,9 @@ const submitForm = async (type: string) => { const resetForm = () => { formData.value = { id: '', - userIdList: [], - type: '' + userIds: [], + type: '', + reason: '' } formRef.value?.resetFields() } diff --git a/src/views/bpm/processInstance/detail/TaskSubSignDialogForm.vue b/src/views/bpm/processInstance/detail/dialog/TaskSignDeleteForm.vue similarity index 80% rename from src/views/bpm/processInstance/detail/TaskSubSignDialogForm.vue rename to src/views/bpm/processInstance/detail/dialog/TaskSignDeleteForm.vue index 61f7d68c..19bb2dce 100644 --- a/src/views/bpm/processInstance/detail/TaskSubSignDialogForm.vue +++ b/src/views/bpm/processInstance/detail/dialog/TaskSignDeleteForm.vue @@ -9,8 +9,10 @@ > - - {{ item.name }}({{ item.assigneeUser.deptName }}{{ item.assigneeUser.nickname }}--审批) + + {{ item.name }} + ({{ item.assigneeUser?.deptName || item.ownerUser?.deptName }} - + {{ item.assigneeUser?.nickname || item.ownerUser?.nickname }}) @@ -24,10 +26,12 @@ - diff --git a/src/views/bpm/processInstance/detail/index.vue b/src/views/bpm/processInstance/detail/index.vue index 4f889b8f..2aac5fad 100644 --- a/src/views/bpm/processInstance/detail/index.vue +++ b/src/views/bpm/processInstance/detail/index.vue @@ -92,7 +92,7 @@ - + - + diff --git a/src/views/bpm/category/index.vue b/src/views/bpm/category/index.vue new file mode 100644 index 00000000..0e11e819 --- /dev/null +++ b/src/views/bpm/category/index.vue @@ -0,0 +1,198 @@ + + + diff --git a/src/views/bpm/definition/index.vue b/src/views/bpm/definition/index.vue index 923a5901..9ebd28b1 100644 --- a/src/views/bpm/definition/index.vue +++ b/src/views/bpm/definition/index.vue @@ -11,11 +11,7 @@ - - - + @@ -200,9 +203,10 @@ const resetQuery = () => { } /** 发起流程操作 **/ -const handleCreate = () => { +const handleCreate = (id) => { router.push({ - name: 'BpmProcessInstanceCreate' + name: 'BpmProcessInstanceCreate', + query: { processInstanceId: id } }) } From ee12e691be770dd125c114709ded94d6da1b0748 Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Thu, 21 Mar 2024 21:11:52 +0800 Subject: [PATCH 28/36] =?UTF-8?q?=E6=9A=82=E6=97=B6=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E5=8E=9F=E6=9C=89=E8=AE=BE=E8=AE=A1=E5=99=A8=E7=9A=84=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E4=BA=BA=E8=AE=BE=E7=BD=AE,=20=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E7=BC=BA=E5=B0=91=E8=B5=84=E6=BA=90=E6=8A=A5=E9=94=99=E3=80=82?= =?UTF-8?q?=E5=90=8E=E7=BB=AD=E9=9C=80=E8=A6=81=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/drawer/approverDrawer.vue | 283 ------------------ .../SimpleProcessDesigner/src/nodeWrap.vue | 1 - src/views/bpm/simpleWorkflow/index.vue | 3 - 3 files changed, 287 deletions(-) delete mode 100644 src/components/SimpleProcessDesigner/src/drawer/approverDrawer.vue diff --git a/src/components/SimpleProcessDesigner/src/drawer/approverDrawer.vue b/src/components/SimpleProcessDesigner/src/drawer/approverDrawer.vue deleted file mode 100644 index 867c16ff..00000000 --- a/src/components/SimpleProcessDesigner/src/drawer/approverDrawer.vue +++ /dev/null @@ -1,283 +0,0 @@ - - - diff --git a/src/components/SimpleProcessDesigner/src/nodeWrap.vue b/src/components/SimpleProcessDesigner/src/nodeWrap.vue index 9081becd..3c9d5eb1 100644 --- a/src/components/SimpleProcessDesigner/src/nodeWrap.vue +++ b/src/components/SimpleProcessDesigner/src/nodeWrap.vue @@ -55,7 +55,6 @@ class="ant-input editable-title-input" @blur="blurEvent(index)" @focus="$event.currentTarget.select()" - v-focus v-model="item.nodeName" /> {{ item.nodeName }} diff --git a/src/views/bpm/simpleWorkflow/index.vue b/src/views/bpm/simpleWorkflow/index.vue index 7873da7f..144615e0 100644 --- a/src/views/bpm/simpleWorkflow/index.vue +++ b/src/views/bpm/simpleWorkflow/index.vue @@ -10,11 +10,9 @@
-