From 72d3ccbc6dc12cf3589961133d2fb23a03c0c7c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=98huanghaiixia=E2=80=99?= <980486410@.com> Date: Tue, 10 Feb 2026 15:08:56 +0800 Subject: [PATCH] =?UTF-8?q?=E9=94=80=E5=94=AE=E7=BB=93=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/dayPlan/PngSettleHdr/index.ts | 12 ++ src/components/common/measureListModal.vue | 4 +- .../common/priceComposeListModal.vue | 29 +++- .../dayPlan/Demand/components/basicForm.vue | 4 +- .../dayPlan/PngSettleHdr/components/config.ts | 2 +- .../PngSettleHdr/components/createForm.vue | 64 ++++++-- src/views/dayPlan/PngSettleHdr/index.vue | 155 ++++++++++++++---- 7 files changed, 207 insertions(+), 63 deletions(-) diff --git a/src/api/dayPlan/PngSettleHdr/index.ts b/src/api/dayPlan/PngSettleHdr/index.ts index af3da97..9adc1af 100644 --- a/src/api/dayPlan/PngSettleHdr/index.ts +++ b/src/api/dayPlan/PngSettleHdr/index.ts @@ -10,9 +10,21 @@ enum Api { LngPngSettleHdr = '/dayPlan/pngSettleHdr', PageAdd = '/magic-api/dayPlan/pngSettleSalesHdrSelectPage', date = '/magic-api/dayPlan/pngSettleSalesHdrSelectDateTo', + DtlList = '/magic-api/dayPlan/pngSettleSalesHdrDtlList', +} +export async function getLngPngSettleHdrDtlList(params, mode: ErrorMessageMode = 'modal') { + return defHttp.get( + { + url: Api.DtlList, + params, + }, + { + errorMessageMode: mode, + }, + ); } export async function getLngPngSettleHdrDate(params, mode: ErrorMessageMode = 'modal') { return defHttp.get( diff --git a/src/components/common/measureListModal.vue b/src/components/common/measureListModal.vue index ae7b464..4237bb9 100644 --- a/src/components/common/measureListModal.vue +++ b/src/components/common/measureListModal.vue @@ -72,12 +72,14 @@ selectType: { type: String, default: 'checkbox' }, }); + const searchParams = ref({}) const tableData = ref([]) const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => { setModalProps({ confirmLoading: false }); isUpdate.value = !!data?.isUpdate; + searchParams.value = data.searchParams || {} }); const [registerTable, { getDataSource, setTableData, updateTableDataRecord, reload }] = useTable({ @@ -96,7 +98,7 @@ }, immediate: false, // 设置为不立即调用 beforeFetch: (params) => { - return { ...params,page:params.limit}; + return { ...params,page:params.limit,...searchParams.value}; }, afterFetch: (res) => { tableData.value = res || [] diff --git a/src/components/common/priceComposeListModal.vue b/src/components/common/priceComposeListModal.vue index 7e1fd3a..14f49f8 100644 --- a/src/components/common/priceComposeListModal.vue +++ b/src/components/common/priceComposeListModal.vue @@ -3,6 +3,9 @@ @@ -49,6 +54,7 @@ import ApprovalProcess from '/@/views/workflow/task/components/ApprovalProcess.vue'; import { getDraftInfo } from '/@/api/workflow/process'; import { isValidJSON } from '/@/utils/event/design'; + import { downloadByUrl } from '/@/utils/file/download'; import PngSettleHdrModal from './components/PngSettleHdrModal.vue'; import {formConfig, searchFormSchema, columns } from './components/config'; @@ -57,6 +63,9 @@ import { DataFormat, FormatOption, DATE_FORMAT, FormatType } from '/@/utils/dataFormat'; import useEventBus from '/@/hooks/event/useEventBus'; import { cloneDeep } from 'lodash-es'; + import { useUserStore } from '/@/store/modules/user'; + const userStore = useUserStore(); + const userInfo = userStore.getUserInfo; const { bus, CREATE_FLOW, FLOW_PROCESSED, FORM_LIST_MODIFIED } = useEventBus(); @@ -72,7 +81,7 @@ const tableRef = ref(); //所有按钮 - const buttons = ref([{"isUse":true,"name":"新增","code":"add","icon":"ant-design:plus-outlined","isDefault":true,"type":"primary"},{"isUse":true,"name":"编辑","code":"edit","icon":"ant-design:form-outlined","isDefault":true},{"isUse":true,"name":"生成对账单","code":"check","icon":"ant-design:check-outlined","isDefault":true},{"isUse":true,"name":"取消结算","code":"cancel","icon":"ant-design:close-outlined","isDefault":false},{"isUse":true,"name":"刷新","code":"refresh","icon":"ant-design:reload-outlined","isDefault":true},{"isUse":true,"name":"查看","code":"view","icon":"ant-design:eye-outlined","isDefault":true},{"isUse":true,"name":"发起审批","code":"startwork","icon":"ant-design:form-outlined","isDefault":true},{"isUse":true,"name":"查看流转记录","code":"flowRecord","icon":"ant-design:form-outlined","isDefault":true},{"isUse":true,"name":"审批","code":"approve","icon":"ant-design:check-outlined","isDefault":true},{"isUse":true,"name":"删除","code":"delete","icon":"ant-design:delete-outlined","isDefault":true}]); + const buttons = ref([{"isUse":true,"name":"新增","code":"add","icon":"ant-design:plus-outlined","isDefault":true,"type":"primary"},{"isUse":true,"name":"编辑","code":"edit","icon":"ant-design:form-outlined","isDefault":true},{"isUse":true,"name":"生成对账单","code":"check","icon":"ant-design:check-outlined","isDefault":true},{"isUse":true,"name":"取消结算","code":"cancel","icon":"ant-design:close-outlined","isDefault":false},{"isUse":true,"name":"刷新","code":"refresh","icon":"ant-design:reload-outlined","isDefault":true},{"isUse":true,"name":"查看","code":"view","icon":"ant-design:eye-outlined","isDefault":true},{"isUse":true,"name":"发起审批","code":"startwork","icon":"ant-design:form-outlined","isDefault":true},{"isUse":true,"name":"查看流转记录","code":"flowRecord","icon":"ant-design:form-outlined","isDefault":true},{"isUse":true,"name":"审批","code":"approve","icon":"ant-design:check-outlined","isDefault":true},{"isUse":true,"name":"删除","code":"delete","icon":"ant-design:delete-outlined","isDefault":true},{"name":"数据日志","code":"datalog","icon":"ant-design:profile-outlined","isDefault":true,"isUse":true}]); //展示在列表内的按钮 const actionButtons = ref(['view', 'edit','datalog', 'copyData', 'delete', 'startwork','flowRecord','approve']); const buttonConfigs = computed(()=>{ @@ -87,7 +96,7 @@ return buttonConfigs.value?.filter((x) => actionButtons.value.includes(x.code)); }); - const btnEvent = {add : handleAdd,edit : handleEdit,refresh : handleRefresh,view : handleView,startwork : handleStartwork,flowRecord : handleFlowRecord,approve : handleApprove,delete : handleDelete,} + const btnEvent = {add : handleAdd,edit : handleEdit,refresh : handleRefresh,view : handleView,startwork : handleStartwork,flowRecord : handleFlowRecord,approve : handleApprove,delete : handleDelete,datalog : handleDatalog} const { currentRoute } = useRouter(); const router = useRouter(); @@ -107,6 +116,7 @@ const visibleApproveProcessRef = ref(false); const taskIdRef = ref(''); + const selectedKeys = ref([]) const visibleFlowRecordModal = ref(false); const [registerModal, { openModal }] = useModal(); const formName=currentRoute.value.meta?.title @@ -141,6 +151,14 @@ dataIndex: 'action', slots: { customRender: 'action' }, }, + rowSelection: { + type: 'checkbox', + onChange: onSelectChange, + getCheckboxProps: (record) => ({ + disabled: record.approCode !== 'YSP', + name: record.name, + }), + }, tableSetting: { size: false, setting: false, @@ -166,6 +184,14 @@ deep: true, } ); + const handleDownload = (info) => { + const url = parseDownloadUrl(info.response ? info.response.data.fileUrl : info.fileUrl); + const fileName = info.response ? info.response.data.fileOrg : info.fileOrg; + downloadByUrl({ url, fileName: fileName}); + }; + function onSelectChange(rowKeys: string[]) { + selectedKeys.value = rowKeys; + } function dbClickRow(record) { if (!actionButtonConfig?.value.some(element => element.code == 'view')) { return; @@ -177,7 +203,9 @@ query: { taskId: taskIds[0], formName: formName, - formId:currentRoute.value.meta.formId + formId:currentRoute.value.meta.formId, + id: record.id, + readonly: 1, } }); } else if (schemaId && !taskIds && processId) { @@ -187,18 +215,32 @@ readonly: 1, taskId: '', formName: formName, - formId:currentRoute.value.meta.formId + formId:currentRoute.value.meta.formId, + id: record.id, } }); } else { - router.push({ - path: '/form/PngSettleHdr/' + record.id + '/viewForm', - query: { - formPath: 'dayPlan/PngSettleHdr', - formName: formName, - formId:currentRoute.value.meta.formId - } - }); + if (schemaIdComputedRef.value) { + router.push({ + path: '/flow/' + schemaIdComputedRef.value + '/0/createFlow', + query: { + formPath: 'dayPlan/PngSettleHdr', + formName: "查看"+formName, + formId:currentRoute.value.meta.formId, + type:'edit', + id: record.id, + disabled: 1, + } + }); + } + // router.push({ + // path: '/form/PngSettleHdr/' + record.id + '/viewForm', + // query: { + // formPath: 'dayPlan/PngSettleHdr', + // formName: formName, + // formId:currentRoute.value.meta.formId + // } + // }); } } @@ -233,18 +275,42 @@ } function handleEdit(record: Recordable) { - - router.push({ - path: '/form/PngSettleHdr/' + record.id + '/updateForm', - query: { + if (schemaIdComputedRef.value) { + router.push({ + path: '/flow/' + schemaIdComputedRef.value + '/0/createFlow', + query: { formPath: 'dayPlan/PngSettleHdr', - formName: formName, - formId:currentRoute.value.meta.formId - } - }); + formName: "编辑"+formName, + formId:currentRoute.value.meta.formId, + type:'edit', + id: record.id + } + }); + } else { + router.push({ + path: '/form/PngSettleHdr/' + record.id + '/updateForm', + query: { + formPath: 'dayPlan/PngSettleHdr', + formName: formName, + formId:currentRoute.value.meta.formId + } + }); + } + } function handleApprove () { - + const { processId, taskIds, schemaId } = record.workflowData || {}; + if (taskIds && taskIds.length) { + router.push({ + path: '/flow/' + schemaId + '/' + (processId || '') + '/approveFlow', + query: { + taskId: taskIds[0], + formName: "审批"+formName, + formId:currentRoute.value.meta.formId, + id: record.id + } + }); + } } function handleDelete(record: Recordable) { deleteList([record.id]); @@ -305,9 +371,10 @@ let actionsList: ActionItem[] = []; let editAndDelBtn: ActionItem[] = []; - let hasFlowRecord = false; + let approveBtn: ActionItem[] = []; + let hasFlowRecord = false; actionButtonConfig.value?.map((button) => { - if (['view', 'copyData'].includes(button.code)) { + if (['view', 'copyData','datalog'].includes(button.code)) { actionsList.push({ icon: button?.icon, tooltip: button?.name, @@ -322,21 +389,41 @@ onClick: btnEvent[button.code].bind(null, record), }); } + if (['approve'].includes(button.code)) { + approveBtn.push({ + icon: button?.icon, + tooltip: button?.name, + onClick: btnEvent[button.code].bind(null, record), + }); + } if (button.code === 'flowRecord') hasFlowRecord = true; }); - if (record.workflowData?.enabled) { - //与工作流有关联的表单 - if (record.workflowData.status) { - actionsList.unshift(setIndexFlowStatus(record.workflowData)) - } else { - actionsList = actionsList.concat(editAndDelBtn); - } - } else { - if (!record.workflowData?.processId) { - //与工作流没有关联的表单并且在当前页面新增的数据 如选择编辑、删除按钮则加上 - actionsList = actionsList.concat(editAndDelBtn); + // 未提交或已驳回 + if (record.approCode == 'WTJ' || record.approCode == 'YBH' ) { + actionsList = actionsList.concat(editAndDelBtn); + + if (record.createUserId !== userInfo.id) { + let idx = actionsList.findIndex(v =>v.tooltip == '删除') + idx > -1 && actionsList.splice(idx, 1) } } + // 审批中SPZ + if (record.workflowData?.editable) { + actionsList = actionsList.concat(approveBtn); + } + // if (record.workflowData?.enabled) { + // //与工作流有关联的表单 + // if (record.workflowData.status) { + // actionsList.unshift(setIndexFlowStatus(record.workflowData)) + // } else { + // actionsList = actionsList.concat(editAndDelBtn); + // } + // } else { + // if (!record.workflowData?.processId) { + // //与工作流没有关联的表单并且在当前页面新增的数据 如选择编辑、删除按钮则加上 + // actionsList = actionsList.concat(editAndDelBtn); + // } + // } return actionsList; } function handleStartwork(record: Recordable) {