gaoluyang
2026-10-16 268b3e77f3beaba03a1273d643d8aa4fa5db1c10
feat: 全量列表页接入 Excel 导入按钮与共享弹窗

Co-Authored-By: Claude Code <noreply@anthropic.com>
已添加2个文件
已修改218个文件
4826 ■■■■■ 文件已修改
src/api/ai/knowledge/knowledge/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/ai/model/apiKey/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/ai/model/model/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/bi/chart-config.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/bi/data-source-config.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/bi/decision/alert.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/bi/decision/kpi.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/bpm/businessAttach/index.ts 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/bpm/category/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/bpm/form/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/bpm/processExpression/index.ts 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/bpm/processListener/index.ts 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/bpm/userGroup/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/crm/business/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/crm/clue/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/crm/contact/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/crm/contract/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/crm/credit-rating/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/crm/salesTarget/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/erp/finance/account/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/erp/purchase/invoice/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/erp/purchase/order/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/erp/purchase/plan/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/erp/purchase/request/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/erp/purchase/supplier/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/erp/sale/order/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/hrm/attendance/holiday/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/hrm/attendance/rule/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/hrm/certificate/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/hrm/leave-type-config/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/hrm/performance-appraise/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/hrm/salary/employee-social-security/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/hrm/salary/social-security-scheme/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/hrm/salary/tax-rate-config/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/infra/config/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/infra/data-source-config/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/infra/job/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mdm/item/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mdm/unit/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/cal/plan/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/cal/team/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/dv/checkplan/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/dv/checkrecord/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/dv/machinery/type/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/dv/maintenrecord/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/dv/metering/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/dv/meteringcheck/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/dv/repair/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/dv/subject/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/md/autocode/rule/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/md/item/type/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/md/workstation/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/md/workstation/workshop/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pd/ctc-reel/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pd/ctc/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pd/product/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pd/project/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pd/tech-confirm/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/alternativeplan/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/card/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/emergencyplan/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/feedback/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/maintenance-plan/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/maintenancecalendar/index.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/mps/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/process/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/processdesign/parameter/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/processdesign/template/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/route/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/pro/workorder/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/qc/defect/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/qc/indicator/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/qc/ipqc/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/qc/iqc/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/qc/ncr/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/qc/oqc/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/qc/outsourcetest/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/qc/rqc/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/qc/template/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/tm/tool/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/tm/tool/type/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/arrivalnotice/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/barcode/config/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/equipmentreceipt/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/itemreceipt/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/miscissue/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/miscreceipt/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/outsourceissue/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/outsourcereceipt/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/packages/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/productissue/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/productreceipt/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/productsales/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/returnissue/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/returnsales/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/returnvendor/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/salesnotice/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/transfer/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/warehouse/area/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/warehouse/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/mes/wm/warehouse/location/index.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/srm/supplier/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/srm/supplierCertificate/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/dict/data/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/dict/type/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/menu/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/notice/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/role/index.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/import-modal/import-modal.vue 123 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/import-modal/index.ts 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ai/knowledge/knowledge/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ai/model/apiKey/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ai/model/model/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basicData/mdm/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basicData/mdm/unit/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bi/config/chart/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bi/config/data-source/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bi/decision/alert-rule/index.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bi/decision/kpi-config/index.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/businessAttach/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/category/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/form/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/group/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/processExpression/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/processListener/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/business/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/clue/index.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/contact/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/contract/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/credit-rating/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/salesTarget/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/finance/account/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/invoice/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/order/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/plan/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/request/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/supplier/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/sale/order/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/attendance/holiday/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/attendance/rule/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/certificate/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/performance-appraise/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/salary/employee-social-security/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/salary/leave-type-config/index.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/salary/social-security-scheme/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/salary/tax-rate-config/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infra/config/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infra/dataSourceConfig/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infra/job/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/cal/plan/index.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/cal/team/index.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/checkplan/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/checkrecord/index.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/machinery/type/index.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/maintenrecord/index.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/metering/index.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/meteringcheck/index.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/repair/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/subject/index.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/md/autocode/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/md/item/type/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/md/workstation/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/md/workstation/workshop/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pd/ctc-reel/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pd/ctc/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pd/product/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pd/project/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pd/tech-confirm/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/alternativeplan/index.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/card/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/emergencyplan/index.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/feedback/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/maintenance-plan/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/maintenancecalendar/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/mps/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/process/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/route/index.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/workorder/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/process-design/parameter/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/process-design/process/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/process-design/route/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/process-design/template/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/defect/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/indicator/index.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/ipqc/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/iqc/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/ncr/index.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/oqc/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/outsourcetest/index.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/rqc/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/template/index.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/tm/tool/index.vue 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/tm/tool/type/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/srm/supplier/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/srm/supplierCertificate/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dict/modules/data-grid.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dict/modules/type-grid.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/menu/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/notice/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/role/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/arrivalnotice/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/barcode/config/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/equipmentreceipt/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/itemreceipt/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/miscissue/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/miscreceipt/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/outsourceissue/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/outsourcereceipt/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/packages/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/productissue/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/productreceipt/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/productsales/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/returnissue/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/returnsales/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/returnvendor/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/salesnotice/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/transfer/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/warehouse/area/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/warehouse/index.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/warehouse/location/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/ai/knowledge/knowledge/index.ts
@@ -49,3 +49,16 @@
    '/ai/knowledge/simple-list',
  );
}
/** ä¸‹è½½çŸ¥è¯†åº“导入模板 */
export function importKnowledgeTemplate() {
  return requestClient.download('/ai/knowledge/get-import-template');
}
/** å¯¼å…¥çŸ¥è¯†åº“ */
export function importKnowledge(file: File, updateSupport: boolean) {
  return requestClient.upload('/ai/knowledge/import', {
    file,
    updateSupport,
  });
}
src/api/ai/model/apiKey/index.ts
@@ -47,3 +47,16 @@
export function deleteApiKey(id: number) {
  return requestClient.delete(`/ai/api-key/delete?id=${id}`);
}
/** ä¸‹è½½ API å¯†é’¥å¯¼å…¥æ¨¡æ¿ */
export function importApiKeyTemplate() {
  return requestClient.download('/ai/api-key/get-import-template');
}
/** å¯¼å…¥ API å¯†é’¥ */
export function importApiKey(file: File, updateSupport: boolean) {
  return requestClient.upload('/ai/api-key/import', {
    file,
    updateSupport,
  });
}
src/api/ai/model/model/index.ts
@@ -54,3 +54,16 @@
export function deleteModel(id: number) {
  return requestClient.delete(`/ai/model/delete?id=${id}`);
}
/** ä¸‹è½½æ¨¡åž‹å¯¼å…¥æ¨¡æ¿ */
export function importModelTemplate() {
  return requestClient.download('/ai/model/get-import-template');
}
/** å¯¼å…¥æ¨¡åž‹ */
export function importModel(file: File, updateSupport: boolean) {
  return requestClient.upload('/ai/model/import', {
    file,
    updateSupport,
  });
}
src/api/bi/chart-config.ts
@@ -50,3 +50,16 @@
export function deleteChartConfig(id: number) {
  return requestClient.delete<boolean>('/bi/chart-config/delete', { params: { id } });
}
/** ä¸‹è½½å›¾è¡¨é…ç½®å¯¼å…¥æ¨¡æ¿ */
export function importChartConfigTemplate() {
  return requestClient.download('/bi/chart-config/get-import-template');
}
/** å¯¼å…¥å›¾è¡¨é…ç½® */
export function importChartConfig(file: File, updateSupport: boolean) {
  return requestClient.upload('/bi/chart-config/import', {
    file,
    updateSupport,
  });
}
src/api/bi/data-source-config.ts
@@ -38,3 +38,16 @@
export function deleteDataSourceConfig(id: number) {
  return requestClient.delete<boolean>('/bi/data-source-config/delete', { params: { id } });
}
/** ä¸‹è½½æ•°æ®æºé…ç½®å¯¼å…¥æ¨¡æ¿ */
export function importDataSourceConfigTemplate() {
  return requestClient.download('/bi/data-source-config/get-import-template');
}
/** å¯¼å…¥æ•°æ®æºé…ç½® */
export function importDataSourceConfig(file: File, updateSupport: boolean) {
  return requestClient.upload('/bi/data-source-config/import', {
    file,
    updateSupport,
  });
}
src/api/bi/decision/alert.ts
@@ -65,4 +65,17 @@
export function deleteAlertRule(id: number) {
  return requestClient.delete('/bi/decision/alert-rule/delete', { params: { id } });
}
/** ä¸‹è½½é¢„警规则导入模板 */
export function importAlertRuleTemplate() {
  return requestClient.download('/bi/decision/alert-rule/get-import-template');
}
/** å¯¼å…¥é¢„警规则 */
export function importAlertRule(file: File, updateSupport: boolean) {
  return requestClient.upload('/bi/decision/alert-rule/import', {
    file,
    updateSupport,
  });
}
src/api/bi/decision/kpi.ts
@@ -116,4 +116,17 @@
export function deleteKpiDefinition(id: number) {
  return requestClient.delete('/bi/decision/kpi-definition/delete', { params: { id } });
}
/** ä¸‹è½½KPI指标导入模板 */
export function importKpiDefinitionTemplate() {
  return requestClient.download('/bi/decision/kpi-definition/get-import-template');
}
/** å¯¼å…¥KPI指标 */
export function importKpiDefinition(file: File, updateSupport: boolean) {
  return requestClient.upload('/bi/decision/kpi-definition/import', {
    file,
    updateSupport,
  });
}
src/api/bpm/businessAttach/index.ts
@@ -50,3 +50,19 @@
    `/bpm/business-attach/delete?id=${id}`,
  );
}
/** ä¸‹è½½ä¸šåŠ¡é™„ä»¶é…ç½®å¯¼å…¥æ¨¡æ¿ */
export async function importBusinessAttachTemplate() {
  return requestClient.download('/bpm/business-attach/get-import-template');
}
/** å¯¼å…¥ä¸šåŠ¡é™„ä»¶é…ç½® */
export async function importBusinessAttach(
  file: File,
  updateSupport: boolean,
) {
  return requestClient.upload('/bpm/business-attach/import', {
    file,
    updateSupport,
  });
}
src/api/bpm/category/index.ts
@@ -58,3 +58,16 @@
    `/bpm/category/update-sort-batch?ids=${params}`,
  );
}
/** ä¸‹è½½æµç¨‹åˆ†ç±»å¯¼å…¥æ¨¡æ¿ */
export async function importCategoryTemplate() {
  return requestClient.download('/bpm/category/get-import-template');
}
/** å¯¼å…¥æµç¨‹åˆ†ç±» */
export async function importCategory(file: File, updateSupport: boolean) {
  return requestClient.upload('/bpm/category/import', {
    file,
    updateSupport,
  });
}
src/api/bpm/form/index.ts
@@ -46,3 +46,16 @@
export async function getFormSimpleList() {
  return requestClient.get<BpmFormApi.Form[]>('/bpm/form/simple-list');
}
/** ä¸‹è½½åŠ¨æ€è¡¨å•å¯¼å…¥æ¨¡æ¿ */
export async function importFormTemplate() {
  return requestClient.download('/bpm/form/get-import-template');
}
/** å¯¼å…¥åŠ¨æ€è¡¨å• */
export async function importForm(file: File, updateSupport: boolean) {
  return requestClient.upload('/bpm/form/import', {
    file,
    updateSupport,
  });
}
src/api/bpm/processExpression/index.ts
@@ -53,3 +53,19 @@
    params,
  });
}
/** ä¸‹è½½æµç¨‹è¡¨è¾¾å¼å¯¼å…¥æ¨¡æ¿ */
export async function importProcessExpressionTemplate() {
  return requestClient.download('/bpm/process-expression/get-import-template');
}
/** å¯¼å…¥æµç¨‹è¡¨è¾¾å¼ */
export async function importProcessExpression(
  file: File,
  updateSupport: boolean,
) {
  return requestClient.upload('/bpm/process-expression/import', {
    file,
    updateSupport,
  });
}
src/api/bpm/processListener/index.ts
@@ -48,3 +48,19 @@
export async function deleteProcessListener(id: number) {
  return requestClient.delete<boolean>(`/bpm/process-listener/delete?id=${id}`);
}
/** ä¸‹è½½æµç¨‹ç›‘听器导入模板 */
export async function importProcessListenerTemplate() {
  return requestClient.download('/bpm/process-listener/get-import-template');
}
/** å¯¼å…¥æµç¨‹ç›‘听器 */
export async function importProcessListener(
  file: File,
  updateSupport: boolean,
) {
  return requestClient.upload('/bpm/process-listener/import', {
    file,
    updateSupport,
  });
}
src/api/bpm/userGroup/index.ts
@@ -51,3 +51,16 @@
    `/bpm/user-group/simple-list`,
  );
}
/** ä¸‹è½½ç”¨æˆ·ç»„导入模板 */
export async function importUserGroupTemplate() {
  return requestClient.download('/bpm/user-group/get-import-template');
}
/** å¯¼å…¥ç”¨æˆ·ç»„ */
export async function importUserGroup(file: File, updateSupport: boolean) {
  return requestClient.upload('/bpm/user-group/import', {
    file,
    updateSupport,
  });
}
src/api/crm/business/index.ts
@@ -115,6 +115,19 @@
  return requestClient.download('/crm/business/export-excel', { params });
}
/** ä¸‹è½½å•†æœºå¯¼å…¥æ¨¡æ¿ */
export function importBusinessTemplate() {
  return requestClient.download('/crm/business/get-import-template');
}
/** å¯¼å…¥å•†æœº */
export function importBusiness(file: File, updateSupport: boolean) {
  return requestClient.upload('/crm/business/import', {
    file,
    updateSupport,
  });
}
/** è”系人关联商机列表 */
export function getBusinessPageByContact(params: PageParam) {
  return requestClient.get<PageResult<CrmBusinessApi.Business>>(
src/api/crm/clue/index.ts
@@ -70,6 +70,19 @@
  return requestClient.download('/crm/clue/export-excel', { params });
}
/** ä¸‹è½½çº¿ç´¢å¯¼å…¥æ¨¡æ¿ */
export function importClueTemplate() {
  return requestClient.download('/crm/clue/get-import-template');
}
/** å¯¼å…¥çº¿ç´¢ */
export function importClue(file: File, updateSupport: boolean) {
  return requestClient.upload('/crm/clue/import', {
    file,
    updateSupport,
  });
}
/** çº¿ç´¢è½¬ç§» */
export function transferClue(data: CrmPermissionApi.BusinessTransferReqVO) {
  return requestClient.put('/crm/clue/transfer', data);
src/api/crm/contact/index.ts
@@ -99,6 +99,19 @@
  return requestClient.download('/crm/contact/export-excel', { params });
}
/** ä¸‹è½½è”系人导入模板 */
export function importContactTemplate() {
  return requestClient.download('/crm/contact/get-import-template');
}
/** å¯¼å…¥è”系人 */
export function importContact(file: File, updateSupport: boolean) {
  return requestClient.upload('/crm/contact/import', {
    file,
    updateSupport,
  });
}
/** èŽ·å¾—è”ç³»äººåˆ—è¡¨ï¼ˆç²¾ç®€ï¼‰ */
export function getSimpleContactList() {
  return requestClient.get<CrmContactApi.Contact[]>(
src/api/crm/contract/index.ts
@@ -134,6 +134,19 @@
  return requestClient.download('/crm/contract/export-excel', { params });
}
/** ä¸‹è½½åˆåŒå¯¼å…¥æ¨¡æ¿ */
export function importContractTemplate() {
  return requestClient.download('/crm/contract/get-import-template');
}
/** å¯¼å…¥åˆåŒ */
export function importContract(file: File, updateSupport: boolean) {
  return requestClient.upload('/crm/contract/import', {
    file,
    updateSupport,
  });
}
/**
 * æäº¤åˆåŒå®¡æ‰¹ï¼ˆæœªæäº¤ / å®¡æ ¸ä¸é€šè¿‡ â†’ å®¡æ‰¹ä¸­ï¼‰
 *
src/api/crm/credit-rating/index.ts
@@ -61,3 +61,16 @@
export function exportCreditRating(params: Record<string, unknown>) {
  return requestClient.download('/crm/credit-rating/export-excel', { params });
}
/** ä¸‹è½½ä¿¡ç”¨è¯„级导入模板 */
export function importCreditRatingTemplate() {
  return requestClient.download('/crm/credit-rating/get-import-template');
}
/** å¯¼å…¥ä¿¡ç”¨è¯„级 */
export function importCreditRating(file: File, updateSupport: boolean) {
  return requestClient.upload('/crm/credit-rating/import', {
    file,
    updateSupport,
  });
}
src/api/crm/salesTarget/index.ts
@@ -102,6 +102,19 @@
  return requestClient.download('/crm/sales-target/export-excel', { params });
}
/** ä¸‹è½½é”€å”®ç›®æ ‡å¯¼å…¥æ¨¡æ¿ */
export function importSalesTargetTemplate() {
  return requestClient.download('/crm/sales-target/get-import-template');
}
/** å¯¼å…¥é”€å”®ç›®æ ‡ */
export function importSalesTarget(file: File, updateSupport: boolean) {
  return requestClient.upload('/crm/sales-target/import', {
    file,
    updateSupport,
  });
}
/** æŸ¥è¯¢é”€å”®ç›®æ ‡è¾¾æˆåˆ†æž */
export function getSalesTargetAnalysis(
  params: CrmSalesTargetApi.AnalysisParams,
src/api/erp/finance/account/index.ts
@@ -59,3 +59,16 @@
export function exportAccount(params: any) {
  return requestClient.download('/erp/account/export-excel', { params });
}
/** ä¸‹è½½ç»“算账户导入模板 */
export function importAccountTemplate() {
  return requestClient.download('/erp/account/get-import-template');
}
/** å¯¼å…¥ç»“算账户 */
export function importAccount(file: File, updateSupport: boolean) {
  return requestClient.upload('/erp/account/import', {
    file,
    updateSupport,
  });
}
src/api/erp/purchase/invoice/index.ts
@@ -86,6 +86,19 @@
  return requestClient.download('/purchase/invoice/export-excel', { params });
}
/** ä¸‹è½½æ¥ç¥¨å¯¼å…¥æ¨¡æ¿ */
export function importPurchaseInvoiceTemplate() {
  return requestClient.download('/purchase/invoice/get-import-template');
}
/** å¯¼å…¥æ¥ç¥¨ */
export function importPurchaseInvoice(file: File, updateSupport: boolean) {
  return requestClient.upload('/purchase/invoice/import', {
    file,
    updateSupport,
  });
}
/** æŸ¥è¯¢æ¥ç¥¨ä¸‹æ‹‰åˆ—表(按供应商可选来票,已上传发票附件且剩余可付金额大于 0) */
export function getPurchaseInvoiceSimpleList(
  supplierId: number,
src/api/erp/purchase/order/index.ts
@@ -102,6 +102,19 @@
  return requestClient.download('/purchase/order/export-excel', { params });
}
/** ä¸‹è½½é‡‡è´­è®¢å•导入模板 */
export function importPurchaseOrderTemplate() {
  return requestClient.download('/purchase/order/get-import-template');
}
/** å¯¼å…¥é‡‡è´­è®¢å• */
export function importPurchaseOrder(file: File, updateSupport: boolean) {
  return requestClient.upload('/purchase/order/import', {
    file,
    updateSupport,
  });
}
/**
 * æäº¤é‡‡è´­è®¢å•审批(未提交/审核不通过 â†’ å®¡æ‰¹ä¸­ï¼‰
 *
src/api/erp/purchase/plan/index.ts
@@ -132,3 +132,16 @@
export function exportPurchasePlan(params: any) {
  return requestClient.download('/purchase/plan/export-excel', { params });
}
/** ä¸‹è½½é‡‡è´­è®¡åˆ’导入模板 */
export function importPurchasePlanTemplate() {
  return requestClient.download('/purchase/plan/get-import-template');
}
/** å¯¼å…¥é‡‡è´­è®¡åˆ’ */
export function importPurchasePlan(file: File, updateSupport: boolean) {
  return requestClient.upload('/purchase/plan/import', {
    file,
    updateSupport,
  });
}
src/api/erp/purchase/request/index.ts
@@ -121,3 +121,16 @@
export function exportPurchaseRequest(params: any) {
  return requestClient.download('/purchase/request/export-excel', { params });
}
/** ä¸‹è½½é‡‡è´­ç”³è¯·å¯¼å…¥æ¨¡æ¿ */
export function importPurchaseRequestTemplate() {
  return requestClient.download('/purchase/request/get-import-template');
}
/** å¯¼å…¥é‡‡è´­ç”³è¯· */
export function importPurchaseRequest(file: File, updateSupport: boolean) {
  return requestClient.upload('/purchase/request/import', {
    file,
    updateSupport,
  });
}
src/api/erp/purchase/supplier/index.ts
@@ -69,3 +69,16 @@
export function exportSupplier(params: any) {
  return requestClient.download('/erp/supplier/export-excel', { params });
}
/** ä¸‹è½½ä¾›åº”商导入模板 */
export function importSupplierTemplate() {
  return requestClient.download('/erp/supplier/get-import-template');
}
/** å¯¼å…¥ä¾›åº”商 */
export function importSupplier(file: File, updateSupport: boolean) {
  return requestClient.upload('/erp/supplier/import', {
    file,
    updateSupport,
  });
}
src/api/erp/sale/order/index.ts
@@ -110,6 +110,19 @@
  return requestClient.download('/erp/sale-order/export-excel', { params });
}
/** ä¸‹è½½é”€å”®è®¢å•导入模板 */
export function importSaleOrderTemplate() {
  return requestClient.download('/erp/sale-order/get-import-template');
}
/** å¯¼å…¥é”€å”®è®¢å• */
export function importSaleOrder(file: File, updateSupport: boolean) {
  return requestClient.upload('/erp/sale-order/import', {
    file,
    updateSupport,
  });
}
/** ä½œåºŸé”€å”®è®¢å• */
export function cancelSaleOrder(id: number) {
  return requestClient.put('/erp/sale-order/cancel', null, {
src/api/hrm/attendance/holiday/index.ts
@@ -49,4 +49,17 @@
/** å¯¼å‡ºèŠ‚å‡æ—¥ Excel */
export function exportAttendanceHoliday(params: any) {
  return requestClient.download('/hrm/attendance/holiday/export-excel', { params });
}
/** ä¸‹è½½èŠ‚å‡æ—¥å¯¼å…¥æ¨¡æ¿ */
export function importAttendanceHolidayTemplate() {
  return requestClient.download('/hrm/attendance/holiday/get-import-template');
}
/** å¯¼å…¥èŠ‚å‡æ—¥ */
export function importAttendanceHoliday(file: File, updateSupport: boolean) {
  return requestClient.upload('/hrm/attendance/holiday/import', {
    file,
    updateSupport,
  });
}
src/api/hrm/attendance/rule/index.ts
@@ -60,4 +60,17 @@
/** å¯¼å‡ºè€ƒå‹¤è§„则 Excel */
export function exportAttendanceRule(params: any) {
  return requestClient.download('/hrm/attendance/rule/export-excel', { params });
}
/** ä¸‹è½½è€ƒå‹¤è§„则导入模板 */
export function importAttendanceRuleTemplate() {
  return requestClient.download('/hrm/attendance/rule/get-import-template');
}
/** å¯¼å…¥è€ƒå‹¤è§„则 */
export function importAttendanceRule(file: File, updateSupport: boolean) {
  return requestClient.upload('/hrm/attendance/rule/import', {
    file,
    updateSupport,
  });
}
src/api/hrm/certificate/index.ts
@@ -50,3 +50,16 @@
    { params },
  );
}
/** ä¸‹è½½è¯ä¹¦èµ„质导入模板 */
export function importCertificateTemplate() {
  return requestClient.download('/hrm/certificate/get-import-template');
}
/** å¯¼å…¥è¯ä¹¦èµ„è´¨ */
export function importCertificate(file: File, updateSupport: boolean) {
  return requestClient.upload('/hrm/certificate/import', {
    file,
    updateSupport,
  });
}
src/api/hrm/leave-type-config/index.ts
@@ -25,4 +25,17 @@
/** æ›´æ–°è¯·å‡ç±»åž‹é…ç½® */
export function updateLeaveTypeConfig(data: HrmLeaveTypeConfigApi.LeaveTypeConfig) {
  return requestClient.put('/hrm/leave-type-config/update', data);
}
/** ä¸‹è½½è¯·å‡ç±»åž‹æ‰£æ¬¾é…ç½®å¯¼å…¥æ¨¡æ¿ */
export function importLeaveTypeConfigTemplate() {
  return requestClient.download('/hrm/leave-type-config/get-import-template');
}
/** å¯¼å…¥è¯·å‡ç±»åž‹æ‰£æ¬¾é…ç½® */
export function importLeaveTypeConfig(file: File, updateSupport: boolean) {
  return requestClient.upload('/hrm/leave-type-config/import', {
    file,
    updateSupport,
  });
}
src/api/hrm/performance-appraise/index.ts
@@ -145,6 +145,19 @@
  });
}
/** ä¸‹è½½ç»©æ•ˆè€ƒæ ¸æ–¹æ¡ˆå¯¼å…¥æ¨¡æ¿ */
export function importAppraiseTemplate() {
  return requestClient.download('/hrm/performance-appraise/get-import-template');
}
/** å¯¼å…¥ç»©æ•ˆè€ƒæ ¸æ–¹æ¡ˆ */
export function importAppraise(file: File, updateSupport: boolean) {
  return requestClient.upload('/hrm/performance-appraise/import', {
    file,
    updateSupport,
  });
}
/** èŽ·å–è€ƒæ ¸ç»“æžœåˆ†é¡µ */
export function getAppraiseResultPage(params: PageParam) {
  return requestClient.get<PageResult<HrmPerformanceAppraiseApi.AppraiseResult>>(
src/api/hrm/salary/employee-social-security/index.ts
@@ -74,4 +74,17 @@
/** åˆ é™¤å‘˜å·¥ç¤¾ä¿å…¬ç§¯é‡‘档案 */
export function deleteEmployeeSocialSecurity(id: number) {
  return requestClient.delete(`/hrm/salary/employee-social-security/delete?id=${id}`);
}
/** ä¸‹è½½å‘˜å·¥ç¤¾ä¿å…¬ç§¯é‡‘档案导入模板 */
export function importEmployeeSocialSecurityTemplate() {
  return requestClient.download('/hrm/salary/employee-social-security/get-import-template');
}
/** å¯¼å…¥å‘˜å·¥ç¤¾ä¿å…¬ç§¯é‡‘档案 */
export function importEmployeeSocialSecurity(file: File, updateSupport: boolean) {
  return requestClient.upload('/hrm/salary/employee-social-security/import', {
    file,
    updateSupport,
  });
}
src/api/hrm/salary/social-security-scheme/index.ts
@@ -63,3 +63,16 @@
export function deleteSocialSecurityScheme(id: number) {
  return requestClient.delete(`/hrm/salary/social-security-scheme/delete?id=${id}`);
}
/** ä¸‹è½½ç¤¾ä¿å…¬ç§¯é‡‘方案导入模板 */
export function importSocialSecuritySchemeTemplate() {
  return requestClient.download('/hrm/salary/social-security-scheme/get-import-template');
}
/** å¯¼å…¥ç¤¾ä¿å…¬ç§¯é‡‘方案 */
export function importSocialSecurityScheme(file: File, updateSupport: boolean) {
  return requestClient.upload('/hrm/salary/social-security-scheme/import', {
    file,
    updateSupport,
  });
}
src/api/hrm/salary/tax-rate-config/index.ts
@@ -53,4 +53,17 @@
/** åˆ é™¤ä¸ªç¨Žç¨ŽçŽ‡é…ç½® */
export function deleteTaxRateConfig(id: number) {
  return requestClient.delete(`/hrm/salary/tax-rate-config/delete?id=${id}`);
}
/** ä¸‹è½½ä¸ªç¨Žç¨ŽçŽ‡é…ç½®å¯¼å…¥æ¨¡æ¿ */
export function importTaxRateConfigTemplate() {
  return requestClient.download('/hrm/salary/tax-rate-config/get-import-template');
}
/** å¯¼å…¥ä¸ªç¨Žç¨ŽçŽ‡é…ç½® */
export function importTaxRateConfig(file: File, updateSupport: boolean) {
  return requestClient.upload('/hrm/salary/tax-rate-config/import', {
    file,
    updateSupport,
  });
}
src/api/infra/config/index.ts
@@ -65,3 +65,16 @@
    params,
  });
}
/** ä¸‹è½½å‚数导入模板 */
export function importConfigTemplate() {
  return requestClient.download('/infra/config/get-import-template');
}
/** å¯¼å…¥å‚æ•° */
export function importConfig(file: File, updateSupport: boolean) {
  return requestClient.upload('/infra/config/import', {
    file,
    updateSupport,
  });
}
src/api/infra/data-source-config/index.ts
@@ -51,3 +51,16 @@
    `/infra/data-source-config/delete-list?ids=${ids.join(',')}`,
  );
}
/** ä¸‹è½½æ•°æ®æºé…ç½®å¯¼å…¥æ¨¡æ¿ */
export function importDataSourceConfigTemplate() {
  return requestClient.download('/infra/data-source-config/get-import-template');
}
/** å¯¼å…¥æ•°æ®æºé…ç½® */
export function importDataSourceConfig(file: File, updateSupport: boolean) {
  return requestClient.upload('/infra/data-source-config/import', {
    file,
    updateSupport,
  });
}
src/api/infra/job/index.ts
@@ -80,3 +80,16 @@
export function syncJob() {
  return requestClient.post('/infra/job/sync');
}
/** ä¸‹è½½å®šæ—¶ä»»åŠ¡å¯¼å…¥æ¨¡æ¿ */
export function importJobTemplate() {
  return requestClient.download('/infra/job/get-import-template');
}
/** å¯¼å…¥å®šæ—¶ä»»åŠ¡ */
export function importJob(file: File, updateSupport: boolean) {
  return requestClient.upload('/infra/job/import', {
    file,
    updateSupport,
  });
}
src/api/mdm/item/index.ts
@@ -116,3 +116,16 @@
export function exportItem(params: Partial<MdmItemApi.Item>) {
  return requestClient.download('/mdm/item/export-excel', { params });
}
/** ä¸‹è½½ç‰©æ–™å¯¼å…¥æ¨¡æ¿ */
export function importItemTemplate() {
  return requestClient.download('/mdm/item/get-import-template');
}
/** å¯¼å…¥ç‰©æ–™ */
export function importItem(file: File, updateSupport: boolean) {
  return requestClient.upload('/mdm/item/import', {
    file,
    updateSupport,
  });
}
src/api/mdm/unit/index.ts
@@ -47,3 +47,16 @@
export function deleteUnit(id: number) {
  return requestClient.delete(`/mdm/unit/delete?id=${id}`);
}
/** ä¸‹è½½è®¡é‡å•位导入模板 */
export function importUnitTemplate() {
  return requestClient.download('/mdm/unit/get-import-template');
}
/** å¯¼å…¥è®¡é‡å•位 */
export function importUnit(file: File, updateSupport: boolean) {
  return requestClient.upload('/mdm/unit/import', {
    file,
    updateSupport,
  });
}
src/api/mes/cal/plan/index.ts
@@ -57,3 +57,16 @@
export function exportPlan(params: any) {
  return requestClient.download('/mes/cal/plan/export-excel', { params });
}
/** ä¸‹è½½æŽ’班计划导入模板 */
export function importPlanTemplate() {
  return requestClient.download('/mes/cal/plan/get-import-template');
}
/** å¯¼å…¥æŽ’班计划 */
export function importPlan(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/cal/plan/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/cal/team/index.ts
@@ -51,3 +51,16 @@
export function exportTeam(params: any) {
  return requestClient.download('/mes/cal/team/export-excel', { params });
}
/** ä¸‹è½½ç­ç»„导入模板 */
export function importTeamTemplate() {
  return requestClient.download('/mes/cal/team/get-import-template');
}
/** å¯¼å…¥ç­ç»„ */
export function importTeam(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/cal/team/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/dv/checkplan/index.ts
@@ -63,3 +63,16 @@
export function exportCheckPlan(params: any) {
  return requestClient.download('/mes/dv/check-plan/export-excel', { params });
}
/** ä¸‹è½½ç‚¹æ£€ä¿å…»æ–¹æ¡ˆå¯¼å…¥æ¨¡æ¿ */
export function importCheckPlanTemplate() {
  return requestClient.download('/mes/dv/check-plan/get-import-template');
}
/** å¯¼å…¥ç‚¹æ£€ä¿å…»æ–¹æ¡ˆ */
export function importCheckPlan(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/dv/check-plan/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/dv/checkrecord/index.ts
@@ -63,3 +63,16 @@
    params,
  });
}
/** ä¸‹è½½è®¾å¤‡ç‚¹æ£€è®°å½•导入模板 */
export function importCheckRecordTemplate() {
  return requestClient.download('/mes/dv/check-record/get-import-template');
}
/** å¯¼å…¥è®¾å¤‡ç‚¹æ£€è®°å½• */
export function importCheckRecord(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/dv/check-record/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/dv/machinery/type/index.ts
@@ -51,3 +51,16 @@
export function deleteMachineryType(id: number) {
  return requestClient.delete(`/mes/dv/machinery-type/delete?id=${id}`);
}
/** ä¸‹è½½è®¾å¤‡ç±»åž‹å¯¼å…¥æ¨¡æ¿ */
export function importMachineryTypeTemplate() {
  return requestClient.download('/mes/dv/machinery-type/get-import-template');
}
/** å¯¼å…¥è®¾å¤‡ç±»åž‹ */
export function importMachineryType(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/dv/machinery-type/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/dv/maintenrecord/index.ts
@@ -63,3 +63,16 @@
    params,
  });
}
/** ä¸‹è½½è®¾å¤‡ä¿å…»è®°å½•导入模板 */
export function importMaintenRecordTemplate() {
  return requestClient.download('/mes/dv/mainten-record/get-import-template');
}
/** å¯¼å…¥è®¾å¤‡ä¿å…»è®°å½• */
export function importMaintenRecord(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/dv/mainten-record/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/dv/metering/index.ts
@@ -70,3 +70,16 @@
    '/mes/dv/metering/simple-list',
  );
}
/** ä¸‹è½½è®¡é‡å™¨å…·å¯¼å…¥æ¨¡æ¿ */
export function importMeteringTemplate() {
  return requestClient.download('/mes/dv/metering/get-import-template');
}
/** å¯¼å…¥è®¡é‡å™¨å…· */
export function importMetering(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/dv/metering/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/dv/meteringcheck/index.ts
@@ -58,3 +58,16 @@
    params,
  });
}
/** ä¸‹è½½è®¡é‡æ£€æµ‹è®°å½•导入模板 */
export function importMeteringCheckTemplate() {
  return requestClient.download('/mes/dv/metering-check/get-import-template');
}
/** å¯¼å…¥è®¡é‡æ£€æµ‹è®°å½• */
export function importMeteringCheck(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/dv/metering-check/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/dv/repair/index.ts
@@ -79,3 +79,16 @@
export function finishRepair(id: number, result: number) {
  return requestClient.put(`/mes/dv/repair/finish?id=${id}&result=${result}`);
}
/** ä¸‹è½½ç»´ä¿®å·¥å•导入模板 */
export function importRepairTemplate() {
  return requestClient.download('/mes/dv/repair/get-import-template');
}
/** å¯¼å…¥ç»´ä¿®å·¥å• */
export function importRepair(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/dv/repair/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/dv/subject/index.ts
@@ -58,3 +58,16 @@
export function exportSubject(params: any) {
  return requestClient.download('/mes/dv/subject/export-excel', { params });
}
/** ä¸‹è½½ç‚¹æ£€ä¿å…»é¡¹ç›®å¯¼å…¥æ¨¡æ¿ */
export function importSubjectTemplate() {
  return requestClient.download('/mes/dv/subject/get-import-template');
}
/** å¯¼å…¥ç‚¹æ£€ä¿å…»é¡¹ç›® */
export function importSubject(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/dv/subject/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/md/autocode/rule/index.ts
@@ -55,3 +55,16 @@
    params,
  });
}
/** ä¸‹è½½ç¼–码规则导入模板 */
export function importAutoCodeRuleTemplate() {
  return requestClient.download('/mes/md/auto-code-rule/get-import-template');
}
/** å¯¼å…¥ç¼–码规则 */
export function importAutoCodeRule(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/md/auto-code-rule/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/md/item/type/index.ts
@@ -52,3 +52,16 @@
export function deleteItemType(id: number) {
  return requestClient.delete(`/mes/md/item-type/delete?id=${id}`);
}
/** ä¸‹è½½ç‰©æ–™äº§å“åˆ†ç±»å¯¼å…¥æ¨¡æ¿ */
export function importItemTypeTemplate() {
  return requestClient.download('/mes/md/item-type/get-import-template');
}
/** å¯¼å…¥ç‰©æ–™äº§å“åˆ†ç±» */
export function importItemType(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/md/item-type/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/md/workstation/index.ts
@@ -56,3 +56,16 @@
export function exportWorkstation(params: any) {
  return requestClient.download('/mes/md-workstation/export-excel', { params });
}
/** ä¸‹è½½å·¥ä½œç«™å¯¼å…¥æ¨¡æ¿ */
export function importWorkstationTemplate() {
  return requestClient.download('/mes/md-workstation/get-import-template');
}
/** å¯¼å…¥å·¥ä½œç«™ */
export function importWorkstation(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/md-workstation/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/md/workstation/workshop/index.ts
@@ -58,3 +58,16 @@
export function exportWorkshop(params: any) {
  return requestClient.download('/mes/md-workshop/export-excel', { params });
}
/** ä¸‹è½½è½¦é—´å¯¼å…¥æ¨¡æ¿ */
export function importWorkshopTemplate() {
  return requestClient.download('/mes/md-workshop/get-import-template');
}
/** å¯¼å…¥è½¦é—´ */
export function importWorkshop(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/md-workshop/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pd/ctc-reel/index.ts
@@ -58,3 +58,16 @@
export function deleteCtcReel(id: number) {
  return requestClient.delete(`/mes/pd/ctc-reel/delete?id=${id}`);
}
/** ä¸‹è½½ç›˜å…·è®¡ç®—记录导入模板 */
export function importCtcReelTemplate() {
  return requestClient.download('/mes/pd/ctc-reel/get-import-template');
}
/** å¯¼å…¥ç›˜å…·è®¡ç®—记录 */
export function importCtcReel(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pd/ctc-reel/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pd/ctc/index.ts
@@ -126,3 +126,16 @@
export function calcCtcReel(data: MesPdCtcApi.ReelCalcReq) {
  return requestClient.post<MesPdCtcApi.ReelCalcResp>('/mes/pd/ctc/calc-reel', data);
}
/** ä¸‹è½½æ¢ä½å¯¼çº¿æŠ€æœ¯å‚数导入模板 */
export function importCtcTemplate() {
  return requestClient.download('/mes/pd/ctc/get-import-template');
}
/** å¯¼å…¥æ¢ä½å¯¼çº¿æŠ€æœ¯å‚æ•° */
export function importCtc(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pd/ctc/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pd/product/index.ts
@@ -65,6 +65,19 @@
  return requestClient.download('/mes/pd/product/export-excel', { params });
}
/** ä¸‹è½½äº§å“æ¡£æ¡ˆå¯¼å…¥æ¨¡æ¿ */
export function importProductTemplate() {
  return requestClient.download('/mes/pd/product/get-import-template');
}
/** å¯¼å…¥äº§å“æ¡£æ¡ˆ */
export function importProduct(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pd/product/import?updateSupport=${updateSupport}`,
    { file },
  );
}
/** æäº¤å®¡æ‰¹ï¼ˆæœªæäº¤/驳回 â†’ å®¡æ‰¹ä¸­ï¼‰ */
export function submitProduct(id: number) {
  return requestClient.put(`/mes/pd/product/submit?id=${id}`);
src/api/mes/pd/project/index.ts
@@ -81,6 +81,19 @@
  return requestClient.download('/mes/pd/project/export-excel', { params });
}
/** ä¸‹è½½è®¾è®¡é¡¹ç›®å¯¼å…¥æ¨¡æ¿ */
export function importPdProjectTemplate() {
  return requestClient.download('/mes/pd/project/get-import-template');
}
/** å¯¼å…¥è®¾è®¡é¡¹ç›® */
export function importPdProject(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pd/project/import?updateSupport=${updateSupport}`,
    { file },
  );
}
/** å‘布(待发布→待上传) */
export function publishPdProject(id: number) {
  return requestClient.put('/mes/pd/project/publish', undefined, {
src/api/mes/pd/tech-confirm/index.ts
@@ -119,3 +119,16 @@
export function exportTechConfirm(params: any) {
  return requestClient.download('/mes/pd/tech-confirm/export-excel', { params });
}
/** ä¸‹è½½äº§å“æŠ€æœ¯ç¡®è®¤å‡½å¯¼å…¥æ¨¡æ¿ */
export function importTechConfirmTemplate() {
  return requestClient.download('/mes/pd/tech-confirm/get-import-template');
}
/** å¯¼å…¥äº§å“æŠ€æœ¯ç¡®è®¤å‡½ */
export function importTechConfirm(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pd/tech-confirm/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/alternativeplan/index.ts
@@ -56,3 +56,16 @@
export function publishPlan(id: number) {
  return requestClient.put(`/mes/pro/alternative-plan/publish?id=${id}`);
}
/** ä¸‹è½½ä½œä¸šæ›¿ä»£æ–¹æ¡ˆå¯¼å…¥æ¨¡æ¿ */
export function importPlanTemplate() {
  return requestClient.download('/mes/pro/alternative-plan/get-import-template');
}
/** å¯¼å…¥ä½œä¸šæ›¿ä»£æ–¹æ¡ˆ */
export function importPlan(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pro/alternative-plan/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/card/index.ts
@@ -77,3 +77,16 @@
export function cancelCard(id: number) {
  return requestClient.put(`/mes/pro/card/cancel?id=${id}`);
}
/** ä¸‹è½½ç”Ÿäº§æµè½¬å¡å¯¼å…¥æ¨¡æ¿ */
export function importCardTemplate() {
  return requestClient.download('/mes/pro/card/get-import-template');
}
/** å¯¼å…¥ç”Ÿäº§æµè½¬å¡ */
export function importCard(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pro/card/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/emergencyplan/index.ts
@@ -51,3 +51,16 @@
export function publishPlan(id: number) {
  return requestClient.put(`/mes/pro/emergency-plan/publish?id=${id}`);
}
/** ä¸‹è½½åº”急处置预案导入模板 */
export function importPlanTemplate() {
  return requestClient.download('/mes/pro/emergency-plan/get-import-template');
}
/** å¯¼å…¥åº”急处置预案 */
export function importPlan(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pro/emergency-plan/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/feedback/index.ts
@@ -99,6 +99,19 @@
  return requestClient.download('/mes/pro/feedback/export-excel', { params });
}
/** ä¸‹è½½ç”Ÿäº§æŠ¥å·¥å¯¼å…¥æ¨¡æ¿ */
export function importFeedbackTemplate() {
  return requestClient.download('/mes/pro/feedback/get-import-template');
}
/** å¯¼å…¥ç”Ÿäº§æŠ¥å·¥ */
export function importFeedback(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pro/feedback/import?updateSupport=${updateSupport}`,
    { file },
  );
}
/** æäº¤ç”Ÿäº§æŠ¥å·¥ */
export function submitFeedback(id: number) {
  return requestClient.put(`/mes/pro/feedback/submit?id=${id}`);
src/api/mes/pro/maintenance-plan/index.ts
@@ -88,3 +88,16 @@
export function generateWorkOrder(id: number) {
  return requestClient.post<number>(`/mes/pro/maintenance-plan/generate-work-order?id=${id}`);
}
/** ä¸‹è½½ç”µåŠ›ä½œä¸šè®¡åˆ’å¯¼å…¥æ¨¡æ¿ */
export function importPlanTemplate() {
  return requestClient.download('/mes/pro/maintenance-plan/get-import-template');
}
/** å¯¼å…¥ç”µåŠ›ä½œä¸šè®¡åˆ’ */
export function importPlan(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pro/maintenance-plan/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/maintenancecalendar/index.ts
@@ -57,3 +57,18 @@
export function publishCalendar(id: number) {
  return requestClient.put(`/mes/pro/maintenance-calendar/publish?id=${id}`);
}
/** ä¸‹è½½ç”µåŠ›è¿ç»´æ—¥åŽ†å¯¼å…¥æ¨¡æ¿ */
export function importCalendarTemplate() {
  return requestClient.download(
    '/mes/pro/maintenance-calendar/get-import-template',
  );
}
/** å¯¼å…¥ç”µåŠ›è¿ç»´æ—¥åŽ† */
export function importCalendar(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pro/maintenance-calendar/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/mps/index.ts
@@ -105,3 +105,16 @@
export function cancelMps(id: number) {
  return requestClient.post(`/mes/pro-mps/cancel?id=${id}`);
}
/** ä¸‹è½½ MPS å¯¼å…¥æ¨¡æ¿ */
export function importMpsTemplate() {
  return requestClient.download('/mes/pro-mps/get-import-template');
}
/** å¯¼å…¥ MPS */
export function importMps(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pro-mps/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/process/index.ts
@@ -57,3 +57,16 @@
export function exportProcess(params: any) {
  return requestClient.download('/mes/pro/process/export-excel', { params });
}
/** ä¸‹è½½ç”Ÿäº§å·¥åºå¯¼å…¥æ¨¡æ¿ */
export function importProcessTemplate() {
  return requestClient.download('/mes/pro/process/get-import-template');
}
/** å¯¼å…¥ç”Ÿäº§å·¥åº */
export function importProcess(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pro/process/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/processdesign/parameter/index.ts
@@ -73,3 +73,16 @@
    { params },
  );
}
/** ä¸‹è½½å·¥è‰ºå‚数导入模板 */
export function importParameterTemplate() {
  return requestClient.download('/mes/pd/process-param/get-import-template');
}
/** å¯¼å…¥å·¥è‰ºå‚æ•° */
export function importParameter(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pd/process-param/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/processdesign/template/index.ts
@@ -63,3 +63,16 @@
export function exportTemplateExcel(params: any) {
  return requestClient.download("/mes/pd/process-param-template/export-excel", { params });
}
/** ä¸‹è½½å·¥è‰ºå‚数模板导入模板 */
export function importTemplateTemplate() {
  return requestClient.download("/mes/pd/process-param-template/get-import-template");
}
/** å¯¼å…¥å·¥è‰ºå‚数模板 */
export function importTemplate(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pd/process-param-template/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/route/index.ts
@@ -61,3 +61,16 @@
export function exportRoute(params: any) {
  return requestClient.download('/mes/pro/route/export-excel', { params });
}
/** ä¸‹è½½å·¥è‰ºè·¯çº¿å¯¼å…¥æ¨¡æ¿ */
export function importRouteTemplate() {
  return requestClient.download('/mes/pro/route/get-import-template');
}
/** å¯¼å…¥å·¥è‰ºè·¯çº¿ */
export function importRoute(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pro/route/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/pro/workorder/index.ts
@@ -100,6 +100,19 @@
  return requestClient.download('/mes/pro/work-order/export-excel', { params });
}
/** ä¸‹è½½ç”Ÿäº§å·¥å•导入模板 */
export function importWorkOrderTemplate() {
  return requestClient.download('/mes/pro/work-order/get-import-template');
}
/** å¯¼å…¥ç”Ÿäº§å·¥å• */
export function importWorkOrder(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/pro/work-order/import?updateSupport=${updateSupport}`,
    { file },
  );
}
/** å®Œæˆè®¢å• */
export function finishWorkOrder(id: number) {
  return requestClient.put(`/mes/pro/work-order/finish?id=${id}`);
src/api/mes/qc/defect/index.ts
@@ -56,3 +56,16 @@
export function exportDefect(params: any) {
  return requestClient.download('/mes/qc/defect/export-excel', { params });
}
/** ä¸‹è½½ç¼ºé™·ç±»åž‹å¯¼å…¥æ¨¡æ¿ */
export function importDefectTemplate() {
  return requestClient.download('/mes/qc/defect/get-import-template');
}
/** å¯¼å…¥ç¼ºé™·ç±»åž‹ */
export function importDefect(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/qc/defect/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/qc/indicator/index.ts
@@ -51,3 +51,16 @@
export function exportIndicator(params: any) {
  return requestClient.download('/mes/qc/indicator/export-excel', { params });
}
/** ä¸‹è½½è´¨æ£€æŒ‡æ ‡å¯¼å…¥æ¨¡æ¿ */
export function importIndicatorTemplate() {
  return requestClient.download('/mes/qc/indicator/get-import-template');
}
/** å¯¼å…¥è´¨æ£€æŒ‡æ ‡ */
export function importIndicator(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/qc/indicator/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/qc/ipqc/index.ts
@@ -84,3 +84,16 @@
export function exportIpqc(params: any) {
  return requestClient.download('/mes/qc/ipqc/export-excel', { params });
}
/** ä¸‹è½½è¿‡ç¨‹æ£€éªŒå•导入模板 */
export function importIpqcTemplate() {
  return requestClient.download('/mes/qc/ipqc/get-import-template');
}
/** å¯¼å…¥è¿‡ç¨‹æ£€éªŒå• */
export function importIpqc(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/qc/ipqc/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/qc/iqc/index.ts
@@ -78,3 +78,16 @@
export function exportIqc(params: any) {
  return requestClient.download('/mes/qc/iqc/export-excel', { params });
}
/** ä¸‹è½½æ¥æ–™æ£€éªŒå•导入模板 */
export function importIqcTemplate() {
  return requestClient.download('/mes/qc/iqc/get-import-template');
}
/** å¯¼å…¥æ¥æ–™æ£€éªŒå• */
export function importIqc(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/qc/iqc/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/qc/ncr/index.ts
@@ -88,3 +88,16 @@
export function exportNcr(params: any) {
  return requestClient.download('/mes/qc/ncr/export-excel', { params });
}
/** ä¸‹è½½ä¸åˆæ ¼å“å¤„理单导入模板 */
export function importNcrTemplate() {
  return requestClient.download('/mes/qc/ncr/get-import-template');
}
/** å¯¼å…¥ä¸åˆæ ¼å“å¤„理单 */
export function importNcr(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/qc/ncr/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/qc/oqc/index.ts
@@ -79,3 +79,16 @@
export function exportOqc(params: any) {
  return requestClient.download('/mes/qc/oqc/export-excel', { params });
}
/** ä¸‹è½½å‡ºè´§æ£€éªŒå•导入模板 */
export function importOqcTemplate() {
  return requestClient.download('/mes/qc/oqc/get-import-template');
}
/** å¯¼å…¥å‡ºè´§æ£€éªŒå• */
export function importOqc(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/qc/oqc/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/qc/outsourcetest/index.ts
@@ -62,3 +62,16 @@
export function finishTest(id: number) {
  return requestClient.put(`/mes/qc/outsource-test/finish?id=${id}`);
}
/** ä¸‹è½½å§”外检测/试验单导入模板 */
export function importTestTemplate() {
  return requestClient.download('/mes/qc/outsource-test/get-import-template');
}
/** å¯¼å…¥å§”外检测/试验单 */
export function importTest(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/qc/outsource-test/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/qc/rqc/index.ts
@@ -75,3 +75,16 @@
export function exportRqc(params: any) {
  return requestClient.download('/mes/qc/rqc/export-excel', { params });
}
/** ä¸‹è½½é€€è´§æ£€éªŒå•导入模板 */
export function importRqcTemplate() {
  return requestClient.download('/mes/qc/rqc/get-import-template');
}
/** å¯¼å…¥é€€è´§æ£€éªŒå• */
export function importRqc(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/qc/rqc/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/qc/template/index.ts
@@ -49,3 +49,16 @@
export function exportTemplate(params: any) {
  return requestClient.download('/mes/qc/template/export-excel', { params });
}
/** ä¸‹è½½è´¨æ£€æ–¹æ¡ˆå¯¼å…¥æ¨¡æ¿ */
export function importTemplateTemplate() {
  return requestClient.download('/mes/qc/template/get-import-template');
}
/** å¯¼å…¥è´¨æ£€æ–¹æ¡ˆ */
export function importTemplate(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/qc/template/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/tm/tool/index.ts
@@ -59,3 +59,16 @@
export function exportTool(params: any) {
  return requestClient.download('/mes/tm/tool/export-excel', { params });
}
/** ä¸‹è½½å·¥å…·å¯¼å…¥æ¨¡æ¿ */
export function importToolTemplate() {
  return requestClient.download('/mes/tm/tool/get-import-template');
}
/** å¯¼å…¥å·¥å…· */
export function importTool(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/tm/tool/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/tm/tool/type/index.ts
@@ -57,3 +57,16 @@
export function exportToolType(params: any) {
  return requestClient.download('/mes/tm/tool-type/export-excel', { params });
}
/** ä¸‹è½½å·¥å…·ç±»åž‹å¯¼å…¥æ¨¡æ¿ */
export function importToolTypeTemplate() {
  return requestClient.download('/mes/tm/tool-type/get-import-template');
}
/** å¯¼å…¥å·¥å…·ç±»åž‹ */
export function importToolType(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/tm/tool-type/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/arrivalnotice/index.ts
@@ -69,3 +69,16 @@
    `/mes/wm/arrival-notice/generate-from-purchase-order?purchaseOrderId=${purchaseOrderId}`,
  );
}
/** ä¸‹è½½åˆ°è´§é€šçŸ¥å•导入模板 */
export function importArrivalNoticeTemplate() {
  return requestClient.download('/mes/wm/arrival-notice/get-import-template');
}
/** å¯¼å…¥åˆ°è´§é€šçŸ¥å• */
export function importArrivalNotice(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/arrival-notice/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/barcode/config/index.ts
@@ -47,3 +47,16 @@
export function deleteBarcodeConfig(id: number) {
  return requestClient.delete(`/mes/wm/barcode-config/delete?id=${id}`);
}
/** ä¸‹è½½æ¡ç é…ç½®å¯¼å…¥æ¨¡æ¿ */
export function importBarcodeConfigTemplate() {
  return requestClient.download('/mes/wm/barcode-config/get-import-template');
}
/** å¯¼å…¥æ¡ç é…ç½® */
export function importBarcodeConfig(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/barcode-config/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/equipmentreceipt/index.ts
@@ -102,4 +102,17 @@
/** å–消设备入库单 */
export function cancelEquipmentReceipt(id: number) {
  return requestClient.put(`/mes/wm/equipment-receipt/cancel?id=${id}`);
}
/** ä¸‹è½½è®¾å¤‡å…¥åº“单导入模板 */
export function importEquipmentReceiptTemplate() {
  return requestClient.download('/mes/wm/equipment-receipt/get-import-template');
}
/** å¯¼å…¥è®¾å¤‡å…¥åº“单 */
export function importEquipmentReceipt(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/equipment-receipt/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/itemreceipt/index.ts
@@ -121,3 +121,16 @@
    reviewRemark,
  });
}
/** ä¸‹è½½é‡‡è´­å…¥åº“单导入模板 */
export function importItemReceiptTemplate() {
  return requestClient.download('/mes/wm/item-receipt/get-import-template');
}
/** å¯¼å…¥é‡‡è´­å…¥åº“单 */
export function importItemReceipt(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/item-receipt/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/miscissue/index.ts
@@ -105,3 +105,16 @@
export function exportMiscIssue(params: any) {
  return requestClient.download('/mes/wm/misc-issue/export-excel', { params });
}
/** ä¸‹è½½æ‚项出库单导入模板 */
export function importMiscIssueTemplate() {
  return requestClient.download('/mes/wm/misc-issue/get-import-template');
}
/** å¯¼å…¥æ‚项出库单 */
export function importMiscIssue(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/misc-issue/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/miscreceipt/index.ts
@@ -107,3 +107,16 @@
    params,
  });
}
/** ä¸‹è½½æ‚项入库单导入模板 */
export function importMiscReceiptTemplate() {
  return requestClient.download('/mes/wm/misc-receipt/get-import-template');
}
/** å¯¼å…¥æ‚项入库单 */
export function importMiscReceipt(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/misc-receipt/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/outsourceissue/index.ts
@@ -88,3 +88,16 @@
    params,
  });
}
/** ä¸‹è½½å¤–协发料单导入模板 */
export function importOutsourceIssueTemplate() {
  return requestClient.download('/mes/wm/outsource-issue/get-import-template');
}
/** å¯¼å…¥å¤–协发料单 */
export function importOutsourceIssue(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/outsource-issue/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/outsourcereceipt/index.ts
@@ -78,3 +78,16 @@
    params,
  });
}
/** ä¸‹è½½å¤–协入库单导入模板 */
export function importOutsourceReceiptTemplate() {
  return requestClient.download('/mes/wm/outsource-receipt/get-import-template');
}
/** å¯¼å…¥å¤–协入库单 */
export function importOutsourceReceipt(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/outsource-receipt/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/packages/index.ts
@@ -81,3 +81,16 @@
    `/mes/wm/package/remove-child-package?childId=${childId}`,
  );
}
/** ä¸‹è½½è£…箱单导入模板 */
export function importPackageTemplate() {
  return requestClient.download('/mes/wm/package/get-import-template');
}
/** å¯¼å…¥è£…箱单 */
export function importPackage(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/package/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/productissue/index.ts
@@ -88,3 +88,16 @@
    params,
  });
}
/** ä¸‹è½½ç”Ÿäº§é¢†æ–™å‡ºåº“单导入模板 */
export function importProductIssueTemplate() {
  return requestClient.download('/mes/wm/product-issue/get-import-template');
}
/** å¯¼å…¥ç”Ÿäº§é¢†æ–™å‡ºåº“单 */
export function importProductIssue(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/product-issue/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/productreceipt/index.ts
@@ -89,3 +89,16 @@
    params,
  });
}
/** ä¸‹è½½äº§å“æ”¶è´§å•导入模板 */
export function importProductReceiptTemplate() {
  return requestClient.download('/mes/wm/product-receipt/get-import-template');
}
/** å¯¼å…¥äº§å“æ”¶è´§å• */
export function importProductReceipt(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/product-receipt/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/productsales/index.ts
@@ -95,3 +95,16 @@
    params,
  });
}
/** ä¸‹è½½é”€å”®å‡ºåº“单导入模板 */
export function importProductSalesTemplate() {
  return requestClient.download('/mes/wm/product-sales/get-import-template');
}
/** å¯¼å…¥é”€å”®å‡ºåº“单 */
export function importProductSales(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/product-sales/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/returnissue/index.ts
@@ -79,3 +79,16 @@
    params,
  });
}
/** ä¸‹è½½ç”Ÿäº§é€€æ–™å•导入模板 */
export function importReturnIssueTemplate() {
  return requestClient.download('/mes/wm/return-issue/get-import-template');
}
/** å¯¼å…¥ç”Ÿäº§é€€æ–™å• */
export function importReturnIssue(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/return-issue/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/returnsales/index.ts
@@ -76,3 +76,16 @@
    params,
  });
}
/** ä¸‹è½½é”€å”®é€€è´§å•导入模板 */
export function importReturnSalesTemplate() {
  return requestClient.download('/mes/wm/return-sales/get-import-template');
}
/** å¯¼å…¥é”€å”®é€€è´§å• */
export function importReturnSales(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/return-sales/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/returnvendor/index.ts
@@ -124,3 +124,16 @@
    params,
  });
}
/** ä¸‹è½½ä¾›åº”商退货单导入模板 */
export function importReturnVendorTemplate() {
  return requestClient.download('/mes/wm/return-vendor/get-import-template');
}
/** å¯¼å…¥ä¾›åº”商退货单 */
export function importReturnVendor(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/return-vendor/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/salesnotice/index.ts
@@ -79,3 +79,16 @@
    params: { id },
  });
}
/** ä¸‹è½½å‘货通知单导入模板 */
export function importSalesNoticeTemplate() {
  return requestClient.download('/mes/wm/sales-notice/get-import-template');
}
/** å¯¼å…¥å‘货通知单 */
export function importSalesNotice(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/sales-notice/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/transfer/index.ts
@@ -90,3 +90,16 @@
export function exportTransfer(params: any) {
  return requestClient.download('/mes/wm/transfer/export-excel', { params });
}
/** ä¸‹è½½è½¬ç§»å•导入模板 */
export function importTransferTemplate() {
  return requestClient.download('/mes/wm/transfer/get-import-template');
}
/** å¯¼å…¥è½¬ç§»å• */
export function importTransfer(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/transfer/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/warehouse/area/index.ts
@@ -63,3 +63,16 @@
export function deleteWarehouseArea(id: number) {
  return requestClient.delete(`/mes/wm/warehouse-area/delete?id=${id}`);
}
/** ä¸‹è½½åº“位导入模板 */
export function importWarehouseAreaTemplate() {
  return requestClient.download('/mes/wm/warehouse-area/get-import-template');
}
/** å¯¼å…¥åº“位 */
export function importWarehouseArea(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/warehouse-area/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/warehouse/index.ts
@@ -53,3 +53,16 @@
export function deleteWarehouse(id: number) {
  return requestClient.delete(`/mes/wm/warehouse/delete?id=${id}`);
}
/** ä¸‹è½½ä»“库导入模板 */
export function importWarehouseTemplate() {
  return requestClient.download('/mes/wm/warehouse/get-import-template');
}
/** å¯¼å…¥ä»“库 */
export function importWarehouse(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/warehouse/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/mes/wm/warehouse/location/index.ts
@@ -70,3 +70,18 @@
    { params: { allowBatchMixing, allowItemMixing, locationId } },
  );
}
/** ä¸‹è½½åº“区导入模板 */
export function importWarehouseLocationTemplate() {
  return requestClient.download(
    '/mes/wm/warehouse-location/get-import-template',
  );
}
/** å¯¼å…¥åº“区 */
export function importWarehouseLocation(file: File, updateSupport: boolean) {
  return requestClient.upload(
    `/mes/wm/warehouse-location/import?updateSupport=${updateSupport}`,
    { file },
  );
}
src/api/srm/supplier/index.ts
@@ -55,3 +55,16 @@
export function deleteSupplier(id: number) {
  return requestClient.delete(`/srm/supplier/delete?id=${id}`);
}
/** ä¸‹è½½ä¾›åº”商导入模板 */
export function importSupplierTemplate() {
  return requestClient.download('/srm/supplier/get-import-template');
}
/** å¯¼å…¥ä¾›åº”商 */
export function importSupplier(file: File, updateSupport: boolean) {
  return requestClient.upload('/srm/supplier/import', {
    file,
    updateSupport,
  });
}
src/api/srm/supplierCertificate/index.ts
@@ -56,3 +56,16 @@
export function getExpiringCertificates() {
  return requestClient.get<SrmSupplierCertificateApi.CertificateVO[]>('/srm/supplier-certificate/expiring-list');
}
/** ä¸‹è½½èµ„质证书导入模板 */
export function importCertificateTemplate() {
  return requestClient.download('/srm/supplier-certificate/get-import-template');
}
/** å¯¼å…¥èµ„质证书 */
export function importCertificate(file: File, updateSupport: boolean) {
  return requestClient.upload('/srm/supplier-certificate/import', {
    file,
    updateSupport,
  });
}
src/api/system/dict/data/index.ts
@@ -66,3 +66,16 @@
export function exportDictData(params: any) {
  return requestClient.download('/system/dict-data/export-excel', { params });
}
// ä¸‹è½½å­—典数据导入模板
export function importDictDataTemplate() {
  return requestClient.download('/system/dict-data/get-import-template');
}
// å¯¼å…¥å­—典数据
export function importDictData(file: File, updateSupport: boolean) {
  return requestClient.upload('/system/dict-data/import', {
    file,
    updateSupport,
  });
}
src/api/system/dict/type/index.ts
@@ -62,3 +62,16 @@
export function exportDictType(params: any) {
  return requestClient.download('/system/dict-type/export-excel', { params });
}
// ä¸‹è½½å­—典类型导入模板
export function importDictTypeTemplate() {
  return requestClient.download('/system/dict-type/get-import-template');
}
// å¯¼å…¥å­—典类型
export function importDictType(file: File, updateSupport: boolean) {
  return requestClient.upload('/system/dict-type/import', {
    file,
    updateSupport,
  });
}
src/api/system/menu/index.ts
@@ -57,3 +57,16 @@
export async function deleteMenuList(ids: number[]) {
  return requestClient.delete(`/system/menu/delete-list?ids=${ids.join(',')}`);
}
/** ä¸‹è½½èœå•导入模板 */
export async function importMenuTemplate() {
  return requestClient.download('/system/menu/get-import-template');
}
/** å¯¼å…¥èœå• */
export async function importMenu(file: File, updateSupport: boolean) {
  return requestClient.upload('/system/menu/import', {
    file,
    updateSupport,
  });
}
src/api/system/notice/index.ts
@@ -57,3 +57,16 @@
export function pushNotice(id: number) {
  return requestClient.post(`/system/notice/push?id=${id}`);
}
/** ä¸‹è½½é€šçŸ¥å…¬å‘Šå¯¼å…¥æ¨¡æ¿ */
export function importNoticeTemplate() {
  return requestClient.download('/system/notice/get-import-template');
}
/** å¯¼å…¥é€šçŸ¥å…¬å‘Š */
export function importNotice(file: File, updateSupport: boolean) {
  return requestClient.upload('/system/notice/import', {
    file,
    updateSupport,
  });
}
src/api/system/role/index.ts
@@ -61,3 +61,16 @@
    params,
  });
}
/** ä¸‹è½½è§’色导入模板 */
export function importRoleTemplate() {
  return requestClient.download('/system/role/get-import-template');
}
/** å¯¼å…¥è§’色 */
export function importRole(file: File, updateSupport: boolean) {
  return requestClient.upload('/system/role/import', {
    file,
    updateSupport,
  });
}
src/components/import-modal/import-modal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,123 @@
<script lang="ts" setup>
import type { FileType } from 'ant-design-vue/es/upload/interface';
import { ref } from 'vue';
import { useVbenModal } from '@vben/common-ui';
import { downloadFileFromBlobPart } from '@vben/utils';
import { Button, message, Upload } from 'ant-design-vue';
import { useVbenForm } from '#/adapter/form';
import { $t } from '#/locales';
export interface ImportModalProps {
  /** å¼¹çª—标题,如「导入用户」 */
  title: string;
  /** ä¸‹è½½çš„æ¨¡æ¿æ–‡ä»¶åï¼Œå¦‚「用户导入模板.xls」 */
  fileName: string;
  /** æ‰§è¡Œå¯¼å…¥çš„æŽ¥å£å‡½æ•° (file, updateSupport) => Promise */
  importFn: (file: File, updateSupport: boolean) => Promise<unknown>;
  /** ä¸‹è½½æ¨¡æ¿çš„æŽ¥å£å‡½æ•° () => Promise(blob) */
  templateFn: () => Promise<BlobPart>;
}
const emit = defineEmits(['success']);
const config = ref<ImportModalProps>({
  title: '',
  fileName: '',
  importFn: async () => {},
  templateFn: () => Promise.resolve(new Blob()),
});
const [Form, formApi] = useVbenForm({
  commonConfig: {
    formItemClass: 'col-span-2',
    labelWidth: 120,
  },
  layout: 'horizontal',
  schema: [
    {
      fieldName: 'file',
      label: '数据文件',
      component: 'Upload',
      rules: 'required',
      help: '仅允许导入 xls、xlsx æ ¼å¼æ–‡ä»¶',
    },
    {
      fieldName: 'updateSupport',
      label: '是否覆盖',
      component: 'Switch',
      componentProps: {
        checkedChildren: '是',
        unCheckedChildren: '否',
      },
      help: '是否更新已经存在的数据',
    },
  ],
  showDefaultActions: false,
});
const [Modal, modalApi] = useVbenModal({
  async onOpenChange(isOpen: boolean) {
    if (isOpen) {
      config.value = modalApi.getData<ImportModalProps>() ?? config.value;
      await formApi.resetForm();
    }
  },
  async onConfirm() {
    const { valid } = await formApi.validate();
    if (!valid) {
      return;
    }
    modalApi.lock();
    // æäº¤è¡¨å•
    const data = await formApi.getValues();
    try {
      await config.value.importFn(data.file, data.updateSupport);
      // å…³é—­å¹¶æç¤º
      await modalApi.close();
      emit('success');
      message.success($t('ui.actionMessage.operationSuccess'));
    } finally {
      modalApi.unlock();
    }
  },
});
/** ä¸Šä¼ å‰ */
function beforeUpload(file: FileType) {
  formApi.setFieldValue('file', file);
  return false;
}
/** ä¸‹è½½æ¨¡ç‰ˆ */
async function handleDownload() {
  const data = await config.value.templateFn();
  downloadFileFromBlobPart({ fileName: config.value.fileName, source: data });
}
</script>
<template>
  <Modal :title="config.title" class="w-1/3">
    <Form class="mx-4">
      <template #file>
        <div class="w-full">
          <Upload
            :max-count="1"
            accept=".xls,.xlsx"
            :before-upload="beforeUpload"
          >
            <Button type="primary"> é€‰æ‹© Excel æ–‡ä»¶ </Button>
          </Upload>
        </div>
      </template>
    </Form>
    <template #prepend-footer>
      <div class="flex flex-auto items-center">
        <Button @click="handleDownload"> ä¸‹è½½å¯¼å…¥æ¨¡æ¿ </Button>
      </div>
    </template>
  </Modal>
