diff --git a/src/executor/open/form/detail/OrderView/index.tsx b/src/executor/open/form/detail/OrderView/index.tsx index e77c8b56302d9c72245fb58aa309ded4f4120f9b..c88d3fdbe23fe2f89a6e579b7c8bdad7aabe8684 100644 --- a/src/executor/open/form/detail/OrderView/index.tsx +++ b/src/executor/open/form/detail/OrderView/index.tsx @@ -118,8 +118,9 @@ const OrderView: React.FC<{ ? props.form : { name: props.thingData.remark, - attributes:resultFields + attributes: resultFields, }, + resultFields, ) } /> diff --git a/src/executor/tools/workForm/detail.tsx b/src/executor/tools/workForm/detail.tsx index 18b75128ea5988662a4dd955be8410e83f4700c9..093aa146cedcfef5a69fd991677869f69f476f00 100644 --- a/src/executor/tools/workForm/detail.tsx +++ b/src/executor/tools/workForm/detail.tsx @@ -481,8 +481,17 @@ const DetailTable: React.FC = (props) => { } return acc; }, {} as Record); - const timeArray = detailFormFields.find((item)=>item.valueType === '时间段型') - if (asset&&timeArray && (asset.timeArray||asset.TtimeArray||asset[timeArray.id]||asset[timeArray.code])) { + const timeArray = detailFormFields.find( + (item) => item.valueType === '时间段型', + ); + if ( + asset && + timeArray && + (asset.timeArray || + asset.TtimeArray || + asset[timeArray.id] || + asset[timeArray.code]) + ) { isTimeArray = true; asset.pendingCount = 0; asset.orderStatus = 'COMPLETED'; @@ -1245,7 +1254,7 @@ const DetailTable: React.FC = (props) => { remoteOperations={getLoding()} differences={differences} onSelectionChanged={(e) => setSelectKeys(e.selectedRowKeys)} - onExporting={(e) => exportToExcel(e, props.form)} + onExporting={(e) => exportToExcel(e, props.form, loadFields())} toolbar={{ visible: true, items: [ diff --git a/src/pages/Work/index.tsx b/src/pages/Work/index.tsx index 51fb591beafa6c783e7c57aa28d79d305dbe1d1e..9c088dc53f40fec4c77bd0531a2cdc3053b28759 100755 --- a/src/pages/Work/index.tsx +++ b/src/pages/Work/index.tsx @@ -52,7 +52,7 @@ const WorkContent: React.FC = () => { // 弹窗内容 const [center, setCenter] = useState(<>); // 自动审批名称 - const [autoName, setAutoName>('-'); + const [autoName, setAutoName] = useState('-'); // 待处理订单数量 const [pendingOrderCount, setPendingOrderCount] = useState(0); // ID列表 diff --git a/src/utils/export.ts b/src/utils/export.ts index d0123d81f26c07de8c1bf00c7bda27fdb0cd0d39..26ba354d3c39bee97ce069701434136b942aa9b3 100644 --- a/src/utils/export.ts +++ b/src/utils/export.ts @@ -2,6 +2,9 @@ import { Workbook } from 'exceljs'; import { saveAs } from 'file-saver'; import { message } from 'antd'; import deepClone from 'lodash/cloneDeep'; +import { model } from '@/ts/base'; +import orgCtrl from '@/ts/controller'; +import { tryParseJson } from '@/utils/tools'; // 内部锁,防止重复导出 let isExporting = false; @@ -11,7 +14,7 @@ let isExporting = false; * @param e 导出的事件对象(来自 DataGrid 的 onExporting) * @param form 表单信息(包含表单名称和字段属性) */ -const exportToExcel = async (e: any, form: any) => { +const exportToExcel = async (e: any, form: any, fields: model.FieldModel[]) => { if (isExporting) { message.error('正在导出数据,请稍后再试!'); return; @@ -26,7 +29,7 @@ const exportToExcel = async (e: any, form: any) => { const workbook = new Workbook(); const worksheet = workbook.addWorksheet(form.name); // 获取所有时间段型字段 - const timePeriodFields = form.attributes.filter((f) => f.valueType === '时间段型'); + const timePeriodFields = fields.filter((f) => f.valueType === '时间段型'); let maxTimePeriodCount = 0; // 存储最大已选用时间段数量 // 获取可见列并过滤掉“操作”列 const columns = e.component @@ -80,11 +83,13 @@ const exportToExcel = async (e: any, form: any) => { : deepClone(result.data); // 获取分类型字段(用于处理层级显示) - const categoricalList = form.attributes.filter((attr: any) => + const categoricalList = fields.filter((attr: any) => attr.property ? attr.property.valueType === '分类型' : attr.valueType === '分类型', ); + const userTypeList = fields.filter((i) => i.valueType === '用户型'); + const linkTypeList = fields.filter((i) => i.valueType === '引用型'); // 仅导出选中行(如果选择了导出选中行) if (e.selectedRowsOnly) { @@ -92,8 +97,11 @@ const exportToExcel = async (e: any, form: any) => { data = data.filter((item: any) => selectedRowKeys.includes(item.id)); } - // 数据处理:映射字段值 - data.forEach((item: any) => { + // 正则表达式:包含中文字符 + const regex = /^.*[\u4e00-\u9fa5]+.*$/; + const regex1 = /^\d{18}$/; + + for (const item of data) { timePeriodFields.forEach((field) => { const periods = item[field.id]; if (Array.isArray(periods)) { @@ -119,6 +127,9 @@ const exportToExcel = async (e: any, form: any) => { }); for (const column of columns) { const categorical = categoricalList.find((i: any) => i.id === column.dataField); + //处理引用型 导出时 未展示具体名称问题 + const linkField = linkTypeList.find((its) => its.id === column.dataField); + const userType = userTypeList.find((i: any) => i.id === column.dataField); const valueMap = (column.lookup as any)?.valueMap; const items = (column.lookup as any)?.items; @@ -127,6 +138,35 @@ const exportToExcel = async (e: any, form: any) => { if (valueMap && column.dataField) { item[column.dataField] = findTextWithParent(item[column.dataField], items); } + } else if (userType) { + const user = + userTypeList.find((its) => its.id === column.dataField) ?? undefined; + + let entity: any; + if (user && regex1.test(item[user.id])) { + entity = + orgCtrl.user.findMetadata(item[user.id]) ?? + (await orgCtrl.user.findEntityAsync(item[user.id])); + } + if (user && column.dataField && !regex.test(item[user.id]) && item[user.id]) { + if (!entity) { + if (user.lookups && user.lookups.length > 0) { + item[user.id] = + user.lookups?.filter((i) => i.relevanceId == item[user.id])[0] + ?.text ?? + user.lookups?.filter((i) => i.value == item[user.id])[0]?.text; + } + } else { + item[column.dataField] = entity?.name ?? item[user.id]; + } + } + } else if (linkField && column.dataField && linkField.options?.nameAttribute) { + const linkData = tryParseJson(item[linkField.id]); + if (linkData && Array.isArray(linkData) && linkData.length > 0) { + item[linkField.id] = linkData + .map((i) => i[linkField.options!.nameAttribute!]) + .join(','); + } } else { // 普通字段映射 if (valueMap && column.dataField) { @@ -135,7 +175,7 @@ const exportToExcel = async (e: any, form: any) => { } } worksheet.addRow(item); - }); + } // 导出 Excel 文件 const buffer = await workbook.xlsx.writeBuffer();