From 73f2e73d014434d143449e12ff512949c1f3c46b Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Tue, 19 May 2026 10:25:22 +0800 Subject: [PATCH 01/11] =?UTF-8?q?yxk-20260519-=E5=8F=91=E8=B5=B7=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E6=97=B6=EF=BC=8C=E7=A1=AE=E8=AE=A4ddl=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E9=97=B4=EF=BC=8C=E9=BB=98=E8=AE=A4=E6=98=AF=E8=AF=A5?= =?UTF-8?q?=E4=BA=8B=E9=A1=B9=E7=9A=84ddl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../semri/process/FlowScheduleStartModal.vue | 37 +++++++++++++++++++ .../bg/bgpartymatter/BgPartymatterList.vue | 12 +++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/components/semri/process/FlowScheduleStartModal.vue b/src/components/semri/process/FlowScheduleStartModal.vue index 967832e..683a493 100644 --- a/src/components/semri/process/FlowScheduleStartModal.vue +++ b/src/components/semri/process/FlowScheduleStartModal.vue @@ -27,6 +27,16 @@ /> + + + + @@ -96,6 +106,8 @@ showSuoleaderFields?: boolean; isNeedAppro?: string | number; supDeptleaderid?: string | string[]; + showDeadlineField?: boolean; + deadline?: string | Date; } interface DeptOption { @@ -111,6 +123,7 @@ const contextData = ref>({}); const deptOptions = ref([]); const showSuoleaderFields = ref(false); + const showDeadlineField = ref(false); const formData = reactive({ triggerMode: 'immediate', intervalType: undefined as number | string | undefined, @@ -119,6 +132,7 @@ deptIds: [] as string[], isNeedAppro: '0', supDeptleaderid: '' as string | string[], + deadline: undefined as string | undefined, }); function resetForm() { @@ -129,8 +143,10 @@ formData.deptIds = []; formData.isNeedAppro = '0'; formData.supDeptleaderid = ''; + formData.deadline = undefined; deptOptions.value = []; showSuoleaderFields.value = false; + showDeadlineField.value = false; } function normalizeDeptOptions(options: DeptOption[] = []) { @@ -148,6 +164,19 @@ return Array.from(optionMap.values()); } + function normalizeDeadlineValue(value?: string | Date) { + if (!value) { + return undefined; + } + if (typeof value === 'string') { + return value.length >= 10 ? value.substring(0, 10) : value; + } + const year = value.getFullYear(); + const month = String(value.getMonth() + 1).padStart(2, '0'); + const day = String(value.getDate()).padStart(2, '0'); + return `${year}-${month}-${day}`; + } + function open(data: ModalPayload = {}) { resetForm(); title.value = data.title || '发起流程'; @@ -157,6 +186,8 @@ showSuoleaderFields.value = !!data.showSuoleaderFields; formData.isNeedAppro = String(data.isNeedAppro ?? '0'); formData.supDeptleaderid = data.supDeptleaderid || ''; + showDeadlineField.value = !!data.showDeadlineField; + formData.deadline = normalizeDeadlineValue(data.deadline); if (String(formData.isNeedAppro) !== '1') { formData.supDeptleaderid = ''; } @@ -187,6 +218,11 @@ return; } + if (showDeadlineField.value && !formData.deadline) { + createMessage.warning('请选择事项截止时间'); + return; + } + emit('confirm', { payload: contextData.value, options: { @@ -198,6 +234,7 @@ deptIds: [...formData.deptIds], isNeedAppro: showSuoleaderFields.value ? formData.isNeedAppro : undefined, supDeptleaderid: showSuoleaderFields.value ? (String(formData.isNeedAppro) === '1' ? formData.supDeptleaderid : '') : undefined, + deadline: showDeadlineField.value ? formData.deadline : undefined, }, }); handleCancel(); diff --git a/src/views/bg/bgpartymatter/BgPartymatterList.vue b/src/views/bg/bgpartymatter/BgPartymatterList.vue index 309bcfa..fbe5d6b 100644 --- a/src/views/bg/bgpartymatter/BgPartymatterList.vue +++ b/src/views/bg/bgpartymatter/BgPartymatterList.vue @@ -433,6 +433,8 @@ showSuoleaderFields: true, isNeedAppro: record?.isNeedAppro, supDeptleaderid: record?.supDeptleaderid, + showDeadlineField: true, + deadline: record?.deadline, }); } @@ -474,12 +476,18 @@ const formatDate = (value, format) => { return value ? dateUtil(value).format(format) : undefined; }; + const formatDeadlineDateTime = (value) => { + const deadlineDate = formatDate(value, 'YYYY-MM-DD'); + return deadlineDate ? `${deadlineDate} 00:00:00` : undefined; + }; const nextSuperviseCount = getNextSuperviseCount(record.superviseCount); + const selectedDeadline = options.deadline || record.deadline; const flowJsonData = { ...record, isNeedAppro: options.isNeedAppro ?? record.isNeedAppro ?? '', supDeptleaderid: options.supDeptleaderid ?? record.supDeptleaderid ?? '', superviseCount: nextSuperviseCount, + deadline: selectedDeadline, }; const params = { @@ -502,8 +510,8 @@ urgencyLevel: record.urgencyLevel, deptId: options.deptId || record.responDeptid, deptLeaderId: record.responDeptid, - requireFinishDate: formatDate(record.deadline, 'YYYY-MM-DD'), - deadline: formatDate(record.deadline, 'YYYY-MM-DD HH:mm:ss'), + requireFinishDate: formatDate(selectedDeadline, 'YYYY-MM-DD'), + deadline: formatDeadlineDateTime(selectedDeadline), }, }; From 1cd3ab9918a786299430e2e24a8b63103ae03ffa Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Tue, 19 May 2026 10:48:53 +0800 Subject: [PATCH 02/11] =?UTF-8?q?yxk-20260519-YHJY004-=E5=85=9A=E5=A7=94?= =?UTF-8?q?=E4=BC=9A=E5=A2=9E=E5=8A=A0=E5=8D=8F=E5=8A=9E=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=20=E5=8F=91=E8=B5=B7=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99=EF=BC=8C=E5=90=88=E5=B9=B6=E4=B8=BB?= =?UTF-8?q?=E5=8A=9E=E9=83=A8=E9=97=A8=E5=92=8C=E5=8D=8F=E5=8A=9E=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E5=AD=97=E6=AE=B5=EF=BC=8C=E5=8E=BB=E9=87=8D=E5=90=8E?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E4=B8=BA=E8=A2=AB=E7=9D=A3=E5=8A=9E=E9=83=A8?= =?UTF-8?q?=E9=97=A8=E4=BE=9B=E7=94=A8=E6=88=B7=E7=A1=AE=E8=AE=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bg/bgpartymatter/BgPartymatter.data.ts | 7 +++- .../bg/bgpartymatter/BgPartymatterList.vue | 39 +++++++++++++++---- .../components/BgPartymatterBPMForm.vue | 6 +++ .../components/BgPartymatterForm.vue | 8 +++- 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/views/bg/bgpartymatter/BgPartymatter.data.ts b/src/views/bg/bgpartymatter/BgPartymatter.data.ts index 6cd7768..2f835de 100644 --- a/src/views/bg/bgpartymatter/BgPartymatter.data.ts +++ b/src/views/bg/bgpartymatter/BgPartymatter.data.ts @@ -50,10 +50,15 @@ export const columns: BasicColumn[] = [ dataIndex: 'matterCode' }, { - title: '责任部门', + title: '主办部门', align:"center", dataIndex: 'responDeptid_dictText' }, + { + title: '协办部门', + align:"center", + dataIndex: 'assistDeptid_dictText' + }, { title: '实际执行情况', align:"center", diff --git a/src/views/bg/bgpartymatter/BgPartymatterList.vue b/src/views/bg/bgpartymatter/BgPartymatterList.vue index fbe5d6b..443a7e8 100644 --- a/src/views/bg/bgpartymatter/BgPartymatterList.vue +++ b/src/views/bg/bgpartymatter/BgPartymatterList.vue @@ -139,7 +139,7 @@ import { list, deleteOne, batchDelete, getImportUrl, getExportUrl, bgPartymatterFeedbackList, saveOrUpdate } from './BgPartymatter.api'; const FLOW_CODE = 'dev_task_task_001'; - const FLOW_NAME = '党委会决议事项'; + const FLOW_NAME = '党委会决议事项督办'; const BUSINESS_TABLE_NAME = 'bg_partymatter'; const FORM_URL = 'bg/bgpartymatter/components/BgPartymatterBPMForm'; @@ -449,12 +449,34 @@ } function getResponsibleDeptOptions(record): DeptOption[] { - const deptIds = splitDeptValue(record?.responDeptid); - const deptNames = splitDeptValue(record?.responDeptid_dictText || record?.responDeptname); - return deptIds.map((deptId, index) => ({ - value: deptId, - label: deptNames[index] || deptId, - })); + const optionMap = new Map(); + [ + { + ids: splitDeptValue(record?.responDeptid), + names: splitDeptValue(record?.responDeptid_dictText || record?.responDeptname), + }, + { + ids: splitDeptValue(record?.assistDeptid), + names: splitDeptValue(record?.assistDeptid_dictText || record?.assistDeptname), + }, + ].forEach(({ ids, names }) => { + ids.forEach((deptId, index) => { + if (optionMap.has(deptId)) { + return; + } + optionMap.set(deptId, { + value: deptId, + label: names[index] || deptId, + }); + }); + }); + return Array.from(optionMap.values()); + } + + function getResponsibleDeptIds(record) { + return getResponsibleDeptOptions(record) + .map((item) => item.value) + .join(','); } function getNextSuperviseCount(value) { @@ -482,6 +504,7 @@ }; const nextSuperviseCount = getNextSuperviseCount(record.superviseCount); const selectedDeadline = options.deadline || record.deadline; + const defaultDeptIds = getResponsibleDeptIds(record); const flowJsonData = { ...record, isNeedAppro: options.isNeedAppro ?? record.isNeedAppro ?? '', @@ -508,7 +531,7 @@ title: record.title, content: record.content, urgencyLevel: record.urgencyLevel, - deptId: options.deptId || record.responDeptid, + deptId: options.deptId || defaultDeptIds, deptLeaderId: record.responDeptid, requireFinishDate: formatDate(selectedDeadline, 'YYYY-MM-DD'), deadline: formatDeadlineDateTime(selectedDeadline), diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue index ac23975..49a832e 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue @@ -59,6 +59,11 @@ + + + + + @@ -224,6 +229,7 @@ content: '', matterCode: '', responDeptid: '', + assistDeptid: '', actualExect: '', bpmStatus: '', superviseCount: '', diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue index a6ad225..8bbaf61 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue @@ -40,10 +40,15 @@ - + + + + + + @@ -149,6 +154,7 @@ content: '', matterCode: '', responDeptid: '', + assistDeptid: '', actualExect: '', bpmStatus: '1', superviseCount: '0', From 65ea58b9a4a33a0a9b46ef61b4f152a5eef4d91f Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Tue, 19 May 2026 15:20:44 +0800 Subject: [PATCH 03/11] =?UTF-8?q?yxk-20260519-=20YHJY005-=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=8F=8D=E9=A6=88=E8=A1=A8=E5=AE=8C=E6=88=90=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E5=AD=97=E5=85=B8=E9=A1=B9=20YHJY008-=E5=AF=B9?= =?UTF-8?q?=E4=BA=8E=E5=8F=8D=E9=A6=88=E4=BF=A1=E6=81=AF=E4=B8=AD=E9=97=B4?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=8D=E9=9C=80=E8=A6=81=E4=BF=9D=E7=95=99?= =?UTF-8?q?=EF=BC=8C=E6=AF=8F=E6=AC=A1=E5=8F=AA=E7=BC=96=E8=BE=91=E4=B8=8D?= =?UTF-8?q?=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bg/bgpartymatter/BgPartymatter.data.ts | 3 +- .../BgPartymatterBPMFeedbackModal.vue | 31 ++++++++++--- .../components/BgPartymatterBPMForm.vue | 45 +++++++++++++++++-- 3 files changed, 68 insertions(+), 11 deletions(-) diff --git a/src/views/bg/bgpartymatter/BgPartymatter.data.ts b/src/views/bg/bgpartymatter/BgPartymatter.data.ts index 2f835de..e7596cc 100644 --- a/src/views/bg/bgpartymatter/BgPartymatter.data.ts +++ b/src/views/bg/bgpartymatter/BgPartymatter.data.ts @@ -151,7 +151,8 @@ export const bgPartymatterFeedbackColumns: BasicColumn[] = [ { title: '完成状态', align:"center", - dataIndex: 'bpmStatus' + dataIndex: 'bpmStatus', + customRender: ({ record }) => record?.bpmStatus_dictText || record?.bpmStatus }, // { // title: '外键', diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterBPMFeedbackModal.vue b/src/views/bg/bgpartymatter/components/BgPartymatterBPMFeedbackModal.vue index 74e892d..46cffd8 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterBPMFeedbackModal.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterBPMFeedbackModal.vue @@ -1,6 +1,6 @@ --> - + @@ -78,6 +78,7 @@ import { useUserStore } from '/@/store/modules/user'; import { buildUUID } from '/@/utils/uuid'; import SUploadFile from '/@/components/semri/fileComponent/SUploadFile.vue'; + import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue'; const emit = defineEmits(['success']); const { createMessage } = useMessage(); @@ -85,6 +86,7 @@ const visible = ref(false); const saving = ref(false); + const modalTitle = ref('新增反馈'); const formRef = ref(); const uploadFileRef = ref | null>(null); const uploadSecretLevel = ref(1); @@ -121,10 +123,22 @@ nextTick(() => formRef.value?.clearValidate?.()); } - function open(mainId: string, secretLevel?: string | number, bpmProcessId = '') { + function open(mainId: string, secretLevel?: string | number, bpmProcessId = '', record?: Record) { resetForm(mainId, bpmProcessId); uploadSecretLevel.value = normalizeSecretLevel(secretLevel); - void applyCurrentUserFeedbackInfo(); + if (record?.id) { + modalTitle.value = '编辑反馈'; + Object.keys(formData).forEach((key) => { + if (Object.prototype.hasOwnProperty.call(record, key)) { + formData[key] = record[key] ?? ''; + } + }); + formData.mainId = formData.mainId || mainId; + formData.bpmProcessId = formData.bpmProcessId || bpmProcessId; + } else { + modalTitle.value = '新增反馈'; + void applyCurrentUserFeedbackInfo(); + } visible.value = true; } @@ -186,11 +200,14 @@ } saving.value = true; try { - await applyCurrentUserFeedbackInfo(); - if (!formData.id && uploadFileRef.value?.hasPendingFiles?.()) { + const isUpdate = !!formData.id; + if (!isUpdate) { + await applyCurrentUserFeedbackInfo(); + } + if (!isUpdate && uploadFileRef.value?.hasPendingFiles?.()) { formData.id = buildUUID(); } - const res = await bgPartymatterFeedbackSaveOrUpdate({ ...formData }, false); + const res = await bgPartymatterFeedbackSaveOrUpdate({ ...formData }, isUpdate); if (res.success) { if (formData.id && uploadFileRef.value?.hasPendingFiles?.()) { await uploadFileRef.value.bindBussinessId(formData.id); diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue index 49a832e..4dd5243 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue @@ -109,12 +109,13 @@ :columns="feedbackColumns" :data-source="feedbackList" :pagination="false" - :scroll="{ x: 1220 }" + :scroll="{ x: 1340 }" > - + + + 编辑 + + 删除 + + + @@ -178,7 +187,7 @@ import { useMessage } from '/@/hooks/web/useMessage'; import JSelectDept from '/@/components/Form/src/jeecg/components/JSelectDept.vue'; import Icon from '/@/components/Icon/index'; - import { bgPartymatterFeedbackList, saveBpmForm, setProcessVariable } from '../BgPartymatter.api'; + import { bgPartymatterFeedbackDelete, bgPartymatterFeedbackList, saveBpmForm, setProcessVariable } from '../BgPartymatter.api'; import { usePermission } from '/@/hooks/web/usePermission'; import TaskHandleInnerContent from '/@/views/super/bpm/process/personalOffice/myHandleTask/content/TaskHandleInnerContent.vue'; import JDictSelectTag from "../../../../components/Form/src/jeecg/components/JDictSelectTag.vue"; @@ -216,6 +225,7 @@ const savingSubApproveUser = ref(false); const showBaseInfoDetail = ref(false); const feedbackList = ref([]); + const feedbackAttachmentRefreshKey = ref(0); const subApproveUser = ref(''); const isEnd = ref(0); @@ -250,8 +260,9 @@ { title: '反馈人姓名', dataIndex: 'responPersonname', align: 'center', width: 140 }, { title: '实际执行情况', dataIndex: 'actualExect', align: 'left', width: 280 }, { title: '实际完成时间', dataIndex: 'actualTime', align: 'center', width: 180 }, - { title: '完成状态', dataIndex: 'bpmStatus', align: 'center', width: 120 }, + { title: '完成状态', dataIndex: 'bpmStatus', align: 'center', width: 120, customRender: ({ record }) => record?.bpmStatus_dictText || record?.bpmStatus }, { title: '附件', dataIndex: 'id', key: 'attachments', align: 'left', width: 340 }, + { title: '操作', dataIndex: 'action', key: 'action', align: 'center', width: 120, fixed: 'right' }, ]; const mainDisabled = computed(() => { @@ -323,10 +334,16 @@ const bpmProcessId = processInfo.value.processInstanceId; if (!mainForm.id || !bpmProcessId) { feedbackList.value = []; + feedbackAttachmentRefreshKey.value += 1; return; } const res = await bgPartymatterFeedbackList({ mainId: mainForm.id, bpmProcessId, pageNo: 1, pageSize: 999 }); feedbackList.value = res?.records || res?.result?.records || []; + feedbackAttachmentRefreshKey.value += 1; + } + + function getFeedbackAttachmentKey(record: Recordable) { + return `${record?.id || ''}-${feedbackAttachmentRefreshKey.value}`; } async function submitForm() { @@ -389,6 +406,28 @@ feedbackModalRef.value?.open(mainForm.id, mainForm.secretLevel, processInstanceId); } + function openFeedbackEditModal(record: Recordable) { + if (!record?.id) { + createMessage.warning('反馈记录不存在,无法编辑'); + return; + } + feedbackModalRef.value?.open(mainForm.id, mainForm.secretLevel, processInfo.value.processInstanceId, record); + } + + async function handleFeedbackDelete(record: Recordable) { + if (!record?.id) { + createMessage.warning('反馈记录不存在,无法删除'); + return; + } + try { + await bgPartymatterFeedbackDelete({ id: record.id }, () => undefined); + createMessage.success('删除成功'); + await loadFeedbackList(); + } catch (error) { + createMessage.warning('删除失败'); + } + } + async function saveSubApproveUserVariable(options: { showSuccessMessage?: boolean } = {}) { const { showSuccessMessage = true } = options; const processInstanceId = processInfo.value.processInstanceId; From 48f3d5fb37d033b722ee28ecfee4d5aeb3b50ac0 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Tue, 19 May 2026 16:14:40 +0800 Subject: [PATCH 04/11] =?UTF-8?q?yxk-20260519-=20=E5=85=9A=E5=A7=94?= =?UTF-8?q?=E4=BC=9A=E6=B7=BB=E5=8A=A0=E5=AD=97=E5=85=B8=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E6=80=A5=E4=BB=B6=E3=80=81=E6=8A=84=E5=91=8A=E5=8D=95=E7=BC=96?= =?UTF-8?q?=E5=8F=B7=E3=80=81=E6=98=AF=E5=90=A6=E4=B8=BA=E4=B8=89=E9=87=8D?= =?UTF-8?q?=E4=B8=80=E5=A4=A7=E5=86=B3=E7=AD=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bg/bgpartymatter/BgPartymatter.data.ts | 34 +++++++++++++------ .../components/BgPartymatterBPMForm.vue | 16 +++++++-- .../components/BgPartymatterForm.vue | 18 ++++++++-- 3 files changed, 52 insertions(+), 16 deletions(-) diff --git a/src/views/bg/bgpartymatter/BgPartymatter.data.ts b/src/views/bg/bgpartymatter/BgPartymatter.data.ts index e7596cc..d960519 100644 --- a/src/views/bg/bgpartymatter/BgPartymatter.data.ts +++ b/src/views/bg/bgpartymatter/BgPartymatter.data.ts @@ -49,6 +49,16 @@ export const columns: BasicColumn[] = [ align:"center", dataIndex: 'matterCode' }, + { + title: '抄告单编号', + align:"center", + dataIndex: 'noticeNumber' + }, + { + title: '是否为三重一大决策', + align:"center", + dataIndex: 'isImportant_dictText' + }, { title: '主办部门', align:"center", @@ -74,7 +84,7 @@ export const columns: BasicColumn[] = [ }, }, { - title: '紧急程度', + title: '是否急件', align:"center", dataIndex: 'urgencyLevel_dictText', }, @@ -169,14 +179,16 @@ export const superQuerySchema = { title: {title: '事项名称',order: 3,view: 'text', type: 'string',}, content: {title: '会议决议',order: 4,view: 'textarea', type: 'string',}, matterCode: {title: '事项目录编码',order: 5,view: 'text', type: 'string',}, - responDeptid: {title: '责任部门',order: 6,view: 'sel_depart', type: 'string',}, - actualExect: {title: '实际执行情况',order: 7,view: 'text', type: 'string',}, - bpmStatus: {title: '完成状态',order: 8,view: 'text', type: 'string',}, - superviseCount: {title: '督办次数',order: 9,view: 'text', type: 'string',}, - deadline: {title: '要求完成日期',order: 10,view: 'date', type: 'string',}, - urgencyLevel: {title: '紧急程度',order: 11,view: 'text', type: 'string',}, - isNeedAppro: {title: '是否需要所办领导审批',order: 12,view: 'switch', type: 'string',}, - supDeptleaderid: {title: '所办领导',order: 13,view: 'sel_user', type: 'string',}, - isNeedSuoleader: {title: '是否抄送所领导',order: 14,view: 'switch', type: 'string',}, - suoleaderid: {title: '抄送所领导',order: 15,view: 'sel_user', type: 'string',}, + noticeNumber: {title: '抄告单编号',order: 6,view: 'text', type: 'string',}, + isImportant: {title: '是否为三重一大决策',order: 7,view: 'list', type: 'string', dictCode: 'yn',}, + responDeptid: {title: '责任部门',order: 8,view: 'sel_depart', type: 'string',}, + actualExect: {title: '实际执行情况',order: 9,view: 'text', type: 'string',}, + bpmStatus: {title: '完成状态',order: 10,view: 'text', type: 'string',}, + superviseCount: {title: '督办次数',order: 11,view: 'text', type: 'string',}, + deadline: {title: '要求完成日期',order: 12,view: 'date', type: 'string',}, + urgencyLevel: {title: '是否急件',order: 13,view: 'list', type: 'string', dictCode: 'yn',}, + isNeedAppro: {title: '是否需要所办领导审批',order: 14,view: 'switch', type: 'string',}, + supDeptleaderid: {title: '所办领导',order: 15,view: 'sel_user', type: 'string',}, + isNeedSuoleader: {title: '是否抄送所领导',order: 16,view: 'switch', type: 'string',}, + suoleaderid: {title: '抄送所领导',order: 17,view: 'sel_user', type: 'string',}, }; diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue index 4dd5243..98f418c 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue @@ -54,6 +54,16 @@ + + + + + + + + + + @@ -70,8 +80,8 @@ - - + + @@ -238,6 +248,8 @@ title: '', content: '', matterCode: '', + noticeNumber: '', + isImportant: '', responDeptid: '', assistDeptid: '', actualExect: '', diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue index 8bbaf61..38900f7 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue @@ -39,6 +39,16 @@ + + + + + + + + + + @@ -70,8 +80,8 @@ - - + + @@ -153,13 +163,15 @@ title: '', content: '', matterCode: '', + noticeNumber: '', + isImportant: '', responDeptid: '', assistDeptid: '', actualExect: '', bpmStatus: '1', superviseCount: '0', deadline: '', - urgencyLevel: '1', + urgencyLevel: '0', isNeedAppro: '', supDeptleaderid: '', isNeedSuoleader: '', From 19d8d19bb55892db69fef6ddbf85527f27ae44b8 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Wed, 20 May 2026 10:14:41 +0800 Subject: [PATCH 05/11] =?UTF-8?q?yxk-20260520-=E5=85=9A=E5=A7=94=E4=BC=9A?= =?UTF-8?q?=EF=BC=9A=E6=96=B0=E5=A2=9E=E8=AE=AE=E9=A2=98=E5=BA=8F=E5=8F=B7?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=20=E5=BA=8F=E5=8F=B7=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E7=94=9F=E6=88=90=EF=BC=8C=E6=98=8E=E7=A1=AE=E7=94=9F=E6=88=90?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=88=E5=85=88=E9=80=89=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E5=86=8D=E9=80=89=E8=AE=AE=E9=A2=98=EF=BC=89=EF=BC=8C20260520-?= =?UTF-8?q?1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bg/bgpartymatter/BgPartymatter.data.ts | 79 +++++++++++-------- .../bg/bgpartymatter/BgPartymatterList.vue | 17 ++-- .../components/BgPartymatterBPMForm.vue | 59 +++++++++++++- .../components/BgPartymatterForm.vue | 78 +++++++++++++++--- .../myHandleTask/TaskRunningList.vue | 2 +- .../myHandleTask/useTaskList.ts | 2 +- .../processNode/process.node.data.ts | 8 +- 7 files changed, 187 insertions(+), 58 deletions(-) diff --git a/src/views/bg/bgpartymatter/BgPartymatter.data.ts b/src/views/bg/bgpartymatter/BgPartymatter.data.ts index d960519..04ec9ff 100644 --- a/src/views/bg/bgpartymatter/BgPartymatter.data.ts +++ b/src/views/bg/bgpartymatter/BgPartymatter.data.ts @@ -6,16 +6,10 @@ import { getWeekMonthQuarterYear } from '/@/utils'; //列表数据 export const columns: BasicColumn[] = [ { - title: '序号', + title: '年份', align:"center", - dataIndex: 'number', - sorter: true, - }, - { - title: '督办次数', - align:"center", - dataIndex: 'superviseCount', - width: '100px', + dataIndex: 'year', + width: '60px', }, { title: '事项名称', @@ -23,10 +17,26 @@ export const columns: BasicColumn[] = [ dataIndex: 'title' }, { - title: '年份', + title: '序号', align:"center", - dataIndex: 'year', - width: '60px', + dataIndex: 'number', + sorter: true, + }, + { + title: '会议决议', + align:"center", + dataIndex: 'content' + }, + { + title: '事项目录编码', + align:"center", + dataIndex: 'matterCode' + }, + { + title: '督办次数', + align:"center", + dataIndex: 'superviseCount', + width: '100px', }, { @@ -40,15 +50,13 @@ export const columns: BasicColumn[] = [ sorter: true, }, { - title: '会议决议', + title: '议题序号', align:"center", - dataIndex: 'content' - }, - { - title: '事项目录编码', - align:"center", - dataIndex: 'matterCode' + dataIndex: 'itemNumber', + sorter: true, + width: '100px', }, + { title: '抄告单编号', align:"center", @@ -175,20 +183,21 @@ export const bgPartymatterFeedbackColumns: BasicColumn[] = [ export const superQuerySchema = { year: {title: '年份',order: 0,view: 'text', type: 'string',}, number: {title: '序号',order: 1,view: 'text', type: 'string',}, - matterTime: {title: '会议时间',order: 2,view: 'date', type: 'string',}, - title: {title: '事项名称',order: 3,view: 'text', type: 'string',}, - content: {title: '会议决议',order: 4,view: 'textarea', type: 'string',}, - matterCode: {title: '事项目录编码',order: 5,view: 'text', type: 'string',}, - noticeNumber: {title: '抄告单编号',order: 6,view: 'text', type: 'string',}, - isImportant: {title: '是否为三重一大决策',order: 7,view: 'list', type: 'string', dictCode: 'yn',}, - responDeptid: {title: '责任部门',order: 8,view: 'sel_depart', type: 'string',}, - actualExect: {title: '实际执行情况',order: 9,view: 'text', type: 'string',}, - bpmStatus: {title: '完成状态',order: 10,view: 'text', type: 'string',}, - superviseCount: {title: '督办次数',order: 11,view: 'text', type: 'string',}, - deadline: {title: '要求完成日期',order: 12,view: 'date', type: 'string',}, - urgencyLevel: {title: '是否急件',order: 13,view: 'list', type: 'string', dictCode: 'yn',}, - isNeedAppro: {title: '是否需要所办领导审批',order: 14,view: 'switch', type: 'string',}, - supDeptleaderid: {title: '所办领导',order: 15,view: 'sel_user', type: 'string',}, - isNeedSuoleader: {title: '是否抄送所领导',order: 16,view: 'switch', type: 'string',}, - suoleaderid: {title: '抄送所领导',order: 17,view: 'sel_user', type: 'string',}, + itemNumber: {title: '议题序号',order: 2,view: 'number', type: 'number',}, + matterTime: {title: '会议时间',order: 3,view: 'date', type: 'string',}, + title: {title: '事项名称',order: 4,view: 'text', type: 'string',}, + content: {title: '会议决议',order: 5,view: 'textarea', type: 'string',}, + matterCode: {title: '事项目录编码',order: 6,view: 'text', type: 'string',}, + noticeNumber: {title: '抄告单编号',order: 7,view: 'text', type: 'string',}, + isImportant: {title: '是否为三重一大决策',order: 8,view: 'list', type: 'string', dictCode: 'yn',}, + responDeptid: {title: '责任部门',order: 9,view: 'sel_depart', type: 'string',}, + actualExect: {title: '实际执行情况',order: 10,view: 'text', type: 'string',}, + bpmStatus: {title: '完成状态',order: 11,view: 'text', type: 'string',}, + superviseCount: {title: '督办次数',order: 12,view: 'text', type: 'string',}, + deadline: {title: '要求完成日期',order: 13,view: 'date', type: 'string',}, + urgencyLevel: {title: '是否急件',order: 14,view: 'list', type: 'string', dictCode: 'yn',}, + isNeedAppro: {title: '是否需要所办领导审批',order: 15,view: 'switch', type: 'string',}, + supDeptleaderid: {title: '所办领导',order: 16,view: 'sel_user', type: 'string',}, + isNeedSuoleader: {title: '是否抄送所领导',order: 17,view: 'switch', type: 'string',}, + suoleaderid: {title: '抄送所领导',order: 18,view: 'sel_user', type: 'string',}, }; diff --git a/src/views/bg/bgpartymatter/BgPartymatterList.vue b/src/views/bg/bgpartymatter/BgPartymatterList.vue index 443a7e8..f2cb572 100644 --- a/src/views/bg/bgpartymatter/BgPartymatterList.vue +++ b/src/views/bg/bgpartymatter/BgPartymatterList.vue @@ -9,9 +9,9 @@ - - - + + + @@ -19,9 +19,14 @@ - - - + + + + + + + + diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue index 98f418c..569d79d 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue @@ -40,7 +40,12 @@ - + + + + + + @@ -238,12 +243,14 @@ const feedbackAttachmentRefreshKey = ref(0); const subApproveUser = ref(''); const isEnd = ref(0); + const lastGeneratedNumber = ref(''); const mainForm = reactive>({ id: '', year: '', secretLevel: '', number: '', + itemNumber: undefined, matterTime: '', title: '', content: '', @@ -320,6 +327,14 @@ { immediate: true } ); + // 根据会议时间和议题序号自动生成业务序号,例如:2026-05-20 + 2 => 20260520-2。 + watch( + () => [mainForm.matterTime, mainForm.itemNumber], + () => { + syncGeneratedNumber(); + } + ); + async function initFormData() { const dataId = props.formData?.dataId; if (!dataId) { @@ -342,6 +357,48 @@ }); } + function syncGeneratedNumber() { + const generatedNumber = buildGeneratedNumber(mainForm.matterTime, mainForm.itemNumber); + if (generatedNumber) { + mainForm.number = generatedNumber; + lastGeneratedNumber.value = generatedNumber; + return; + } + if (lastGeneratedNumber.value && mainForm.number === lastGeneratedNumber.value) { + mainForm.number = ''; + lastGeneratedNumber.value = ''; + } + } + + // 只在两个必要字段都填写后生成,避免用户未填完整时写入半截序号。 + function buildGeneratedNumber(matterTime, itemNumber) { + const dateText = formatMatterTime(matterTime); + if (!dateText || itemNumber === undefined || itemNumber === null || itemNumber === '') { + return ''; + } + return `${dateText}-${itemNumber}`; + } + + // 兼容日期选择器返回的字符串、Date、dayjs/moment 对象。 + function formatMatterTime(value) { + if (!value) { + return ''; + } + if (typeof value === 'string') { + return value.slice(0, 10).replace(/-/g, ''); + } + if (value instanceof Date) { + const year = value.getFullYear(); + const month = String(value.getMonth() + 1).padStart(2, '0'); + const day = String(value.getDate()).padStart(2, '0'); + return `${year}${month}${day}`; + } + if (typeof value.format === 'function') { + return value.format('YYYYMMDD'); + } + return ''; + } + async function loadFeedbackList() { const bpmProcessId = processInfo.value.processInstanceId; if (!mainForm.id || !bpmProcessId) { diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue index 38900f7..cb51c04 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterForm.vue @@ -9,21 +9,26 @@ + + + + + + + + + + + + + + + - - - - - - - - - - @@ -159,6 +164,7 @@ year: '', secretLevel: '', number: '', + itemNumber: undefined, matterTime: '', title: '', content: '', @@ -232,6 +238,58 @@ } ); + const lastGeneratedNumber = ref(''); + + // 根据会议时间和议题序号自动生成业务序号,例如:2026-05-20 + 2 => 20260520-2。 + watch( + () => [formData.matterTime, formData.itemNumber], + () => { + syncGeneratedNumber(); + } + ); + + function syncGeneratedNumber() { + const generatedNumber = buildGeneratedNumber(formData.matterTime, formData.itemNumber); + if (generatedNumber) { + formData.number = generatedNumber; + lastGeneratedNumber.value = generatedNumber; + return; + } + if (lastGeneratedNumber.value && formData.number === lastGeneratedNumber.value) { + formData.number = ''; + lastGeneratedNumber.value = ''; + } + } + + // 只在两个必要字段都填写后生成,避免用户未填完整时写入半截序号。 + function buildGeneratedNumber(matterTime, itemNumber) { + const dateText = formatMatterTime(matterTime); + if (!dateText || itemNumber === undefined || itemNumber === null || itemNumber === '') { + return ''; + } + return `${dateText}-${itemNumber}`; + } + + // 兼容日期选择器返回的字符串、Date、dayjs/moment 对象。 + function formatMatterTime(value) { + if (!value) { + return ''; + } + if (typeof value === 'string') { + return value.slice(0, 10).replace(/-/g, ''); + } + if (value instanceof Date) { + const year = value.getFullYear(); + const month = String(value.getMonth() + 1).padStart(2, '0'); + const day = String(value.getDate()).padStart(2, '0'); + return `${year}${month}${day}`; + } + if (typeof value.format === 'function') { + return value.format('YYYYMMDD'); + } + return ''; + } + onMounted(()=>{ initFormData(); }); diff --git a/src/views/super/bpm/process/personalOffice/myHandleTask/TaskRunningList.vue b/src/views/super/bpm/process/personalOffice/myHandleTask/TaskRunningList.vue index de98a1d..6641707 100644 --- a/src/views/super/bpm/process/personalOffice/myHandleTask/TaskRunningList.vue +++ b/src/views/super/bpm/process/personalOffice/myHandleTask/TaskRunningList.vue @@ -64,7 +64,7 @@ //办理 const [registerHandleModal, { openModal: openHandleModal }] = useModal(); async function handleProcess(record) { - debugger + //debugger let { formData, formUrl } = await getTaskNodeInfo(record); formData['PROCESS_TAB_TYPE'] = 'run'; openHandleModal(true, { diff --git a/src/views/super/bpm/process/personalOffice/myHandleTask/useTaskList.ts b/src/views/super/bpm/process/personalOffice/myHandleTask/useTaskList.ts index c9e333f..69eb958 100644 --- a/src/views/super/bpm/process/personalOffice/myHandleTask/useTaskList.ts +++ b/src/views/super/bpm/process/personalOffice/myHandleTask/useTaskList.ts @@ -64,7 +64,7 @@ export function useTaskList(type) { */ async function getTaskNodeInfo(record) { //查询条件 - debugger; + // debugger; let params = { taskId: record.id }; const result = await taskNodeInfo(type, params); console.log('获取流程节点信息', result); diff --git a/src/views/super/bpm/process/processDesign/processNode/process.node.data.ts b/src/views/super/bpm/process/processDesign/processNode/process.node.data.ts index cff1520..cb1e4b5 100644 --- a/src/views/super/bpm/process/processDesign/processNode/process.node.data.ts +++ b/src/views/super/bpm/process/processDesign/processNode/process.node.data.ts @@ -8,7 +8,7 @@ export const columns: BasicColumn[] = [ title: '#', dataIndex: '', key: 'rowIndex', - width: 60, + width: 30, align: 'center', customRender: function ({ index }) { return parseInt(index) + 1; @@ -17,7 +17,7 @@ export const columns: BasicColumn[] = [ { title: '节点名称', align: 'center', - width: 120, + width: 140, dataIndex: 'processNodeName', }, { @@ -30,14 +30,14 @@ export const columns: BasicColumn[] = [ title: 'PC表单地址', align: 'center', dataIndex: 'modelAndView', - width: 240, + width: 400, ellipsis: true, }, { title: '移动表单地址', align: 'center', dataIndex: 'modelAndViewMobile', - width: 240, + width: 30, ellipsis: true, }, { From 3a7455b39c21243291ea30787f23c8687c2612c1 Mon Sep 17 00:00:00 2001 From: zhihao <18915542763@163.com> Date: Wed, 20 May 2026 10:57:57 +0800 Subject: [PATCH 06/11] =?UTF-8?q?czh-20260520-=E5=A2=9E=E5=8A=A0=E5=88=9D?= =?UTF-8?q?=E7=89=88=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProcessPortal/components/MyWork.vue | 342 ++++++++++++++++++ .../ProcessPortal/components/StatCards.vue | 195 ++++++++++ .../components/WelcomeBanner.vue | 180 +++++++++ .../dashboard/ProcessPortal/data/cc.data.ts | 28 ++ .../dashboard/ProcessPortal/data/todo.data.ts | 43 +++ src/views/dashboard/ProcessPortal/index.vue | 22 ++ 6 files changed, 810 insertions(+) create mode 100644 src/views/dashboard/ProcessPortal/components/MyWork.vue create mode 100644 src/views/dashboard/ProcessPortal/components/StatCards.vue create mode 100644 src/views/dashboard/ProcessPortal/components/WelcomeBanner.vue create mode 100644 src/views/dashboard/ProcessPortal/data/cc.data.ts create mode 100644 src/views/dashboard/ProcessPortal/data/todo.data.ts create mode 100644 src/views/dashboard/ProcessPortal/index.vue diff --git a/src/views/dashboard/ProcessPortal/components/MyWork.vue b/src/views/dashboard/ProcessPortal/components/MyWork.vue new file mode 100644 index 0000000..67cb19c --- /dev/null +++ b/src/views/dashboard/ProcessPortal/components/MyWork.vue @@ -0,0 +1,342 @@ + + + + 我的工作 + + + + 待办 + {{ todoTotal }} + + 我的抄送 + + + 更多 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/dashboard/ProcessPortal/components/StatCards.vue b/src/views/dashboard/ProcessPortal/components/StatCards.vue new file mode 100644 index 0000000..bf72c96 --- /dev/null +++ b/src/views/dashboard/ProcessPortal/components/StatCards.vue @@ -0,0 +1,195 @@ + + + + + + {{ item.title }} + + + + + + + + + + + + + diff --git a/src/views/dashboard/ProcessPortal/components/WelcomeBanner.vue b/src/views/dashboard/ProcessPortal/components/WelcomeBanner.vue new file mode 100644 index 0000000..fd0582c --- /dev/null +++ b/src/views/dashboard/ProcessPortal/components/WelcomeBanner.vue @@ -0,0 +1,180 @@ + + + + + + + {{ greeting }},{{ userinfo.realname }}👋 + + 今天有 8 项待办、 + 2 项即将超时 + + + + + + {{ formattedDate }} + + + + {{ formattedTime }} + + + + + + + + + diff --git a/src/views/dashboard/ProcessPortal/data/cc.data.ts b/src/views/dashboard/ProcessPortal/data/cc.data.ts new file mode 100644 index 0000000..5ab5e60 --- /dev/null +++ b/src/views/dashboard/ProcessPortal/data/cc.data.ts @@ -0,0 +1,28 @@ +import { BasicColumn } from '/@/components/Table'; + +export const ccColumns: BasicColumn[] = [ + { + title: '业务标题', + align: 'center', + dataIndex: 'bpmBizTitle', + ellipsis: true, + }, + { + title: '任务名称', + align: 'center', + width: 260, + dataIndex: 'taskName', + }, + { + title: '发起人', + align: 'center', + width: 160, + dataIndex: 'processApplyUserName', + }, + { + title: '办理人', + align: 'center', + width: 160, + dataIndex: 'taskAssigneeName', + }, +]; diff --git a/src/views/dashboard/ProcessPortal/data/todo.data.ts b/src/views/dashboard/ProcessPortal/data/todo.data.ts new file mode 100644 index 0000000..f617042 --- /dev/null +++ b/src/views/dashboard/ProcessPortal/data/todo.data.ts @@ -0,0 +1,43 @@ +import { BasicColumn } from '/@/components/Table'; +import { Tag } from 'ant-design-vue'; +import { h } from 'vue'; + +export const todoColumns: BasicColumn[] = [ + { + title: '业务标题', + align: 'center', + dataIndex: 'bpmBizTitle', + ellipsis: true, + }, + { + title: '当前环节', + align: 'center', + width: 200, + dataIndex: 'taskName', + }, + { + title: '转入时间', + align: 'center', + width: 160, + dataIndex: 'taskBeginTime', + }, + { + title: '事项截止时间', + align: 'center', + width: 160, + dataIndex: 'deadline', + customRender: ({ text, record }) => { + const value = !text ? '' : text.length > 10 ? text.substr(0, 10) : text; + if (!value) { + return ''; + } + if (record.deadlineOverdue) { + return h(Tag, { color: 'error' }, () => (record.deadlineWarnText ? `${value} ${record.deadlineWarnText}` : value)); + } + if (record.deadlineSoon) { + return h(Tag, { color: 'warning' }, () => (record.deadlineWarnText ? `${value} ${record.deadlineWarnText}` : value)); + } + return value; + }, + }, +]; diff --git a/src/views/dashboard/ProcessPortal/index.vue b/src/views/dashboard/ProcessPortal/index.vue new file mode 100644 index 0000000..d6ff21e --- /dev/null +++ b/src/views/dashboard/ProcessPortal/index.vue @@ -0,0 +1,22 @@ + + + + + + + + + + + + From 3a45f8e014104f06d63140220ec50152f4ddd561 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Thu, 21 May 2026 09:45:51 +0800 Subject: [PATCH 07/11] =?UTF-8?q?yxk-20260521-=E5=85=9A=E5=A7=94=E4=BC=9A?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=A1=A8=E5=8D=95=EF=BC=9A=E5=8F=AA=E6=9C=89?= =?UTF-8?q?=E5=BE=85=E5=8A=9E=E5=8A=9E=E7=90=86=E5=85=A5=E5=8F=A3=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E6=B5=81=E7=A8=8B=E5=8A=9E=E7=90=86=E5=8C=BA=EF=BC=8C?= =?UTF-8?q?=E5=8E=86=E5=8F=B2/=E6=8A=84=E9=80=81=E6=9F=A5=E7=9C=8B?= =?UTF-8?q?=E5=8D=B3=E4=BD=BF=E6=9C=89=20taskId=20=E4=B9=9F=E5=8F=AA?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E4=B8=9A=E5=8A=A1=E8=A1=A8=E5=8D=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue index 569d79d..b7340cc 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue @@ -290,7 +290,8 @@ } return props.formDisabled; }); - const showProcessHandle = computed(() => props.formBpm && !!props.formData?.taskId); + // 只有待办办理入口展示流程办理区,历史/抄送查看即使有 taskId 也只展示业务表单。 + const showProcessHandle = computed(() => props.formBpm && props.formData?.PROCESS_TAB_TYPE === 'run' && !!props.formData?.taskId); const showAddFeedback = computed(() => String(props.formData?.extendUrlParams?.addfeedback ?? '') === '1'); const showSubApproveUser = computed(() => String(props.formData?.extendUrlParams?.selectuser ?? '') === '1'); const showSubApproveUserSelector = computed(() => showSubApproveUser.value && String(isEnd.value) !== '1'); From 3ccb863bd3d0970ee8eccf568c42a82ac5315684 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Thu, 21 May 2026 18:42:46 +0800 Subject: [PATCH 08/11] =?UTF-8?q?yxk-20260521-=E5=85=9A=E5=A7=94=E4=BC=9A?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E8=A1=A8=E5=8D=95=EF=BC=9A=E8=AE=AE=E9=A2=98?= =?UTF-8?q?=E5=BA=8F=E5=8F=B7=E7=A6=81=E7=94=A8=E6=97=B6=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=B8=8D=E5=8C=B9=E9=85=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/BgPartymatterBPMForm.vue | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue index b7340cc..fcc235b 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue @@ -66,7 +66,7 @@ - + @@ -671,6 +671,7 @@ } :deep(.ant-input), + :deep(.ant-input-number), :deep(.ant-picker), :deep(.ant-select-selector) { min-height: 30px; @@ -687,6 +688,9 @@ :deep(.ant-input-affix-wrapper-disabled-focused), :deep(.ant-input-outlined[disabled]), :deep(.ant-input-outlined.ant-input-disabled), + :deep(.ant-input-number-disabled), + :deep(.ant-input-number-disabled:hover), + :deep(.ant-input-number-disabled:focus), :deep(textarea.ant-input[disabled]), :deep(.ant-picker-disabled), :deep(.ant-select-disabled .ant-select-selector) { @@ -700,6 +704,7 @@ :deep(.ant-input[disabled]), :deep(.ant-input-disabled), + :deep(.ant-input-number-disabled), :deep(.ant-input-affix-wrapper-disabled), :deep(textarea.ant-input[disabled]) { padding-left: 0 !important; @@ -712,6 +717,13 @@ cursor: default !important; } + :deep(.ant-input-number-disabled .ant-input-number-input) { + background: transparent !important; + color: #1f2937 !important; + -webkit-text-fill-color: #1f2937 !important; + cursor: default !important; + } + :deep(.ant-input[disabled]::placeholder), :deep(.ant-input-disabled::placeholder), :deep(.ant-input-affix-wrapper-disabled .ant-input::placeholder) { @@ -746,6 +758,7 @@ :deep(.ant-picker-disabled .ant-picker-suffix), :deep(.ant-input-disabled .ant-input-clear-icon), :deep(.ant-input-affix-wrapper-disabled .ant-input-clear-icon), + :deep(.ant-input-number-disabled .ant-input-number-handler-wrap), :deep(.ant-select-disabled .ant-select-clear) { display: none; } From 43db637f60012e1c17146c4fdf62a95f70e84776 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Thu, 21 May 2026 19:04:40 +0800 Subject: [PATCH 09/11] =?UTF-8?q?yxk-20260521-=E5=85=9A=E5=A7=94=E4=BC=9A?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=A1=A8=E5=8D=95=EF=BC=9A=E5=8F=AA=E6=9C=89?= =?UTF-8?q?=E5=8A=9E=E7=90=86=E6=97=B6=EF=BC=8C=E6=89=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=8F=8D=E9=A6=88=E4=BF=A1=E6=81=AF=E7=9A=84=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=A0=8F=EF=BC=88=E7=BC=96=E8=BE=91/=E5=88=A0=E9=99=A4?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/BgPartymatterBPMForm.vue | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue index fcc235b..a8d06e0 100644 --- a/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue +++ b/src/views/bg/bgpartymatter/components/BgPartymatterBPMForm.vue @@ -124,7 +124,7 @@ :columns="feedbackColumns" :data-source="feedbackList" :pagination="false" - :scroll="{ x: 1340 }" + :scroll="{ x: feedbackTableScrollX }" > @@ -138,7 +138,7 @@ /> - - + 编辑 @@ -274,15 +274,21 @@ intervalStartTime: '', }); - const feedbackColumns = [ + const feedbackBaseColumns = [ { title: '责任部门名称', dataIndex: 'responDeptname', align: 'center', width: 160 }, { title: '反馈人姓名', dataIndex: 'responPersonname', align: 'center', width: 140 }, { title: '实际执行情况', dataIndex: 'actualExect', align: 'left', width: 280 }, { title: '实际完成时间', dataIndex: 'actualTime', align: 'center', width: 180 }, { title: '完成状态', dataIndex: 'bpmStatus', align: 'center', width: 120, customRender: ({ record }) => record?.bpmStatus_dictText || record?.bpmStatus }, { title: '附件', dataIndex: 'id', key: 'attachments', align: 'left', width: 340 }, - { title: '操作', dataIndex: 'action', key: 'action', align: 'center', width: 120, fixed: 'right' }, ]; + const feedbackActionColumn = { title: '操作', dataIndex: 'action', key: 'action', align: 'center', width: 120, fixed: 'right' }; + const feedbackColumns = computed(() => { + return canManageFeedback.value ? [...feedbackBaseColumns, feedbackActionColumn] : feedbackBaseColumns; + }); + const feedbackTableScrollX = computed(() => { + return canManageFeedback.value ? 1340 : 1220; + }); const mainDisabled = computed(() => { if (props.formBpm) { @@ -292,6 +298,7 @@ }); // 只有待办办理入口展示流程办理区,历史/抄送查看即使有 taskId 也只展示业务表单。 const showProcessHandle = computed(() => props.formBpm && props.formData?.PROCESS_TAB_TYPE === 'run' && !!props.formData?.taskId); + const canManageFeedback = computed(() => props.formBpm && props.formData?.PROCESS_TAB_TYPE === 'run' && !!props.formData?.taskId); const showAddFeedback = computed(() => String(props.formData?.extendUrlParams?.addfeedback ?? '') === '1'); const showSubApproveUser = computed(() => String(props.formData?.extendUrlParams?.selectuser ?? '') === '1'); const showSubApproveUserSelector = computed(() => showSubApproveUser.value && String(isEnd.value) !== '1'); @@ -477,6 +484,10 @@ } function openFeedbackEditModal(record: Recordable) { + if (!canManageFeedback.value) { + createMessage.warning('当前流程状态不允许编辑反馈'); + return; + } if (!record?.id) { createMessage.warning('反馈记录不存在,无法编辑'); return; @@ -485,6 +496,10 @@ } async function handleFeedbackDelete(record: Recordable) { + if (!canManageFeedback.value) { + createMessage.warning('当前流程状态不允许删除反馈'); + return; + } if (!record?.id) { createMessage.warning('反馈记录不存在,无法删除'); return; From b3fb3b93b9cd212a454028163544c0f5d6f3fa1d Mon Sep 17 00:00:00 2001 From: zhihao <18915542763@163.com> Date: Thu, 21 May 2026 19:16:21 +0800 Subject: [PATCH 10/11] =?UTF-8?q?czh-20260521-=E6=9B=B4=E6=94=B9=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E5=90=8D=E7=A7=B0=E4=BB=A5=E5=8F=8A=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=88=86=E7=BB=84=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/routes/modules/dashboard.ts | 8 + src/utils/http/axios/index.ts | 2 +- src/views/tasklist/TaskList.api.ts | 10 +- src/views/tasklist/TaskList.data.ts | 34 ++--- .../tasklist/components/CollaboratorModal.vue | 141 +++++++++++------- .../tasklist/components/CreateListModal.vue | 2 +- .../tasklist/components/CreateTaskModal.vue | 4 +- src/views/tasklist/components/TaskContent.vue | 82 +++++++--- .../tasklist/components/TaskDetailDrawer.vue | 16 +- .../tasklist/components/TaskFlatView.vue | 8 +- .../tasklist/components/TaskListForm.vue | 2 +- .../tasklist/components/TaskListModal.vue | 2 +- src/views/tasklist/components/TaskSidebar.vue | 62 ++++---- .../tasklist/components/UserSelectModal.vue | 2 +- src/views/tasklist/index.vue | 106 ++++++++++--- src/views/tasklist/types.ts | 14 +- 16 files changed, 325 insertions(+), 170 deletions(-) diff --git a/src/router/routes/modules/dashboard.ts b/src/router/routes/modules/dashboard.ts index d09e816..c83a596 100644 --- a/src/router/routes/modules/dashboard.ts +++ b/src/router/routes/modules/dashboard.ts @@ -31,6 +31,14 @@ const dashboard: AppRouteModule = { title: t('routes.dashboard.workbench'), }, }, + { + path: 'processPortal', + name: 'ProcessPortal', + component: () => import('/@/views/dashboard/ProcessPortal/index.vue'), + meta: { + title: '流程门户', + }, + }, ], }; diff --git a/src/utils/http/axios/index.ts b/src/utils/http/axios/index.ts index 2052948..a2316c5 100644 --- a/src/utils/http/axios/index.ts +++ b/src/utils/http/axios/index.ts @@ -276,7 +276,7 @@ function createAxios(opt?: Partial) { // authenticationScheme: 'Bearer', authenticationScheme: '', //接口超时设置 - timeout: 10 * 1000, + timeout: 20 * 1000, // 基础接口地址 // baseURL: globSetting.apiUrl, headers: { 'Content-Type': ContentTypeEnum.JSON }, diff --git a/src/views/tasklist/TaskList.api.ts b/src/views/tasklist/TaskList.api.ts index 9d0648e..c7a2339 100644 --- a/src/views/tasklist/TaskList.api.ts +++ b/src/views/tasklist/TaskList.api.ts @@ -124,15 +124,15 @@ export const deleteTask = (params, handleSuccess) => { export const toggleTaskStatus = (params) => defHttp.post({ url: Api.toggleTaskStatus, params }); -export const getCollaborators = (params) => defHttp.get({ url: Api.getCollaborators, params }); +export const getCollaborators = (params, options?: Record) => defHttp.get({ url: Api.getCollaborators, params }, options); -export const addCollaborator = (params) => defHttp.post({ url: Api.addCollaborator, params }); +export const addCollaborator = (params, options?) => defHttp.post({ url: Api.addCollaborator, params }, options); -export const removeCollaborator = (params) => defHttp.post({ url: Api.removeCollaborator, params }); +export const removeCollaborator = (params, options?) => defHttp.post({ url: Api.removeCollaborator, params }, options); -export const updateCollaboratorPermission = (params) => defHttp.post({ url: Api.updateCollaboratorPermission, params }); +export const updateCollaboratorPermission = (params, options?) => defHttp.post({ url: Api.updateCollaboratorPermission, params }, options); -export const getMyPermission = (params) => defHttp.get({ url: Api.getMyPermission, params }); +export const getMyPermission = (params, options?) => defHttp.get({ url: Api.getMyPermission, params }, options); export const moveTask = (params) => defHttp.post({ url: Api.moveTask, params }); diff --git a/src/views/tasklist/TaskList.data.ts b/src/views/tasklist/TaskList.data.ts index 40c50d6..1975405 100644 --- a/src/views/tasklist/TaskList.data.ts +++ b/src/views/tasklist/TaskList.data.ts @@ -6,7 +6,7 @@ import { getAvailableSecretLevels } from './types'; export const columns: BasicColumn[] = [ { - title: '任务清单名称', + title: '计划名称', align: 'center', dataIndex: 'tasklistName', }, @@ -35,7 +35,7 @@ export const searchFormSchema: FormSchema[] = []; export const formSchema: FormSchema[] = [ { - label: '任务清单名称', + label: '计划名称', field: 'tasklistName', component: 'Input', }, @@ -93,7 +93,7 @@ export const taskListDetialColumns: JVxeColumn[] = [ defaultValue: '', }, { - title: '任务名称', + title: '事项名称', key: 'taskName', type: JVxeTypes.input, width: '200px', @@ -101,7 +101,7 @@ export const taskListDetialColumns: JVxeColumn[] = [ defaultValue: '', }, { - title: '任务描述', + title: '事项描述', key: 'taskDesc', type: JVxeTypes.input, width: '200px', @@ -183,7 +183,7 @@ export const taskListDetialColumns: JVxeColumn[] = [ defaultValue: '', }, { - title: '子任务数', + title: '子事项数', key: 'subTaskCount', type: JVxeTypes.inputNumber, width: '200px', @@ -191,7 +191,7 @@ export const taskListDetialColumns: JVxeColumn[] = [ defaultValue: '', }, { - title: '子任务完成数', + title: '子事项完成数', key: 'completedSubTaskCount', type: JVxeTypes.inputNumber, width: '200px', @@ -201,21 +201,21 @@ export const taskListDetialColumns: JVxeColumn[] = [ ]; export const superQuerySchema = { - tasklistName: { title: '任务清单名称', order: 0, view: 'text', type: 'string' }, + tasklistName: { title: '计划名称', order: 0, view: 'text', type: 'string' }, pid: { title: '父级节点', order: 1, view: 'text', type: 'string' }, hasChild: { title: '是否有子节点', order: 2, view: 'text', type: 'string' }, sortOrder: { title: '排序号', order: 3, view: 'number', type: 'number' }, type: { title: '类型', order: 4, view: 'text', type: 'string' }, taskListDetial: { - title: '工作任务清单详情', + title: '计划详情', view: 'table', fields: { mainId: { title: '外键', order: 0, view: 'text', type: 'string' }, pid: { title: '父节点ID', order: 1, view: 'text', type: 'string' }, hasChild: { title: '是否有子节点', order: 2, view: 'text', type: 'string' }, sortOrder: { title: '排序号', order: 3, view: 'number', type: 'number' }, - taskName: { title: '任务名称', order: 4, view: 'text', type: 'string' }, - taskDesc: { title: '任务描述', order: 5, view: 'text', type: 'string' }, + taskName: { title: '事项名称', order: 4, view: 'text', type: 'string' }, + taskDesc: { title: '事项描述', order: 5, view: 'text', type: 'string' }, priority: { title: '优先级', order: 6, view: 'list', type: 'string', dictCode: 'task_priority' }, taskStatus: { title: '完成状态', order: 7, view: 'number', type: 'number' }, assigneeId: { title: '负责人ID', order: 8, view: 'text', type: 'string' }, @@ -225,8 +225,8 @@ export const superQuerySchema = { endTime: { title: '结束时间', order: 12, view: 'datetime', type: 'string' }, completeTime: { title: '完成时间', order: 13, view: 'datetime', type: 'string' }, type: { title: '类型', order: 14, view: 'text', type: 'string' }, - subTaskCount: { title: '子任务数', order: 15, view: 'number', type: 'number' }, - completedSubTaskCount: { title: '子任务完成数', order: 16, view: 'number', type: 'number' }, + subTaskCount: { title: '子事项数', order: 15, view: 'number', type: 'number' }, + completedSubTaskCount: { title: '子事项完成数', order: 16, view: 'number', type: 'number' }, }, }, }; @@ -237,13 +237,13 @@ export function getBpmFormSchema(_formData): FormSchema[] { export const createTaskFormSchema: FormSchema[] = [ { - label: '任务标题', + label: '事项标题', field: 'taskName', component: 'Input', required: true, }, { - label: '任务描述', + label: '事项描述', field: 'taskDesc', component: 'InputTextArea', componentProps: { rows: 3 }, @@ -305,12 +305,12 @@ export function getCreateListFormSchema(userSecurityLevel: number): FormSchema[] if (!userSecurityLevel) userSecurityLevel = 3; return [ { - label: '清单名称', + label: '计划名称', field: 'tasklistName', component: 'Input', required: true, componentProps: { - placeholder: '请输入清单名称', + placeholder: '请输入计划名称', }, }, { @@ -331,7 +331,7 @@ export function getCreateListFormSchema(userSecurityLevel: number): FormSchema[] export const mockTaskListGroups: TaskListGroup[] = [ { id: 'tlg-1', - name: '任务清单', + name: '计划管理', pid: '0', hasChild: '1', type: 0, diff --git a/src/views/tasklist/components/CollaboratorModal.vue b/src/views/tasklist/components/CollaboratorModal.vue index a3f536b..d68a85b 100644 --- a/src/views/tasklist/components/CollaboratorModal.vue +++ b/src/views/tasklist/components/CollaboratorModal.vue @@ -103,7 +103,7 @@ + + diff --git a/src/views/taskApprovalOpinion/components/TaskApprovalOpinionForm.vue b/src/views/taskApprovalOpinion/components/TaskApprovalOpinionForm.vue new file mode 100644 index 0000000..da63314 --- /dev/null +++ b/src/views/taskApprovalOpinion/components/TaskApprovalOpinionForm.vue @@ -0,0 +1,243 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/taskApprovalOpinion/components/TaskApprovalOpinionModal.vue b/src/views/taskApprovalOpinion/components/TaskApprovalOpinionModal.vue new file mode 100644 index 0000000..86ba484 --- /dev/null +++ b/src/views/taskApprovalOpinion/components/TaskApprovalOpinionModal.vue @@ -0,0 +1,81 @@ + + + + + 取消 + 确认 + + + + + + + +
+ 今天有 8 项待办、 + 2 项即将超时 +