</template>
src/components/import-modal/index.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
export { default } from './import-modal.vue';
src/views/ai/knowledge/knowledge/index.vue
@@ -12,14 +12,23 @@
import {
  deleteKnowledge,
  getKnowledgePage,
  importKnowledge,
  importKnowledgeTemplate,
} from '#/api/ai/knowledge/knowledge';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -31,6 +40,18 @@
/** åˆ›å»ºçŸ¥è¯†åº“ */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥çŸ¥è¯†åº“ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['AI çŸ¥è¯†åº“']),
      fileName: 'AI知识库导入模板.xls',
      importFn: importKnowledge,
      templateFn: importKnowledgeTemplate,
    })
    .open();
}
/** ç¼–辑知识库 */
@@ -103,6 +124,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="AI çŸ¥è¯†åº“列表">
      <template #toolbar-tools>
        <TableAction
@@ -114,6 +136,13 @@
              auth: ['ai:knowledge:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['AI çŸ¥è¯†åº“']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['ai:knowledge:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/ai/model/apiKey/index.vue
@@ -7,14 +7,26 @@
import { message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteApiKey, getApiKeyPage } from '#/api/ai/model/apiKey';
import {
  deleteApiKey,
  getApiKeyPage,
  importApiKey,
  importApiKeyTemplate,
} from '#/api/ai/model/apiKey';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -26,6 +38,18 @@
/** åˆ›å»º API å¯†é’¥ */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥ API å¯†é’¥ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['API å¯†é’¥']),
      fileName: 'API密钥导入模板.xls',
      importFn: importApiKey,
      templateFn: importApiKeyTemplate,
    })
    .open();
}
/** ç¼–辑 API å¯†é’¥ */
@@ -81,6 +105,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="API  å¯†é’¥åˆ—表">
      <template #toolbar-tools>
        <TableAction
