From 39e49121e21d0424001fcff267762998757096cb Mon Sep 17 00:00:00 2001 From: zy Date: Fri, 23 May 2025 10:18:35 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=84=E4=BB=B6=E7=9B=B8=E5=85=B3-hrm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/bpm/form/index.ts | 14 + src/components/SelectCustomer/src/index.vue | 5 +- .../src/nodes-config/CopyTaskNodeConfig.vue | 86 ++- .../src/nodes-config/UserTaskNodeConfig.vue | 43 +- src/components/processForm/src/index.vue | 2 +- src/components/processTable/src/index.vue | 2 +- src/router/modules/remaining.ts | 22 + src/utils/dict.ts | 5 + src/views/bpm/task/copy/index.vue | 5 +- src/views/bpm/task/done/index.vue | 5 +- src/views/bpm/task/todo/index.vue | 4 +- src/views/crm/business/BusinessForm.vue | 68 ++- .../components/BusinessProductForm.vue | 10 +- .../components/ContractChangeLimit.vue | 138 +++-- .../components/ContractProductForm.vue | 6 +- .../crm/contract/detail/ContractDetail.vue | 574 +++++++++++------- src/views/crm/customer/CustomerForm.vue | 101 ++- .../customer/detail/CustomerDetailsHeader.vue | 43 +- src/views/crm/customer/detail/index.vue | 12 +- src/views/crm/customer/index.vue | 97 ++- src/views/crm/followup/index.vue | 2 +- src/views/crm/quotation/QuotationForm.vue | 13 +- .../components/QuotationProductDetail.vue | 196 +++--- .../quotation/components/RevenueAnalysis.vue | 35 +- src/views/crm/quotation/index.vue | 77 ++- .../CertificateRequestForm.vue | 114 ++-- src/views/hrm/certificaterequest/index.vue | 73 +-- .../RecruitmentRequestForm.vue | 81 ++- src/views/hrm/recruitmentrequest/index.vue | 4 +- src/views/hrm/talentpool/TalentPoolForm.vue | 250 +++++--- src/views/hrm/talentpool/index.vue | 211 +------ .../briefMonthWork/BriefMonthWorkDetail.vue | 96 ++- .../briefMonthWork/BriefWorkMonthForm.vue | 17 +- .../briefWeekWork/BriefWorkWeekDetail.vue | 79 ++- .../briefWeekWork/BriefWorkWeekForm.vue | 18 +- .../components/selectCustomer.vue | 12 +- .../project/briefWork/BriefWorkDetail.vue | 58 +- .../online/OnlineApplicationDetail.vue | 280 +++++---- src/views/project/online/components/index.vue | 121 ++-- src/views/project/project/ProjectDetail.vue | 154 +++-- .../project/project/components/TaskDetail.vue | 85 ++- 41 files changed, 2065 insertions(+), 1153 deletions(-) diff --git a/src/api/bpm/form/index.ts b/src/api/bpm/form/index.ts index 84080f079..e8c77dcf4 100644 --- a/src/api/bpm/form/index.ts +++ b/src/api/bpm/form/index.ts @@ -47,6 +47,20 @@ export const getBusinessForm = async (params) => { }) } +// 保存工作流的业务表单定义 +export const saveBusinessForm = async (data) => { + return await request.put({ + url: 'bpm/form-visible/update', data + }) +} + +// 获取工作流的业务表单权限 +export const getLimitForm = async (params) => { + return await request.get({ + url: 'bpm/form-visible/getFormVisible', params + }) +} + // 获得工作流的表单定义分页 export const getFormPage = async (params) => { return await request.get({ diff --git a/src/components/SelectCustomer/src/index.vue b/src/components/SelectCustomer/src/index.vue index e52b332aa..d536b3102 100644 --- a/src/components/SelectCustomer/src/index.vue +++ b/src/components/SelectCustomer/src/index.vue @@ -63,7 +63,6 @@ let selectComId = ref('popper' + (Math.random().toFixed(5) * 100000)) const vElSelectLoadmore = { mounted(el, binding) { selectRef.value = el - console.log('%csrc/components/SelectCustomer/src/index.vue:63 el,444', 'color: #007acc;', el,444); const scrollHandler = function() { if (this.scrollHeight - this.scrollTop <= this.clientHeight + 20) { binding.value && binding.value() @@ -71,10 +70,8 @@ const vElSelectLoadmore = { } nextTick(() => { - // console.log('%csrc/components/SelectCustomer/src/index.vue:75 selectComId.value', 'color: #007acc;', selectComId.value); // const selectDom = document.querySelector('.event-select-poper .el-select-dropdown__wrap') const selectDom = document.querySelector(`.${selectComId.value} .el-select-dropdown__wrap`) - console.log('%csrc/components/SelectCustomer/src/index.vue:77 object', 'color: #007acc;', selectDom); if (selectDom) { // 先移除可能存在的旧监听器 selectDom.removeEventListener('scroll', scrollHandler) @@ -86,7 +83,7 @@ const vElSelectLoadmore = { }) }, // beforeUnmount(el) { - // const selectDom = document.querySelector('.event-select-poper .el-select-dropdown__wrap') + // const selectDom = document.querySelector(`.${selectComId.value} .el-select-dropdown__wrap`) // if (selectDom && el._scrollHandler) { // selectDom.removeEventListener('scroll', el._scrollHandler) // } diff --git a/src/components/SimpleProcessDesignerV2/src/nodes-config/CopyTaskNodeConfig.vue b/src/components/SimpleProcessDesignerV2/src/nodes-config/CopyTaskNodeConfig.vue index aec32da35..52f4369e8 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes-config/CopyTaskNodeConfig.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/CopyTaskNodeConfig.vue @@ -23,7 +23,7 @@
- +
@@ -189,6 +189,55 @@
+ +
+
字段权限
+
+
字段名称
+
+ + 只读 + + + 可编辑 + + + 隐藏 + +
+
+
+
{{ item.title }}
+ +
+ +
+
+ +
+
+ +
+
+
+
+
字段权限
@@ -246,7 +295,8 @@ @@ -270,9 +320,14 @@ import { CopyTaskFormType } from '../node' import { defaultProps } from '@/utils/tree' +import { getBusinessForm, saveBusinessForm, FormVO } from '@/api/bpm/form' defineOptions({ name: 'CopyTaskNodeConfig' }) +const { t } = useI18n() // 国际化 +const message = useMessage() // 消息弹窗 +const fieldsPermissionCustomize = ref([]) +const tabName = ref('') const props = defineProps({ flowNode: { type: Object as () => SimpleFlowNode, @@ -348,6 +403,33 @@ const changeCandidateStrategy = () => { configForm.value.deptLevel = 1 configForm.value.formUser = '' } +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 +} // 保存配置 const saveConfig = async () => { activeTabName.value = 'user' diff --git a/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue b/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue index eca35e2b8..57800f247 100644 --- a/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue +++ b/src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue @@ -467,32 +467,29 @@
{{ item.title }}
@@ -563,7 +560,8 @@ @@ -610,7 +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, FormVO } from '@/api/bpm/form' +import { getBusinessForm, saveBusinessForm, FormVO } from '@/api/bpm/form' defineOptions({ name: 'UserTaskNodeConfig' }) @@ -620,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[]] }>() @@ -1027,14 +1029,32 @@ const updatePermission = (type: string) => { 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 - console.log('%csrc/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue:1035 object', 'color: #007acc;', bpmnForm); + 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/processForm/src/index.vue b/src/components/processForm/src/index.vue index acd36dcf6..36aae4297 100644 --- a/src/components/processForm/src/index.vue +++ b/src/components/processForm/src/index.vue @@ -3,7 +3,7 @@