@@ -92,6 +117,13 @@
              auth: ['ai:api-key:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['API å¯†é’¥']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['ai:api-key:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/ai/model/model/index.vue
@@ -7,14 +7,26 @@
import { message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteModel, getModelPage } from '#/api/ai/model/model';
import {
  deleteModel,
  getModelPage,
  importModel,
  importModelTemplate,
} from '#/api/ai/model/model';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -26,6 +38,18 @@
/** åˆ›å»ºæ¨¡åž‹é…ç½® */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥æ¨¡åž‹é…ç½® */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['模型配置']),
      fileName: '模型配置导入模板.xls',
      importFn: importModel,
      templateFn: importModelTemplate,
    })
    .open();
}
/** ç¼–辑模型配置 */
@@ -81,6 +105,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="模型配置列表">
      <template #toolbar-tools>
        <TableAction
@@ -92,6 +117,13 @@
              auth: ['ai:model:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['模型配置']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['ai:model:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/basicData/mdm/index.vue
@@ -16,6 +16,8 @@
  deleteItemList,
  // exportItem,
  getItemPage,
  importItem,
  importItemTemplate,
  updateItemStatus,
  updateItemSync,
} from '#/api/mdm/item';
@@ -24,11 +26,17 @@
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
import ImportModalComponent from '#/components/import-modal';
defineOptions({ name: 'MdmItem' });
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -84,6 +92,18 @@
/** åˆ›å»ºç‰©æ–™ */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥ç‰©æ–™ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['物料']),
      fileName: '物料导入模板.xls',
      importFn: importItem,
      templateFn: importItemTemplate,
    })
    .open();
}
/** ç¼–辑物料 */
@@ -211,6 +231,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="物料列表">
      <template #toolbar-tools>
        <TableAction
@@ -222,6 +243,13 @@
              auth: ['mdm:item:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['物料']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mdm:item:import'],
              onClick: handleImport,
            },
            // {
            //   label: $t('ui.actionTitle.export'),
            //   type: 'primary',
src/views/basicData/mdm/unit/index.vue
@@ -10,16 +10,24 @@
import {
  deleteUnit,
  getUnitPage,
  importUnit,
  importUnitTemplate,
} from '#/api/mdm/unit';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
import ImportModalComponent from '#/components/import-modal';
defineOptions({ name: 'MdmUnit' });
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -31,6 +39,18 @@
/** åˆ›å»ºè®¡é‡å•位 */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥è®¡é‡å•位 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['计量单位']),
      fileName: '计量单位导入模板.xls',
      importFn: importUnit,
      templateFn: importUnitTemplate,
    })
    .open();
}
/** ç¼–辑计量单位 */
@@ -87,6 +107,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="计量单位列表">
      <template #toolbar-tools>
        <TableAction
@@ -98,6 +119,13 @@
              auth: ['mdm:unit:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['计量单位']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mdm:unit:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/bi/config/chart/index.vue
@@ -13,8 +13,12 @@
import {
  deleteChartConfig,
  getChartConfigPage,
  importChartConfig,
  importChartConfigTemplate,
} from '#/api/bi/chart-config';
import { getDashboardList } from '#/api/bi/dashboard';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -26,12 +30,28 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
function handleRefresh() {
  gridApi.query();
}
function handleCreate() {
  formModalApi.setData(null).open();
}
function handleImport() {
  importModalApi
    .setData({
      title: '导入图表配置',
      fileName: '图表配置导入模板.xls',
      importFn: importChartConfig,
      templateFn: importChartConfigTemplate,
    })
    .open();
}
function handleEdit(row: BiChartConfigApi.ChartConfig) {
@@ -133,6 +153,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="图表配置">
      <template #toolbar-tools>
        <TableAction
@@ -145,6 +166,13 @@
              onClick: handleCreate,
            },
            {
              label: '导入',
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['bi:chart-config:import'],
              onClick: handleImport,
            },
            {
              label: '批量删除',
              type: 'primary',
              danger: true,
src/views/bi/config/data-source/index.vue
@@ -13,7 +13,11 @@
import {
  deleteDataSourceConfig,
  getDataSourceConfigPage,
  importDataSourceConfig,
  importDataSourceConfigTemplate,
} from '#/api/bi/data-source-config';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -25,12 +29,28 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
function handleRefresh() {
  gridApi.query();
}
function handleCreate() {
  formModalApi.setData(null).open();
}
function handleImport() {
  importModalApi
    .setData({
      title: '导入数据源配置',
      fileName: '数据源配置导入模板.xls',
      importFn: importDataSourceConfig,
      templateFn: importDataSourceConfigTemplate,
    })
    .open();
}
function handleEdit(row: BiDataSourceConfigApi.DataSourceConfig) {
@@ -116,6 +136,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="数据源配置">
      <template #toolbar-tools>
        <TableAction
@@ -128,6 +149,13 @@
              onClick: handleCreate,
            },
            {
              label: '导入',
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['bi:data-source-config:import'],
              onClick: handleImport,
            },
            {
              label: '批量删除',
              type: 'primary',
              danger: true,
src/views/bi/decision/alert-rule/index.vue
@@ -7,7 +7,14 @@
import { message, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteAlertRule, getAlertRulePage } from '#/api/bi/decision/alert';
import {
  deleteAlertRule,
  getAlertRulePage,
  importAlertRule,
  importAlertRuleTemplate,
} from '#/api/bi/decision/alert';
import ImportModalComponent from '#/components/import-modal';
import { severityColor, severityText, useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -16,6 +23,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -45,6 +57,17 @@
  formModalApi.setData(null).open();
}
function handleImport() {
  importModalApi
    .setData({
      title: '导入预警规则',
      fileName: '预警规则导入模板.xls',
      importFn: importAlertRule,
      templateFn: importAlertRuleTemplate,
    })
    .open();
}
function handleEdit(row: DecisionAlertApi.AlertRule) {
  formModalApi.setData(row).open();
}
@@ -65,7 +88,10 @@
  <Page :auto-content-height="true">
    <div class="mb-3 flex items-center justify-between">
      <span class="text-lg font-bold">预警规则配置</span>
      <a-button type="primary" @click="handleCreate">新增</a-button>
      <div class="flex gap-2">
        <a-button @click="handleImport">导入</a-button>
        <a-button type="primary" @click="handleCreate">新增</a-button>
      </div>
    </div>
    <Grid>
      <template #severitySlot="{ row }">
@@ -84,5 +110,6 @@
      </template>
    </Grid>
    <FormModal />
    <ImportModal @success="handleRefresh" />
  </Page>
</template>
src/views/bi/decision/kpi-config/index.vue
@@ -7,7 +7,14 @@
import { message, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteKpiDefinition, getKpiDefinitionPage } from '#/api/bi/decision/kpi';
import {
  deleteKpiDefinition,
  getKpiDefinitionPage,
  importKpiDefinition,
  importKpiDefinitionTemplate,
} from '#/api/bi/decision/kpi';
import ImportModalComponent from '#/components/import-modal';
import { CATEGORY_MAP, useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -16,6 +23,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -45,6 +57,17 @@
  formModalApi.setData(null).open();
}
function handleImport() {
  importModalApi
    .setData({
      title: '导入KPI指标',
      fileName: 'KPI指标导入模板.xls',
      importFn: importKpiDefinition,
      templateFn: importKpiDefinitionTemplate,
    })
    .open();
}
function handleEdit(row: DecisionKpiApi.KpiDefinition) {
  formModalApi.setData(row).open();
}
@@ -65,7 +88,10 @@
  <Page :auto-content-height="true">
    <div class="mb-3 flex items-center justify-between">
      <span class="text-lg font-bold">KPI指标定义</span>
      <a-button type="primary" @click="handleCreate">新增</a-button>
      <div class="flex gap-2">
        <a-button @click="handleImport">导入</a-button>
        <a-button type="primary" @click="handleCreate">新增</a-button>
      </div>
    </div>
    <Grid>
      <template #categorySlot="{ row }">
@@ -84,5 +110,6 @@
      </template>
    </Grid>
    <FormModal />
    <ImportModal @success="handleRefresh" />
  </Page>
</template>
src/views/bpm/businessAttach/index.vue
@@ -10,14 +10,23 @@
import {
  deleteBusinessAttach,
  getBusinessAttachPage,
  importBusinessAttach,
  importBusinessAttachTemplate,
} from '#/api/bpm/businessAttach';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -29,6 +38,18 @@
/** åˆ›å»ºä¸šåŠ¡é™„ä»¶é…ç½® */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥ä¸šåŠ¡é™„ä»¶é…ç½® */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['业务附件配置']),
      fileName: '业务附件配置导入模板.xls',
      importFn: importBusinessAttach,
      templateFn: importBusinessAttachTemplate,
    })
    .open();
}
/** ç¼–辑业务附件配置 */
@@ -84,6 +105,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="业务附件配置">
      <template #toolbar-tools>
        <TableAction
@@ -95,6 +117,13 @@
              auth: ['bpm:business-attach:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['业务附件配置']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['bpm:business-attach:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/bpm/category/index.vue
@@ -7,14 +7,26 @@
import { message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteCategory, getCategoryPage } from '#/api/bpm/category';
import {
  deleteCategory,
  getCategoryPage,
  importCategory,
  importCategoryTemplate,
} from '#/api/bpm/category';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -26,6 +38,18 @@
/** åˆ›å»ºæµç¨‹åˆ†ç±» */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥æµç¨‹åˆ†ç±» */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['流程分类']),
      fileName: '流程分类导入模板.xls',
      importFn: importCategory,
      templateFn: importCategoryTemplate,
    })
    .open();
}
/** ç¼–辑流程分类 */
@@ -81,6 +105,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="流程分类">
      <template #toolbar-tools>
        <TableAction
@@ -92,6 +117,13 @@
              auth: ['bpm:category:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['流程分类']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['bpm:category:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/bpm/form/index.vue
@@ -10,17 +10,41 @@
import { message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteForm, getFormPage } from '#/api/bpm/form';
import {
  deleteForm,
  getFormPage,
  importForm,
  importFormTemplate,
} from '#/api/bpm/form';
import { router } from '#/router';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Detail from './modules/detail.vue';
defineOptions({ name: 'BpmForm' });
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥æµç¨‹è¡¨å• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['流程表单']),
      fileName: '动态表单导入模板.xls',
      importFn: importForm,
      templateFn: importFormTemplate,
    })
    .open();
}
/** æ–°å¢žè¡¨å• */
@@ -118,6 +142,7 @@
<template>
  <Page auto-content-height><DetailModal />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="流程表单">
      <template #toolbar-tools>
        <TableAction
@@ -129,6 +154,13 @@
              auth: ['bpm:form:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['流程表单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['bpm:form:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/bpm/group/index.vue
@@ -7,14 +7,26 @@
import { message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteUserGroup, getUserGroupPage } from '#/api/bpm/userGroup';
import {
  deleteUserGroup,
  getUserGroupPage,
  importUserGroup,
  importUserGroupTemplate,
} from '#/api/bpm/userGroup';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -26,6 +38,18 @@
/** åˆ›å»ºç”¨æˆ·åˆ†ç»„ */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥ç”¨æˆ·åˆ†ç»„ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['用户分组']),
      fileName: '用户组导入模板.xls',
      importFn: importUserGroup,
      templateFn: importUserGroupTemplate,
    })
    .open();
}
/** ç¼–辑用户分组 */
@@ -81,6 +105,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="用户分组">
      <template #toolbar-tools>
        <TableAction
@@ -92,6 +117,13 @@
              auth: ['bpm:user-group:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['用户分组']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['bpm:user-group:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/bpm/processExpression/index.vue
@@ -10,14 +10,23 @@
import {
  deleteProcessExpression,
  getProcessExpressionPage,
  importProcessExpression,
  importProcessExpressionTemplate,
} from '#/api/bpm/processExpression';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -29,6 +38,18 @@
/** åˆ›å»ºæµç¨‹è¡¨è¾¾å¼ */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥æµç¨‹è¡¨è¾¾å¼ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['流程表达式']),
      fileName: '流程表达式导入模板.xls',
      importFn: importProcessExpression,
      templateFn: importProcessExpressionTemplate,
    })
    .open();
}
/** ç¼–辑流程表达式 */
@@ -84,6 +105,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="流程表达式">
      <template #toolbar-tools>
        <TableAction
@@ -95,6 +117,13 @@
              auth: ['bpm:process-expression:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['流程表达式']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['bpm:process-expression:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/bpm/processListener/index.vue
@@ -10,14 +10,23 @@
import {
  deleteProcessListener,
  getProcessListenerPage,
  importProcessListener,
  importProcessListenerTemplate,
} from '#/api/bpm/processListener';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -29,6 +38,18 @@
/** åˆ›å»ºæµç¨‹ç›‘听器 */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥æµç¨‹ç›‘听器 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['流程监听器']),
      fileName: '流程监听器导入模板.xls',
      importFn: importProcessListener,
      templateFn: importProcessListenerTemplate,
    })
    .open();
}
/** ç¼–辑流程监听器 */
@@ -84,6 +105,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="流程监听器">
      <template #toolbar-tools>
        <TableAction
@@ -95,6 +117,13 @@
              auth: ['bpm:process-listener:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['流程监听器']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['bpm:process-listener:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/crm/business/index.vue
@@ -15,8 +15,12 @@
  deleteBusiness,
  exportBusiness,
  getBusinessPage,
  importBusiness,
  importBusinessTemplate,
} from '#/api/crm/business';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -45,6 +49,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
@@ -69,6 +78,18 @@
/** åˆ›å»ºå•†æœº */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥å•†æœº */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['商机']),
      fileName: '商机导入模板.xls',
      importFn: importBusiness,
      templateFn: importBusinessTemplate,
    })
    .open();
}
/** ç¼–辑商机 */
@@ -135,6 +156,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid>
      <template #toolbar-actions>
        <Tabs class="w-full" @change="handleChangeSceneType">
@@ -160,6 +182,13 @@
              auth: ['crm:business:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['商机']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['crm:business:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/crm/clue/index.vue
@@ -11,8 +11,16 @@
import { Button, message, Tabs } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteClue, exportClue, getCluePage } from '#/api/crm/clue';
import {
  deleteClue,
  exportClue,
  getCluePage,
  importClue,
  importClueTemplate,
} from '#/api/crm/clue';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -22,6 +30,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -42,6 +55,18 @@
/** åˆ›å»ºçº¿ç´¢ */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥çº¿ç´¢ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['线索']),
      fileName: '线索导入模板.xls',
      importFn: importClue,
      templateFn: importClueTemplate,
    })
    .open();
}
/** ç¼–辑线索 */
@@ -109,6 +134,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid>
      <template #toolbar-actions>
        <Tabs class="w-full" @change="handleChangeSceneType">
@@ -134,6 +160,13 @@
              auth: ['crm:clue:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['线索']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['crm:clue:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/crm/contact/index.vue
@@ -15,8 +15,12 @@
  deleteContact,
  exportContact,
  getContactPage,
  importContact,
  importContactTemplate,
} from '#/api/crm/contact';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -26,6 +30,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -53,6 +62,18 @@
/** åˆ›å»ºè”系人 */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥è”系人 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['联系人']),
      fileName: '联系人导入模板.xls',
      importFn: importContact,
      templateFn: importContactTemplate,
    })
    .open();
}
/** ç¼–辑联系人 */
@@ -119,6 +140,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid>
      <template #toolbar-actions>
        <Tabs class="w-full" @change="handleChangeSceneType">
@@ -144,6 +166,13 @@
              auth: ['crm:contact:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['联系人']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['crm:contact:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/crm/contract/index.vue
@@ -18,9 +18,13 @@
  generateSaleOrder,
  getContractApproverIds,
  getContractPage,
  importContract,
  importContractTemplate,
  submitContract,
} from '#/api/crm/contract';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -62,6 +66,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ä¸Žå®¡æ‰¹äººé›†åˆ */
function handleRefresh() {
  gridApi.query();
@@ -87,6 +96,18 @@
/** åˆ›å»ºåˆåŒ */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥åˆåŒ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['合同']),
      fileName: '合同导入模板.xls',
      importFn: importContract,
      templateFn: importContractTemplate,
    })
    .open();
}
/** ç¼–辑合同 */
@@ -221,6 +242,7 @@
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid>
      <template #toolbar-actions>
        <Tabs class="w-full" @change="handleChangeSceneType">
@@ -246,6 +268,13 @@
              auth: ['crm:contract:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['合同']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['crm:contract:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/crm/credit-rating/index.vue
@@ -12,14 +12,23 @@
  deleteCreditRating,
  exportCreditRating,
  getCreditRatingPage,
  importCreditRating,
  importCreditRatingTemplate,
} from '#/api/crm/credit-rating';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -33,6 +42,18 @@
  const formValues = await gridApi.formApi.getValues();
  const data = await exportCreditRating(formValues);
  downloadFileFromBlobPart({ fileName: '客户信用评级.xls', source: data });
}
/** å¯¼å…¥ä¿¡ç”¨è¯„级 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['信用评级']),
      fileName: '客户信用评级导入模板.xls',
      importFn: importCreditRating,
      templateFn: importCreditRatingTemplate,
    })
    .open();
}
/** æ–°å¢ž */
@@ -95,6 +116,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="客户信用评级列表">
      <template #toolbar-tools>
        <TableAction
@@ -113,6 +135,13 @@
              auth: ['crm:credit-rating:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['信用评级']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['crm:credit-rating:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/crm/salesTarget/index.vue
@@ -15,14 +15,23 @@
  deleteSalesTarget,
  exportSalesTarget,
  getSalesTargetPage,
  importSalesTarget,
  importSalesTargetTemplate,
} from '#/api/crm/salesTarget';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -36,6 +45,18 @@
  const formValues = await gridApi.formApi.getValues();
  const data = await exportSalesTarget(formValues);
  downloadFileFromBlobPart({ fileName: '销售目标.xls', source: data });
}
/** å¯¼å…¥é”€å”®ç›®æ ‡ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['销售目标']),
      fileName: '销售目标导入模板.xls',
      importFn: importSalesTarget,
      templateFn: importSalesTargetTemplate,
    })
    .open();
}
/** æ–°å¢žé”€å”®ç›®æ ‡ */
@@ -115,6 +136,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid>
      <template #toolbar-tools>
        <TableAction
@@ -133,6 +155,13 @@
              auth: ['crm:sales-target:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['销售目标']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['crm:sales-target:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/erp/finance/account/index.vue
@@ -12,15 +12,24 @@
  deleteAccount,
  exportAccount,
  getAccountPage,
  importAccount,
  importAccountTemplate,
  updateAccountDefaultStatus,
} from '#/api/erp/finance/account';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -38,6 +47,18 @@
/** åˆ›å»ºç»“算账户 */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥ç»“算账户 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['结算账户']),
      fileName: '结算账户导入模板.xls',
      importFn: importAccount,
      templateFn: importAccountTemplate,
    })
    .open();
}
/** ç¼–辑结算账户 */
@@ -112,6 +133,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="结算账户列表">
      <template #toolbar-tools>
        <TableAction
@@ -130,6 +152,13 @@
              auth: ['erp:account:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['结算账户']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['erp:account:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/erp/purchase/invoice/index.vue
@@ -12,8 +12,12 @@
  deletePurchaseInvoice,
  exportPurchaseInvoice,
  getPurchaseInvoicePage,
  importPurchaseInvoice,
  importPurchaseInvoiceTemplate,
} from '#/api/erp/purchase/invoice';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -22,6 +26,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -40,6 +49,18 @@
/** åˆ›å»ºæ¥ç¥¨ */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥æ¥ç¥¨ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['来票']),
      fileName: '来票导入模板.xls',
      importFn: importPurchaseInvoice,
      templateFn: importPurchaseInvoiceTemplate,
    })
    .open();
}
/** ç¼–辑来票 */
@@ -101,6 +122,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="来票列表">
      <template #toolbar-tools>
        <TableAction
@@ -119,6 +141,13 @@
              auth: ['erp:purchase-invoice:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['来票']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['erp:purchase-invoice:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/erp/purchase/order/index.vue
@@ -18,9 +18,13 @@
  exportPurchaseOrder,
  getPurchaseOrderApproverUserIds,
  getPurchaseOrderPage,
  importPurchaseOrder,
  importPurchaseOrderTemplate,
  submitPurchaseOrder,
} from '#/api/erp/purchase/order';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -47,6 +51,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
@@ -61,6 +70,18 @@
/** æ–°å¢žé‡‡è´­è®¢å• */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥é‡‡è´­è®¢å• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['采购订单']),
      fileName: '采购订单导入模板.xls',
      importFn: importPurchaseOrder,
      templateFn: importPurchaseOrderTemplate,
    })
    .open();
}
/** ç¼–辑采购订单 */
@@ -216,6 +237,7 @@
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="采购订单列表">
      <template #toolbar-tools>
        <TableAction
@@ -235,6 +257,13 @@
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['采购订单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['erp:purchase-order:import'],
              onClick: handleImport,
            },
            {
              label: '批量删除',
              type: 'primary',
              danger: true,
src/views/erp/purchase/plan/index.vue
@@ -19,9 +19,13 @@
  generatePurchaseRequests,
  getPurchasePlanApproverUserIds,
  getPurchasePlanPage,
  importPurchasePlan,
  importPurchasePlanTemplate,
  submitPurchasePlan,
} from '#/api/erp/purchase/plan';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -48,6 +52,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
@@ -62,6 +71,18 @@
/** æ–°å¢žé‡‡è´­è®¡åˆ’ */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥é‡‡è´­è®¡åˆ’ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['采购计划']),
      fileName: '采购计划导入模板.xls',
      importFn: importPurchasePlan,
      templateFn: importPurchasePlanTemplate,
    })
    .open();
}
/** ç¼–辑采购计划 */
@@ -230,6 +251,7 @@
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="采购计划列表">
      <template #toolbar-tools>
        <TableAction
@@ -259,6 +281,13 @@
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['采购计划']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['erp:purchase-plan:import'],
              onClick: handleImport,
            },
            {
              label: '批量删除',
              type: 'primary',
              danger: true,
src/views/erp/purchase/request/index.vue
@@ -17,9 +17,13 @@
  exportPurchaseRequest,
  getPurchaseRequestApproverUserIds,
  getPurchaseRequestPage,
  importPurchaseRequest,
  importPurchaseRequestTemplate,
  submitPurchaseRequest,
} from '#/api/erp/purchase/request';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -49,6 +53,11 @@
const [AuditModalComp, auditModalApi] = useVbenModal({
  connectedComponent: AuditModal,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -83,6 +92,18 @@
/** æ–°å¢žé‡‡è´­ç”³è¯· */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥é‡‡è´­ç”³è¯· */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['采购申请']),
      fileName: '采购申请导入模板.xls',
      importFn: importPurchaseRequest,
      templateFn: importPurchaseRequestTemplate,
    })
    .open();
}
/** ç¼–辑采购申请 */
@@ -214,6 +235,7 @@
    <FormModal @success="handleRefresh" />
    <OrderFormModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="采购申请列表">
      <template #toolbar-tools>
        <TableAction
@@ -233,6 +255,13 @@
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['采购申请']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['erp:purchase-request:import'],
              onClick: handleImport,
            },
            {
              label: '批量删除',
              type: 'primary',
              danger: true,
src/views/erp/purchase/supplier/index.vue
@@ -12,8 +12,12 @@
  deleteSupplier,
  exportSupplier,
  getSupplierPage,
  importSupplier,
  importSupplierTemplate,
} from '#/api/erp/purchase/supplier';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import SupplierForm from './modules/form.vue';
@@ -29,6 +33,18 @@
/** åˆ›å»ºä¾›åº”商 */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥ä¾›åº”商 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['供应商']),
      fileName: '供应商导入模板.xls',
      importFn: importSupplier,
      templateFn: importSupplierTemplate,
    })
    .open();
}
/** ç¼–辑供应商 */
@@ -59,6 +75,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: SupplierForm,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -95,6 +116,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="供应商列表">
      <template #toolbar-tools>
        <TableAction
@@ -113,6 +135,13 @@
              auth: ['erp:supplier:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['供应商']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['erp:supplier:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/erp/sale/order/index.vue
@@ -17,10 +17,14 @@
  enableSaleOrder,
  exportSaleOrder,
  getSaleOrderPage,
  importSaleOrder,
  importSaleOrderTemplate,
  updateSaleOrderStatus,
} from '#/api/erp/sale/order';
import { generateFromSaleOrder } from '#/api/mes/wm/salesnotice';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -42,6 +46,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
@@ -56,6 +65,18 @@
/** æ–°å¢žé”€å”®è®¢å• */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥é”€å”®è®¢å• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['销售订单']),
      fileName: '销售订单导入模板.xls',
      importFn: importSaleOrder,
      templateFn: importSaleOrderTemplate,
    })
    .open();
}
/** ç¼–辑销售订单 */
@@ -220,6 +241,7 @@
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <SalesNoticeFormModal />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="销售订单列表">
      <template #toolbar-tools>
        <TableAction
@@ -239,6 +261,13 @@
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['销售订单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['erp:sale-order:import'],
              onClick: handleImport,
            },
            {
              label: '批量删除',
              type: 'primary',
              danger: true,
src/views/hrm/attendance/holiday/index.vue
@@ -8,14 +8,21 @@
import { message, Modal, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteAttendanceHoliday, exportAttendanceHoliday, getAttendanceHolidayPage } from '#/api/hrm/attendance/holiday';
import { deleteAttendanceHoliday, exportAttendanceHoliday, getAttendanceHolidayPage, importAttendanceHoliday, importAttendanceHolidayTemplate } from '#/api/hrm/attendance/holiday';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -60,6 +67,18 @@
  downloadFileFromBlobPart({ fileName: '节假日配置.xls', source: data });
}
/** å¯¼å…¥èŠ‚å‡æ—¥ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['节假日']),
      fileName: '节假日配置导入模板.xls',
      importFn: importAttendanceHoliday,
      templateFn: importAttendanceHolidayTemplate,
    })
    .open();
}
const [Grid, gridApi] = useVbenVxeGrid({
  formOptions: {
    schema: useGridFormSchema(),
@@ -93,6 +112,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="节假日配置列表">
      <template #toolbar-tools>
        <TableAction
@@ -111,6 +131,13 @@
              auth: ['hrm:attendance-holiday:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['节假日']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['hrm:attendance-holiday:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/hrm/attendance/rule/index.vue
@@ -8,14 +8,21 @@
import { message, Modal } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteAttendanceRule, exportAttendanceRule, getAttendanceRulePage } from '#/api/hrm/attendance/rule';
import { deleteAttendanceRule, exportAttendanceRule, getAttendanceRulePage, importAttendanceRule, importAttendanceRuleTemplate } from '#/api/hrm/attendance/rule';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -60,6 +67,18 @@
  downloadFileFromBlobPart({ fileName: '考勤规则.xls', source: data });
}
/** å¯¼å…¥è€ƒå‹¤è§„则 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['考勤规则']),
      fileName: '考勤规则导入模板.xls',
      importFn: importAttendanceRule,
      templateFn: importAttendanceRuleTemplate,
    })
    .open();
}
const [Grid, gridApi] = useVbenVxeGrid({
  formOptions: {
    schema: useGridFormSchema(),
@@ -93,6 +112,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="考勤规则列表">
      <template #toolbar-tools>
        <TableAction
@@ -111,6 +131,13 @@
              auth: ['hrm:attendance-rule:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['考勤规则']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['hrm:attendance-rule:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/hrm/certificate/index.vue
@@ -10,8 +10,10 @@
import { message, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteCertificate, getCertificatePage } from '#/api/hrm/certificate';
import { deleteCertificate, getCertificatePage, importCertificate, importCertificateTemplate } from '#/api/hrm/certificate';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -21,6 +23,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -52,6 +59,18 @@
  } finally {
    hideLoading();
  }
}
/** å¯¼å…¥è¯ä¹¦èµ„è´¨ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['证书资质']),
      fileName: '证书资质导入模板.xls',
      importFn: importCertificate,
      templateFn: importCertificateTemplate,
    })
    .open();
}
const checkedIds = ref<number[]>([]);
@@ -101,6 +120,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="证书资质列表">
      <template #toolbar-tools>
        <TableAction
@@ -124,6 +144,13 @@
                confirm: handleDelete.bind(null, checkedIds),
              },
            },
            {
              label: $t('ui.actionTitle.import', ['证书资质']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['hrm:certificate:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/hrm/performance-appraise/index.vue
@@ -15,9 +15,13 @@
  deleteAppraise,
  getAppraiseApproverIds,
  getAppraisePage,
  importAppraise,
  importAppraiseTemplate,
  submitAppraise,
} from '#/api/hrm/performance-appraise';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { APPRAISE_STATUS, AUDIT_STATUS, useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -75,6 +79,11 @@
const [AuditFormModal, auditModalApi] = useVbenModal({
  connectedComponent: AuditModal,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -142,6 +151,18 @@
  auditModalApi.setData({ pass, row }).open();
}
/** å¯¼å…¥ç»©æ•ˆè€ƒæ ¸æ–¹æ¡ˆ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['绩效考核方案']),
      fileName: '绩效考核方案导入模板.xls',
      importFn: importAppraise,
      templateFn: importAppraiseTemplate,
    })
    .open();
}
const checkedIds = ref<number[]>([]);
function handleRowCheckboxChange({
  records,
@@ -196,6 +217,7 @@
    <ScoreFormModal @success="handleRefresh" />
    <ResultFormModal @success="handleRefresh" />
    <AuditFormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="绩效考核方案列表">
      <template #toolbar-tools>
        <TableAction
@@ -219,6 +241,13 @@
                confirm: handleDelete.bind(null, checkedIds),
              },
            },
            {
              label: $t('ui.actionTitle.import', ['绩效考核方案']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['hrm:performance-appraise:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/hrm/salary/employee-social-security/index.vue
@@ -10,8 +10,12 @@
import {
  deleteEmployeeSocialSecurity,
  getEmployeeSocialSecurityPage,
  importEmployeeSocialSecurity,
  importEmployeeSocialSecurityTemplate,
} from '#/api/hrm/salary/employee-social-security';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -24,6 +28,11 @@
const [HistoryModal, historyModalApi] = useVbenModal({
  connectedComponent: History,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -52,6 +61,18 @@
  await deleteEmployeeSocialSecurity(row.id!);
  message.success($t('ui.actionMessage.deleteSuccess', ['员工社保公积金档案']));
  handleRefresh();
}
/** å¯¼å…¥å‘˜å·¥ç¤¾ä¿å…¬ç§¯é‡‘档案 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['员工社保公积金档案']),
      fileName: '员工社保公积金档案导入模板.xls',
      importFn: importEmployeeSocialSecurity,
      templateFn: importEmployeeSocialSecurityTemplate,
    })
    .open();
}
const [Grid, gridApi] = useVbenVxeGrid({
@@ -88,6 +109,7 @@
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <HistoryModal />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="员工社保公积金档案列表">
      <template #toolbar-tools>
        <TableAction
@@ -99,6 +121,13 @@
              auth: ['hrm:employee-social-security:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['员工社保公积金档案']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['hrm:employee-social-security:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/hrm/salary/leave-type-config/index.vue
@@ -7,14 +7,21 @@
import { message, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { getLeaveTypeConfigList } from '#/api/hrm/leave-type-config';
import { getLeaveTypeConfigList, importLeaveTypeConfig, importLeaveTypeConfigTemplate } from '#/api/hrm/leave-type-config';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -26,6 +33,18 @@
/** ç¼–辑配置 */
function handleEdit(row: HrmLeaveTypeConfigApi.LeaveTypeConfig) {
  formModalApi.setData({ id: row.id, row }).open();
}
/** å¯¼å…¥è¯·å‡ç±»åž‹æ‰£æ¬¾é…ç½® */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['请假类型扣款配置']),
      fileName: '请假类型扣款配置导入模板.xls',
      importFn: importLeaveTypeConfig,
      templateFn: importLeaveTypeConfigTemplate,
    })
    .open();
}
const [Grid, gridApi] = useVbenVxeGrid({
@@ -55,7 +74,21 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="请假扣款配置列表">
      <template #toolbar-tools>
        <TableAction
          :actions="[
            {
              label: $t('ui.actionTitle.import', ['请假类型扣款配置']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['hrm:leave-type-config:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
      <template #deductionRatio="{ row }">
        <Tag :color="row.deductionRatio === 0 ? 'success' : row.deductionRatio === 1 ? 'error' : 'warning'">
          {{ row.deductionRatio === 0 ? '不扣款' : `${(row.deductionRatio * 100).toFixed(0)}%` }}
src/views/hrm/salary/social-security-scheme/index.vue
@@ -10,14 +10,23 @@
import {
  deleteSocialSecurityScheme,
  getSocialSecuritySchemeList,
  importSocialSecurityScheme,
  importSocialSecuritySchemeTemplate,
} from '#/api/hrm/salary/social-security-scheme';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -41,6 +50,18 @@
  await deleteSocialSecurityScheme(row.id!);
  message.success($t('ui.actionMessage.deleteSuccess', ['社保公积金方案']));
  handleRefresh();
}
/** å¯¼å…¥ç¤¾ä¿å…¬ç§¯é‡‘方案 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['社保公积金方案']),
      fileName: '社保公积金方案导入模板.xls',
      importFn: importSocialSecurityScheme,
      templateFn: importSocialSecuritySchemeTemplate,
    })
    .open();
}
/** æ ¼å¼åŒ–比例显示 */
@@ -81,6 +102,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="社保公积金方案列表">
      <template #toolbar-tools>
        <TableAction
@@ -92,6 +114,13 @@
              auth: ['hrm:social-security-scheme:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['社保公积金方案']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['hrm:social-security-scheme:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/hrm/salary/tax-rate-config/index.vue
@@ -10,14 +10,23 @@
import {
  deleteTaxRateConfig,
  getTaxRateConfigList,
  importTaxRateConfig,
  importTaxRateConfigTemplate,
} from '#/api/hrm/salary/tax-rate-config';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -41,6 +50,18 @@
  await deleteTaxRateConfig(row.id!);
  message.success($t('ui.actionMessage.deleteSuccess', ['个税税率配置']));
  handleRefresh();
}
/** å¯¼å…¥ä¸ªç¨Žç¨ŽçŽ‡é…ç½® */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['个税税率配置']),
      fileName: '个税税率配置导入模板.xls',
      importFn: importTaxRateConfig,
      templateFn: importTaxRateConfigTemplate,
    })
    .open();
}
const [Grid, gridApi] = useVbenVxeGrid({
@@ -70,6 +91,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="个税税率配置列表">
      <template #toolbar-tools>
        <TableAction
@@ -81,6 +103,13 @@
              auth: ['hrm:tax-rate-config:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['个税税率配置']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['hrm:tax-rate-config:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/infra/config/index.vue
@@ -15,8 +15,12 @@
  deleteConfigList,
  exportConfig,
  getConfigPage,
  importConfig,
  importConfigTemplate,
} from '#/api/infra/config';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -26,9 +30,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥å‚æ•° */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['参数']),
      fileName: '参数配置导入模板.xls',
      importFn: importConfig,
      templateFn: importConfigTemplate,
    })
    .open();
}
/** å¯¼å‡ºè¡¨æ ¼ */
@@ -126,6 +147,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="参数列表">
      <template #toolbar-tools>
        <TableAction
@@ -145,6 +167,13 @@
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['参数']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['infra:config:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.deleteBatch'),
              type: 'primary',
              danger: true,
src/views/infra/dataSourceConfig/index.vue
@@ -14,8 +14,12 @@
  deleteDataSourceConfig,
  deleteDataSourceConfigList,
  getDataSourceConfigList,
  importDataSourceConfig,
  importDataSourceConfigTemplate,
} from '#/api/infra/data-source-config';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns } from './data';
import Form from './modules/form.vue';
@@ -25,9 +29,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥æ•°æ®æº */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['数据源']),
      fileName: '数据源配置导入模板.xls',
      importFn: importDataSourceConfig,
      templateFn: importDataSourceConfigTemplate,
    })
    .open();
}
/** åˆ›å»ºæ•°æ®æº */
@@ -110,6 +131,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="数据源列表">
      <template #toolbar-tools>
        <TableAction
@@ -122,6 +144,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['数据源']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['infra:data-source-config:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.deleteBatch'),
              type: 'primary',
              danger: true,
src/views/infra/job/index.vue
@@ -17,11 +17,15 @@
  deleteJobList,
  exportJob,
  getJobPage,
  importJob,
  importJobTemplate,
  runJob,
  syncJob,
  updateJobStatus,
} from '#/api/infra/job';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Detail from './modules/detail.vue';
@@ -39,9 +43,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥ä»»åŠ¡ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['任务']),
      fileName: '定时任务导入模板.xls',
      importFn: importJob,
      templateFn: importJobTemplate,
    })
    .open();
}
/** å¯¼å‡ºè¡¨æ ¼ */
@@ -201,6 +222,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <DetailModal />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="定时任务列表">
      <template #toolbar-tools>
        <TableAction
@@ -220,6 +242,13 @@
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['任务']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['infra:job:import'],
              onClick: handleImport,
            },
            {
              label: '执行日志',
              type: 'primary',
              icon: 'lucide:history',
src/views/mes/cal/plan/index.vue
@@ -9,14 +9,27 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deletePlan, exportPlan, getPlanPage } from '#/api/mes/cal/plan';
import {
  deletePlan,
  exportPlan,
  getPlanPage,
  importPlan,
  importPlanTemplate,
} from '#/api/mes/cal/plan';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -28,6 +41,18 @@
/** åˆ›å»ºæŽ’班计划 */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥æŽ’班计划 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['排班计划']),
      fileName: '排班计划导入模板.xls',
      importFn: importPlan,
      templateFn: importPlanTemplate,
    })
    .open();
}
/** æŸ¥çœ‹æŽ’班计划 */
@@ -93,6 +118,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="排班计划列表">
      <template #toolbar-tools>
        <TableAction
@@ -111,6 +137,13 @@
              auth: ['mes:cal-plan:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['排班计划']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:cal-plan:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/cal/team/index.vue
@@ -8,14 +8,27 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteTeam, exportTeam, getTeamPage } from '#/api/mes/cal/team';
import {
  deleteTeam,
  exportTeam,
  getTeamPage,
  importTeam,
  importTeamTemplate,
} from '#/api/mes/cal/team';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -27,6 +40,18 @@
/** åˆ›å»ºç­ç»„ */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥ç­ç»„ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['班组']),
      fileName: '班组导入模板.xls',
      importFn: importTeam,
      templateFn: importTeamTemplate,
    })
    .open();
}
/** æŸ¥çœ‹ç­ç»„ */
@@ -93,6 +118,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="班组列表">
      <template #toolbar-tools>
        <TableAction
@@ -111,6 +137,13 @@
              auth: ['mes:cal-team:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['班组']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:cal-team:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/dv/checkplan/index.vue
@@ -10,20 +10,19 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteCheckPlan,
  disableCheckPlan,
  enableCheckPlan,
  exportCheckPlan,
  getCheckPlanPage,
} from '#/api/mes/dv/checkplan';
import { deleteCheckPlan, disableCheckPlan, enableCheckPlan, exportCheckPlan, getCheckPlanPage, importCheckPlan, importCheckPlanTemplate } from '#/api/mes/dv/checkplan';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -31,6 +30,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥ç‚¹æ£€ä¿å…»æ–¹æ¡ˆ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['点检保养方案']),
      fileName: '点检保养方案导入模板.xls',
      importFn: importCheckPlan,
      templateFn: importCheckPlanTemplate,
    })
    .open();
}
/** åˆ›å»ºç‚¹æ£€è®¡åˆ’ */
function handleCreate() {
@@ -162,6 +174,7 @@
</script>
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="点检保养方案列表">
      <template #toolbar-tools>
        <TableAction
@@ -180,6 +193,13 @@
              auth: ['mes:dv-check-plan:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['点检保养方案']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:dv-check-plan:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/dv/checkrecord/index.vue
@@ -9,18 +9,19 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteCheckRecord,
  exportCheckRecord,
  getCheckRecordPage,
} from '#/api/mes/dv/checkrecord';
import { deleteCheckRecord, exportCheckRecord, getCheckRecordPage, importCheckRecord, importCheckRecordTemplate } from '#/api/mes/dv/checkrecord';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -28,6 +29,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥è®¾å¤‡ç‚¹æ£€è®°å½• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['设备点检记录']),
      fileName: '设备点检记录导入模板.xls',
      importFn: importCheckRecord,
      templateFn: importCheckRecordTemplate,
    })
    .open();
}
/** åˆ›å»ºç‚¹æ£€è®°å½• */
function handleCreate() {
@@ -96,6 +110,7 @@
</script>
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="点检记录列表">
      <template #toolbar-tools>
        <TableAction
@@ -114,6 +129,13 @@
              auth: ['mes:dv-check-record:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['设备点检记录']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:dv-check-record:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/dv/machinery/type/index.vue
@@ -9,17 +9,19 @@
import { message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteMachineryType,
  getMachineryTypeList,
} from '#/api/mes/dv/machinery/type';
import { deleteMachineryType, getMachineryTypeList, importMachineryType, importMachineryTypeTemplate } from '#/api/mes/dv/machinery/type';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -35,6 +37,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥è®¾å¤‡ç±»åž‹ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['设备类型']),
      fileName: '设备类型导入模板.xls',
      importFn: importMachineryType,
      templateFn: importMachineryTypeTemplate,
    })
    .open();
}
/** åˆ›å»ºè®¾å¤‡ç±»åž‹ */
function handleCreate() {
@@ -104,6 +119,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="设备类型列表">
      <template #toolbar-tools>
        <TableAction
@@ -116,6 +132,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['设备类型']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:dv-machinery-type:import'],
              onClick: handleImport,
            },
            {
              label: isExpanded ? '收缩' : '展开',
              type: 'primary',
              onClick: handleExpand,
src/views/mes/dv/maintenrecord/index.vue
@@ -9,18 +9,19 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteMaintenRecord,
  exportMaintenRecord,
  getMaintenRecordPage,
} from '#/api/mes/dv/maintenrecord';
import { deleteMaintenRecord, exportMaintenRecord, getMaintenRecordPage, importMaintenRecord, importMaintenRecordTemplate } from '#/api/mes/dv/maintenrecord';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -28,6 +29,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥è®¾å¤‡ä¿å…»è®°å½• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['设备保养记录']),
      fileName: '设备保养记录导入模板.xls',
      importFn: importMaintenRecord,
      templateFn: importMaintenRecordTemplate,
    })
    .open();
}
/** åˆ›å»ºä¿å…»è®°å½• */
function handleCreate() {
@@ -96,6 +110,7 @@
</script>
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="保养记录列表">
      <template #toolbar-tools>
        <TableAction
@@ -114,6 +129,13 @@
              auth: ['mes:dv-mainten-record:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['设备保养记录']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:dv-mainten-record:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/dv/metering/index.vue
@@ -8,11 +8,7 @@
import { Button, message, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteMetering,
  exportMetering,
  getMeteringPage,
} from '#/api/mes/dv/metering';
import { deleteMetering, exportMetering, getMeteringPage, importMetering, importMeteringTemplate } from '#/api/mes/dv/metering';
import { $t } from '#/locales';
import {
@@ -20,10 +16,15 @@
  useGridColumns,
  useGridFormSchema,
} from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -31,6 +32,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥è®¡é‡å™¨å…· */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['计量器具']),
      fileName: '计量器具导入模板.xls',
      importFn: importMetering,
      templateFn: importMeteringTemplate,
    })
    .open();
}
/** åˆ›å»ºè®¡é‡å™¨å…· */
function handleCreate() {
@@ -105,6 +119,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="计量器具列表">
      <template #toolbar-tools>
        <TableAction
@@ -123,6 +138,13 @@
              auth: ['mes:dv-metering:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['计量器具']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:dv-metering:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/dv/meteringcheck/index.vue
@@ -8,18 +8,19 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteMeteringCheck,
  exportMeteringCheck,
  getMeteringCheckPage,
} from '#/api/mes/dv/meteringcheck';
import { deleteMeteringCheck, exportMeteringCheck, getMeteringCheckPage, importMeteringCheck, importMeteringCheckTemplate } from '#/api/mes/dv/meteringcheck';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -27,6 +28,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥è®¡é‡æ£€æµ‹è®°å½• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['计量检测记录']),
      fileName: '计量检测记录导入模板.xls',
      importFn: importMeteringCheck,
      templateFn: importMeteringCheckTemplate,
    })
    .open();
}
/** åˆ›å»ºè®¡é‡æ£€æµ‹è®°å½• */
function handleCreate() {
@@ -96,6 +110,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="计量检测记录列表">
      <template #toolbar-tools>
        <TableAction
@@ -114,6 +129,13 @@
              auth: ['mes:dv-metering-check:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['计量检测记录']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:dv-metering-check:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/dv/repair/index.vue
@@ -9,14 +9,19 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteRepair, exportRepair, getRepairPage } from '#/api/mes/dv/repair';
import { deleteRepair, exportRepair, getRepairPage, importRepair, importRepairTemplate } from '#/api/mes/dv/repair';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -24,6 +29,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥ç»´ä¿®å·¥å• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['维修工单']),
      fileName: '维修工单导入模板.xls',
      importFn: importRepair,
      templateFn: importRepairTemplate,
    })
    .open();
}
/** åˆ›å»ºç»´ä¿®è®¢å• */
function handleCreate() {
@@ -102,6 +120,7 @@
</script>
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="维修订单列表">
      <template #toolbar-tools>
        <TableAction
@@ -120,6 +139,13 @@
              auth: ['mes:dv-repair:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['维修工单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:dv-repair:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/dv/subject/index.vue
@@ -8,18 +8,19 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteSubject,
  exportSubject,
  getSubjectPage,
} from '#/api/mes/dv/subject';
import { deleteSubject, exportSubject, getSubjectPage, importSubject, importSubjectTemplate } from '#/api/mes/dv/subject';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -27,6 +28,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥ç‚¹æ£€ä¿å…»é¡¹ç›® */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['点检保养项目']),
      fileName: '点检保养项目导入模板.xls',
      importFn: importSubject,
      templateFn: importSubjectTemplate,
    })
    .open();
}
/** åˆ›å»ºç‚¹æ£€ä¿å…»é¡¹ç›® */
function handleCreate() {
@@ -96,6 +110,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="点检保养项目列表">
      <template #toolbar-tools>
        <TableAction
@@ -114,6 +129,13 @@
              auth: ['mes:dv-subject:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['点检保养项目']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:dv-subject:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/md/autocode/index.vue
@@ -12,14 +12,23 @@
  deleteAutoCodeRule,
  exportAutoCodeRule,
  getAutoCodeRulePage,
  importAutoCodeRule,
  importAutoCodeRuleTemplate,
} from '#/api/mes/md/autocode/rule';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -31,6 +40,18 @@
/** åˆ›å»ºç¼–码规则 */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥ç¼–码规则 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['编码规则']),
      fileName: '编码规则导入模板.xls',
      importFn: importAutoCodeRule,
      templateFn: importAutoCodeRuleTemplate,
    })
    .open();
}
/** ç¼–辑编码规则 */
@@ -92,6 +113,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="编码规则列表">
      <template #toolbar-tools>
        <TableAction
@@ -110,6 +132,13 @@
              auth: ['mes:auto-code-rule:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['编码规则']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:auto-code-rule:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/md/item/type/index.vue
@@ -9,14 +9,26 @@
import { message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteItemType, getItemTypeList } from '#/api/mes/md/item/type';
import {
  deleteItemType,
  getItemTypeList,
  importItemType,
  importItemTypeTemplate,
} from '#/api/mes/md/item/type';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -36,6 +48,18 @@
/** åˆ›å»ºåˆ†ç±» */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥åˆ†ç±» */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['物料分类']),
      fileName: '物料分类导入模板.xls',
      importFn: importItemType,
      templateFn: importItemTypeTemplate,
    })
    .open();
}
/** æ·»åŠ ä¸‹çº§åˆ†ç±» */
@@ -102,6 +126,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="物料分类列表">
      <template #toolbar-tools>
        <TableAction
@@ -114,6 +139,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['物料分类']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:md-item-type:import'],
              onClick: handleImport,
            },
            {
              label: isExpanded ? '收缩' : '展开',
              type: 'primary',
              onClick: handleExpand,
src/views/mes/md/workstation/index.vue
@@ -15,9 +15,13 @@
  deleteWorkstation,
  exportWorkstation,
  getWorkstationPage,
  importWorkstation,
  importWorkstationTemplate,
} from '#/api/mes/md/workstation';
import { $t } from '#/locales';
// import { BarcodeDetail } from '#/views/wls/barcode/components';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -29,6 +33,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
@@ -37,6 +46,18 @@
/** åˆ›å»ºå·¥ä½œç«™ */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥å·¥ä½œç«™ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['工作站']),
      fileName: '工作站导入模板.xls',
      importFn: importWorkstation,
      templateFn: importWorkstationTemplate,
    })
    .open();
}
/** æŸ¥çœ‹å·¥ä½œç«™ */
@@ -116,6 +137,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <!-- <BarcodeDetail ref="barcodeDetailRef" /> -->
    <Grid table-title="工作站列表">
@@ -136,6 +158,13 @@
              auth: ['mes:md-workstation:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['工作站']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:md-workstation:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/md/workstation/workshop/index.vue
@@ -10,14 +10,23 @@
import {
  deleteWorkshop,
  getWorkshopPage,
  importWorkshop,
  importWorkshopTemplate,
} from '#/api/mes/md/workstation/workshop';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -29,6 +38,18 @@
/** åˆ›å»ºè½¦é—´ */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥è½¦é—´ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['车间']),
      fileName: '车间导入模板.xls',
      importFn: importWorkshop,
      templateFn: importWorkshopTemplate,
    })
    .open();
}
/** æŸ¥çœ‹è½¦é—´ */
@@ -89,6 +110,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="车间列表">
      <template #toolbar-tools>
        <TableAction
@@ -100,6 +122,13 @@
              auth: ['mes:md-workshop:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['车间']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:md-workshop:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/pd/ctc-reel/index.vue
@@ -13,13 +13,21 @@
  import {
    deleteCtcReel,
    getCtcReelPage,
    importCtcReel,
    importCtcReelTemplate,
  } from '#/api/mes/pd/ctc-reel';
  import ImportModalComponent from '#/components/import-modal';
  import { useGridColumns, useGridFormSchema } from './data';
  import Form from './modules/form.vue';
  const [FormModal, formModalApi] = useVbenModal({
    connectedComponent: Form,
    destroyOnClose: true,
  });
  const [ImportModal, importModalApi] = useVbenModal({
    connectedComponent: ImportModalComponent,
    destroyOnClose: true,
  });
@@ -31,6 +39,18 @@
  /** æ–°å¢ž */
  function handleCreate() {
    formModalApi.setData({ formType: 'create' }).open();
  }
  /** å¯¼å…¥ */
  function handleImport() {
    importModalApi
      .setData({
        title: $t('ui.actionTitle.import', ['盘具计算']),
        fileName: '盘具计算记录导入模板.xls',
        importFn: importCtcReel,
        templateFn: importCtcReelTemplate,
      })
      .open();
  }
  /** æŸ¥çœ‹ */
@@ -93,6 +113,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="换位导线盘具计算列表">
      <template #toolbar-tools>
        <TableAction
@@ -104,6 +125,12 @@
              auth: ['mes:pd-ctc-reel:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['盘具计算']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pd-ctc-reel:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/pd/ctc/index.vue
@@ -15,13 +15,21 @@
    deleteCtc,
    exportCtc,
    getCtcPage,
    importCtc,
    importCtcTemplate,
  } from '#/api/mes/pd/ctc';
  import ImportModalComponent from '#/components/import-modal';
  import { useGridColumns, useGridFormSchema } from './data';
  import Form from './modules/form.vue';
  const [FormModal, formModalApi] = useVbenModal({
    connectedComponent: Form,
    destroyOnClose: true,
  });
  const [ImportModal, importModalApi] = useVbenModal({
    connectedComponent: ImportModalComponent,
    destroyOnClose: true,
  });
@@ -33,6 +41,18 @@
  /** æ–°å¢ž */
  function handleCreate() {
    formModalApi.setData({ formType: 'create' }).open();
  }
  /** å¯¼å…¥ */
  function handleImport() {
    importModalApi
      .setData({
        title: $t('ui.actionTitle.import', ['换位导线技术参数']),
        fileName: '换位导线产品技术参数导入模板.xls',
        importFn: importCtc,
        templateFn: importCtcTemplate,
      })
      .open();
  }
  /** æŸ¥çœ‹ */
@@ -99,6 +119,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="换位导线技术参数列表">
      <template #toolbar-tools>
        <TableAction
@@ -111,6 +132,12 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['换位导线技术参数']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pd-ctc:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/mes/pd/product/index.vue
@@ -13,8 +13,12 @@
    deleteProduct,
    exportProduct,
    getProductPage,
    importProduct,
    importProductTemplate,
    submitProduct,
  } from '#/api/mes/pd/product';
  import ImportModalComponent from '#/components/import-modal';
  import { AuditStatus, useGridColumns, useGridFormSchema } from './data';
  import Audit from './modules/audit.vue';
@@ -28,6 +32,10 @@
    connectedComponent: Audit,
    destroyOnClose: true,
  });
  const [ImportModal, importModalApi] = useVbenModal({
    connectedComponent: ImportModalComponent,
    destroyOnClose: true,
  });
  /** åˆ·æ–°è¡¨æ ¼ */
  function handleRefresh() {
@@ -37,6 +45,18 @@
  /** æ–°å¢ž */
  function handleCreate() {
    formModalApi.setData({ formType: 'create' }).open();
  }
  /** å¯¼å…¥ */
  function handleImport() {
    importModalApi
      .setData({
        title: $t('ui.actionTitle.import', ['产品档案']),
        fileName: '产品档案导入模板.xls',
        importFn: importProduct,
        templateFn: importProductTemplate,
      })
      .open();
  }
  /** æŸ¥çœ‹ */
@@ -121,6 +141,7 @@
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <AuditModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="产品档案列表">
      <template #toolbar-tools>
        <TableAction
@@ -139,6 +160,13 @@
              auth: ['mes:pd-product:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['产品档案']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pd-product:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/pd/project/index.vue
@@ -21,11 +21,15 @@
  exportPdProject,
  getPdProjectApproverIds,
  getPdProjectPage,
  importPdProject,
  importPdProjectTemplate,
  publishPdProject,
  submitPdProjectApproval,
} from '#/api/mes/pd/project';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -73,10 +77,27 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ä¸Žå®¡æ ¸äººé›†åˆ */
function handleRefresh() {
  gridApi.query();
  loadApproverIds();
}
/** å¯¼å…¥è®¾è®¡é¡¹ç›® */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['设计项目']),
      fileName: '设计项目导入模板.xls',
      importFn: importPdProject,
      templateFn: importPdProjectTemplate,
    })
    .open();
}
function handleCreateSuccess() {
@@ -197,6 +218,7 @@
    <CreateFormModal @success="handleCreateSuccess" />
    <FormModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="设计任务">
      <template #toolbar-tools>
@@ -216,6 +238,13 @@
              auth: ['mes:pd-project:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['设计项目']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pd-project:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/pd/tech-confirm/index.vue
@@ -18,8 +18,11 @@
    exportTechConfirm,
    getTechConfirmApproverIds,
    getTechConfirmPage,
    importTechConfirm,
    importTechConfirmTemplate,
    submitTechConfirmAudit,
  } from '#/api/mes/pd/tech-confirm';
  import ImportModalComponent from '#/components/import-modal';
  import { useUserStore } from '@vben/stores';
  import { useGridColumns, useGridFormSchema } from './data';
@@ -66,6 +69,11 @@
    destroyOnClose: true,
  });
  const [ImportModal, importModalApi] = useVbenModal({
    connectedComponent: ImportModalComponent,
    destroyOnClose: true,
  });
  /** åˆ·æ–°è¡¨æ ¼ä¸Žå®¡æ ¸äººé›†åˆ */
  function handleRefresh() {
    gridApi.query();
@@ -75,6 +83,18 @@
  /** æ–°å¢ž */
  function handleCreate() {
    formModalApi.setData({ formType: 'create' }).open();
  }
  /** å¯¼å…¥ */
  function handleImport() {
    importModalApi
      .setData({
        title: $t('ui.actionTitle.import', ['技术确认函']),
        fileName: '产品技术确认函导入模板.xls',
        importFn: importTechConfirm,
        templateFn: importTechConfirmTemplate,
      })
      .open();
  }
  /** æŸ¥çœ‹ */
@@ -177,6 +197,7 @@
    <FormModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <CustomerConfirm @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="产品技术确认函列表">
      <template #toolbar-tools>
        <TableAction
@@ -189,6 +210,12 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['技术确认函']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pd-tech-confirm:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/mes/pro/alternativeplan/index.vue
@@ -10,7 +10,14 @@
import { message, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deletePlan, getPlanPage, publishPlan } from '#/api/mes/pro/alternativeplan';
import {
  deletePlan,
  getPlanPage,
  importPlan,
  importPlanTemplate,
  publishPlan,
} from '#/api/mes/pro/alternativeplan';
import ImportModalComponent from '#/components/import-modal';
import { $t } from '#/locales';
import { PLAN_STATUS, useGridColumns, useGridFormSchema } from './data';
@@ -21,6 +28,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -58,6 +70,18 @@
  await publishPlan(row.id!);
  message.success('已发布');
  handleRefresh();
}
/** å¯¼å…¥ä½œä¸šæ›¿ä»£æ–¹æ¡ˆ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['作业替代方案']),
      fileName: '作业替代方案导入模板.xls',
      importFn: importPlan,
      templateFn: importPlanTemplate,
    })
    .open();
}
const checkedIds = ref<number[]>([]);
@@ -107,6 +131,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="作业替代方案列表">
      <template #toolbar-tools>
        <TableAction
@@ -119,6 +144,12 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['作业替代方案']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-alternative-plan:import'],
              onClick: handleImport,
            },
            {
              label: '批量删除',
              type: 'primary',
              danger: true,
src/views/mes/pro/card/index.vue
@@ -14,7 +14,10 @@
  deleteCard,
  exportCard,
  getCardPage,
  importCard,
  importCardTemplate,
} from '#/api/mes/pro/card';
import ImportModalComponent from '#/components/import-modal';
import { $t } from '#/locales';
import { PrinterLabel } from '#/views/wls/barcode/components';
@@ -26,6 +29,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
@@ -34,6 +42,18 @@
/** åˆ›å»ºæµè½¬å¡ */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥æµè½¬å¡ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['流转卡']),
      fileName: '生产流转卡导入模板.xls',
      importFn: importCard,
      templateFn: importCardTemplate,
    })
    .open();
}
/** æŸ¥çœ‹æµè½¬å¡è¯¦æƒ… */
@@ -111,7 +131,7 @@
</script>
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
  <Page auto-content-height><FormModal @success="handleRefresh" /><ImportModal @success="handleRefresh" />
    <Grid table-title="生产流转卡列表">
      <template #toolbar-tools>
@@ -125,6 +145,12 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['流转卡']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-card:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/mes/pro/emergencyplan/index.vue
@@ -10,7 +10,14 @@
import { message, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deletePlan, getPlanPage, publishPlan } from '#/api/mes/pro/emergencyplan';
import {
  deletePlan,
  getPlanPage,
  importPlan,
  importPlanTemplate,
  publishPlan,
} from '#/api/mes/pro/emergencyplan';
import ImportModalComponent from '#/components/import-modal';
import { $t } from '#/locales';
import { PLAN_STATUS, useGridColumns, useGridFormSchema } from './data';
@@ -21,6 +28,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -58,6 +70,18 @@
  await publishPlan(row.id!);
  message.success('已发布');
  handleRefresh();
}
/** å¯¼å…¥åº”急处置预案 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['应急处置预案']),
      fileName: '应急处置预案导入模板.xls',
      importFn: importPlan,
      templateFn: importPlanTemplate,
    })
    .open();
}
const checkedIds = ref<number[]>([]);
@@ -107,6 +131,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="应急处置预案列表">
      <template #toolbar-tools>
        <TableAction
@@ -119,6 +144,12 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['应急处置预案']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-emergency-plan:import'],
              onClick: handleImport,
            },
            {
              label: '批量删除',
              type: 'primary',
              danger: true,
src/views/mes/pro/feedback/index.vue
@@ -14,9 +14,12 @@
  deleteFeedback,
  exportFeedback,
  getFeedbackPage,
  importFeedback,
  importFeedbackTemplate,
} from '#/api/mes/pro/feedback';
import { getWorkOrder } from '#/api/mes/pro/workorder';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { ref } from 'vue';
@@ -29,6 +32,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -85,6 +93,18 @@
  downloadFileFromBlobPart({ fileName: '生产报工.xls', source: data });
}
/** å¯¼å…¥ç”Ÿäº§æŠ¥å·¥ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['生产报工']),
      fileName: '生产报工导入模板.xls',
      importFn: importFeedback,
      templateFn: importFeedbackTemplate,
    })
    .open();
}
/** æŸ¥çœ‹å½’æ¡£ */
async function handleArchive(row: MesProFeedbackApi.Feedback) {
  if (!row.workOrderId) return;
@@ -122,6 +142,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="生产报工列表">
      <template #toolbar-tools>
        <TableAction
@@ -140,6 +161,13 @@
              auth: ['mes:pro-feedback:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['生产报工']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-feedback:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/pro/maintenance-plan/index.vue
@@ -17,8 +17,11 @@
  generatePurchasePlan,
  generateWorkOrder,
  getPlanPage,
  importPlan,
  importPlanTemplate,
  issuePlan,
} from '#/api/mes/pro/maintenance-plan';
import ImportModalComponent from '#/components/import-modal';
import { $t } from '#/locales';
import { PLAN_STATUS, useGridColumns, useGridFormSchema } from './data';
@@ -29,6 +32,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -43,6 +51,18 @@
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥ç”µåŠ›ä½œä¸šè®¡åˆ’ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['电力作业计划']),
      fileName: '电力作业计划导入模板.xls',
      importFn: importPlan,
      templateFn: importPlanTemplate,
    })
    .open();
}
function handleEdit(row: MesProMaintenancePlanApi.MaintenancePlan) {
@@ -157,6 +177,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="电力作业计划列表">
      <template #toolbar-tools>
        <TableAction
@@ -169,6 +190,12 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['电力作业计划']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-maintenance-plan:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/mes/pro/maintenancecalendar/index.vue
@@ -13,8 +13,11 @@
import {
  deleteCalendar,
  getCalendarPage,
  importCalendar,
  importCalendarTemplate,
  publishCalendar,
} from '#/api/mes/pro/maintenancecalendar';
import ImportModalComponent from '#/components/import-modal';
import { $t } from '#/locales';
import { CAL_STATUS, useGridColumns, useGridFormSchema } from './data';
@@ -25,6 +28,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -62,6 +70,18 @@
  await publishCalendar(row.id!);
  message.success('已发布');
  handleRefresh();
}
/** å¯¼å…¥ç”µåŠ›è¿ç»´æ—¥åŽ† */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['电力运维日历']),
      fileName: '电力运维日历导入模板.xls',
      importFn: importCalendar,
      templateFn: importCalendarTemplate,
    })
    .open();
}
const checkedIds = ref<number[]>([]);
@@ -111,6 +131,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="电力运维日历列表">
      <template #toolbar-tools>
        <TableAction
@@ -123,6 +144,12 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['电力运维日历']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-maintenance-calendar:import'],
              onClick: handleImport,
            },
            {
              label: '批量删除',
              type: 'primary',
              danger: true,
src/views/mes/pro/mps/index.vue
@@ -16,9 +16,12 @@
  deleteMps,
  exportMps,
  getMpsPage,
  importMps,
  importMpsTemplate,
  issueMps,
  mergeIssueMps,
} from '#/api/mes/pro/mps';
import ImportModalComponent from '#/components/import-modal';
import { $t } from '#/locales';
import { MpsStatusEnum, useGridColumns, useGridFormSchema } from './data';
@@ -31,6 +34,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -47,6 +55,18 @@
/** æ–°å¢ž MPS */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥ MPS */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['MPS']),
      fileName: '生产主计划导入模板.xls',
      importFn: importMps,
      templateFn: importMpsTemplate,
    })
    .open();
}
/** å¯¼å‡ºè¡¨æ ¼ */
@@ -203,6 +223,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="生产主计划(MPS)列表">
      <template #toolbar-tools>
        <TableAction
@@ -215,6 +236,12 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['MPS']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-mps:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/mes/pro/process/index.vue
@@ -12,7 +12,10 @@
  deleteProcess,
  exportProcess,
  getProcessPage,
  importProcess,
  importProcessTemplate,
} from '#/api/mes/pro/process';
import ImportModalComponent from '#/components/import-modal';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
@@ -20,6 +23,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -31,6 +39,18 @@
/** åˆ›å»ºç”Ÿäº§å·¥åº */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥ç”Ÿäº§å·¥åº */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['工序']),
      fileName: '生产工序导入模板.xls',
      importFn: importProcess,
      templateFn: importProcessTemplate,
    })
    .open();
}
/** ç¼–辑生产工序 */
@@ -97,6 +117,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="生产工序列表">
      <template #toolbar-tools>
        <TableAction
@@ -109,6 +130,12 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['工序']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-process:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/mes/pro/route/index.vue
@@ -15,8 +15,11 @@
  deleteRoute,
  exportRoute,
  getRoutePage,
  importRoute,
  importRouteTemplate,
  updateRouteStatus,
} from '#/api/mes/pro/route';
import ImportModalComponent from '#/components/import-modal';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
@@ -30,6 +33,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
@@ -38,6 +46,18 @@
/** åˆ›å»ºå·¥è‰ºè·¯çº¿ */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥å·¥è‰ºè·¯çº¿ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['工艺路线']),
      fileName: '工艺路线导入模板.xls',
      importFn: importRoute,
      templateFn: importRouteTemplate,
    })
    .open();
}
/** ç¼–辑工艺路线(仅停用状态可编辑) */
@@ -118,6 +138,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="工艺路线列表">
      <template #toolbar-tools>
        <TableAction
@@ -130,6 +151,12 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['工艺路线']),
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-route:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/mes/pro/workorder/index.vue
@@ -19,8 +19,11 @@
    deleteWorkOrder,
    exportWorkOrder,
    getWorkOrderPage,
    importWorkOrder,
    importWorkOrderTemplate,
  } from "#/api/mes/pro/workorder";
  import { $t } from "#/locales";
  import ImportModalComponent from '#/components/import-modal';
  import ArchiveDetail from '#/views/mes/pd/archive/modules/detail.vue';
// import { BarcodeDetail } from '#/views/wls/barcode/components';
@@ -29,6 +32,11 @@
  const [FormModal, formModalApi] = useVbenModal({
    connectedComponent: Form,
    destroyOnClose: true,
  });
  const [ImportModal, importModalApi] = useVbenModal({
    connectedComponent: ImportModalComponent,
    destroyOnClose: true,
  });
@@ -118,6 +126,18 @@
    downloadFileFromBlobPart({ fileName: "生产订单.xls", source: data });
  }
  /** å¯¼å…¥ç”Ÿäº§å·¥å• */
  function handleImport() {
    importModalApi
      .setData({
        title: $t('ui.actionTitle.import', ['生产工单']),
        fileName: '生产工单导入模板.xls',
        importFn: importWorkOrder,
        templateFn: importWorkOrderTemplate,
      })
      .open();
  }
  const [Grid, gridApi] = useVbenVxeGrid({
    formOptions: {
      schema: useGridFormSchema(),
@@ -166,6 +186,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="生产订单列表">
      <template #toolbar-tools>
        <TableAction :actions="[
@@ -183,6 +204,13 @@
              auth: ['mes:pro-work-order:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['生产工单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-work-order:import'],
              onClick: handleImport,
            },
          ]" />
      </template>
      <template #code="{ row }">
src/views/mes/process-design/parameter/index.vue
@@ -11,9 +11,13 @@
  deleteParameter,
  getParameterPage,
  exportParameterExcel,
  importParameter,
  importParameterTemplate,
} from '#/api/mes/pro/processdesign/parameter';
import { $t } from '#/locales';
import { downloadFileFromBlobPart } from '@vben/utils';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -23,9 +27,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥å·¥è‰ºå‚æ•° */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['工艺参数']),
      fileName: '工艺参数导入模板.xls',
      importFn: importParameter,
      templateFn: importParameterTemplate,
    })
    .open();
}
/** åˆ›å»ºå·¥è‰ºå‚æ•° */
@@ -98,6 +119,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="工艺参数列表">
      <template #toolbar-tools>
        <TableAction
@@ -116,6 +138,13 @@
              auth: ['mes:pd:parameter:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['工艺参数']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pd:parameter:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/process-design/process/index.vue
@@ -12,8 +12,12 @@
  deleteProcess,
  exportProcess,
  getProcessPage,
  importProcess,
  importProcessTemplate,
} from '#/api/mes/pro/process';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -23,9 +27,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥ç”Ÿäº§å·¥åº */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['生产工序']),
      fileName: '生产工序导入模板.xls',
      importFn: importProcess,
      templateFn: importProcessTemplate,
    })
    .open();
}
/** åˆ›å»ºç”Ÿäº§å·¥åº */
@@ -97,6 +118,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="生产工序列表">
      <template #toolbar-tools>
        <TableAction
@@ -115,6 +137,13 @@
              auth: ['mes:pro-process:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['生产工序']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-process:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/process-design/route/index.vue
@@ -15,9 +15,13 @@
  deleteRoute,
  exportRoute,
  getRoutePage,
  importRoute,
  importRouteTemplate,
  updateRouteStatus,
} from '#/api/mes/pro/route';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -30,9 +34,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥å·¥è‰ºè·¯çº¿ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['工艺路线']),
      fileName: '工艺路线导入模板.xls',
      importFn: importRoute,
      templateFn: importRouteTemplate,
    })
    .open();
}
/** åˆ›å»ºå·¥è‰ºè·¯çº¿ */
@@ -118,6 +139,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="工艺路线列表">
      <template #toolbar-tools>
        <TableAction
@@ -136,6 +158,13 @@
              auth: ['mes:pro-route:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['工艺路线']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pro-route:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/process-design/template/index.vue
@@ -11,9 +11,13 @@
    deleteTemplate,
    getTemplatePage,
    exportTemplateExcel,
    importTemplate,
    importTemplateTemplate,
  } from "#/api/mes/pro/processdesign/template";
  import { $t } from "#/locales";
  import { downloadFileFromBlobPart } from "@vben/utils";
  import ImportModalComponent from "#/components/import-modal";
  import { useGridColumns, useGridFormSchema } from "./data";
  import Form from "./modules/form.vue";
@@ -23,9 +27,26 @@
    destroyOnClose: true,
  });
  const [ImportModal, importModalApi] = useVbenModal({
    connectedComponent: ImportModalComponent,
    destroyOnClose: true,
  });
  /** åˆ·æ–°è¡¨æ ¼ */
  function handleRefresh() {
    gridApi.query();
  }
  /** å¯¼å…¥å·¥è‰ºå‚数模板 */
  function handleImport() {
    importModalApi
      .setData({
        title: $t("ui.actionTitle.import", ["工艺参数模板"]),
        fileName: "工艺参数模板导入模板.xls",
        importFn: importTemplate,
        templateFn: importTemplateTemplate,
      })
      .open();
  }
  /** åˆ›å»ºå·¥è‰ºå‚数模板 */
@@ -99,6 +120,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="工艺参数模板列表">
      <template #toolbar-tools>
        <TableAction :actions="[
@@ -116,6 +138,13 @@
              auth: ['mes:pd:template:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['工艺参数模板']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:pd:template:import'],
              onClick: handleImport,
            },
          ]" />
      </template>
      <template #templateCode="{ row }">
src/views/mes/qc/defect/index.vue
@@ -8,16 +8,21 @@
import { message, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteDefect, exportDefect, getDefectPage } from '#/api/mes/qc/defect';
import { deleteDefect, exportDefect, getDefectPage, importDefect, importDefectTemplate } from '#/api/mes/qc/defect';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -42,6 +47,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥ç¼ºé™·ç±»åž‹ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['缺陷类型']),
      fileName: '缺陷类型导入模板.xls',
      importFn: importDefect,
      templateFn: importDefectTemplate,
    })
    .open();
}
/** åˆ›å»ºç¼ºé™·ç±»åž‹ */
function handleCreate() {
@@ -107,6 +125,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="缺陷类型列表">
      <template #toolbar-tools>
@@ -126,6 +145,13 @@
              auth: ['mes:qc-defect:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['缺陷类型']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:qc-defect:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/qc/indicator/index.vue
@@ -8,20 +8,21 @@
import { message, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteIndicator,
  exportIndicator,
  getIndicatorPage,
} from '#/api/mes/qc/indicator';
import { deleteIndicator, exportIndicator, getIndicatorPage, importIndicator, importIndicatorTemplate } from '#/api/mes/qc/indicator';
import { DICT_TYPE } from '@vben/constants';
import { getDictOptions } from '@vben/hooks';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -46,6 +47,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥è´¨æ£€æŒ‡æ ‡ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['质检指标']),
      fileName: '质检指标导入模板.xls',
      importFn: importIndicator,
      templateFn: importIndicatorTemplate,
    })
    .open();
}
/** åˆ›å»ºè´¨æ£€æŒ‡æ ‡ */
function handleCreate() {
@@ -111,6 +125,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="质检指标列表">
      <template #toolbar-tools>
@@ -130,6 +145,13 @@
              auth: ['mes:qc-indicator:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['质检指标']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:qc-indicator:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/qc/ipqc/index.vue
@@ -9,14 +9,19 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteIpqc, exportIpqc, getIpqcPage } from '#/api/mes/qc/ipqc';
import { deleteIpqc, exportIpqc, getIpqcPage, importIpqc, importIpqcTemplate } from '#/api/mes/qc/ipqc';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -24,6 +29,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥è¿‡ç¨‹æ£€éªŒå• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['过程检验单']),
      fileName: '过程检验单导入模板.xls',
      importFn: importIpqc,
      templateFn: importIpqcTemplate,
    })
    .open();
}
/** åˆ›å»ºè¿‡ç¨‹æ£€éªŒå• */
function handleCreate() {
@@ -94,6 +112,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="过程检验单列表">
      <template #toolbar-tools>
@@ -113,6 +132,13 @@
              auth: ['mes:qc-ipqc:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['过程检验单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:qc-ipqc:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/qc/iqc/index.vue
@@ -12,10 +12,11 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteIqc, exportIqc, getIqcPage } from '#/api/mes/qc/iqc';
import { deleteIqc, exportIqc, getIqcPage, importIqc, importIqcTemplate } from '#/api/mes/qc/iqc';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
defineOptions({ name: 'MesQcIqc' });
@@ -26,11 +27,28 @@
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥æ¥æ–™æ£€éªŒå• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['来料检验单']),
      fileName: '来料检验单导入模板.xls',
      importFn: importIqc,
      templateFn: importIqcTemplate,
    })
    .open();
}
/** åˆ›å»ºæ¥æ–™æ£€éªŒå• */
function handleCreate() {
@@ -108,6 +126,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="来料检验单列表">
      <template #toolbar-tools>
@@ -127,6 +146,13 @@
              auth: ['mes:qc-iqc:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['来料检验单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:qc-iqc:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/qc/ncr/index.vue
@@ -9,14 +9,7 @@
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { useVbenForm } from '#/adapter/form';
import {
  closeNcr,
  deleteNcr,
  disposeNcr,
  exportNcr,
  getNcrPage,
  reviewNcr,
} from '#/api/mes/qc/ncr';
import { closeNcr, deleteNcr, disposeNcr, exportNcr, getNcrPage, reviewNcr, importNcr, importNcrTemplate } from '#/api/mes/qc/ncr';
import { $t } from '#/locales';
import {
@@ -28,12 +21,17 @@
  useGridFormSchema,
  useReviewFormSchema,
} from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
defineOptions({ name: 'NcrIndex' });
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -161,6 +159,19 @@
  gridApi.query();
}
/** å¯¼å…¥ä¸åˆæ ¼å“å¤„理单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['不合格品处理单']),
      fileName: '不合格品处理单导入模板.xls',
      importFn: importNcr,
      templateFn: importNcrTemplate,
    })
    .open();
}
/** åˆ›å»º */
function handleCreate() {
  formModalApi.setData(null).open();
@@ -241,6 +252,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <ReviewModal title="评审不合格品处理单" class="w-2/5">
      <ReviewForm class="mx-4" />
    </ReviewModal>
@@ -269,6 +281,13 @@
              auth: ['mes:qc-ncr:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['不合格品处理单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:qc-ncr:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/qc/oqc/index.vue
@@ -9,14 +9,19 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteOqc, exportOqc, getOqcPage } from '#/api/mes/qc/oqc';
import { deleteOqc, exportOqc, getOqcPage, importOqc, importOqcTemplate } from '#/api/mes/qc/oqc';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -24,6 +29,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥å‡ºè´§æ£€éªŒå• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['出货检验单']),
      fileName: '出货检验单导入模板.xls',
      importFn: importOqc,
      templateFn: importOqcTemplate,
    })
    .open();
}
/** åˆ›å»ºå‡ºè´§æ£€éªŒå• */
function handleCreate() {
@@ -94,6 +112,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="出货检验单列表">
      <template #toolbar-tools>
@@ -113,6 +132,13 @@
              auth: ['mes:qc-oqc:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['出货检验单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:qc-oqc:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/qc/outsourcetest/index.vue
@@ -10,15 +10,11 @@
import { message, Tag } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteTest,
  finishTest,
  getTestPage,
  submitTest,
} from '#/api/mes/qc/outsourcetest';
import { deleteTest, finishTest, getTestPage, submitTest, importTest, importTestTemplate } from '#/api/mes/qc/outsourcetest';
import { $t } from '#/locales';
import { TEST_STATUS, useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
/** MES å§”外检测/试验单列表 */
@@ -28,10 +24,27 @@
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥å§”外检测/试验单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['委外检测/试验单']),
      fileName: '委外检测/试验单导入模板.xls',
      importFn: importTest,
      templateFn: importTestTemplate,
    })
    .open();
}
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
@@ -118,6 +131,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="委外检测/试验单列表">
      <template #toolbar-tools>
        <TableAction
@@ -130,6 +144,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['委外检测/试验单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:qc-outsource-test:import'],
              onClick: handleImport,
            },
            {
              label: '批量删除',
              type: 'primary',
              danger: true,
src/views/mes/qc/rqc/index.vue
@@ -9,14 +9,19 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteRqc, exportRqc, getRqcPage } from '#/api/mes/qc/rqc';
import { deleteRqc, exportRqc, getRqcPage, importRqc, importRqcTemplate } from '#/api/mes/qc/rqc';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -24,6 +29,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥é€€è´§æ£€éªŒå• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['退货检验单']),
      fileName: '退货检验单导入模板.xls',
      importFn: importRqc,
      templateFn: importRqcTemplate,
    })
    .open();
}
/** åˆ›å»ºé€€è´§æ£€éªŒå• */
function handleCreate() {
@@ -94,6 +112,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="退货检验单列表">
      <template #toolbar-tools>
@@ -113,6 +132,13 @@
              auth: ['mes:qc-rqc:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['退货检验单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:qc-rqc:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/qc/template/index.vue
@@ -9,19 +9,20 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import {
  deleteTemplate,
  exportTemplate,
  getTemplatePage,
} from '#/api/mes/qc/template';
import { deleteTemplate, exportTemplate, getTemplatePage, importTemplate, importTemplateTemplate } from '#/api/mes/qc/template';
import { DictTag } from '#/components/dict-tag';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
import ImportModalComponent from '#/components/import-modal';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -29,6 +30,19 @@
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥è´¨æ£€æ–¹æ¡ˆ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['质检方案']),
      fileName: '质检方案导入模板.xls',
      importFn: importTemplate,
      templateFn: importTemplateTemplate,
    })
    .open();
}
/** åˆ›å»ºè´¨æ£€æ–¹æ¡ˆ */
function handleCreate() {
@@ -99,6 +113,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="质检方案列表">
      <template #toolbar-tools>
@@ -118,6 +133,13 @@
              auth: ['mes:qc-template:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['质检方案']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:qc-template:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/mes/tm/tool/index.vue
@@ -11,9 +11,17 @@
import { Button, Card, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteTool, exportTool, getToolPage } from '#/api/mes/tm/tool';
import {
  deleteTool,
  exportTool,
  getToolPage,
  importTool,
  importToolTemplate,
} from '#/api/mes/tm/tool';
import { $t } from '#/locales';
import { TmToolTypeList } from '#/views/mes/tm/tool/type/components';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -25,9 +33,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥å·¥å…· */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['工具']),
      fileName: '工具导入模板.xls',
      importFn: importTool,
      templateFn: importToolTemplate,
    })
    .open();
}
/** åˆ›å»ºå·¥å…· */
@@ -106,6 +131,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <div class="flex h-full w-full">
      <Card class="mr-4 h-full w-1/6">
        <TmToolTypeList @select="handleToolTypeSelect" />
@@ -129,6 +155,13 @@
                  auth: ['mes:tm-tool:export'],
                  onClick: handleExport,
                },
                {
                  label: $t('ui.actionTitle.import', ['工具']),
                  type: 'primary',
                  icon: ACTION_ICON.UPLOAD,
                  auth: ['mes:tm-tool:import'],
                  onClick: handleImport,
                },
              ]"
            />
          </template>
src/views/mes/tm/tool/type/index.vue
@@ -12,8 +12,12 @@
  deleteToolType,
  exportToolType,
  getToolTypePage,
  importToolType,
  importToolTypeTemplate,
} from '#/api/mes/tm/tool/type';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -23,9 +27,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥å·¥å…·ç±»åž‹ */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['工具类型']),
      fileName: '工具类型导入模板.xls',
      importFn: importToolType,
      templateFn: importToolTypeTemplate,
    })
    .open();
}
/** åˆ›å»ºå·¥å…·ç±»åž‹ */
@@ -96,6 +117,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="工具类型列表">
      <template #toolbar-tools>
        <TableAction
@@ -114,6 +136,13 @@
              auth: ['mes:tm-tool-type:export'],
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['工具类型']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:tm-tool-type:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/srm/supplier/index.vue
@@ -10,8 +10,12 @@
import {
  deleteSupplier,
  getSupplierPage,
  importSupplier,
  importSupplierTemplate,
} from '#/api/srm/supplier';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import SupplierForm from './modules/form.vue';
@@ -24,6 +28,18 @@
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥ä¾›åº”商 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['供应商']),
      fileName: '供应商导入模板.xls',
      importFn: importSupplier,
      templateFn: importSupplierTemplate,
    })
    .open();
}
function handleEdit(row: SrmSupplierApi.SupplierVO) {
@@ -46,6 +62,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: SupplierForm,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -77,6 +98,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="供应商列表">
      <template #toolbar-tools>
        <TableAction
@@ -88,6 +110,13 @@
              auth: ['srm:supplier:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['供应商']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['srm:supplier:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/srm/supplierCertificate/index.vue
@@ -11,8 +11,12 @@
  deleteCertificate,
  getCertificatePage,
  getExpiringCertificates,
  importCertificate,
  importCertificateTemplate,
} from '#/api/srm/supplierCertificate';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import CertificateForm from './modules/form.vue';
@@ -25,6 +29,18 @@
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥èµ„质证书 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['资质证书']),
      fileName: '资质证书导入模板.xls',
      importFn: importCertificate,
      templateFn: importCertificateTemplate,
    })
    .open();
}
function handleEdit(row: SrmSupplierCertificateApi.CertificateVO) {
@@ -63,6 +79,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
const [Grid, gridApi] = useVbenVxeGrid({
  formOptions: {
    schema: useGridFormSchema(),
@@ -91,6 +112,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="资质证书列表">
      <template #toolbar-tools>
        <TableAction
@@ -103,6 +125,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['资质证书']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['srm:supplier-certificate:import'],
              onClick: handleImport,
            },
            {
              label: '到期提醒',
              type: 'warning',
              icon: 'ant-design:bell-outlined',
src/views/system/dict/modules/data-grid.vue
@@ -15,8 +15,12 @@
  deleteDictDataList,
  exportDictData,
  getDictDataPage,
  importDictData,
  importDictDataTemplate,
} from '#/api/system/dict/data';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useDataGridColumns, useDataGridFormSchema } from '../data';
import DataForm from './data-form.vue';
@@ -33,6 +37,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
@@ -42,6 +51,18 @@
async function handleExport() {
  const data = await exportDictData(await gridApi.formApi.getValues());
  downloadFileFromBlobPart({ fileName: '字典数据.xls', source: data });
}
/** å¯¼å…¥å­—典数据 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['字典数据']),
      fileName: '字典数据导入模板.xls',
      importFn: importDictData,
      templateFn: importDictDataTemplate,
    })
    .open();
}
/** åˆ›å»ºå­—典数据 */
@@ -144,6 +165,7 @@
<template>
  <div class="flex h-full flex-col">
    <DataFormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="字典数据列表">
      <template #toolbar-tools>
@@ -164,6 +186,13 @@
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['字典数据']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['system:dict:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.deleteBatch'),
              type: 'primary',
              danger: true,
src/views/system/dict/modules/type-grid.vue
@@ -15,8 +15,12 @@
  deleteDictTypeList,
  exportDictType,
  getDictTypePage,
  importDictType,
  importDictTypeTemplate,
} from '#/api/system/dict/type';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useTypeGridColumns, useTypeGridFormSchema } from '../data';
import TypeForm from './type-form.vue';
@@ -25,6 +29,11 @@
const [TypeFormModal, typeFormModalApi] = useVbenModal({
  connectedComponent: TypeForm,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -37,6 +46,18 @@
async function handleExport() {
  const data = await exportDictType(await gridApi.formApi.getValues());
  downloadFileFromBlobPart({ fileName: '字典类型.xls', source: data });
}
/** å¯¼å…¥å­—典类型 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['字典类型']),
      fileName: '字典类型导入模板.xls',
      importFn: importDictType,
      templateFn: importDictTypeTemplate,
    })
    .open();
}
/** åˆ›å»ºå­—典类型 */
@@ -132,6 +153,7 @@
<template>
  <div class="h-full">
    <TypeFormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="字典类型列表">
      <template #toolbar-tools>
        <TableAction
@@ -151,6 +173,13 @@
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['字典类型']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['system:dict:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.deleteBatch'),
              type: 'primary',
              danger: true,
src/views/system/menu/index.vue
@@ -11,14 +11,26 @@
import { message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteMenu, getMenuList } from '#/api/system/menu';
import {
  deleteMenu,
  getMenuList,
  importMenu,
  importMenuTemplate,
} from '#/api/system/menu';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -30,6 +42,18 @@
/** åˆ›å»ºèœå• */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥èœå• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['菜单']),
      fileName: '菜单导入模板.xls',
      importFn: importMenu,
      templateFn: importMenuTemplate,
    })
    .open();
}
/** æ·»åŠ ä¸‹çº§èœå• */
@@ -98,6 +122,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="菜单列表">
      <template #toolbar-tools>
        <TableAction
@@ -110,6 +135,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['菜单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['system:menu:import'],
              onClick: handleImport,
            },
            {
              label: isExpanded ? '收缩' : '展开',
              type: 'primary',
              onClick: handleExpand,
src/views/system/notice/index.vue
@@ -14,15 +14,24 @@
  deleteNotice,
  deleteNoticeList,
  getNoticePage,
  importNotice,
  importNoticeTemplate,
  pushNotice,
} from '#/api/system/notice';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -34,6 +43,18 @@
/** åˆ›å»ºå…¬å‘Š */
function handleCreate() {
  formModalApi.setData(null).open();
}
/** å¯¼å…¥å…¬å‘Š */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['公告']),
      fileName: '通知公告导入模板.xls',
      importFn: importNotice,
      templateFn: importNoticeTemplate,
    })
    .open();
}
/** ç¼–辑公告 */
@@ -133,6 +154,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="公告列表">
      <template #toolbar-tools>
        <TableAction
@@ -145,6 +167,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['公告']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['system:notice:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.deleteBatch'),
              type: 'primary',
              danger: true,
src/views/system/role/index.vue
@@ -15,8 +15,12 @@
  deleteRoleList,
  exportRole,
  getRolePage,
  importRole,
  importRoleTemplate,
} from '#/api/system/role';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import AssignDataPermissionForm from './modules/assign-data-permission-form.vue';
@@ -39,6 +43,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
@@ -48,6 +57,18 @@
async function handleExport() {
  const data = await exportRole(await gridApi.formApi.getValues());
  downloadFileFromBlobPart({ fileName: '角色.xls', source: data });
}
/** å¯¼å…¥è§’色 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['角色']),
      fileName: '角色导入模板.xls',
      importFn: importRole,
      templateFn: importRoleTemplate,
    })
    .open();
}
/** åˆ›å»ºè§’色 */
@@ -150,6 +171,7 @@
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <AssignDataPermissionFormModel @success="handleRefresh" />
    <AssignMenuFormModel @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="角色列表">
      <template #toolbar-tools>
        <TableAction
@@ -169,6 +191,13 @@
              onClick: handleExport,
            },
            {
              label: $t('ui.actionTitle.import', ['角色']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['system:role:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.deleteBatch'),
              type: 'primary',
              danger: true,
src/views/wls/arrivalnotice/index.vue
@@ -14,9 +14,13 @@
  exportArrivalNotice,
  generateArrivalNoticeFromPurchaseOrder,
  getArrivalNoticePage,
  importArrivalNotice,
  importArrivalNoticeTemplate,
} from '#/api/mes/wm/arrivalnotice';
import { generateItemReceiptFromArrivalNotice } from '#/api/mes/wm/itemreceipt';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -32,6 +36,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
@@ -40,6 +49,18 @@
/** åˆ›å»ºåˆ°è´§é€šçŸ¥å• */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥åˆ°è´§é€šçŸ¥å• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['到货通知单']),
      fileName: '到货通知单导入模板.xls',
      importFn: importArrivalNotice,
      templateFn: importArrivalNoticeTemplate,
    })
    .open();
}
/** æŸ¥çœ‹åˆ°è´§é€šçŸ¥å• */
@@ -150,6 +171,7 @@
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <PoSelectModal @selected="handlePurchaseOrderSelected" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="到货通知单列表">
      <template #toolbar-tools>
@@ -171,6 +193,13 @@
              onClick: handleGenerateFromPO,
            },
            {
              label: $t('ui.actionTitle.import', ['到货通知单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-arrival-notice:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/barcode/config/index.vue
@@ -10,15 +10,24 @@
import {
  deleteBarcodeConfig,
  getBarcodeConfigPage,
  importBarcodeConfig,
  importBarcodeConfigTemplate,
  updateBarcodeConfig,
} from '#/api/mes/wm/barcode/config';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useConfigGridColumns, useConfigGridFormSchema } from '../data';
import ConfigForm from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: ConfigForm,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -40,6 +49,18 @@
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥æ¡ç é…ç½® */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['条码配置']),
      fileName: '条码配置导入模板.xls',
      importFn: importBarcodeConfig,
      templateFn: importBarcodeConfigTemplate,
    })
    .open();
}
/** åˆ›å»ºæ¡ç é…ç½® */
@@ -104,6 +125,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="条码配置列表">
      <template #toolbar-tools>
@@ -116,6 +138,13 @@
              auth: ['mes:wm-barcode-config:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['条码配置']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-barcode-config:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/wls/equipmentreceipt/index.vue
@@ -16,9 +16,13 @@
  deleteEquipmentReceipt,
  getEquipmentReceiptApproverIds,
  getEquipmentReceiptPage,
  importEquipmentReceipt,
  importEquipmentReceiptTemplate,
  submitEquipmentReceiptApproval,
} from '#/api/mes/wm/equipmentreceipt';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { EQUIPMENT_RECEIPT_STATUS_MAP, useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -58,6 +62,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ä¸Žå®¡æ ¸äººé›†åˆ */
function handleRefresh() {
  gridApi.query();
@@ -67,6 +76,18 @@
/** åˆ›å»ºè®¾å¤‡å…¥åº“单 */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥è®¾å¤‡å…¥åº“单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['设备入库单']),
      fileName: '设备入库单导入模板.xls',
      importFn: importEquipmentReceipt,
      templateFn: importEquipmentReceiptTemplate,
    })
    .open();
}
/** æŸ¥çœ‹è®¾å¤‡å…¥åº“单 */
@@ -170,6 +191,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="设备入库单列表">
      <template #toolbar-tools>
@@ -182,6 +204,13 @@
              auth: ['mes:wm:equipment-receipt:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['设备入库单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm:equipment-receipt:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/wls/itemreceipt/index.vue
@@ -19,8 +19,12 @@
  generateItemReceiptFromArrivalNotice,
  getItemReceiptApproverIds,
  getItemReceiptPage,
  importItemReceipt,
  importItemReceiptTemplate,
} from '#/api/mes/wm/itemreceipt';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -56,6 +60,11 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
const [AuditModalComp, auditModalApi] = useVbenModal({
  connectedComponent: AuditModal,
  destroyOnClose: true,
@@ -75,6 +84,18 @@
/** åˆ›å»ºé‡‡è´­å…¥åº“单 */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥é‡‡è´­å…¥åº“单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['采购入库单']),
      fileName: '采购入库单导入模板.xls',
      importFn: importItemReceipt,
      templateFn: importItemReceiptTemplate,
    })
    .open();
}
/** æŸ¥çœ‹é‡‡è´­å…¥åº“单 */
@@ -189,6 +210,7 @@
<template>
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <AnSelectModal @selected="handleArrivalNoticeSelected" />
@@ -204,6 +226,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['采购入库单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-item-receipt:import'],
              onClick: handleImport,
            },
            {
              label: '从到货通知生成',
              type: 'primary',
              icon: ACTION_ICON.ADD,
src/views/wls/miscissue/index.vue
@@ -18,9 +18,13 @@
  exportMiscIssue,
  getMiscIssueApproverIds,
  getMiscIssuePage,
  importMiscIssue,
  importMiscIssueTemplate,
  submitMiscIssueApproval,
} from '#/api/mes/wm/miscissue';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -60,10 +64,27 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ä¸Žå®¡æ ¸äººé›†åˆ */
function handleRefresh() {
  gridApi.query();
  loadApproverIds();
}
/** å¯¼å…¥æ‚项出库单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['杂项出库单']),
      fileName: '杂项出库单导入模板.xls',
      importFn: importMiscIssue,
      templateFn: importMiscIssueTemplate,
    })
    .open();
}
/** åˆ›å»ºæ‚项出库单 */
@@ -172,6 +193,7 @@
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="杂项出库单列表">
      <template #toolbar-tools>
@@ -185,6 +207,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['杂项出库单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-misc-issue:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/miscreceipt/index.vue
@@ -18,9 +18,13 @@
  exportMiscReceipt,
  getMiscReceiptApproverIds,
  getMiscReceiptPage,
  importMiscReceipt,
  importMiscReceiptTemplate,
  submitMiscReceiptApproval,
} from '#/api/mes/wm/miscreceipt';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -60,10 +64,27 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ä¸Žå®¡æ ¸äººé›†åˆ */
function handleRefresh() {
  gridApi.query();
  loadApproverIds();
}
/** å¯¼å…¥æ‚项入库单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['杂项入库单']),
      fileName: '杂项入库单导入模板.xls',
      importFn: importMiscReceipt,
      templateFn: importMiscReceiptTemplate,
    })
    .open();
}
/** åˆ›å»ºæ‚项入库单 */
@@ -172,6 +193,7 @@
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="杂项入库单列表">
      <template #toolbar-tools>
@@ -185,6 +207,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['杂项入库单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm:misc-receipt:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/outsourceissue/index.vue
@@ -14,8 +14,12 @@
  deleteOutsourceIssue,
  exportOutsourceIssue,
  getOutsourceIssuePage,
  importOutsourceIssue,
  importOutsourceIssueTemplate,
} from '#/api/mes/wm/outsourceissue';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -25,9 +29,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥å¤–协发料单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['外协发料单']),
      fileName: '外协发料单导入模板.xls',
      importFn: importOutsourceIssue,
      templateFn: importOutsourceIssueTemplate,
    })
    .open();
}
/** åˆ›å»ºå¤–协发料单 */
@@ -116,6 +137,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="外协发料单列表">
      <template #toolbar-tools>
@@ -129,6 +151,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['外协发料单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-outsource-issue:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/outsourcereceipt/index.vue
@@ -14,8 +14,12 @@
  deleteOutsourceReceipt,
  exportOutsourceReceipt,
  getOutsourceReceiptPage,
  importOutsourceReceipt,
  importOutsourceReceiptTemplate,
} from '#/api/mes/wm/outsourcereceipt';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -25,9 +29,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥å¤–协入库单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['外协入库单']),
      fileName: '外协入库单导入模板.xls',
      importFn: importOutsourceReceipt,
      templateFn: importOutsourceReceiptTemplate,
    })
    .open();
}
/** åˆ›å»ºå¤–协入库单 */
@@ -116,6 +137,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="外协入库单列表">
      <template #toolbar-tools>
@@ -129,6 +151,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['外协入库单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-outsource-receipt:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/packages/index.vue
@@ -10,14 +10,26 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deletePackage, getPackagePage } from '#/api/mes/wm/packages';
import {
  deletePackage,
  getPackagePage,
  importPackage,
  importPackageTemplate,
} from '#/api/mes/wm/packages';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -32,6 +44,18 @@
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥è£…箱单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['装箱单']),
      fileName: '装箱单导入模板.xls',
      importFn: importPackage,
      templateFn: importPackageTemplate,
    })
    .open();
}
/** åˆ›å»ºè£…箱单 */
@@ -104,6 +128,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="装箱单列表">
      <template #toolbar-tools>
@@ -117,6 +142,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['装箱单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-package:import'],
              onClick: handleImport,
            },
            {
              label: isExpanded ? '收缩' : '展开',
              type: 'primary',
              onClick: handleExpand,
src/views/wls/productissue/index.vue
@@ -14,9 +14,13 @@
  deleteProductIssue,
  exportProductIssue,
  getProductIssuePage,
  importProductIssue,
  importProductIssueTemplate,
  submitProductIssue,
} from '#/api/mes/wm/productissue';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -26,9 +30,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥ç”Ÿäº§é¢†æ–™å‡ºåº“单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['生产领料出库单']),
      fileName: '生产领料出库单导入模板.xls',
      importFn: importProductIssue,
      templateFn: importProductIssueTemplate,
    })
    .open();
}
/** åˆ›å»ºé¢†æ–™å‡ºåº“单 */
@@ -124,6 +145,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="领料出库单列表">
      <template #toolbar-tools>
@@ -137,6 +159,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['生产领料出库单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-product-issue:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/productreceipt/index.vue
@@ -14,8 +14,12 @@
  deleteProductReceipt,
  exportProductReceipt,
  getProductReceiptPage,
  importProductReceipt,
  importProductReceiptTemplate,
} from '#/api/mes/wm/productreceipt';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -25,9 +29,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥äº§å“æ”¶è´§å• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['产品收货单']),
      fileName: '产品收货单导入模板.xls',
      importFn: importProductReceipt,
      templateFn: importProductReceiptTemplate,
    })
    .open();
}
/** åˆ›å»ºäº§å“å…¥åº“单 */
@@ -116,6 +137,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="产品入库单列表">
      <template #toolbar-tools>
@@ -129,6 +151,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['产品收货单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-product-receipt:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/productsales/index.vue
@@ -14,8 +14,12 @@
  deleteProductSales,
  exportProductSales,
  getProductSalesPage,
  importProductSales,
  importProductSalesTemplate,
} from '#/api/mes/wm/productsales';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -25,9 +29,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥é”€å”®å‡ºåº“单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['销售出库单']),
      fileName: '销售出库单导入模板.xls',
      importFn: importProductSales,
      templateFn: importProductSalesTemplate,
    })
    .open();
}
/** åˆ›å»ºé”€å”®å‡ºåº“单 */
@@ -121,6 +142,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="销售出库单列表">
      <template #toolbar-tools>
@@ -134,6 +156,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['销售出库单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-product-sales:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/returnissue/index.vue
@@ -14,14 +14,23 @@
  deleteReturnIssue,
  exportReturnIssue,
  getReturnIssuePage,
  importReturnIssue,
  importReturnIssueTemplate,
} from '#/api/mes/wm/returnissue';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -33,6 +42,18 @@
/** åˆ›å»ºç”Ÿäº§é€€æ–™å• */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥ç”Ÿäº§é€€æ–™å• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['生产退料单']),
      fileName: '生产退料单导入模板.xls',
      importFn: importReturnIssue,
      templateFn: importReturnIssueTemplate,
    })
    .open();
}
/** æŸ¥çœ‹ç”Ÿäº§é€€æ–™å• */
@@ -121,6 +142,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="生产退料单列表">
      <template #toolbar-tools>
@@ -134,6 +156,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['生产退料单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-return-issue:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/returnsales/index.vue
@@ -14,8 +14,12 @@
  deleteReturnSales,
  exportReturnSales,
  getReturnSalesPage,
  importReturnSales,
  importReturnSalesTemplate,
} from '#/api/mes/wm/returnsales';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -25,9 +29,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥é”€å”®é€€è´§å• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['销售退货单']),
      fileName: '销售退货单导入模板.xls',
      importFn: importReturnSales,
      templateFn: importReturnSalesTemplate,
    })
    .open();
}
/** åˆ›å»ºé”€å”®é€€è´§å• */
@@ -121,6 +142,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="销售退货单列表">
      <template #toolbar-tools>
@@ -134,6 +156,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['销售退货单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-return-sales:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/returnvendor/index.vue
@@ -18,9 +18,13 @@
  exportReturnVendor,
  getReturnVendorApproverIds,
  getReturnVendorPage,
  importReturnVendor,
  importReturnVendorTemplate,
  submitReturnVendorApproval,
} from '#/api/mes/wm/returnvendor';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import AuditModal from './modules/audit-modal.vue';
@@ -60,10 +64,27 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ä¸Žå®¡æ ¸äººé›†åˆ */
function handleRefresh() {
  gridApi.query();
  loadApproverIds();
}
/** å¯¼å…¥ä¾›åº”商退货单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['供应商退货单']),
      fileName: '供应商退货单导入模板.xls',
      importFn: importReturnVendor,
      templateFn: importReturnVendorTemplate,
    })
    .open();
}
/** åˆ›å»ºä¾›åº”商退货单 */
@@ -177,6 +198,7 @@
  <Page auto-content-height>
    <FormModal @success="handleRefresh" />
    <AuditModalComp @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="供应商退货单列表">
      <template #toolbar-tools>
@@ -190,6 +212,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['供应商退货单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-return-vendor:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/salesnotice/index.vue
@@ -16,14 +16,23 @@
  exportSalesNotice,
  generateProductSales,
  getSalesNoticePage,
  importSalesNotice,
  importSalesNoticeTemplate,
} from '#/api/mes/wm/salesnotice';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -48,6 +57,18 @@
/** åˆ›å»ºå‘货通知单 */
function handleCreate() {
  formModalApi.setData({ formType: 'create' }).open();
}
/** å¯¼å…¥å‘货通知单 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['发货通知单']),
      fileName: '发货通知单导入模板.xls',
      importFn: importSalesNotice,
      templateFn: importSalesNoticeTemplate,
    })
    .open();
}
/** æŸ¥çœ‹å‘货通知单 */
@@ -128,6 +149,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="发货通知单列表">
      <template #toolbar-tools>
@@ -141,6 +163,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['发货通知单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-sales-notice:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/transfer/index.vue
@@ -14,8 +14,12 @@
  deleteTransfer,
  exportTransfer,
  getTransferPage,
  importTransfer,
  importTransferTemplate,
} from '#/api/mes/wm/transfer';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -25,9 +29,26 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥è½¬ç§»å• */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['转移单']),
      fileName: '转移单导入模板.xls',
      importFn: importTransfer,
      templateFn: importTransferTemplate,
    })
    .open();
}
/** åˆ›å»ºè½¬ç§»å• */
@@ -121,6 +142,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <Grid table-title="转移单列表">
      <template #toolbar-tools>
@@ -134,6 +156,13 @@
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['转移单']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-transfer:import'],
              onClick: handleImport,
            },
            {
              label: $t('ui.actionTitle.export'),
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
src/views/wls/warehouse/area/index.vue
@@ -15,9 +15,13 @@
import {
  deleteWarehouseArea,
  getWarehouseAreaPage,
  importWarehouseArea,
  importWarehouseAreaTemplate,
} from '#/api/mes/wm/warehouse/area';
import { getWarehouseLocation } from '#/api/mes/wm/warehouse/location';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { BarcodeDetail } from '../../barcode/components';
import { useGridColumns, useGridFormSchema } from './data';
@@ -31,6 +35,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -83,6 +92,18 @@
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥åº“位 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['库位']),
      fileName: '库位导入模板.xls',
      importFn: importWarehouseArea,
      templateFn: importWarehouseAreaTemplate,
    })
    .open();
}
/** åˆ›å»ºåº“位 */
@@ -165,6 +186,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <BarcodeDetail ref="barcodeDetailRef" />
    <Alert
@@ -190,6 +212,13 @@
              auth: ['mes:wm-warehouse:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['库位']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-warehouse:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/wls/warehouse/index.vue
@@ -11,8 +11,15 @@
import { Button, message } from 'ant-design-vue';
import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
import { deleteWarehouse, getWarehousePage } from '#/api/mes/wm/warehouse';
import {
  deleteWarehouse,
  getWarehousePage,
  importWarehouse,
  importWarehouseTemplate,
} from '#/api/mes/wm/warehouse';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { BarcodeDetail } from '../barcode/components';
import { useGridColumns, useGridFormSchema } from './data';
@@ -27,11 +34,28 @@
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
const barcodeDetailRef = ref<InstanceType<typeof BarcodeDetail>>();
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥ä»“库 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['仓库']),
      fileName: '仓库导入模板.xls',
      importFn: importWarehouse,
      templateFn: importWarehouseTemplate,
    })
    .open();
}
/** åˆ›å»ºä»“库 */
@@ -115,6 +139,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <BarcodeDetail ref="barcodeDetailRef" />
    <Grid table-title="仓库列表">
@@ -128,6 +153,13 @@
              auth: ['mes:wm-warehouse:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['仓库']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-warehouse:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>
src/views/wls/warehouse/location/index.vue
@@ -16,8 +16,12 @@
import {
  deleteWarehouseLocation,
  getWarehouseLocationPage,
  importWarehouseLocation,
  importWarehouseLocationTemplate,
} from '#/api/mes/wm/warehouse/location';
import { $t } from '#/locales';
import ImportModalComponent from '#/components/import-modal';
import { BarcodeDetail } from '../../barcode/components';
import { useGridColumns, useGridFormSchema } from './data';
@@ -30,6 +34,11 @@
const [FormModal, formModalApi] = useVbenModal({
  connectedComponent: Form,
  destroyOnClose: true,
});
const [ImportModal, importModalApi] = useVbenModal({
  connectedComponent: ImportModalComponent,
  destroyOnClose: true,
});
@@ -70,6 +79,18 @@
/** åˆ·æ–°è¡¨æ ¼ */
function handleRefresh() {
  gridApi.query();
}
/** å¯¼å…¥åº“区 */
function handleImport() {
  importModalApi
    .setData({
      title: $t('ui.actionTitle.import', ['库区']),
      fileName: '库区导入模板.xls',
      importFn: importWarehouseLocation,
      templateFn: importWarehouseLocationTemplate,
    })
    .open();
}
/** åˆ›å»ºåº“区 */
@@ -159,6 +180,7 @@
<template>
  <Page auto-content-height><FormModal @success="handleRefresh" />
    <ImportModal @success="handleRefresh" />
    <BarcodeDetail ref="barcodeDetailRef" />
    <Alert
@@ -184,6 +206,13 @@
              auth: ['mes:wm-warehouse:create'],
              onClick: handleCreate,
            },
            {
              label: $t('ui.actionTitle.import', ['库区']),
              type: 'primary',
              icon: ACTION_ICON.UPLOAD,
              auth: ['mes:wm-warehouse:import'],
              onClick: handleImport,
            },
          ]"
        />
      </template>