Browse Source

Merge branch 'master_hella' of http://dev.ccwin-in.com:3000/sfms3.0/sfms3.0-ui into master_hella

master_hella_20240701
ljlong_2630 5 months ago
parent
commit
fcf3ba0b45
  1. 1
      README.md
  2. 56
      src/api/mes/itemRequestDetail/index.ts
  3. 24
      src/api/mes/workScheduling/index.ts
  4. 6
      src/api/qms/inspectionJob/inspectionJobMain/index.ts
  5. 54
      src/api/wms/invoicingcalendar/index.ts
  6. 13
      src/api/wms/productreceiptJobDetail/index.ts
  7. 12
      src/api/wms/productreceiptRecordDetail/index.ts
  8. 12
      src/api/wms/productreceiptRequestDetail/index.ts
  9. 73
      src/api/wms/relegateRequest/index.ts
  10. 65
      src/api/wms/saleShipmentDetailRecord/index.ts
  11. 30
      src/api/wms/saleShipmentMain/index.ts
  12. 56
      src/api/wms/saleShipmentMainRecord/index.ts
  13. 14
      src/api/wms/supplierinvoiceRequestMain/index.ts
  14. 34
      src/components/Annex/src/Annex.vue
  15. 5
      src/components/BasicForm/src/BasicForm.vue
  16. 13
      src/components/Detail/src/Detail.vue
  17. 51
      src/components/Form/src/Form.vue
  18. 8
      src/components/Form/src/components/useRenderSelect.tsx
  19. 33
      src/components/ImportForm/src/ImportForm.vue
  20. 60
      src/components/PreviewPDF/index.vue
  21. 57
      src/components/SearchHigh/src/SearchHigh.vue
  22. 24
      src/components/SearchTable/src/SearchTable.vue
  23. 21
      src/components/TableForm/src/TableForm.vue
  24. 2
      src/components/UploadFile/src/UploadFile.vue
  25. 20
      src/components/rowDrop/index.vue
  26. 2
      src/hooks/web/useI18n.ts
  27. 4
      src/layout/components/Breadcrumb/src/Breadcrumb.vue
  28. 4
      src/layout/components/Menu/src/components/useRenderMenuTitle.tsx
  29. 2
      src/layout/components/TagsView/src/TagsView.vue
  30. 572
      src/locales/en-US.ts
  31. 476
      src/locales/zh-CN.ts
  32. 1
      src/utils/dict.ts
  33. 14
      src/utils/disposition/defaultButtons.ts
  34. 9
      src/views/mes/components/Detail.vue
  35. 29
      src/views/mes/itemRequestMain/index.vue
  36. 181
      src/views/mes/itemRequestMain/itemRequestMain.data.ts
  37. 24
      src/views/mes/orderDay/components/schedule.vue
  38. 318
      src/views/mes/orderDay/components/scheduleDetail.vue
  39. 35
      src/views/mes/orderDay/index.vue
  40. 10
      src/views/mes/orderDay/orderDay.data.ts
  41. 14
      src/views/mes/process/index.vue
  42. 2
      src/views/mes/qualityform/index.vue
  43. 121
      src/views/mes/workScheduling/components/finish.vue
  44. 143
      src/views/mes/workScheduling/components/report.vue
  45. 44
      src/views/mes/workScheduling/index.vue
  46. 12
      src/views/mes/workScheduling/workScheduling.data.ts
  47. 0
      src/views/qms/counter/counter.data.ts
  48. 0
      src/views/qms/counter/index.vue
  49. 0
      src/views/qms/dynamicRule/dynamicRule.data.ts
  50. 0
      src/views/qms/dynamicRule/index.vue
  51. 0
      src/views/qms/inspectionJob/addForm.vue
  52. 0
      src/views/qms/inspectionJob/detail.vue
  53. 2
      src/views/qms/inspectionJob/index.vue
  54. 0
      src/views/qms/inspectionJob/inspectionJobMain.data.ts
  55. 0
      src/views/qms/inspectionRecord/addForm.vue
  56. 0
      src/views/qms/inspectionRecord/detail.vue
  57. 0
      src/views/qms/inspectionRecord/index.vue
  58. 0
      src/views/qms/inspectionRecord/inspectionRecordMain.data.ts
  59. 0
      src/views/qms/inspectionRequest/index.vue
  60. 0
      src/views/qms/inspectionRequest/inspectionRequestMain.data.ts
  61. 6
      src/views/qms/inspectionScheme/addForm.vue
  62. 0
      src/views/qms/inspectionScheme/index.vue
  63. 0
      src/views/qms/inspectionScheme/inspectionScheme.data.ts
  64. 0
      src/views/qms/inspectionStage/index.vue
  65. 0
      src/views/qms/inspectionStage/inspectionStage.data.ts
  66. 4
      src/views/qms/inspectionTemplate/addForm.vue
  67. 0
      src/views/qms/inspectionTemplate/index.vue
  68. 0
      src/views/qms/inspectionTemplate/inspectionTemplate.data.ts
  69. 0
      src/views/qms/selectedProject/index.vue
  70. 0
      src/views/qms/selectedProject/selectedProject.data.ts
  71. 0
      src/views/qms/selectedSet/index.vue
  72. 0
      src/views/qms/selectedSet/selectedSet.data.ts
  73. 7
      src/views/system/user/UserAssignRoleForm.vue
  74. 4
      src/views/wms/basicDataManage/itemManage/packageunit/packageunit.data.ts
  75. 233
      src/views/wms/basicDataManage/itemManage/relegateRequest/index.vue
  76. 243
      src/views/wms/basicDataManage/itemManage/relegateRequest/relegateRequest.data.ts
  77. 8
      src/views/wms/basicDataManage/supplierManage/purchaseprice/index.vue
  78. 6
      src/views/wms/basicDataManage/supplierManage/supplier/index.vue
  79. 8
      src/views/wms/basicDataManage/supplierManage/supplieritem/index.vue
  80. 26
      src/views/wms/deliversettlementManage/deliverplan/saleMain/saleMain.data.ts
  81. 224
      src/views/wms/deliversettlementManage/saleShipmentMainRecord/index.vue
  82. 278
      src/views/wms/deliversettlementManage/saleShipmentMainRecord/saleShipmentMainRecord.data.ts
  83. 75
      src/views/wms/deliversettlementManage/saleShipmentMainRequest/index.vue
  84. 174
      src/views/wms/deliversettlementManage/saleShipmentMainRequest/saleShipmentMain.data.ts
  85. 91
      src/views/wms/productionManage/productdismantle/productdismantleRecordMain/productdismantleRecordMain.data.ts
  86. 35
      src/views/wms/productionManage/productdismantle/productdismantleRequestMain/productdismantleRequestMain.data.ts
  87. 4
      src/views/wms/productionManage/productreceiptscrap/productreceiptscrapJobMain/index.vue
  88. 4
      src/views/wms/productionManage/productreceiptscrap/productreceiptscrapRecordMain/index.vue
  89. 9
      src/views/wms/productionManage/productreceiptscrap/productreceiptscrapRequestMain/index.vue
  90. 1
      src/views/wms/productionManage/productrepair/productrepairRequestMain/index.vue
  91. 3
      src/views/wms/productionManage/productrepair/productrepairRequestMain/productrepairRequestMain.data.ts
  92. 23
      src/views/wms/productionManage/productscrap/productscrapRecordMain/productscrapRecordMain.data.ts
  93. 1
      src/views/wms/productionManage/productscrap/productscrapRequestMain/index.vue
  94. 1
      src/views/wms/productionManage/productscrap/productscrapRequestMain/productscrapRequestMain.data.ts
  95. 4
      src/views/wms/purchasereceiptManage/inspect/inspectRecordMain/index.vue
  96. 12
      src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRecordMain/index.vue
  97. 2
      src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRequestMain/index.vue
  98. 2
      src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRecordMain/index.vue
  99. 2
      src/views/wms/purchasereceiptManage/sparereceipt/sparereceiptRequestMain/index.vue
  100. 20
      src/views/wms/purchasereceiptManage/supplierdeliver/demandforecastingMain/index.vue

1
README.md

@ -7,6 +7,7 @@ form: {
searchListPlaceholder: '请选择物料代码', // 输入框占位文本 searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'itemCode', // 查询弹窗赋值字段 searchField: 'itemCode', // 查询弹窗赋值字段
searchTitle: '生产线物料关系信息', // 查询弹窗标题 searchTitle: '生产线物料关系信息', // 查询弹窗标题
hiddenFilterButton:true,//是否隐藏筛选按钮
searchAllSchemas: Productionlineitem.allSchemas, // 查询弹窗所需类 searchAllSchemas: Productionlineitem.allSchemas, // 查询弹窗所需类
searchPage: ProductionlineitemApi.getProductionlineitemPage, // 查询弹窗所需分页方法 searchPage: ProductionlineitemApi.getProductionlineitemPage, // 查询弹窗所需分页方法
searchCondition: [{ searchCondition: [{

56
src/api/mes/itemRequestDetail/index.ts

@ -0,0 +1,56 @@
import request from '@/config/axios'
export interface ItemRequestDetailVO {
deleteTime: Date
id: number
status: string
concurrencyStamp: number
remark: string
deleter: string
requestBillNo: string
itemBasicCode: string
itemCounts: number
itemUom: string
siteId: number
}
// 查询叫料申请明细列表
export const getItemRequestDetailPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/mes/item-request-detail/senior', data })
} else {
return await request.get({ url: `/mes/item-request-detail/page`, params })
}
}
// 查询叫料申请明细详情
export const getItemRequestDetail = async (id: number) => {
return await request.get({ url: `/mes/item-request-detail/get?id=` + id })
}
// 新增叫料申请明细
export const createItemRequestDetail = async (data: ItemRequestDetailVO) => {
return await request.post({ url: `/mes/item-request-detail/create`, data })
}
// 修改叫料申请明细
export const updateItemRequestDetail = async (data: ItemRequestDetailVO) => {
return await request.put({ url: `/mes/item-request-detail/update`, data })
}
// 删除叫料申请明细
export const deleteItemRequestDetail = async (id: number) => {
return await request.delete({ url: `/mes/item-request-detail/delete?id=` + id })
}
// 导出叫料申请明细 Excel
export const exportItemRequestDetail = async (params) => {
return await request.download({ url: `/mes/item-request-detail/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/mes/item-request-detail/get-import-template' })
}

24
src/api/mes/workScheduling/index.ts

@ -47,4 +47,26 @@ export const exportWorkScheduling = async (params) => {
// 下载用户导入模板 // 下载用户导入模板
export const importTemplate = () => { export const importTemplate = () => {
return request.download({ url: '/mes/workScheduling/get-import-template' }) return request.download({ url: '/mes/workScheduling/get-import-template' })
} }
// 完工
export const completeHandle = async (data) => {
return await request.post({ url: `/mes/workScheduling/completeHandle`, data })
}
//报工
export const reportWorkByProcess = async (data) => {
return await request.post({ url: `/mes/work-scheduling-detail/reportWorkByProcess`, data })
}
//检查当前节点是否可以完工
export const getNodePosition = async (params) => {
return await request.get({ url: `/mes/workScheduling/getNodePosition`, params })
}
//获取当前工序的员工列表
export const getCurrentWorkerList = async (params) => {
return await request.get({ url: `/mes/workScheduling/getCurrentWorkerList`, params })
}
//获取当前工单的工序列表
export const getProcessList = async (params) => {
return await request.get({ url: `/mes/workScheduling/getProcessList`, params })
}

6
src/api/qms/inspectionJob/inspectionJobMain/index.ts

@ -22,6 +22,11 @@ export const createInspectionJobMain = async (data) => {
return await request.post({ url: `/qms/inspection-job-main/create`, data }) return await request.post({ url: `/qms/inspection-job-main/create`, data })
} }
// 暂存检验任务
export const stagingInspectionJobMain = async (data) => {
return await request.post({ url: `/qms/inspection-job-main/staging`, data })
}
// 修改检验任务 // 修改检验任务
export const updateInspectionJobMain = async (data) => { export const updateInspectionJobMain = async (data) => {
return await request.put({ url: `/qms/inspection-job-main/update`, data }) return await request.put({ url: `/qms/inspection-job-main/update`, data })
@ -46,6 +51,7 @@ export const abandonInspectionJobMain = async (id) => {
export const closeInspectionJobMain = async (id) => { export const closeInspectionJobMain = async (id) => {
return await request.put({ url: `/qms/inspection-job-main/close?id=` + id }) return await request.put({ url: `/qms/inspection-job-main/close?id=` + id })
} }
// 导出检验申请 Excel // 导出检验申请 Excel
export const exportInspectionJobMain = async (params) => { export const exportInspectionJobMain = async (params) => {
return await request.download({ url: `/qms/inspection-job-main/export-excel`, params }) return await request.download({ url: `/qms/inspection-job-main/export-excel`, params })

54
src/api/wms/invoicingcalendar/index.ts

@ -0,0 +1,54 @@
import request from '@/config/axios'
export interface InvoicingcalendarVO {
id: number
beginDay: string
endDay: string
descriiption: string
available: string
remark: string
extraProperties: string
concurrencyStamp: number
siteId: string
}
// 查询开票日历列表
export const getInvoicingcalendarPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/invoicingcalendar/senior', data })
} else {
return await request.get({ url: `/wms/invoicingcalendar/page`, params })
}
}
// 查询开票日历详情
export const getInvoicingcalendar = async (id: number) => {
return await request.get({ url: `/wms/invoicingcalendar/get?id=` + id })
}
// 新增开票日历
export const createInvoicingcalendar = async (data: InvoicingcalendarVO) => {
return await request.post({ url: `/wms/invoicingcalendar/create`, data })
}
// 修改开票日历
export const updateInvoicingcalendar = async (data: InvoicingcalendarVO) => {
return await request.put({ url: `/wms/invoicingcalendar/update`, data })
}
// 删除开票日历
export const deleteInvoicingcalendar = async (id: number) => {
return await request.delete({ url: `/wms/invoicingcalendar/delete?id=` + id })
}
// 导出开票日历 Excel
export const exportInvoicingcalendar = async (params) => {
return await request.download({ url: `/wms/invoicingcalendar/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/wms/invoicingcalendar/get-import-template' })
}

13
src/api/wms/productreceiptJobDetail/index.ts

@ -53,6 +53,19 @@ export const getProductreceiptJobDetailPageAssemble = async (params) => {
} }
} }
// 查询制品收货任务子列表
export const getProductreceiptJobDetailPageScarp = async (params) => {
params.type = 'scrap'
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/productreceipt-job-detail/senior', data })
} else {
return await request.get({ url: `/wms/productreceipt-job-detail/page`, params })
}
}
// 查询制品收货任务子详情 // 查询制品收货任务子详情
export const getProductreceiptJobDetail = async (id: number) => { export const getProductreceiptJobDetail = async (id: number) => {
return await request.get({ url: `/wms/productreceipt-job-detail/get?id=` + id }) return await request.get({ url: `/wms/productreceipt-job-detail/get?id=` + id })

12
src/api/wms/productreceiptRecordDetail/index.ts

@ -58,6 +58,18 @@ export const getProductreceiptRecordDetailPageAssemble = async (params) => {
} }
} }
// 查询制品收货记录子列表
export const getProductreceiptRecordDetailPageScrap = async (params) => {
params.type = 'scrap'
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/productreceipt-record-detail/senior', data })
} else {
return await request.get({ url: `/wms/productreceipt-record-detail/page`, params })
}
}
// 查询制品收货记录子详情 // 查询制品收货记录子详情
export const getProductreceiptRecordDetail = async (id: number) => { export const getProductreceiptRecordDetail = async (id: number) => {
return await request.get({ url: `/wms/productreceipt-record-detail/get?id=` + id }) return await request.get({ url: `/wms/productreceipt-record-detail/get?id=` + id })

12
src/api/wms/productreceiptRequestDetail/index.ts

@ -54,6 +54,18 @@ export const getProductreceiptRequestDetailPageAssemble = async (params) => {
} }
} }
// 查询报废收货申请子列表
export const getProductreceiptRequestDetailPageScrap = async (params) => {
params.type = 'scrap'
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/productreceipt-request-detail/senior', data })
} else {
return await request.get({ url: `/wms/productreceipt-request-detail/page`, params })
}
}
// 查询制品收货申请子详情 // 查询制品收货申请子详情
export const getProductreceiptRequestDetail = async (id: number) => { export const getProductreceiptRequestDetail = async (id: number) => {
return await request.get({ url: `/wms/productreceipt-request-detail/get?id=` + id }) return await request.get({ url: `/wms/productreceipt-request-detail/get?id=` + id })

73
src/api/wms/relegateRequest/index.ts

@ -0,0 +1,73 @@
import request from '@/config/axios'
export interface RelegateRequestVO {
id: number
itemCode: string
downItemCode: string
businessType: string
uom: string
qty: number
fromBatch: string
fromPackingNumber: string
fromLocationCode: string
fromAreaTypes: string
fromAreaCodes: string
fromWarehouseCode: string
toPackingNumber: string
toBatch: string
toLocationCode: string
toWarehouseCode: string
toAreaTypes: string
toAreaCodes: string
number: string
available: string
remark: string
departmentCode: string
siteId: number
extraProperties: string
status: string
concurrencyStamp: number
serialNumber: string
ruleUserId: number
}
// 查询物料降级信息列表
export const getRelegateRequestPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/relegate-request/senior', data })
} else {
return await request.get({ url: `/wms/relegate-request/page`, params })
}
}
// 查询物料降级信息详情
export const getRelegateRequest = async (id: number) => {
return await request.get({ url: `/wms/relegate-request/get?id=` + id })
}
// 新增物料降级信息
export const createRelegateRequest = async (data: RelegateRequestVO) => {
return await request.post({ url: `/wms/relegate-request/create`, data })
}
// 修改物料降级信息
export const updateRelegateRequest = async (data: RelegateRequestVO) => {
return await request.put({ url: `/wms/relegate-request/update`, data })
}
// 删除物料降级信息
export const deleteRelegateRequest = async (id: number) => {
return await request.delete({ url: `/wms/relegate-request/delete?id=` + id })
}
// 导出物料降级信息 Excel
export const exportRelegateRequest = async (params) => {
return await request.download({ url: `/wms/relegate-request/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/wms/relegate-request/get-import-template' })
}

65
src/api/wms/saleShipmentDetailRecord/index.ts

@ -0,0 +1,65 @@
import request from '@/config/axios'
export interface SaleShipmentDetailRecordVO {
id: number
soNumber: string
soLine: string
fromOwnerCode: string
packingNumber: string
batch: string
inventoryStatus: string
fromLocationCode: string
masterId: number
number: string
itemCode: string
itemName: string
itemDesc1: string
itemDesc2: string
projectCode: string
qty: number
uom: string
remark: string
concurrencyStamp: string
siteId: number
}
// 查询销售发运记录子列表
export const getSaleShipmentDetailRecordPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/sale-shipment-detail-record/senior', data })
} else {
return await request.get({ url: `/wms/sale-shipment-detail-record/page`, params })
}
}
// 查询销售发运记录子详情
export const getSaleShipmentDetailRecord = async (id: number) => {
return await request.get({ url: `/wms/sale-shipment-detail-record/get?id=` + id })
}
// 新增销售发运记录子
export const createSaleShipmentDetailRecord = async (data: SaleShipmentDetailRecordVO) => {
return await request.post({ url: `/wms/sale-shipment-detail-record/create`, data })
}
// 修改销售发运记录子
export const updateSaleShipmentDetailRecord = async (data: SaleShipmentDetailRecordVO) => {
return await request.put({ url: `/wms/sale-shipment-detail-record/update`, data })
}
// 删除销售发运记录子
export const deleteSaleShipmentDetailRecord = async (id: number) => {
return await request.delete({ url: `/wms/sale-shipment-detail-record/delete?id=` + id })
}
// 导出销售发运记录子 Excel
export const exportSaleShipmentDetailRecord = async (params) => {
return await request.download({ url: `/wms/sale-shipment-detail-record/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/wms/sale-shipment-detail-record/get-import-template' })
}

30
src/api/wms/saleShipmentMain/index.ts

@ -61,4 +61,34 @@ export const exportSaleShipmentMain = async (params) => {
// 下载用户导入模板 // 下载用户导入模板
export const importTemplate = () => { export const importTemplate = () => {
return request.download({ url: '/wms/sale-shipment-main-request/get-import-template' }) return request.download({ url: '/wms/sale-shipment-main-request/get-import-template' })
}
// 关闭-销售发运申请
export const closeSaleShipmentMain = async (id) => {
return await request.put({ url: `/wms/sale-shipment-main-request/close?id=` + id })
}
// 重新添加-销售发运申请
export const reAddSaleShipmentMain = async (id) => {
return await request.put({ url: `/wms/sale-shipment-main-request/reAdd?id=` + id })
}
// 提交审批-销售发运申请
export const submitSaleShipmentMain = async (id) => {
return await request.put({ url: `/wms/sale-shipment-main-request/submit?id=` + id })
}
// 审批驳回-销售发运申请
export const refusedSaleShipmentMain = async (id) => {
return await request.put({ url: `/wms/sale-shipment-main-request/refused?id=` + id })
}
// 审批通过-销售发运申请
export const agreeSaleShipmentMain = async (id) => {
return await request.put({ url: `/wms/sale-shipment-main-request/agree?id=` + id })
}
// 处理-销售发运申请
export const handleSaleShipmentMain = async (id) => {
return await request.put({ url: `/wms/sale-shipment-main-request/handle?id=` + id })
} }

56
src/api/wms/saleShipmentMainRecord/index.ts

@ -0,0 +1,56 @@
import request from '@/config/axios'
export interface SaleShipmentMainRecordVO {
id: number
requestNumber: string
customerCode: string
invoiceTime: Date
executeTime: Date
available: string
departmentCode: string
number: string
businessType: string
extraProperties: string
siteId: string
}
// 查询销售发运记录主列表
export const getSaleShipmentMainRecordPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/sale-shipment-main-record/senior', data })
} else {
return await request.get({ url: `/wms/sale-shipment-main-record/page`, params })
}
}
// 查询销售发运记录主详情
export const getSaleShipmentMainRecord = async (id: number) => {
return await request.get({ url: `/wms/sale-shipment-main-record/get?id=` + id })
}
// 新增销售发运记录主
export const createSaleShipmentMainRecord = async (data: SaleShipmentMainRecordVO) => {
return await request.post({ url: `/wms/sale-shipment-main-record/create`, data })
}
// 修改销售发运记录主
export const updateSaleShipmentMainRecord = async (data: SaleShipmentMainRecordVO) => {
return await request.put({ url: `/wms/sale-shipment-main-record/update`, data })
}
// 删除销售发运记录主
export const deleteSaleShipmentMainRecord = async (id: number) => {
return await request.delete({ url: `/wms/sale-shipment-main-record/delete?id=` + id })
}
// 导出销售发运记录主 Excel
export const exportSaleShipmentMainRecord = async (params) => {
return await request.download({ url: `/wms/sale-shipment-main-record/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/wms/sale-shipment-main-record/get-import-template' })
}

14
src/api/wms/supplierinvoiceRequestMain/index.ts

@ -56,6 +56,12 @@ export const deleteSupplierinvoiceRequestMain = async (id: number) => {
return await request.delete({ url: `/wms/supplierinvoice-request-main/delete?id=` + id }) return await request.delete({ url: `/wms/supplierinvoice-request-main/delete?id=` + id })
} }
// 校验控制是否可以开票逻辑
export const checkInvoicingCalendar = async (params) => {
return await request.get({ url: `/wms/supplierinvoice-request-main/checkInvoicingCalendar`, params })
}
// 打开供应商发货申请主 // 打开供应商发货申请主
export const opeSupplierinvoiceRequestMain = async (id: number) => { export const opeSupplierinvoiceRequestMain = async (id: number) => {
return await request.post({ url: `/wms/supplierinvoice-request-main/open?id=` + id }) return await request.post({ url: `/wms/supplierinvoice-request-main/open?id=` + id })
@ -123,4 +129,10 @@ export const exportSupplierinvoiceRequestDetail = async (params) => {
// 下载用户导入模板 // 下载用户导入模板
export const importTemplate = () => { export const importTemplate = () => {
return request.download({ url: '/wms/supplierinvoice-request-main/get-import-template' }) return request.download({ url: '/wms/supplierinvoice-request-main/get-import-template' })
} }
// 根据角色编码获取用户列表
export const queryUserInfoByRoleCode = async (params) => {
return await request.get({ url: `/wms/supplierinvoice-request-main/queryUserInfoByRoleCodePage`, params })
}

34
src/components/Annex/src/Annex.vue

@ -3,7 +3,7 @@
<div class="annex"> <div class="annex">
<div class="title flex items-center"> <div class="title flex items-center">
<!-- <div class="title-txt">附件</div> --> <!-- <div class="title-txt">附件</div> -->
<UploadFile :isShowFile="false" :isShowTip="false" title="添加附件" :upData="upData" :limit="10" <UploadFile :isShowFile="false" :isShowTip="false" :fileType="fileType" title="添加附件" :upData="upData" :limit="10"
@update:modelValue="handleAnnexSuccess" v-if="annexData.annexList.length<5"/> @update:modelValue="handleAnnexSuccess" v-if="annexData.annexList.length<5"/>
</div> </div>
<div class="list"> <div class="list">
@ -16,17 +16,20 @@
<div>{{ item.size }}KB</div> <div>{{ item.size }}KB</div>
<div>来自 {{ item.nickname }}</div> <div>来自 {{ item.nickname }}</div>
</div> </div>
<Icon icon="ep:download" v-if="showDownload" class="cursor-pointer mr-2" size="18" @click="downFile(item)" /> <Icon icon="ep:picture" v-if="showPreview" class="cursor-pointer mr-2" :size="18" @click="preview(item)"/>
<Icon icon="ep:delete" class="cursor-pointer" v-if="!hiddenDelete" size="18" @click="deleteAnnex(item.id)" /> <Icon icon="ep:download" v-if="showDownload" class="cursor-pointer mr-2" :size="18" @click="downFile(item)" />
<Icon icon="ep:delete" class="cursor-pointer" v-if="!hiddenDelete" :size="18" @click="deleteAnnex(item.id)" />
</div> </div>
<div class="time mt-6px ">{{ formatDate(item.createTime) }}</div> <div class="time mt-6px ">{{ formatDate(item.createTime) }}</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<PreviewPDF ref="previewRef" />
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import PreviewPDF from '@/components/PreviewPDF/index.vue'
import UploadFile from '@/components/UploadFile/src/UploadFile.vue' import UploadFile from '@/components/UploadFile/src/UploadFile.vue'
import { formatDate } from '@/utils/formatTime' import { formatDate } from '@/utils/formatTime'
import * as FileApi from '@/api/wms/file' import * as FileApi from '@/api/wms/file'
@ -45,6 +48,17 @@ const props = defineProps({
type: Object, type: Object,
required: true required: true
}, },
fileType:{
type:Array,
required: false,
default: () => {
return ['apk','doc', 'xls', 'ppt', 'txt', 'pdf','png', 'jpg', 'jpeg']
}
},
showPreview: {
type: Boolean,
required: false
},
showDownload: { showDownload: {
type: Boolean, type: Boolean,
required: false required: false
@ -55,7 +69,7 @@ const props = defineProps({
}, },
}) })
// emit // emit
const emit = defineEmits(['handleAnnexSuccess', 'deleteAnnexSuccess']) const emit = defineEmits(['handleAnnexSuccess', 'deleteAnnexSuccess','previewAnnexHandle'])
// //
const handleAnnexSuccess = () => { const handleAnnexSuccess = () => {
emit('handleAnnexSuccess') emit('handleAnnexSuccess')
@ -75,6 +89,18 @@ const deleteAnnex = async (id) => {
const downFile = (item)=>{ const downFile = (item)=>{
window.open(import.meta.env.VITE_BASE_URL + '/admin-api/infra/file/0/get/' + item.path) window.open(import.meta.env.VITE_BASE_URL + '/admin-api/infra/file/0/get/' + item.path)
} }
const previewRef = ref<InstanceType<typeof PreviewPDF>>()
const preview = (item)=>{
console.log('preview==',item)
if(item.url.endsWith('.pdf')){
previewRef.value?.openPreview(item.url)
}else{
let imageArray = props.annexData.annexList.map(item=>item.url)
imageArray = imageArray.filter(item=>!item.endsWith('.pdf'))
previewRef.value?.openPreview(imageArray)
}
}
</script> </script>

5
src/components/BasicForm/src/BasicForm.vue

@ -15,6 +15,7 @@
:schema="formSchema" :schema="formSchema"
:is-col="true" :is-col="true"
@opensearchTable="opensearchTable" @opensearchTable="opensearchTable"
@hiddenFilterButton="hiddenSearchTableFilterButton"
@clearSearchInput="clearSearchInput" @clearSearchInput="clearSearchInput"
@onChange="onChange" @onChange="onChange"
@onBlur="onBlur" @onBlur="onBlur"
@ -433,7 +434,9 @@ const opensearchTable = (
searchDetailSchemas searchDetailSchemas
) )
} }
const hiddenSearchTableFilterButton = ()=>{
searchTableRef.value.hiddenFilterButton()
}
const clearSearchInput = (field)=>{ const clearSearchInput = (field)=>{
emit('clearSearchInput',field) emit('clearSearchInput',field)
} }

13
src/components/Detail/src/Detail.vue

@ -103,6 +103,8 @@
<ElScrollbar ref="scrollbar" :style="{height:annexItem.hasSubDetail?'100%':(remarkHeight-40)+'px'}"> <ElScrollbar ref="scrollbar" :style="{height:annexItem.hasSubDetail?'100%':(remarkHeight-40)+'px'}">
<Annex v-show="tabsList[current].label==annexItem.label" <Annex v-show="tabsList[current].label==annexItem.label"
:annexData="annexItem" :annexData="annexItem"
:fileType="annexItem.fileType"
:showPreview="annexItem.showPreview"
:showDownload = "annexItem.showDownload" :showDownload = "annexItem.showDownload"
:hiddenDelete = "annexItem.hiddenDelete" :hiddenDelete = "annexItem.hiddenDelete"
@handleAnnexSuccess="updateAnnexTableHandle" @handleAnnexSuccess="updateAnnexTableHandle"
@ -223,6 +225,7 @@ const props = defineProps({
default: ()=>({ default: ()=>({
label: '附件', label: '附件',
showDownload:false, showDownload:false,
showPreview:false,
hiddenDelete:false hiddenDelete:false
}) })
}, },
@ -460,10 +463,14 @@ const getFileList = async () => {
} }
} }
// //
const getAnnexFileList = async (row:id) => { const getAnnexFileList = async (row) => {
console.log('getAnnexFileList')
props.annexTable?.forEach(async (item) => { props.annexTable?.forEach(async (item) => {
let requstData = {...remarksData.data,tableName: item?.tableName} let requstData = {...remarksData.data,tableName: item?.tableName}
if(item?.queryParams){
item?.queryParams?.forEach(queryItem => {
requstData[queryItem.queryField] = row[queryItem.rowField]
});
}
const annexList = await FileApi.getFileList(requstData) const annexList = await FileApi.getFileList(requstData)
const annexData = annexTableData.value.find(annex=>annex.label === item.label) const annexData = annexTableData.value.find(annex=>annex.label === item.label)
if(annexData){ if(annexData){
@ -476,6 +483,8 @@ const getAnnexFileList = async (row:id) => {
annexList, annexList,
hasSubDetail:item.hasSubDetail||false, hasSubDetail:item.hasSubDetail||false,
subDetailTableData:item.subDetailTableData, subDetailTableData:item.subDetailTableData,
fileType:item.fileType||['apk','doc', 'xls', 'ppt', 'txt', 'pdf','png', 'jpg', 'jpeg'],
showPreview:item.showPreview||false, //
showDownload:item.showDownload||false, // showDownload:item.showDownload||false, //
hiddenDelete:item.hiddenDelete || false, // hiddenDelete:item.hiddenDelete || false, //
}) })

51
src/components/Form/src/Form.vue

@ -55,7 +55,7 @@ export default defineComponent({
vLoading: propTypes.bool.def(false), vLoading: propTypes.bool.def(false),
labelPosition: propTypes.string.def('left'), labelPosition: propTypes.string.def('left'),
}, },
emits: ['register','opensearchTable','clearSearchInput', 'onChange', 'onBlur','onEnter'], emits: ['register','opensearchTable','clearSearchInput', 'onChange', 'onBlur','onEnter','hiddenFilterButton'],
setup(props, { slots, expose, emit }) { setup(props, { slots, expose, emit }) {
// element form // element form
const elFormRef = ref<ComponentRef<typeof ElForm>>() const elFormRef = ref<ComponentRef<typeof ElForm>>()
@ -173,8 +173,15 @@ export default defineComponent({
// Divider // Divider
const isDivider = item.component === 'Divider' const isDivider = item.component === 'Divider'
const Com = componentMap['Divider'] as ReturnType<typeof defineComponent> const Com = componentMap['Divider'] as ReturnType<typeof defineComponent>
let labelName = item?.label || ''
if(item?.label){
labelName = t(`ts.${item?.label}`)
if(labelName === 'ts.' + item?.label){
labelName = item?.label
}
}
return isDivider ? ( return isDivider ? (
<Com {...{ contentPosition: 'left', ...item.componentProps }}>{item?.label}</Com> <Com {...{ contentPosition: 'left', ...item.componentProps }}>{labelName}</Com>
) : isCol ? ( ) : isCol ? (
// ElCol // ElCol
<ElCol {...setGridProp(item.colProps)}>{renderFormItem(item)}</ElCol> <ElCol {...setGridProp(item.colProps)}>{renderFormItem(item)}</ElCol>
@ -218,13 +225,28 @@ export default defineComponent({
const formItemSlots: Recordable = setFormItemSlots(slots, item.field) const formItemSlots: Recordable = setFormItemSlots(slots, item.field)
// labelMessage使 // labelMessage使
if (item?.labelMessage) { if (item?.labelMessage) {
let labelName = item.label || ''
if(item.label){
labelName = t(`ts.${item.label}`)
if(labelName === 'ts.' + item.label){
labelName = item.label
}
}
let labelMessage = item.labelMessage || ''
if(item.labelMessage){
labelMessage = t(`ts.${item.labelMessage}`)
if(labelMessage === 'ts.' + item.labelMessage){
labelMessage = item.labelMessage
}
}
formItemSlots.label = () => { formItemSlots.label = () => {
return ( return (
<> <>
<span>{item.label}</span> <span>{labelName}</span>
<ElTooltip placement="right" raw-content> <ElTooltip placement="right" raw-content>
{{ {{
content: () => <span v-dompurify-html={item.labelMessage}></span>, content: () => <span v-dompurify-html={labelMessage}></span>,
default: () => ( default: () => (
<Icon <Icon
icon="ep:warning" icon="ep:warning"
@ -244,12 +266,11 @@ export default defineComponent({
const formItemSlotsSearchList: Recordable = setFormItemSlots(slots, item.field) const formItemSlotsSearchList: Recordable = setFormItemSlots(slots, item.field)
if (item?.componentProps?.isSearchList) { if (item?.componentProps?.isSearchList) {
if(item?.componentProps?.multiple){ if(item?.componentProps?.multiple){
formItemSlotsSearchList[item.field] = () => { formItemSlotsSearchList[item.field] = () => {
return ( return (
<> <>
<ElTooltip placement="top" content={formModel.value[item.field]} > <ElTooltip placement="top" content={formModel.value[item.field]} >
<ElInput class={'myInput'} v-model={formModel.value[item.field]} placeholder={item?.componentProps?.searchListPlaceholder} disabled={item?.componentProps?.enterSearch?false:true} onKeyup={(event)=>{ <ElInput class={'myInput'} v-model={formModel.value[item.field]} placeholder={t(`ts.${item?.componentProps?.searchListPlaceholder}`).replace('ts.','') || ''} disabled={item?.componentProps?.enterSearch?false:true} onKeyup={(event)=>{
if(event.keyCode === 13){ if(event.keyCode === 13){
// //
emit('onEnter',item.field,formModel.value[item.field],event) emit('onEnter',item.field,formModel.value[item.field],event)
@ -278,7 +299,14 @@ export default defineComponent({
item?.componentProps?.multiple, item?.componentProps?.multiple,
item?.componentProps?.isConcatDetailSchemas, item?.componentProps?.isConcatDetailSchemas,
item?.componentProps?.searchDetailSchemas, item?.componentProps?.searchDetailSchemas,
)}}/> )
//
if(item?.componentProps?.hiddenFilterButton){
emit('hiddenFilterButton')
}
}}/>
</> </>
) )
} }
@ -286,7 +314,7 @@ export default defineComponent({
formItemSlotsSearchList[item.field] = () => { formItemSlotsSearchList[item.field] = () => {
return ( return (
<> <>
<ElInput class={'myInput'} v-model={formModel.value[item.field]} placeholder={item?.componentProps?.searchListPlaceholder} onKeyup={(event)=>{ <ElInput class={'myInput'} v-model={formModel.value[item.field]} placeholder={t(`ts.${item?.componentProps?.searchListPlaceholder}`).replace('ts.','') || ''} onKeyup={(event)=>{
if(event.keyCode === 13){ if(event.keyCode === 13){
// //
emit('onEnter',item.field,formModel.value[item.field],event) emit('onEnter',item.field,formModel.value[item.field],event)
@ -316,7 +344,12 @@ export default defineComponent({
item?.componentProps?.multiple, item?.componentProps?.multiple,
item?.componentProps?.isConcatDetailSchemas, item?.componentProps?.isConcatDetailSchemas,
item?.componentProps?.searchDetailSchemas, item?.componentProps?.searchDetailSchemas,
)}}/> )
//
if(item?.componentProps?.hiddenFilterButton){
emit('hiddenFilterButton')
}
}}/>
</> </>
) )
} }

8
src/components/Form/src/components/useRenderSelect.tsx

@ -3,6 +3,7 @@ import { ComponentOptions } from '@/types/components'
import { ElOption, ElOptionGroup } from 'element-plus' import { ElOption, ElOptionGroup } from 'element-plus'
import { getSlot } from '@/utils/tsxHelper' import { getSlot } from '@/utils/tsxHelper'
import { Slots } from 'vue' import { Slots } from 'vue'
const { t } = useI18n()
export const useRenderSelect = (slots: Slots) => { export const useRenderSelect = (slots: Slots) => {
// 渲染 select options // 渲染 select options
@ -33,11 +34,16 @@ export const useRenderSelect = (slots: Slots) => {
const valueAlias = item?.componentProps?.optionsAlias?.valueField const valueAlias = item?.componentProps?.optionsAlias?.valueField
const { label, value, ...other } = option const { label, value, ...other } = option
const zhName = labelAlias ? option[labelAlias] : label;//中文名称
let labelName = t(`ts.${zhName}`)
if(labelName === 'ts.' + zhName){
labelName = zhName
}
return ( return (
<ElOption <ElOption
{...other} {...other}
label={labelAlias ? option[labelAlias] : label} label={labelName}
value={valueAlias ? option[valueAlias] : value} value={valueAlias ? option[valueAlias] : value}
> >
{{ {{

33
src/components/ImportForm/src/ImportForm.vue

@ -1,6 +1,6 @@
<!-- 导入组件 --> <!-- 导入组件 -->
<template> <template>
<Dialog v-model="dialogVisible" title="导入" width="600" :close-on-click-modal="false"> <Dialog v-model="dialogVisible" :title="t('ts.导入')" width="600" :close-on-click-modal="false">
<el-upload <el-upload
ref="uploadRef" ref="uploadRef"
v-model:file-list="fileList" v-model:file-list="fileList"
@ -30,29 +30,29 @@
style="width: 300px; margin: 0 auto" style="width: 300px; margin: 0 auto"
v-loading="formLoading" v-loading="formLoading"
> >
<Icon icon="ep:upload-filled" color="#c0c4cc" size="60" /> <Icon icon="ep:upload-filled" color="#c0c4cc" :size="60" />
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div> <div class="el-upload__text">{{t('ts.将文件拖到此处,或')}}<em>{{t('ts.点击上传')}}</em></div>
<template #tip> <template #tip>
<div class="el-upload__tip ml--126px mr--80px"> <div class="el-upload__tip ml--126px mr--80px">
<div class="flex"> <div class="flex">
<div <div
class="label h-32px mr-26px color-#acaeb3 font-size-14px w-100px text-right" class="label h-32px mr-26px color-#acaeb3 font-size-14px w-100px text-right"
style="line-height: 32px" style="line-height: 32px"
>导入模式</div >{{t('ts.导入模式')}}</div
> >
<div class=""> <div class="">
<div class="radio"> <div class="radio">
<el-radio-group v-model="mode"> <el-radio-group v-model="mode">
<el-radio :label="1" :disabled="updateIsDisable">更新</el-radio> <el-radio :label="1" :disabled="updateIsDisable">{{ t('ts.更新')}}</el-radio>
<el-radio :label="2" :disabled="appendIsDisable">追加</el-radio> <el-radio :label="2" :disabled="appendIsDisable">{{ t('ts.追加') }}</el-radio>
<el-radio :label="3" :disabled="coverIsDisable">覆盖</el-radio> <el-radio :label="3" :disabled="coverIsDisable">{{ t('ts.覆盖') }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<div class="tips color-#acaeb3 font-size-14px"> <div class="tips color-#acaeb3 font-size-14px">
<div class="mt-2">更新新增并修改</div> <div class="mt-2">{{t('ts.更新:新增并修改')}}</div>
<div class="mt-2">追加只新增不修改</div> <div class="mt-2">{{ t('ts.追加:只新增,不修改') }}</div>
<div class="mt-2">覆盖只修改不新增</div> <div class="mt-2">{{ t('ts.覆盖:只修改不新增') }}</div>
</div> </div>
</div> </div>
</div> </div>
@ -60,15 +60,15 @@
<div <div
class="label h-32px mr-26px color-#acaeb3 font-size-14px w-100px text-right" class="label h-32px mr-26px color-#acaeb3 font-size-14px w-100px text-right"
style="line-height: 32px" style="line-height: 32px"
>部分保存</div >{{ t('ts.部分保存') }}</div
> >
<div class=""> <div class="">
<div class="switch"> <div class="switch">
<el-switch v-model="updatePart" /> <el-switch v-model="updatePart" />
</div> </div>
<div class="tips color-#acaeb3 font-size-14px"> <div class="tips color-#acaeb3 font-size-14px">
<div class="mt-2">部分保存如存在错误数据正确数据正常导入</div> <div class="mt-2">{{ t('ts.部分保存:如存在错误数据,正确数据正常导入') }}</div>
<div class="mt-2">全部保存全部数据正确才能导入</div> <div class="mt-2">{{ t('ts.全部保存:全部数据正确,才能导入') }}</div>
</div> </div>
</div> </div>
</div> </div>
@ -92,11 +92,11 @@
<div class="flex-1 text-left"> <div class="flex-1 text-left">
<el-button type="primary" plain @click="importTemplate"> <el-button type="primary" plain @click="importTemplate">
<Icon icon="ep:download" /> <Icon icon="ep:download" />
下载模板 {{ t('ts.下载模板') }}
</el-button> </el-button>
</div> </div>
<el-button :disabled="formLoading" type="primary" @click="submitForm"> </el-button> <el-button :disabled="formLoading" type="primary" @click="submitForm">{{ t('ts. ') }}</el-button>
<el-button @click="dialogVisible = false"> </el-button> <el-button @click="dialogVisible = false">{{ t('ts.取 消') }}</el-button>
</div> </div>
</template> </template>
</Dialog> </Dialog>
@ -106,6 +106,7 @@ import { getAccessToken, getTenantId } from '@/utils/auth'
import download from '@/utils/download' import download from '@/utils/download'
defineOptions({ name: 'ImportForm' }) defineOptions({ name: 'ImportForm' })
const { t } = useI18n()
const message = useMessage() // const message = useMessage() //

60
src/components/PreviewPDF/index.vue

@ -0,0 +1,60 @@
<template>
<el-dialog class="preview" v-model="showDialog" style="" @close="closeView">
<iframe v-if="isPDF" ref="pdfRef" width="100%" :height="frameHeight" :src="pdfUrl" frameborder="0"></iframe>
<el-carousel justify="center" v-else indicator-position="outside">
<el-carousel-item class="carousel-item" v-for="url in imageArray" :key="url">
<el-image style="height:100%" fit="contain" :src="url" loading="lazy" />
</el-carousel-item>
</el-carousel>
</el-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const showDialog = ref(false) //
const message = useMessage() //
const isPDF = ref(false) // pdf
const pdfUrl = ref<string>('') // pdf
const pdfRef = ref() // pdf
const frameHeight = ref(0)
const imageArray = ref<string[]>([]) //
const closeView = () => {
showDialog.value = false
}
//
const openPreview = async (data:string[]|string)=>{
showDialog.value = true
if(Array.isArray(data)){
//
isPDF.value = false
pdfUrl.value = ''
imageArray.value = data.filter(item=>(item.replace('/get/','/show/')))
}else{
isPDF.value = true
pdfUrl.value = data.replace('/get/','/show/')
nextTick(()=>{
frameHeight.value = window.innerHeight - 2*pdfRef.value.getBoundingClientRect().top
})
}
}
defineExpose({openPreview})
</script>
<style>
/* .preview .el-dialog__headerbtn .el-dialog__close{
color: white !important;
font-size: 20px !important;
}
.preview.el-dialog {
--el-dialog-box-shadow:null;
} */
</style>
<style lang="scss" scoped>
.carousel-item{
display: flex;
justify-content: center;
align-items: center;
}
</style>

57
src/components/SearchHigh/src/SearchHigh.vue

@ -1,42 +1,42 @@
<template> <template>
<!-- 高级筛选界面 --> <!-- 高级筛选界面 -->
<Dialog title="筛选" v-model="popoverVisible" :width="'50%'" > <Dialog :title="t('ts.筛选')" v-model="popoverVisible" :width="'50%'" >
<el-form id="moreListElForm" size="default" labelWidth="0" :searchData="moreListData"> <el-form id="moreListElForm" size="default" labelWidth="0" :searchData="moreListData">
<el-form-item v-for="(item, index) in moreListData.filters" :key="index" :prop="item.column" > <el-form-item v-for="(item, index) in moreListData.filters" :key="index" :prop="item.column" >
<!-- 第一列 label--> <!-- 第一列 label-->
<div class="rowInnerItem"> <div class="rowInnerItem">
<el-select v-model="item.column" placeholder="请选择筛选对象" :disabled="item.hide" :filterable="true" @change="resetSelect(item)" > <el-select v-model="item.column" :placeholder="t('ts.请选择筛选对象')" :disabled="item.hide" :filterable="true" @change="resetSelect(item)" >
<el-option v-for="(item, index) in searchOption_high" :key="index" :label="item.label" :value="item.field" /> <el-option v-for="(item, index) in searchOption_high" :key="index" :label="t(`ts.${item.label}`).replace('ts.','')" :value="item.field" />
</el-select> </el-select>
</div> </div>
<!-- 第二列 条件--> <!-- 第二列 条件-->
<div class="rowInnerItem"> <div class="rowInnerItem">
<el-select v-model="item.action" placeholder="请选择条件" :disabled="item.column == '' || item.hide ? true : false" @change="actionSelect(item)" > <el-select v-model="item.action" :placeholder="t('ts.请选择条件')" :disabled="item.column == '' || item.hide ? true : false" @change="actionSelect(item)" >
<el-option v-for="item in formatMoreListActions(item) " :key="item.value" :label="item.label" <el-option v-for="item in formatMoreListActions(item) " :key="item.value" :label="t(`ts.${item.label}`).replace('ts.','')"
:value="item.value" /> :value="item.value" />
</el-select> </el-select>
</div> </div>
<!-- 第三列 --> <!-- 第三列 -->
<div class="rowInnerItem1"> <div class="rowInnerItem1">
<!-- 输入框 --> <!-- 输入框 -->
<el-input v-if="getInputType(item.column) == 'input'" v-model="item.value" placeholder="请输入内容" clearable :disabled="item.disabled"/> <el-input v-if="getInputType(item.column) == 'input'" v-model="item.value" :placeholder="t('ts.请输入内容')" clearable :disabled="item.disabled"/>
<!-- 数字输入框 --> <!-- 数字输入框 -->
<el-input-number v-else-if="getInputType(item.column) == 'inputNumber'" v-model="item.value" :precision="getInputPrecision(item.column)" :disabled="item.disabled"/> <el-input-number v-else-if="getInputType(item.column) == 'inputNumber'" v-model="item.value" :precision="getInputPrecision(item.column)" :disabled="item.disabled"/>
<!-- 下拉框 --> <!-- 下拉框 -->
<el-select v-else-if="getInputType(item.column) == 'select'" v-model="item.value1" placeholder="请选择内容" :filterable="true" clearable :disabled="item.disabled" :multiple="item.action=='in' || item.action=='notIn' ? true : false" collapse-tags collapse-tags-tooltip :key="item.action"> <el-select v-else-if="getInputType(item.column) == 'select'" v-model="item.value1" :placeholder="t('ts.请选择内容')" :filterable="true" clearable :disabled="item.disabled" :multiple="item.action=='in' || item.action=='notIn' ? true : false" collapse-tags collapse-tags-tooltip :key="item.action">
<el-option v-for="dict in initSelectOptions(item.column)" :key="dict.value" :label="dict.label" <el-option v-for="dict in initSelectOptions(item.column)" :key="dict.value" :label="t(`ts.${dict.label}`).replace('ts.','')"
:value="dict.value" /> :value="dict.value" />
<!-- <el-option v-for="(op, index) in initSelectOptions(item.column)" :label="op[item.optionsLabel] || op.label" <!-- <el-option v-for="(op, index) in initSelectOptions(item.column)" :label="op[item.optionsLabel] || op.label"
:value="op[item.optionsValue] || op.value" :key="index" /> --> :value="op[item.optionsValue] || op.value" :key="index" /> -->
</el-select> </el-select>
<!-- 时间 --> <!-- 时间 -->
<el-time-picker v-else-if="getInputType(item.column) == 'time'" range-separator="-" start-placeholder="开始时间" end-placeholder="结束时间" v-model="item.value1" style="width: calc(100% - 20px);margin-right: 10px;" :disabled="item.disabled"/> <el-time-picker v-else-if="getInputType(item.column) == 'time'" range-separator="-" :start-placeholder="t('ts.开始时间')" :end-placeholder="t('ts.结束时间')" v-model="item.value1" style="width: calc(100% - 20px);margin-right: 10px;" :disabled="item.disabled"/>
<!-- 日期 --> <!-- 日期 -->
<el-date-picker v-else-if="getInputType(item.column) == 'date'" v-model="item.value1" type="daterange" <el-date-picker v-else-if="getInputType(item.column) == 'date'" v-model="item.value1" type="daterange"
range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" style="width: calc(100% - 20px);margin-right: 10px;" @change="changeDateTimePicker($event, item,'daterange')" value-format="YYYY-MM-DD" format="YYYY/MM/DD" :disabled="item.disabled"/> range-separator="-" :start-placeholder="t('ts.开始日期')" :end-placeholder="t('ts.结束日期')" style="width: calc(100% - 20px);margin-right: 10px;" @change="changeDateTimePicker($event, item,'daterange')" value-format="YYYY-MM-DD" format="YYYY/MM/DD" :disabled="item.disabled"/>
<!-- 日期时间 --> <!-- 日期时间 -->
<el-date-picker v-else-if="getInputType(item.column) == 'datePicker'" v-model="item.value1" type="datetimerange" <el-date-picker v-else-if="getInputType(item.column) == 'datePicker'" v-model="item.value1" type="datetimerange"
range-separator="-" start-placeholder="开始时间" end-placeholder="结束时间" style="width: calc(100% - 20px);margin-right: 10px;" @change="changeDateTimePicker($event, item, 'datetimerange')" value-format="x" format="YYYY/MM/DD HH:mm:ss" :disabled="item.disabled"/> range-separator="-" :start-placeholder="t('ts.开始时间')" :end-placeholder="t('ts.结束时间')" style="width: calc(100% - 20px);margin-right: 10px;" @change="changeDateTimePicker($event, item, 'datetimerange')" value-format="x" format="YYYY/MM/DD HH:mm:ss" :disabled="item.disabled"/>
</div> </div>
<!-- 删除条件按钮 --> <!-- 删除条件按钮 -->
<el-button type="danger" :icon="Minus" circle size="small" <el-button type="danger" :icon="Minus" circle size="small"
@ -45,7 +45,7 @@
</el-form> </el-form>
<!-- 添加筛选条件 --> <!-- 添加筛选条件 -->
<div class="moreListPush-btn"> <div class="moreListPush-btn">
<span @click="moreListPush">+ 添加筛选条件</span> <span @click="moreListPush">+ {{ t('ts.添加筛选条件') }}</span>
</div> </div>
<!-- 按钮 --> <!-- 按钮 -->
<div class="moreListBaseBts" > <div class="moreListBaseBts" >
@ -57,6 +57,7 @@
import { Minus } from '@element-plus/icons-vue' import { Minus } from '@element-plus/icons-vue'
import * as defaultButtons from '@/utils/disposition/defaultButtons' import * as defaultButtons from '@/utils/disposition/defaultButtons'
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict' import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
const { t } = useI18n()
const props = defineProps({ const props = defineProps({
// name // name
@ -92,46 +93,46 @@ const moreListOptions = ref({
action: [ action: [
{ {
value: '==', value: '==',
label: '等于' label: t('ts.等于')
}, { }, {
value: '!=', value: '!=',
label: '不等于' label: t('ts.不等于')
}, { }, {
value: '>', value: '>',
label: '大于' label: t('ts.大于')
}, { }, {
value: '<', value: '<',
label: '小于' label: t('ts.小于')
}, { }, {
value: '>=', value: '>=',
label: '大于等于' label: t('ts.大于等于')
}, { }, {
value: '<=', value: '<=',
label: '小于等于' label: t('ts.小于等于')
}, { }, {
value: 'like', value: 'like',
label: '模糊' label: t('ts.模糊')
}, { }, {
value: 'in', value: 'in',
label: '包含' label: t('ts.包含')
}, { }, {
value: 'notIn', value: 'notIn',
label: '不包含' label: t('ts.不包含')
}, { }, {
value: 'betweeen', value: 'betweeen',
label: '区间' label: t('ts.区间')
}, { }, {
value: 'isNull', value: 'isNull',
label: '是空' label: t('ts.是空')
}, { }, {
value: 'isNotNull', value: 'isNotNull',
label: '不是空' label: t('ts.不是空')
}, { }, {
value: 'isStr', value: 'isStr',
label: '是空字符串' label: t('ts.是空字符串')
}, { }, {
value: 'isNotStr', value: 'isNotStr',
label: '不是空字符串' label: t('ts.不是空字符串')
} }
] ]
}) })
@ -178,9 +179,9 @@ const formatMoreListActions = (val) => {
// - // -
const moreListDelete = (val,item,$event) => { const moreListDelete = (val,item,$event) => {
if (moreListData.value.filters.length == 1) { if (moreListData.value.filters.length == 1) {
message.warning('必须保留一条筛选条件!') message.warning(t('ts.必须保留一条筛选条件!'))
} else { } else {
message.confirm('您确定删除吗, 是否继续?').then(() => { message.confirm(t('ts.您确定删除吗, 是否继续?')).then(() => {
moreListData.value.filters.splice(val, 1) moreListData.value.filters.splice(val, 1)
}) })
} }

24
src/components/SearchTable/src/SearchTable.vue

@ -38,7 +38,7 @@
<script setup lang="ts"> <script setup lang="ts">
import * as defaultButtons from '@/utils/disposition/defaultButtons' import * as defaultButtons from '@/utils/disposition/defaultButtons'
// const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const route = useRoute() // const route = useRoute() //
@ -50,9 +50,9 @@ const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
// //
const HeadButttondata = [ const HeadButttondata = ref([
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
] ])
/** 打开弹窗 */ /** 打开弹窗 */
const getListRef = ref() const getListRef = ref()
@ -70,7 +70,10 @@ const multipleBol = ref(false)
const searchConditionRef = ref() const searchConditionRef = ref()
const openData = (titleName: any, tableObject:any ,allSchemas: any,multiple: any) => { const openData = (titleName: any, tableObject:any ,allSchemas: any,multiple: any) => {
dialogTitle.value = titleName HeadButttondata.value = [
defaultButtons.defaultFilterBtn(null), //
]
dialogTitle.value = t(`ts.${titleName}`).replace('ts.','')
tableObjectRef.value = tableObject tableObjectRef.value = tableObject
searchDialogVisible.value = true searchDialogVisible.value = true
multipleBol.value = multiple multipleBol.value = multiple
@ -79,6 +82,10 @@ const openData = (titleName: any, tableObject:any ,allSchemas: any,multiple: any
tableColumns.value = allSchemas.tableColumns tableColumns.value = allSchemas.tableColumns
} }
const open = (titleName: any, allSchemas: any,getApiPage: any, formField: any, searchField: any,multiple: any, type: any, row: any, searchCondition:any , isCountRequestRe:any,isConcatDetailSchemas=false,detailSchemas: any) => { const open = (titleName: any, allSchemas: any,getApiPage: any, formField: any, searchField: any,multiple: any, type: any, row: any, searchCondition:any , isCountRequestRe:any,isConcatDetailSchemas=false,detailSchemas: any) => {
HeadButttondata.value = [
defaultButtons.defaultFilterBtn(null), //
]
searchDialogVisible.value = true searchDialogVisible.value = true
formFieldRef.value = formField formFieldRef.value = formField
searchFieldRef.value = searchField searchFieldRef.value = searchField
@ -96,7 +103,8 @@ const open = (titleName: any, allSchemas: any,getApiPage: any, formField: any, s
rowRef.value = row rowRef.value = row
multipleBol.value = multiple multipleBol.value = multiple
// dialogTitle.value = t('action.' + type) // dialogTitle.value = t('action.' + type)
dialogTitle.value = titleName dialogTitle.value = t(`ts.${titleName}`).replace('ts.','')
const {tableObject, tableMethods } = useTable({ const {tableObject, tableMethods } = useTable({
getListApi: getPage.value // getListApi: getPage.value //
}) })
@ -112,6 +120,10 @@ const open = (titleName: any, allSchemas: any,getApiPage: any, formField: any, s
getList() getList()
} }
const hiddenFilterButton = ()=>{
HeadButttondata.value = []
}
// //
const searchFormClick = (searchData) => { const searchFormClick = (searchData) => {
console.log(99, rowRef.value) console.log(99, rowRef.value)
@ -153,7 +165,7 @@ const searchFormClick = (searchData) => {
getListRef.value() // getListRef.value() //
} }
defineExpose({ open,openData }) // open defineExpose({ open,openData,hiddenFilterButton }) // open
// Table ref // Table ref
const searchTableRef = ref() const searchTableRef = ref()

21
src/components/TableForm/src/TableForm.vue

@ -19,7 +19,7 @@
v-if="isShowReduceButton" v-if="isShowReduceButton"
v-slot="{ row, $index }" v-slot="{ row, $index }"
> >
<Icon icon="ep:remove" color="#757575" size="26" style="cursor: pointer;margin-top: -16px;" @click="handleDeleteTable (row, $index)" /> <Icon icon="ep:remove" color="#757575" :size="26" style="cursor: pointer;margin-top: -16px;" @click="handleDeleteTable (row, $index)" />
</el-table-column> </el-table-column>
<!-- 多选 --> <!-- 多选 -->
<el-table-column <el-table-column
@ -33,7 +33,7 @@
<el-table-column <el-table-column
type="index" type="index"
fixed="left" fixed="left"
label="序号" :label="t(`ts.序号`)"
width="80" width="80"
:align="'center'" :align="'center'"
v-if="isShowIndex" v-if="isShowIndex"
@ -43,7 +43,7 @@
v-for="(headerItem) in tableFields" v-for="(headerItem) in tableFields"
:key="headerItem" :key="headerItem"
:fixed="headerItem.tableForm?.fixed" :fixed="headerItem.tableForm?.fixed"
:label="headerItem.label" :prop="headerItem.field" :label="t(`ts.${headerItem.label}`).replace('ts.','')" :prop="headerItem.field"
:align="headerItem?.tableForm?.align || 'center'" :align="headerItem?.tableForm?.align || 'center'"
:sortable="headerItem?.tableForm?.sortable || false" :sortable="headerItem?.tableForm?.sortable || false"
:width="headerItem?.tableForm?.width || '200px'" :width="headerItem?.tableForm?.width || '200px'"
@ -122,7 +122,7 @@
@blur="tableFormSelectOnBlur(headerItem.field, $event,row, $index)"> @blur="tableFormSelectOnBlur(headerItem.field, $event,row, $index)">
<el-option <el-option
v-for="op in initSelectOptions(headerItem)" v-for="op in initSelectOptions(headerItem)"
:label="op.label" :label="t(`ts.${op.label}`).replace('ts.','')"
:value="op.value" :value="op.value"
:key="op.value" /> :key="op.value" />
</el-select> </el-select>
@ -149,12 +149,12 @@
<el-option-group <el-option-group
v-for="group in initSelectOptions(headerItem)" v-for="group in initSelectOptions(headerItem)"
:key="group.type" :key="group.type"
:label="group.name" :label="t(`ts.${group.name}`).replace('ts.','')"
> >
<el-option <el-option
v-for="item in group.options" v-for="item in group.options"
:key="item.value" :key="item.value"
:label="item.label" :label="t(`ts.${item.label}`).replace('ts.','')"
:value="item.value" :value="item.value"
/> />
</el-option-group> </el-option-group>
@ -250,7 +250,7 @@
<el-radio <el-radio
v-for="(item, index) in initSelectOptions(headerItem)" v-for="(item, index) in initSelectOptions(headerItem)"
:key="index" :key="index"
:label="item.value" :label="t(`ts.${item.value}`).replace('ts.','')"
:size="headerItem?.tableForm?.size" :size="headerItem?.tableForm?.size"
:disabled="itemIsDisabled(headerItem, row)" :disabled="itemIsDisabled(headerItem, row)"
:border="headerItem?.tableForm?.border"> :border="headerItem?.tableForm?.border">
@ -273,10 +273,10 @@
<el-checkbox <el-checkbox
v-for="(item, index) in initSelectOptions(headerItem)" v-for="(item, index) in initSelectOptions(headerItem)"
:key="index" :key="index"
:label="item.value" :label="t(`ts.${item.value}`).replace('ts.','')"
:disabled="itemIsDisabled(headerItem, row)" :disabled="itemIsDisabled(headerItem, row)"
:true-label="headerItem?.tableForm?.trueLabel" :true-label="t(`ts.${headerItem?.tableForm?.trueLabel}`).replace('ts.','')"
:false-label="headerItem?.tableForm?.falseLabel" :false-label="t(`ts.${headerItem?.tableForm?.falseLabel}`).replace('ts.','')"
:border="headerItem?.tableForm?.border" :border="headerItem?.tableForm?.border"
:size="headerItem?.tableForm?.size" :size="headerItem?.tableForm?.size"
:name="headerItem?.tableForm?.name" :name="headerItem?.tableForm?.name"
@ -310,6 +310,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
const { t } = useI18n() //
import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict' import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
const props = defineProps({ const props = defineProps({
// //

2
src/components/UploadFile/src/UploadFile.vue

@ -56,7 +56,7 @@ const props = defineProps({
title: propTypes.string.def('文件上传'), title: propTypes.string.def('文件上传'),
updateUrl: propTypes.string.def(import.meta.env.VITE_UPLOAD_URL), updateUrl: propTypes.string.def(import.meta.env.VITE_UPLOAD_URL),
upData: propTypes.object.def(), upData: propTypes.object.def(),
fileType: propTypes.array.def(['apk','doc', 'xls', 'ppt', 'txt', 'pdf', 'pdf','png', 'jpg', 'jpeg']), // , ['png', 'jpg', 'jpeg'] fileType: propTypes.array.def(['apk','doc', 'xls', 'ppt', 'txt', 'pdf','png', 'jpg', 'jpeg']), // , ['png', 'jpg', 'jpeg']
fileSize: propTypes.number.def(5), // (MB) fileSize: propTypes.number.def(5), // (MB)
limit: propTypes.number.def(5), // limit: propTypes.number.def(5), //
autoUpload: propTypes.bool.def(true), // autoUpload: propTypes.bool.def(true), //

20
src/components/rowDrop/index.vue

@ -1,7 +1,7 @@
<template> <template>
<!-- <Dialog title="字段设置" width="270" v-model="popoverVisible" :scroll="true" :maxHeight="500"> --> <!-- <Dialog title="字段设置" width="270" v-model="popoverVisible" :scroll="true" :maxHeight="500"> -->
<div class="test_wrapper" @dragover="dragover($event)"> <div class="test_wrapper" @dragover="dragover($event)">
<el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handlecheckallchange">全部</el-checkbox> <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" @change="handlecheckallchange">{{ t('ts.全部') }}</el-checkbox>
<el-checkbox-group v-model="checkedDataList" @change="handlecheckedchange"> <el-checkbox-group v-model="checkedDataList" @change="handlecheckedchange">
<draggable :list="allData" :force-fallback="true" chosen-class="chosen" animation="300" @end="dragend" @update="dragenter" > <draggable :list="allData" :force-fallback="true" chosen-class="chosen" animation="300" @end="dragend" @update="dragenter" >
<template #item="{element}"> <template #item="{element}">
@ -12,8 +12,8 @@
</div> </div>
<div class="footer"> <div class="footer">
<!-- <template #footer> --> <!-- <template #footer> -->
<el-button size="small" @click="reset">重置</el-button> <el-button size="small" @click="reset">{{ t('ts.重置') }} </el-button>
<el-button size="small" @click="closeRowDrop">关闭</el-button> <el-button size="small" @click="closeRowDrop"> {{ t('ts.关闭') }}</el-button>
<!-- </template> --> <!-- </template> -->
</div> </div>
<!-- </Dialog> --> <!-- </Dialog> -->
@ -25,6 +25,7 @@ import draggable from "vuedraggable";
defineOptions({ name: 'RowDrop' }) defineOptions({ name: 'RowDrop' })
const { t } = useI18n()
const props = defineProps({ const props = defineProps({
allSchemas: { allSchemas: {
@ -58,9 +59,9 @@ const handlecheckedchange = (value: string[]) => {
} }
const reset = () => { const reset = () => {
ElMessageBox.confirm('重置后,字段设置将恢复初始设置,是否继续?', '提示', { ElMessageBox.confirm(t('ts.重置后,字段设置将恢复初始设置,是否继续?'), t('ts.提示'), {
confirmButtonText: '确定', confirmButtonText: t('ts.确定'),
cancelButtonText: '取消', cancelButtonText: t('ts.取消'),
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
RedisApi.deleteRedis(routeName.value).then(() => { RedisApi.deleteRedis(routeName.value).then(() => {
@ -148,10 +149,11 @@ const initSelectSta = () => {
if (item.field != 'action') { if (item.field != 'action') {
checkedDataList.value.push(item.label) checkedDataList.value.push(item.label)
_showTableColumns.push(_myTableColumns.find(myItem => (myItem.label == item.label))) _showTableColumns.push(_myTableColumns.find(myItem => (myItem.label == item.label)))
allData.value.push(item.label) allData.value.push(t(`ts.${item.label}`))
} }
} }
}) })
// //
_myTableColumns?.forEach((myTableItem, index) => { _myTableColumns?.forEach((myTableItem, index) => {
// //
@ -159,7 +161,7 @@ const initSelectSta = () => {
if (!myTableItem.fixed) { if (!myTableItem.fixed) {
if (myTableItem.field != 'action') { if (myTableItem.field != 'action') {
if (allData.value.indexOf(myTableItem.label) == -1) { if (allData.value.indexOf(myTableItem.label) == -1) {
allData.value.push(myTableItem.label) allData.value.push(t(`ts.${myTableItem.label}`))
} }
} }
} }
@ -189,7 +191,7 @@ const initSelectSta = () => {
if (!item.fixed) { if (!item.fixed) {
if (item.field != 'action') { if (item.field != 'action') {
checkedDataList.value.push(item.label) checkedDataList.value.push(item.label)
allData.value.push(item.label) allData.value.push(t(`ts.${item.label}`))
} }
} }
}) })

2
src/hooks/web/useI18n.ts

@ -41,7 +41,7 @@ export const useI18n = (
const tFn: I18nGlobalTranslation = (key: string, ...arg: any[]) => { const tFn: I18nGlobalTranslation = (key: string, ...arg: any[]) => {
if (!key) return '' if (!key) return ''
if (!key.includes('.') && !namespace) return key if (!key.includes('.') && !namespace) return key
//@ts-ignore // @ts-ignore
return t(getKey(namespace, key), ...(arg as I18nTranslationRestParameters)) return t(getKey(namespace, key), ...(arg as I18nTranslationRestParameters))
} }
return { return {

4
src/layout/components/Breadcrumb/src/Breadcrumb.vue

@ -54,10 +54,10 @@ export default defineComponent({
{meta?.icon && breadcrumbIcon.value ? ( {meta?.icon && breadcrumbIcon.value ? (
<> <>
<Icon icon={meta.icon} class="mr-[2px]" svgClass="inline-block"></Icon> <Icon icon={meta.icon} class="mr-[2px]" svgClass="inline-block"></Icon>
{t(v?.meta?.title)} {t(`ts.${v?.meta?.title}`).replace('ts.','')}
</> </>
) : ( ) : (
t(v?.meta?.title) t(`ts.${v?.meta?.title}`).replace('ts.','')
)} )}
</ElBreadcrumbItem> </ElBreadcrumbItem>
) )

4
src/layout/components/Menu/src/components/useRenderMenuTitle.tsx

@ -9,10 +9,10 @@ export const useRenderMenuTitle = () => {
return icon ? ( return icon ? (
<> <>
<Icon icon={meta.icon}></Icon> <Icon icon={meta.icon}></Icon>
<span class="v-menu__title">{t(title as string)}</span> <span class="v-menu__title">{t(`ts.${title}` as string).replace('ts.','')}</span>
</> </>
) : ( ) : (
<span class="v-menu__title">{t(title as string)}</span> <span class="v-menu__title">{t(`ts.${title}` as string).replace('ts.','')}</span>
) )
} }

2
src/layout/components/TagsView/src/TagsView.vue

@ -367,7 +367,7 @@ watch(
:size="12" :size="12"
class="mr-5px" class="mr-5px"
/> />
{{ t(item?.meta?.title as string) }} {{ t(`ts.${item?.meta?.title}` as string).replace('ts.','') }}
<Icon <Icon
:class="`${prefixCls}__item--close`" :class="`${prefixCls}__item--close`"
color="#333" color="#333"

572
src/locales/en-US.ts

@ -481,18 +481,18 @@ export default {
number_all_plans: 'Number of All Plans', number_all_plans: 'Number of All Plans',
number_orders_received: 'Number of Orders Received', number_orders_received: 'Number of Orders Received',
single: 'Single', single: 'Single',
latest_news : 'Latest News', latest_news:'Latest News',
number : 'Number', number:'Number',
user_type : 'User Type', user_type:'User Type',
user_number : 'User Number', user_number:'User Number',
template_coding : 'Template Coding', template_coding:'Template Coding',
sender_number : 'Sender Number', sender_number:'Sender Number',
template_content : 'Template Content', template_content:'Template Content',
template_parameters : 'Template Parameters', template_parameters:'Template Parameters',
template_type : 'Template Type', template_type:'Template Type',
read : 'Read', read:'Read',
read_time : 'Read Time', read_time:'Read Time',
create_time : 'Create Time', create_time:'Create Time',
latest_deduction_details: 'Latest Deduction Details', latest_deduction_details: 'Latest Deduction Details',
title: 'Title', title: 'Title',
publisher: 'Publisher', publisher: 'Publisher',
@ -531,86 +531,91 @@ export default {
creater:'Creater', creater:'Creater',
claim_details_month:'Claim Details for This Month', claim_details_month:'Claim Details for This Month',
batch:'Batch', batch:'Batch',
today_arrival_plan_shipped : 'Today\'s arrival plan(Shipped)', today_arrival_plan_shipped:'Today\'s arrival plan(Shipped)',
material_preparation_plan_today_issued: 'Material preparation plan today(Issued)', material_preparation_plan_today_issued: 'Material preparation plan today(Issued)',
call_material_today_issued : 'Call for material today(Issued)', call_material_today_issued : 'Call for material today(Issued)',
pcs : 'pcs', pcs:'pcs',
free_library_bits_or_total_library_bits : 'Free library bits/Total library bits', free_library_bits_or_total_library_bits:'Free library bits/Total library bits',
slack_stock_warning : 'Slack stock warning', slack_stock_warning:'Slack stock warning',
package_number : 'Package Number', package_number:'Package Number',
appliance_code : 'Appliance Code', appliance_code:'Appliance Code',
location_code : 'Location Code', location_code:'Location Code',
warehouse_code : 'Warehouse Code', warehouse_code:'Warehouse Code',
location_group_code : 'Location Group Code', location_group_code:'Location Group Code',
location_area_code : 'Location Area Code', location_area_code:'Location Area Code',
erp_location_code : 'ERP Location Code', erp_location_code:'ERP Location Code',
arrival_date : 'Arrival Date', arrival_date:'Arrival Date',
production_date : 'Production Date', production_date:'Production Date',
expiry_date : 'Expiry Date', expiry_date:'Expiry Date',
shipper_code : 'Shipper Code', shipper_code:'Shipper Code',
lock_quantity : 'Lock Quantity', lock_quantity:'Lock Quantity',
available_quantity : 'Available Quantity', available_quantity:'Available Quantity',
warehouse_entry_time : 'Warehouse Entry Time', warehouse_entry_time:'Warehouse Entry Time',
overstock_warning : 'Overstock warning', overstock_warning:'Overstock warning',
high_and_low_storage_warning : 'High and low storage warning', high_and_low_storage_warning:'High and low storage warning',
waiting_tasks : 'Waiting Tasks', waiting_tasks:'Waiting Tasks',
purchase_return_tasks : 'Purchase Return Tasks', purchase_return_tasks:'Purchase Return Tasks',
product_putway_tasks : 'Product Putway Tasks', product_putway_tasks:'Product Putway Tasks',
purchase_and_receive_tasks : 'Purchase and Receive Tasks', purchase_and_receive_tasks:'Purchase and Receive Tasks',
production_receipt_tasks : 'Production Receipt Tasks', production_receipt_tasks:'Production Receipt Tasks',
production_return_tasks : 'Production Return Tasks', production_return_tasks:'Production Return Tasks',
supplement_materials_tasks : 'Supplement Materials Tasks', supplement_materials_tasks:'Supplement Materials Tasks',
product_receiving_tasks : 'Product Receiving Tasks', product_receiving_tasks:'Product Receiving Tasks',
send_materials_tasks : 'Send Materials Tasks', send_materials_tasks:'Send Materials Tasks',
today_production_plan : 'Today\'s production plan', today_production_plan:'Today\'s production plan',
sequence : 'Sequence', sequence:'Sequence',
workshop : 'Workshop', workshop:'Workshop',
prouduction_line : 'Prouduction Line', prouduction_line:'Prouduction Line',
schedule : 'Schedule', schedule:'Schedule',
teams_and_groups : 'Teams and Groups', teams_and_groups:'Teams and Groups',
intended_date : 'Intended Date', intended_date:'Intended Date',
start_date : 'Start Date', start_date:'Start Date',
ending_date : 'Ending Date', ending_date:'Ending Date',
business_type : 'Business Type', business_type:'Business Type',
line_side_safety_stock : 'Line side safety stock', line_side_safety_stock:'Line side safety stock',
type : 'Type', type:'Type',
laneway : 'Laneway', laneway:'Laneway',
goods_shelf : 'Goods Shelf', goods_shelf:'Goods Shelf',
line : 'Line', line:'Line',
column : 'Column', column:'Column',
stock_priority : 'Stock Priority', stock_priority:'Stock Priority',
maximum_load_bearing : 'Maximum Load Bearing', maximum_load_bearing:'Maximum Load Bearing',
maximum_area : 'Maximum Area', maximum_area:'Maximum Area',
maximum_volume : 'Maximum Volume', maximum_volume:'Maximum Volume',
user_group_code : 'User Group Code', user_group_code:'User Group Code',
inventory_of_finished_products_waiting_to_be_putway : 'Inventory of finished products waiting to be putway', inventory_of_finished_products_waiting_to_be_putway:'Inventory of finished products waiting to be putway',
source_warehouse_code : 'Source Warehouse Code', source_warehouse_code:'Source Warehouse Code',
apply_time : 'Apply Time', apply_time:'Apply Time',
request_cut_off_time : 'Request cut-off Time', request_cut_off_time:'Request cut-off Time',
state : 'State', state:'State',
department : 'Department', department:'Department',
undertaker_user_name : 'Undertaker User Name', undertaker_user_name:'Undertaker User Name',
undertake_time : 'Undertake Time', undertake_time:'Undertake Time',
source_location_type_range : 'Source Location Type Range', source_location_type_range:'Source Location Type Range',
destination_location_type_range : 'Destination Location Type Range', destination_location_type_range:'Destination Location Type Range',
destination_warehouse_code : 'Destination Warehouse Code', destination_warehouse_code:'Destination Warehouse Code',
source_location_area_code_range : 'Source Location Area Code Range', source_location_area_code_range:'Source Location Area Code Range',
destination_location_area_code_range : 'Destination Location Area Code Range', destination_location_area_code_range:'Destination Location Area Code Range',
auto_ccomplete : 'Auto-complete', auto_ccomplete:'Auto-complete',
modifiable_location : 'Modifiable Location', modifiable_location:'Modifiable Location',
modifiable_amount : 'Modifiable Amount', modifiable_amount:'Modifiable Amount',
allow_greater_than_recommended : 'Allow greater than recommended', allow_greater_than_recommended:'Allow greater than recommended',
allow_less_than_recommended : 'Allow less than recommended', allow_less_than_recommended:'Allow less than recommended',
allow_modify_location_state : 'Allow modify Location state', allow_modify_location_state:'Allow modify Location state',
allow_continuous_scanning : 'Allow continuous scanning', allow_continuous_scanning:'Allow continuous scanning',
allow_partly_completed : 'Allow partly completed', allow_partly_completed:'Allow partly completed',
modifiable_batch : 'Modifiable Batch', modifiable_batch:'Modifiable Batch',
modifiable_casecode : 'Modifiable Casecode', modifiable_casecode:'Modifiable Casecode',
expiration_time: 'Expiration Time', expiration_time: 'Expiration Time',
effective_time : 'Effective Time', effective_time:'Effective Time',
code : 'Code', code:'Code',
name : 'Name', name:'Name',
}, },
ts: { ts: {
:'Code', :'Code',
:'All', :'All',
@ -628,14 +633,14 @@ export default {
:'Document Number', :'Document Number',
:'Order Type', :'Order Type',
:'State', :'State',
:'Purchase Order Number', :'Purchase order number',
:'Schedule', :'Schedule',
:'Discrete', :'Disperse',
:'Get ready', :'Get ready',
:'Punblish', :'Punblish',
:'Close', :'Close',
:'Finished', :'Finished',
:'Invoice number', :'Shipment tracking number',
:'Source Batch', :'Source Batch',
:'Destination Batch', :'Destination Batch',
:'Source Package Number', :'Source Package Number',
@ -653,11 +658,12 @@ export default {
:'Contact Email', :'Contact Email',
:'Bank', :'Bank',
:'Currency Kind', :'Currency Kind',
:'Tax rate', :'Tax Rate',
'税率(%)':'Tax Rate(%)',
:'Effective Time', :'Effective Time',
:'Expiration Time', :'Expiration Time',
:'Supplier material code', :'Supplier material code',
:'Supplier measuring Unit', :'Supplier measuring unit',
:'Conversion Rate', :'Conversion Rate',
:'Default receiving warehouse location', :'Default receiving warehouse location',
:'Creater', :'Creater',
@ -684,10 +690,10 @@ export default {
:'Last update time', :'Last update time',
:'Last Updater', :'Last Updater',
:'Demand plan', :'Demand plan',
:'Request number', :'Application Number',
:'Code from the repository', :'Code from the repository',
:'to the repository code', :'Destination Warehouse Code',
:'to the dock code', :'Destination dock code',
:'Time window', :'Time window',
:'Scheduled arrival time', :'Scheduled arrival time',
:'Carriers', :'Carriers',
@ -696,19 +702,19 @@ export default {
:'The type of outbound transaction', :'The type of outbound transaction',
:'Inbound transaction type', :'Inbound transaction type',
:'Execution time', :'Execution time',
:'Application timeline', :'Application Time',
:'Deadline', :'Deadline',
:'department', :'department',
:'Interface type', :'Interface type',
:'Package number', :'Package Number',
:'Order number', :'Order Number',
:'Order quantity', :'Order quantity',
:'quantity', :'Quantity',
:'Packing quantity', :'Packing quantity',
:'The quantity measured by the supplier', :'The quantity measured by the supplier',
:'vendor', :'Supplier',
:'From the location code', :'Source Location Area Code',
:'to the location code', :'Destination Location Area Code',
:'From the bin location group code', :'From the bin location group code',
:'to the bin location group code', :'to the bin location group code',
:'Code from the depot', :'Code from the depot',
@ -719,10 +725,10 @@ export default {
:'Packing specifications', :'Packing specifications',
:'Document printing', :'Document printing',
:'Itemized list', :'Itemized list',
:'No data yet', :'No Data',
:'supplier Shipping Request', :'supplier Shipping Request',
:'Query Field', :'Query Field',
:'Measuring UnitSupplier batchDate of production', :'Supplier Batch',
:'Production Date', :'Production Date',
:'Number of shipments', :'Number of shipments',
:'Primary data', :'Primary data',
@ -733,75 +739,64 @@ export default {
:'Supplier shipments Repository code', :'Supplier shipments Repository code',
:'Shipping method License plate number', :'Shipping method License plate number',
:'Auto-submit', :'Auto-submit',
:'Automatically passed', :'Auto-execute',
:'Automated', :'Automated',
:'Generate records directly', :'Generate records directly',
:'Details', :'Details',
:'Batch', :'Batch',
:'Date of manufacture',
:'Arrival date', :'Arrival date',
:'Expiration date', :'Expiration date',
:'Supplier unit of measure',
:'Conversion rate',
:'Material Name', :'Material Name',
1:'Material Description1', 1:'Material Description1',
2:'Material Description2', 2:'Material Description2',
:'Item Code', :'Item Code',
:'Quality inspection details', :'Quality inspection details',
:'Add Attachment', :'Add Attachment',
:'Please enter a comment', :'Change Record',
:'Changelog', :'Add Detail',
:'Add details',
:'Upload quality report', :'Upload quality report',
:'Upload the quality inspection report', :'Upload the quality inspection report',
:'Supplier lots',
:'piece', :'piece',
:'sheet', :'sheet',
:'gram', :'g',
:'kg', :'kg',
:'ton', :'t',
:'rice', :'m',
:'square metre', :'',
:'Generate labels', :'Generate label',
:'Create a label', :'Create label',
1:'Packing Specification 1', 1:'Packing Specification1',
2:'Package Specification 2', 2:'Package Specification2',
1:'Package Quantity1', 1:'Package Quantity1',
2:'Package Quantity2', 2:'Package Quantity2',
:'Item packaging information', :'Item packaging information',
:'System prompts', :'System Prompt',
:'Do you generate labels for this data?', :'Do you generate labels for this data?',
:'Do you process the selected data?', :'Do you process the selected data?',
:'shipments', :'shipments',
:'Package number',
:'Label information', :'Label information',
:'Purchase receipt records', :'Purchase receipt record',
:'Form data', :'Form Data',
:'Task ticket number', :'Task order number',
ERP单据号:'ERP document number', ERP单据号:'ERP document number',
:'Inspection requisition number', :'Inspection requisition number',
:'Purchase order number', :'Data Source',
:'The name of the item', :'Source Location Type Range',
:'Data source', :'Destination Location Type Range',
:'From the range of reservoir types', :'Source Location Area Code Range',
:'to the depot type range', :'Destination Location Area Code Range',
:'From the range of depot codes',
:'to the range of codes in the reservoir',
:'Effective Date', :'Effective Date',
:'Receipt details', :'Receipt Detail',
:'Out-of-stock details', :'Stockout Detail',
:'Row type', :'Row Type',
:'The quantity received', :'Quantity Received',
:'to the batch', :'Inventory Status',
:'From the package number', :'Source Location Group',
:'to the package number', :'Destination Location Group',
:'Inventory status', :'Source Location Area',
:'From the bin location group', :'Destination Location Area',
:'to the bin location group', :'Source Shipper',
:'From the reservoir area', :'Destination Shipper',
:'to the reservoir area',
:'from the owner of the goods',
:'to the owner of the goods',
退:'Purchase return records', 退:'Purchase return records',
:'Purchase receipt record number', :'Purchase receipt record number',
qad采购退货记录单号:'QAD purchase return record number', qad采购退货记录单号:'QAD purchase return record number',
@ -809,8 +804,56 @@ export default {
:'Cause', :'Cause',
退:'Number of returns', 退:'Number of returns',
:'unit', :'unit',
:'amount', :'Amount',
:'Customer Code', :'Customer Code',
:'Supplier invoice request',
:'Supplier Name',
:'Tax',
:'After-tax Amount',
:'Discount Amount',
:'Adjusted Tax',
:'Under Coverage',
:'Gold tax ticket number',
:'Invoice Date',
:'Posting Date',
:'Financial Approver',
:'Document Type',
:'Contract Price',
:'Orocurement Price',
:'Untaxed Difference',
:'Difference including tax',
:'Number of tickets available',
:'Procurement Approver',
:'Purchase approval time',
:'Financial approval time',
:'Supplier invoice record',
:'Invoice Number',
:'Total price with tax',
:'Margin',
:'Claim Amount',
:'Invoice Time',
:'Difference',
:'Date of taking the delivery',
:'Invoice Quantity',
:'Financial approval user name',
:'Logistics Audit',
:'Supplier delivery date',
:'Supplier receiving date',
:'Logistics document number',
:'Part Number',
:'Supplier user association management',
ID:'User ID',
:'User Account',
:'User Nickname',
:'Order',
:'Plan',
:'Request',
:'Job',
:'Record',
:'Number',
:'Location Code',
:'Location Group Code',
:'Location Area Code',
:'Query', :'Query',
:'Reset', :'Reset',
:'Add', :'Add',
@ -820,45 +863,206 @@ export default {
:'Filter', :'Filter',
:'Settings', :'Settings',
:'Confirm', :'Confirm',
'确 定':'Confirm',
:'Cancel', :'Cancel',
'取 消':'Cancel',
:'Edit', :'Edit',
:'Delete', :'Delete',
:'Add Filter', :'Add Filter',
:'Go to',
:'Page',
:'Total',
:'Open', :'Open',
:'Save', :'Save',
//-------- :'Please select filter',
// 单据打印:'Document Print', :'Please inputr content',
// 上传质量报告:'Upload Quality Report', :'Attachment',
// 打印标签:'Print Label', '更新:新增并修改':'Update:Add and modify',
// 发货:'Delivery', '追加:只新增,不修改':'Add:Add,no modify',
// 生成标签:'Generate Label', '覆盖:只修改不新增':'Cover:Modify,not add',
// 发送到货检验申请:'Send Arrival Inspection Application', :'Download Template',
// 生成采购上架申请:'Generate Purchase Putaway Application', :'Update',
// 生成生产计划单:'Generate Production Plan', :'Add',
// 提交审批:'Submit Approval', :'Cover',
// 审核通过:'Approve', :'Save Partial',
// 作废:'Invalid', '部分保存:如存在错误数据,正确数据正常导入':'Save Partial :If incorrect data exists, correct data can be imported',
//-------- '全部保存:全部数据正确,才能导入':'Save All:Import only when all data is correct',
// 生成采购收货申请:'Generate Purchase Receiving Application', '将文件拖到此处,或点击上传':'Drag the file here, or click Upload',
// 生成采购退货申请:'Generate Purchase Return Application', '将文件拖到此处,或':'Drag the file here, or',
// 生成生产收货申请:'Generate Production Receiving Application', '点击上传':' click Upload',
// 生成生产退货申请:'Generate Production Return Application', '是否确认导出数据项?':'Are you sure to export data items?',
// 生成生产计划:'Generate Production Plan', '请选择一条数据!':'Please select a piece of data!',
// 上传:'Upload', :'Equal to',
// 打印:'Print', :'Not Equal to',
// 打印预览:'Print Preview', :'Greater than',
// 打印设置:'Print Settings', :'Less than',
// 打印预览设置:'Print Preview :'Greater than or equal to',
// 上传图片:'Upload Image', :'Less than or equal to',
// 上传文件:'Upload File', :'obscure',
// 上传视频:'Upload Video', :'contain',
// 上传音频:'Upload Audio', :'Not included',
// 上传其他:'Upload Other', :'is empty',
// 上传图片:'Upload Image', :'not empty',
// 上传文件:'Upload File', :'is an empty string',
// 上传视频:'Upload Video', :'Not an empty string',
// 上传音频:'Upload Audio', :'Search',
// 上传其他:'Upload Other', :'Start Date',
:'Ending Date',
} :'Serial Number',
:'Version',
:'Place',
'影响明细中物料代码,需在供应商物料中维护':'The material code in the details is affected , must be maintained in the supplier\'s material',
:'External resource or not',
:'Import Mode',
:'Please select content',
:'Please select condition',
:'Interval',
'您确定删除吗, 是否继续?':'Are you sure about deleting it? Do you want to continue?',
'必须保留一条筛选条件!':'One filter must be preserved!',
'请填写供应商代码!':'Please fill in the supplier code!',
:'Supplier Integration',
:'Material basic information',
:'Location Information',
:'Purchase order information',
:'Supplier material information',
:'Demand plan information',
:'User Information',
:'Please select a supplier',
:'Please select a vendor code',
:'Please select material code',
:'Please input the supplier material code',
:'Please input the location code',
ERP库位:'ERP Location Code',
:'Unit Price',
'是否发布所选中数据?':'Do you publish the selected data?',
'是否关闭所选中数据?':'Do you want to close the selected data?',
'发布成功!':'Release Successfully!',
'是否下架所选中数据?':'Do you want to remove selected data?',
'下架成功!':'Removed Successfully!',
'采购订单主':'Purchase order master data',
'采购订单主导入模版':'The purchase order leads into the template',
'是否打开所选中数据?':'Open the selected data?',
'打开成功!':'Open Successfully!',
'关闭成功!':'Closed Successfully',
'失效时间要大于生效时间':'The expiration time must be longer than the effective time',
'供应商导入模版':'Supplier import template',
'供应商物料':'Supplier Material',
'供应商物料导入模版':'Supplier material import template',
'采购价格单':'Purchase price sheet',
'采购价格单导入模版':'Purchase price list import template',
:'Planned Quantity',
:'Shipped Quantity',
:'Received Quantity',
退:'Returned Quantity',
:'Stocked Quantity',
:'Start Using',
:'Disable',
:'Terminate',
:'Get',
:'Accomplish',
:'Binding',
:'Readd',
:'Sold Out',
:'Amend',
:'Reject',
:'Accept',
:'Undertake',
:'Abandon',
:'Receiving',
:'Packaging',
:'print Label',
:'Bulk Print',
:'Generate purchase receipt request',
:'Send the arrival inspection request',
:'Generate a purchase listing request',
:'Generate inventory adjustment request',
:'New Inventory',
:'Unfreeze',
:'Update inspection record',
使:'Usage Decision',
'是否接受所选中数据?':'Do you accept the selected data?',
'接受成功!':'Accept Successfully!',
'是否驳回所选中数据?':'Do you reject the selected data?',
'驳回成功!':'Reject Succussfully!',
'要货计划主':'Ask for master data of cargo plan',
'要货计划数量不得大于订单数量-已计划数量':'The planned quantity of the requested goods shall not be greater than the order quantity - the planned quantity',
'子列表数量不能空':'The number of sublists cannot be empty',
'要货计划主导入模版':'The request plan leads into the template',
:'already exists',
:'Refusal',
:'Approve',
:'Demand forecast master data',
:'Create a supplier shipping request',
'是否重新打开所选中数据?':'Do you want to reopen the selected data?',
'请先上传自检报告!':'Please upload the self-test report first!',
'提交审批成功!':'Submitted for approval!',
'是否提交审批所选中数据?':'Do you want to submit the selected data for approval?',
'是否审批通过所选中数据?':'Is the selected data approved?',
'审批通过成功!':'Approval is successful!',
'是否处理所选中数据?':'Do you process the selected data?',
'处理成功!':'Processing success!',
:'Supplier delivery request master data',
'是否为此数据生成标签?':'Are labels generated for this data?',
:'Label created successfully',
:'Please first select the data you want to print',
:'Failed to create label',
:'The production date cannot be longer than the expiration date',
'计划到货时间大于要货计划送达日期是否继续?':'The planned arrival time is greater than the planned delivery date. Do you want to continue?',
'子表明细不能为空!':'Subindicates that the detail cannot be empty!',
:'The purchase request was successfully generated',
'确认生成采购申请吗?':'Confirm to generate purchase application?',
:'Supplier shipment record master data',
'确认生成上架申请吗?':'Are you sure to generate a listing application?',
:'The listing application was successfully generated',
'确认生成到货检验申请吗?':'Is the arrival inspection application confirmed to be generated?',
:'The arrival inspection application was successfully generated',
:'Purchase receipt record master data',
退:'Purchase return record master data',
:'Appendix to the contract',
:'Invoice Attachment',
:'Attachment to the waybill',
:'Other Attachment',
:'Print Detail',
:'Print all invoices',
:'Export Details',
:'Print',
:'Purchase Approval',
:'Purchase Rejection',
:'Supplier Confirmation',
:'Financial Approval',
:'Financial Rejection',
'是否确认发票寄出选中数据?':'Do you confirm that the invoice is sent out with selected data?',
'发票寄出成功!':'Invoice sent successfully!',
:'Supplier invoice request master data',
:'Please provide detailed data',
'明细数据条数已超过最大数量限制【999条】':'The number of detailed data items has exceeded the maximum limit [999 items]',
:'Supplier delivery request is led into the template',
:'Supplier invoice request details',
:'Supplier invoice record master data',
:'Pass the audit',
:'Cancellation',
'是否审批拒绝所选中数据?':'Do you want to approve and reject selected data?',
'审批成功!':'Approval is successful!',
:'To be invoiced',
:'Import template to be invoiced',
:'purchase order',
:'Demand forecast',
:'Supplier shipment record',
:'Supplier invoice',
:'basic data',
router: {
login: 'Login',
home: 'Home',
analysis: 'Analysis',
workplace: 'Workplace'
},
'重置后,字段设置将恢复初始设置,是否继续?':'After reset, the field Settings will be restored to the initial Settings. Do you want to continue?',
:'Tip',
:'voucher number',
:'Purchasing price approver',
:'Supplier\'s invoice number'
},
} }

476
src/locales/zh-CN.ts

@ -474,18 +474,18 @@ export default {
number_all_plans: '全部计划数', number_all_plans: '全部计划数',
number_orders_received: '已收货订单数', number_orders_received: '已收货订单数',
single: '单', single: '单',
latest_news : '最新消息', latest_news:'最新消息',
number : '编号', number:'编号',
user_type : '用户类型', user_type:'用户类型',
user_number : '用户编号', user_number:'用户编号',
template_coding : '模板编码', template_coding:'模板编码',
sender_number : '发送人名称', sender_number:'发送人名称',
template_content : '模板内容', template_content:'模板内容',
template_parameters : '模板参数', template_parameters:'模板参数',
template_type : '模板类型', template_type:'模板类型',
read : '是否已读', read:'是否已读',
read_time : '阅读时间', read_time:'阅读时间',
create_time : '创建时间', create_time:'创建时间',
latest_deduction_details: '最新扣分明细', latest_deduction_details: '最新扣分明细',
title: '标题', title: '标题',
@ -528,106 +528,106 @@ export default {
claim_details_month:'本月索赔明细', claim_details_month:'本月索赔明细',
batch:'批次', batch:'批次',
today_arrival_plan_shipped : '今日到货计划(已发货)', today_arrival_plan_shipped:'今日到货计划(已发货)',
material_preparation_plan_today_issued:'今日备料计划(已发料)', material_preparation_plan_today_issued:'今日备料计划(已发料)',
call_material_today_issued:'今日叫料请求(已发料)', call_material_today_issued:'今日叫料请求(已发料)',
'pcs' : '个', 'pcs':'个',
free_library_bits_or_total_library_bits : '空闲库位数/总库位数', free_library_bits_or_total_library_bits:'空闲库位数/总库位数',
slack_stock_warning : '呆滞库存预警', slack_stock_warning:'呆滞库存预警',
package_number : '包装号', package_number:'包装号',
appliance_code : '器具代码', appliance_code:'器具代码',
location_code : '库位代码', location_code:'库位代码',
warehouse_code : '仓库代码', warehouse_code:'仓库代码',
location_group_code : '库位组代码', location_group_code:'库位组代码',
location_area_code : '库区代码', location_area_code:'库区代码',
erp_location_code : 'ERP库位代码', erp_location_code:'ERP库位代码',
arrival_date : '到货日期', arrival_date:'到货日期',
production_date : '生产日期', production_date:'生产日期',
expiry_date : '失效日期', expiry_date:'失效日期',
shipper_code : '货主代码', shipper_code:'货主代码',
lock_quantity : '锁定数量', lock_quantity:'锁定数量',
available_quantity : '可用数量', available_quantity:'可用数量',
warehouse_entry_time : '入库时间', warehouse_entry_time:'入库时间',
overstock_warning : '超期库存预警', overstock_warning:'超期库存预警',
high_and_low_storage_warning : '高低储预警', high_and_low_storage_warning:'高低储预警',
waiting_tasks : '待处理任务', waiting_tasks:'待处理任务',
purchase_return_tasks : '采购退货任务', purchase_return_tasks:'采购退货任务',
product_putway_tasks : '制品上架任务', product_putway_tasks:'制品上架任务',
purchase_and_receive_tasks : '采购收货任务', purchase_and_receive_tasks:'采购收货任务',
production_receipt_tasks : '生产收料任务', production_receipt_tasks:'生产收料任务',
production_return_tasks : '生产退料', production_return_tasks:'生产退料',
supplement_materials_tasks : '补料任务', supplement_materials_tasks:'补料任务',
product_receiving_tasks : '制品收货任务', product_receiving_tasks:'制品收货任务',
send_materials_tasks : '发料任务', send_materials_tasks:'发料任务',
today_production_plan : '今日生产计划', today_production_plan:'今日生产计划',
sequence : '顺序', sequence:'顺序',
workshop : '车间', workshop:'车间',
prouduction_line : '生产线', prouduction_line:'生产线',
schedule : '班次', schedule:'班次',
teams_and_groups : '班组', teams_and_groups:'班组',
intended_date : '计划日期', intended_date:'计划日期',
start_date : '开始日期', start_date:'开始日期',
ending_date : '结束日期', ending_date:'结束日期',
business_type : '业务类型', business_type:'业务类型',
line_side_safety_stock : '线边安全库存', line_side_safety_stock:'线边安全库存',
type : '类型', type:'类型',
laneway : '巷道', laneway:'巷道',
goods_shelf : '货架', goods_shelf:'货架',
line : '行', line:'行',
column : '列', column:'列',
stock_priority : '备货优先级', stock_priority:'备货优先级',
maximum_load_bearing : '最大承重', maximum_load_bearing:'最大承重',
maximum_area : '最大面积', maximum_area:'最大面积',
maximum_volume : '最大体积', maximum_volume:'最大体积',
user_group_code : '用户组代码', user_group_code:'用户组代码',
inventory_of_finished_products_waiting_to_be_putway : '待上架成品库存', inventory_of_finished_products_waiting_to_be_putway:'待上架成品库存',
source_warehouse_code : '从仓库代码', source_warehouse_code:'从仓库代码',
apply_time : '申请时间', apply_time:'申请时间',
request_cut_off_time : '要求截止时间', request_cut_off_time:'要求截止时间',
state : '状态', state:'状态',
department : '部门', department:'部门',
undertaker_user_name : '承接人用户名', undertaker_user_name:'承接人用户名',
undertake_time : '承接时间', undertake_time:'承接时间',
source_location_type_range : '从库位类型范围', source_location_type_range:'从库位类型范围',
destination_location_type_range : '到库位类型范围', destination_location_type_range:'到库位类型范围',
destination_warehouse_code : '到仓库代码', destination_warehouse_code:'到仓库代码',
source_location_area_code_range : '从库区代码范围', source_location_area_code_range:'从库区代码范围',
destination_location_area_code_range : '到库区代码范围', destination_location_area_code_range:'到库区代码范围',
auto_complete : '自动完成', auto_complete:'自动完成',
modifiable_location : '允许修改库位', modifiable_location:'允许修改库位',
modifiable_amount : '允许修改数量', modifiable_amount:'允许修改数量',
allow_greater_than_recommended : '允许大于推荐数量', allow_greater_than_recommended:'允许大于推荐数量',
allow_less_than_recommended : '允许小于推荐数量', allow_less_than_recommended:'允许小于推荐数量',
allow_modify_location_state : '允许修改库存状态', allow_modify_location_state:'允许修改库存状态',
allow_continuous_scanning : '允许连续扫描', allow_continuous_scanning:'允许连续扫描',
allow_partly_completed : '允许部分完成', allow_partly_completed:'允许部分完成',
modifiable_batch : '允许修改批次', modifiable_batch:'允许修改批次',
modifiable_casecode : '允许修改箱码', modifiable_casecode:'允许修改箱码',
expiration_time: '失效时间', expiration_time: '失效时间',
effective_time : '生效时间', effective_time:'生效时间',
code : '代码', code:'代码',
name : '名称', name:'名称',
}, },
ts: { ts: {
: '代码', :'代码',
: 'All', : 'All',
: '标准', :'标准',
: '委外', : '委外',
:'其它', :'其它',
:'其他', :'其他',
: '是否可用', : '是否可用',
: '类型', :'类型',
: '名称', :'名称',
: '是', :'是',
: '否', :'否',
: '供应商代码', : '供应商代码',
:'物料代码', :'物料代码',
:'单据号', :'单据号',
@ -659,6 +659,7 @@ export default {
:'银行', :'银行',
:'币种', :'币种',
:'税率', :'税率',
'税率(%)':'税率(%)',
:'生效时间', :'生效时间',
:'失效时间', :'失效时间',
:'供应商物料代码', :'供应商物料代码',
@ -712,7 +713,6 @@ export default {
:'包装数量', :'包装数量',
:'供应商计量数量', :'供应商计量数量',
:'供应商', :'供应商',
:'从库位代码', :'从库位代码',
:'到库位代码', :'到库位代码',
:'从库位组代码', :'从库位组代码',
@ -742,6 +742,118 @@ export default {
:'自动通过', :'自动通过',
:'自动执行', :'自动执行',
:'直接生成记录', :'直接生成记录',
:'明细',
:'批次',
:'到货日期',
:'过期日期',
:'物料名称',
1:'物料描述1',
2:'物料描述2',
:'项目代码',
:'质检明细',
:'添加附件',
:'变更记录',
:'添加明细',
:'上传质量报告',
:'上传质检报告',
:'个',
:'张',
:'克',
:'公斤',
:'吨',
:'米',
:'平方米',
:'生成标签',
:'创建标签',
1:'包装规格1',
2:'包装规格2',
1:'包装数量1',
2:'包装数量2',
:'物品包装信息',
:'系统提示',
:'是否为此数据生成标签',
:'是否处理所选中数据',
:'发货',
:'标签信息',
:'采购收货记录',
:'表单数据',
:'任务单号',
ERP单据号:'ERP单据号',
:'检验申请单号',
:'数据来源',
:'从库区类型范围',
:'到库区类型范围',
:'从库区代码范围',
:'到库区代码范围',
:'生效日期',
:'收货明细',
:'缺货明细',
:'行类型',
:'收货数量',
:'库存状态',
:'从库位组',
:'到库位组',
:'从库区',
:'到库区',
:'从货主',
:'到货主',
退:'采购退货记录',
:'采购收货记录单号',
qad采购退货记录单号:'qad采购退货记录单号',
:'从月台代码',
:'原因',
退:'退货数量',
:'单位',
:'金额',
:'客户代码',
:'供应商发票申请',
:'供应商名称',
:'税额',
:'税后金额',
:'折扣金额',
:'调整税额',
:'总差额',
:'金税票号',
:'发票日期',
:'过账日期',
:'财务审批人',
:'单据类型',
:'合同价格',
:'采购价格',
:'未税差额',
:'含税差额',
:'可开票数量',
:'采购审批人',
:'采购审批时间',
:'财务审批时间',
:'供应商发票记录',
:'发票号',
:'价税合计',
:'价差',
:'索赔金额',
:'发票时间',
:'差额',
:'收货日期',
:'开票数量',
:'财务审批用户名',
:'物流审核',
:'供应商送货日期',
:'物流收货日期',
:'物流单据号',
:'零件号',
:'供应商用户关联管理',
ID:'用户ID',
:'用户账号',
:'用户昵称',
:'订单',
:'计划',
:'申请',
:'任务',
:'记录',
:'编号',
:'库位代码',
:'库位组代码',
:'库区代码',
:'查询', :'查询',
:'重置', :'重置',
:'新增', :'新增',
@ -751,14 +863,98 @@ export default {
:'筛选', :'筛选',
:'设置', :'设置',
:'确定', :'确定',
'确 定':'确 定',
:'取消', :'取消',
'取 消':'取 消',
:'编辑', :'编辑',
:'删除', :'删除',
:'添加附件',
:'添加筛选条件', :'添加筛选条件',
:'前往',
:'页',
:'共',
:'打开', :'打开',
:'保存', :'保存',
////// :'请选择筛选对象',
:'请输入内容',
:'附件',
'更新:新增并修改':'更新:新增并修改',
'追加:只新增,不修改':'追加:只新增,不修改',
'覆盖:只修改不新增':'覆盖:只修改不新增',
:'下载模板',
:'更新',
:'追加',
:'覆盖',
:'部分保存',
'部分保存:如存在错误数据,正确数据正常导入':'部分保存:如存在错误数据,正确数据正常导入',
'全部保存:全部数据正确,才能导入':'全部保存:全部数据正确,才能导入',
'将文件拖到此处,或点击上传':'将文件拖到此处,或点击上传',
'将文件拖到此处,或':'将文件拖到此处,或',
'点击上传':'点击上传',
'是否确认导出数据项?':'是否确认导出数据项?',
'请选择一条数据!':'请选择一条数据!',
:'等于',
:'不等于',
:'大于',
:'小于',
:'大于等于',
:'小于等于',
:'模糊',
:'包含',
:'不包含',
:'是空',
:'不是空',
:'是空字符串',
:'不是空字符串',
:'搜索',
:'开始日期',
:'结束日期',
:'序号',
:'版本',
:'地点',
'影响明细中物料代码,需在供应商物料中维护':'影响明细中物料代码,需在供应商物料中维护',
:'是否外部资源',
:'导入模式',
:'请选择内容',
:'请选择条件',
:'区间',
'您确定删除吗, 是否继续?':'您确定删除吗, 是否继续?',
'必须保留一条筛选条件!':'必须保留一条筛选条件!',
'请填写供应商代码!':'请填写供应商代码!',
:'供应商信息',
:'物料基础信息',
:'库位信息',
:'采购订单信息',
:'供应商物料信息',
:'要货计划信息',
:'用户信息',
:'请选择供应商',
:'请选择供应商代码',
:'请选择物料代码',
:'请输入供应商物料代码',
:'请选择库位代码',
ERP库位:'ERP库位',
:'单价',
'是否发布所选中数据?':'是否发布所选中数据?',
'是否关闭所选中数据?':'是否关闭所选中数据?',
'发布成功!':'发布成功!',
'是否下架所选中数据?':'是否下架所选中数据?',
'下架成功!':'下架成功!',
'采购订单主':'采购订单主',
'采购订单主导入模版':'采购订单主导入模版',
'是否打开所选中数据?':'是否打开所选中数据?',
'打开成功!':'打开成功!',
'关闭成功!':'关闭成功!',
'失效时间要大于生效时间':'失效时间要大于生效时间',
'供应商导入模版':'供应商导入模版',
'供应商物料':'供应商物料',
'供应商物料导入模版':'供应商物料导入模版',
'采购价格单':'采购价格单',
'采购价格单导入模版':'采购价格单导入模版',
:'已计划数量',
:'已发货数量',
:'已收货数量',
退:'已退货数量',
:'已上架数量',
:'启用', :'启用',
:'禁用', :'禁用',
:'中止', :'中止',
@ -781,13 +977,93 @@ export default {
:'生成采购上架申请', :'生成采购上架申请',
:'生成盘点调整申请', :'生成盘点调整申请',
:'重盘', :'重盘',
:'监盘',
:'解冻', :'解冻',
:'更新检验记录', :'更新检验记录',
使:'使用决策' 使:'使用决策',
'是否接受所选中数据?':'是否接受所选中数据?',
'接受成功!':'接受成功!',
'是否驳回所选中数据?':'是否驳回所选中数据?',
'驳回成功!':'驳回成功!',
'要货计划主':'要货计划主',
'要货计划数量不得大于订单数量-已计划数量':'要货计划数量不得大于订单数量-已计划数量',
'子列表数量不能空':'子列表数量不能空',
'要货计划主导入模版':'要货计划主导入模版',
:'已经存在',
:'驳回',
:'审批通过',
:'要货预测主',
:'创建供应商发货申请',
'是否重新打开所选中数据?':'是否重新打开所选中数据?',
'请先上传自检报告!':'请先上传自检报告!',
'提交审批成功!':'提交审批成功!',
'是否提交审批所选中数据?':'是否提交审批所选中数据?',
'是否审批通过所选中数据?':'是否审批通过所选中数据?',
'审批通过成功!':'审批通过成功!',
'是否处理所选中数据?':'是否处理所选中数据?',
'处理成功!':'处理成功!',
:'供应商发货申请主',
'是否为此数据生成标签?':'是否为此数据生成标签?',
:'创建标签成功',
:'请先选择要打印的数据',
:'创建标签失败',
:'生产日期不可以大于过期日期',
'计划到货时间大于要货计划送达日期是否继续?':'计划到货时间大于要货计划送达日期是否继续?',
'子表明细不能为空!':'子表明细不能为空!',
:'采购申请生成成功',
'确认生成采购申请吗?':'确认生成采购申请吗?',
:'供应商发货记录主',
'确认生成上架申请吗?':'确认生成上架申请吗?',
:'上架申请生成成功',
'确认生成到货检验申请吗?':'确认生成到货检验申请吗?',
:'到货检验申请生成成功',
:'采购收货记录主',
退:'采购退货记录主',
:'合同附件t',
:'发票附件',
:'货运单附件',
:'其他附件',
:'打印明细',
:'打印全部发货单',
:'导出明细',
:'打印',
:'采购通过',
:'采购驳回',
:'供应商确认',
:'财务通过',
:'财务驳回',
'是否确认发票寄出选中数据?':'是否确认发票寄出选中数据?',
'发票寄出成功!':'发票寄出成功!',
:'供应商发票申请主',
:'请添明细数据',
'明细数据条数已超过最大数量限制【999条】':'明细数据条数已超过最大数量限制【999条】',
:'供应商发货申请主导入模版',
:'供应商发票申请明细',
:'供应商发票记录主',
:'审核通过',
:'作废',
'是否审批拒绝所选中数据?':'是否审批拒绝所选中数据?',
'审批成功!':'审批成功!',
:'待开票',
:'待开票导入模版',
:'采购订单',
:'要货预测',
:'供应商发货记录',
:'供应商发票',
:'基础数据',
router: {
login: '登录',
home: '首页',
analysis: '分析页',
workplace: '工作台'
},
'重置后,字段设置将恢复初始设置,是否继续?':'重置后,字段设置将恢复初始设置,是否继续?',
:'提示',
:'凭证号',
:'采购价格审批人',
:'供应商发货单号'
},
}
} }

1
src/utils/dict.ts

@ -333,4 +333,5 @@ export enum DICT_TYPE {
BASIC_TEAM_TYPE='basic_team_type',//班组类型 BASIC_TEAM_TYPE='basic_team_type',//班组类型
TAX_RATE_DICT='tax_rate_dict', //税率 TAX_RATE_DICT='tax_rate_dict', //税率
INTERFACE_STATUS = 'interfaceStatus', // 接口调用信息 接口状态 INTERFACE_STATUS = 'interfaceStatus', // 接口调用信息 接口状态
SYSTEM_DAY = 'system_day', // 系统天数
} }

14
src/utils/disposition/defaultButtons.ts

@ -187,6 +187,20 @@ export function formCloseBtn(option:any) {
}) })
} }
// form表单-关闭按钮
export function formStagingBtn(option:any) {
return __defaultBtnOption(option,{
label: t(`btn.暂存`).replace('btn.', ''),
name: 'staging',
hide: false,
color: '',
float:'right',
hasPermi: ''
})
}
// drawer抽屉头部-编辑按钮 // drawer抽屉头部-编辑按钮
export function drawerEditBtn(option:any) { export function drawerEditBtn(option:any) {
return __defaultBtnOption(option,{ return __defaultBtnOption(option,{

9
src/views/mes/components/Detail.vue

@ -533,7 +533,8 @@ const change = (item, index) => {
const masterParmas = ref({ const masterParmas = ref({
masterId: '', //id masterId: '', //id
number: '', // number: '', //
status: '' // status: '', //
requestBillNo:'' //
}) })
// //
@ -578,13 +579,15 @@ const openDetail = async (row: any, titleName: any, titleValue: any, tableName:
} }
count.value++ count.value++
// //
if (!props.isBasic) { if (!props.isBasic && !props.isBasicMes) {
// id // id
masterParmas.value.masterId = row.masterId||row.id masterParmas.value.masterId = row.masterId||row.id
masterParmas.value.number = row.number masterParmas.value.number = row.number
masterParmas.value.status = row.status masterParmas.value.status = row.status
masterParmas.value.requestBillNo = row.requestBillNo
tableObjectRef.value.params = { tableObjectRef.value.params = {
masterId: row.masterId||row.id masterId: row.masterId||row.id,
requestBillNo:row.requestBillNo
} }
await getList() await getList()
} }

29
src/views/mes/itemRequestMain/index.vue

@ -27,9 +27,9 @@
v-model:currentPage="tableObject.currentPage" v-model:currentPage="tableObject.currentPage"
v-model:sort="tableObject.sort" v-model:sort="tableObject.sort"
> >
<template #code="{row}"> <template #requestBillNo="{row}">
<el-button type="primary" link @click="openDetail(row, '代码', row.code)"> <el-button type="primary" link @click="openDetail(row, '代码', row.requestBillNo)">
<span>{{ row.code }}</span> <span>{{ row.requestBillNo }}</span>
</el-button> </el-button>
</template> </template>
<template #action="{ row }"> <template #action="{ row }">
@ -51,7 +51,23 @@
/> />
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="ItemRequestMain.allSchemas" /> <Detail ref="detailRef"
:isBasic="false"
:isBasicMes="false"
:allSchemas="ItemRequestMain.allSchemas"
:detailAllSchemas="ItemRequestDetail.allSchemas"
:detailAllSchemasRules="ItemRequestMainRules"
:apiPage="ItemRequestDetailApi.getItemRequestDetailPage"
:apiCreate="ItemRequestDetailApi.createItemRequestDetail"
:apiUpdate="ItemRequestDetailApi.updateItemRequestDetail"
:apiDelete="ItemRequestDetailApi.deleteItemRequestDetail"
:detailButtonIsShowAdd="true"
:detailButtonIsShowEdit="true"
:detailButtonIsShowDelete="true"
@handleMainFefresh="handleMainFefresh"
@searchTableSuccessDetail="searchTableSuccessDetail"
:key="count"
/>
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/mes/item-request-main/import" :importTemplateData="importTemplateData" @success="importSuccess" /> <ImportForm ref="importFormRef" url="/mes/item-request-main/import" :importTemplateData="importTemplateData" @success="importSuccess" />
@ -59,12 +75,13 @@
<script setup lang="ts"> <script setup lang="ts">
import download from '@/utils/download' import download from '@/utils/download'
import { ItemRequestMain,ItemRequestMainRules } from './itemRequestMain.data' import { ItemRequestMain,ItemRequestMainRules,ItemRequestDetail,ItemRequestDetailRules } from './itemRequestMain.data'
import * as ItemRequestMainApi from '@/api/mes/itemRequestMain' import * as ItemRequestMainApi from '@/api/mes/itemRequestMain'
import * as defaultButtons from '@/utils/disposition/defaultButtons' import * as defaultButtons from '@/utils/disposition/defaultButtons'
import * as ItemRequestDetailApi from '@/api/mes/itemRequestDetail'
import TableHead from '@/components/TableHead/src/TableHead.vue' import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue' import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
import Detail from '@/components/Detail/src/Detail.vue' import Detail from '../components/Detail.vue'
defineOptions({ name: 'MesItemRequestMain' }) defineOptions({ name: 'MesItemRequestMain' })

181
src/views/mes/itemRequestMain/itemRequestMain.data.ts

@ -32,6 +32,12 @@ export const ItemRequestMain = useCrudSchemas(reactive<CrudSchema[]>([
} }
}, },
}, },
{
label: '申请单号',
field: 'requestBillNo',
sort: 'custom',
isSearch: true,
},
{ {
label: '主键', label: '主键',
field: 'id', field: 'id',
@ -45,7 +51,10 @@ export const ItemRequestMain = useCrudSchemas(reactive<CrudSchema[]>([
label: '状态', label: '状态',
field: 'status', field: 'status',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
form: { form: {
component: 'Radio' component: 'Radio'
}, },
@ -64,11 +73,73 @@ export const ItemRequestMain = useCrudSchemas(reactive<CrudSchema[]>([
}, },
}, },
{ {
label: '备注', label: '删除用户名',
field: 'remark', field: 'deleter',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '位置ID',
field: 'siteId',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
form: {
component: 'InputNumber',
value: 0
},
},
{
label: '计划编码',
field: 'planDayCode',
sort: 'custom',
isSearch: true,
},
{
label: '工单编码',
field: 'workBillNo',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{
label: '批次编码',
field: 'batchCode',
sort: 'custom',
isSearch: true,
},
{
label: '工位编码',
field: 'workstationCode',
sort: 'custom',
isSearch: true,
},
{
label: '产品编码',
field: 'productCode',
sort: 'custom',
isSearch: true,
},
{
label: '工序编码',
field: 'processCode',
sort: 'custom',
isSearch: true,
},
{
label: '类型(1:叫料、2:补料)',
field: 'requestType',
sort: 'custom',
isSearch: true,
form: {
component: 'SelectV2'
},
},
{ {
label: '创建时间', label: '创建时间',
field: 'createTime', field: 'createTime',
@ -86,8 +157,32 @@ export const ItemRequestMain = useCrudSchemas(reactive<CrudSchema[]>([
isForm: false, isForm: false,
}, },
{ {
label: '删除用户名', label: '备注',
field: 'deleter', field: 'remark',
sort: 'custom',
isSearch: true,
},
{
label: '操作',
field: 'action',
isForm: false,
table: {
width: 150,
fixed: 'right'
}
}
]))
export const ItemRequestDetailRules = reactive({
concurrencyStamp: [required],
})
export const ItemRequestDetail = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '主键',
field: 'id',
sort: 'custom', sort: 'custom',
isSearch: false, isSearch: false,
isTable: false, isTable: false,
@ -95,8 +190,20 @@ export const ItemRequestMain = useCrudSchemas(reactive<CrudSchema[]>([
isDetail:false, isDetail:false,
}, },
{ {
label: '位置ID', label: '状态',
field: 'siteId', field: 'status',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
form: {
component: 'Radio'
},
},
{
label: '并发乐观锁',
field: 'concurrencyStamp',
sort: 'custom', sort: 'custom',
isSearch: false, isSearch: false,
isTable: false, isTable: false,
@ -107,56 +214,74 @@ export const ItemRequestMain = useCrudSchemas(reactive<CrudSchema[]>([
value: 0 value: 0
}, },
}, },
{ {
label: '计划编码', label: '删除用户名',
field: 'planDayCode', field: 'deleter',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
}, },
{ {
label: '工单编码', label: '申请单号',
field: 'workBillNo', field: 'requestBillNo',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{ {
label: '批次编码', label: '物料编码',
field: 'batchCode', field: 'itemBasicCode',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{ {
label: '申请单号', label: '物料数量',
field: 'requestBillNo', field: 'itemCounts',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{ {
label: '工位编码', label: '物料单位',
field: 'workstationCode', field: 'itemUom',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{ {
label: '产品编码', label: '位置ID',
field: 'productCode', field: 'siteId',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
form: {
component: 'InputNumber',
value: 0
},
}, },
{ {
label: '工序编码', label: '创建时间',
field: 'processCode', field: 'createTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter,
isSearch: true, isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
isForm: false,
}, },
{ {
label: '类型(1:叫料、2:补料)', label: '备注',
field: 'requestType', field: 'remark',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
form: {
component: 'SelectV2'
},
}, },
{ {
label: '操作', label: '操作',

24
src/views/mes/orderDay/components/schedule.vue

@ -201,8 +201,8 @@
</el-dialog> </el-dialog>
</ContentWrap> </ContentWrap>
<template #footer> <template #footer>
<el-button @click="dialogVisible=false" >关闭</el-button> <el-button @click="handleClose" >关闭</el-button>
<el-button @click="publishPlan" >发布计划</el-button> <el-button type="primary" @click="publishPlan" >发布计划</el-button>
</template> </template>
<SearchTable ref="searchTableRef" @search-table-success="searchTableSuccess" /> <SearchTable ref="searchTableRef" @search-table-success="searchTableSuccess" />
</Dialog> </Dialog>
@ -280,7 +280,7 @@ const showMaterialsData=ref() //物料信息分页展示
const page=ref({ const page=ref({
total:0, total:0,
current:1, current:1,
size:5 size:7
}) })
/*班组数据*/ /*班组数据*/
const teamData = ref([]) const teamData = ref([])
@ -327,6 +327,7 @@ const searchTeamList = () => {
} }
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type: string, row?: any, titleName?: any) => { const open = async (type: string, row?: any, titleName?: any) => {
activeName.value = 'workstation'
currentNode.value.name='' currentNode.value.name=''
currentNode.value.id='' currentNode.value.id=''
// //
@ -412,8 +413,8 @@ const getProcessroute = async () => {
currentNode.value = graphJson.value.cells[0] currentNode.value = graphJson.value.cells[0]
// //
nodeClick('','','',currentNode.value,'') nodeClick('','','',currentNode.value,'')
} }
// //
const getConfigProcessRouteNode= async () => { const getConfigProcessRouteNode= async () => {
@ -470,6 +471,10 @@ const opensearchTable = (
) )
} }
const handleClose=()=>{
dialogVisible.value = false,
emit('close')
}
const publishPlan=()=>{ const publishPlan=()=>{
message.confirm("确认发布当前计划?","question").then(async () => { message.confirm("确认发布当前计划?","question").then(async () => {
//isPublish.value=true //isPublish.value=true
@ -478,10 +483,7 @@ const publishPlan=()=>{
doPublishPlan() }finally{ doPublishPlan() }finally{
formLoading.value=false; formLoading.value=false;
} }
// loading.value = false, handleClose()
dialogVisible.value = false,
//isPublish.value=false,
emit('close')
}).catch(() => { }).catch(() => {
message.info("已取消发布") message.info("已取消发布")
}) })
@ -714,14 +716,14 @@ const handleCurrentChangeM=(value: number)=>{
let index=(value-1)*page.value.size let index=(value-1)*page.value.size
page.value.current=value page.value.current=value
showMaterialsData.value=materialsData.value.slice(index,index+page.value.size) showMaterialsData.value=materialsData.value.slice(index,index+page.value.size)
} }
const handlePrevClickM=(value: number)=>{ const handlePrevClickM=(value: number)=>{
page.value.current=value-1 page.value.current=value-1
if(page.value.current==0) { if(page.value.current==0) {
page.value.current=1 page.value.current=1
} }
} }
const handleNextClickM=(value: number)=>{ const handleNextClickM=(value: number)=>{
page.value.current=value+1 page.value.current=value+1

318
src/views/mes/orderDay/components/scheduleDetail.vue

@ -0,0 +1,318 @@
<template>
<Dialog
:title="dialogTitle"
v-model="dialogVisible"
:width="dialogWidth"
:close-on-click-modal="false"
:vLoading="formLoading"
>
<ContentWrap>
<Descriptions
:data="detailData"
labelClassName="label-class-name"
label-align="left"
direction="vertical"
:column="8"
:schema="allSchemas.detailSchema"
:columns="2"
width="200px"
/>
</ContentWrap>
<ContentWrap>
<el-container>
<el-aside width="320px">
<el-card>
<template #header>
<div class="card-header">
<span>工艺路线</span>
</div>
</template>
<el-table :data="processData" ref="tableProcess" style="width: 100%; height: 80%" >
<el-table-column prop="code" label="工序编码" />
<el-table-column prop="name" label="工序名称" />
</el-table>
</el-card>
</el-aside>
<el-main style="height: 480px; width: calc(100% - 980px);padding: 0px; margin:0px 20px">
<div ref="graphContainer"></div
></el-main>
<el-aside width="640px">
<el-tag>工序编码{{currentNode.id}} -工序名称:{{currentNode.name }}</el-tag>
<el-tabs v-model="activeName" >
<el-tab-pane label="工序工位" name="workstation">
<el-table :data="workstationData" ref="tableWorkstations" style="width: 100%; height: 80%">
<el-table-column prop="stationName" label="工位名称" />
<el-table-column prop="processCode" label="工序编码" />
</el-table>
</el-tab-pane>
<el-tab-pane label="工序物料" name="materials">
<el-table :data="showMaterialsData" ref="tableMaterials" style="width: 100%; height: 80%">
<el-table-column prop="repMaterialCode" label="物料编码" />
<el-table-column prop="repMaterialCounts" label="物料数量" />
<el-table-column prop="repMaterialModel" label="物料单位" />
<el-table-column prop="sourceMaterialCounts" label="需求物料数">
<template #default="scope">{{ getTotalcounts(scope.row.repMaterialCounts) }}</template>
</el-table-column>
<el-table-column prop="replaceFlag" label="是否替换" >
<template #default="scope">
<el-switch disabled
v-model="scope.row.replaceFlag"
active-color="#13ce66"
inactive-color="#ff4949"
active-text="是"
inactive-text="否"
/>
</template>
</el-table-column>
</el-table>
<el-pagination
small
hide-on-single-page="true"
layout="prev, pager, next"
:total="page.total"
:page-size="page.size"
:current-page="page.current"
@current-change="handleCurrentChangeM"
@prev-click="handlePrevClickM"
@next-click="handleNextClickM"
/>
</el-tab-pane>
<el-tab-pane label="工序人员" name="workers">
<el-table :data="workerData" ref="tableWorker" style="width: 100%; height: 233px;overflow: auto;">
<el-table-column prop="groupName" label="所属班组" />
<el-table-column prop="workerMonitor" label="班长" />
<el-table-column prop="workerCode" label="人员编码" />
<el-table-column prop="workerName" label="人员昵称" />
</el-table>
</el-tab-pane>
<el-tab-pane label="工序设备" name="equipments">
<el-table :data="equipmentData" ref="tableEquipment" style="width: 100%; height: 80%">
<el-table-column prop="equipmentCode" label="设备编码" />
<el-table-column prop="equipmentName" label="设备名称" />
<el-table-column prop="equipmentType" label="设备类型" />
<el-table-column prop="equipmentWorkstation" label="关联工位" />
</el-table>
</el-tab-pane>
</el-tabs>
</el-aside>
</el-container>
</ContentWrap>
<template #footer>
<el-button @click="handleClose" >关闭</el-button>
</template>
</Dialog>
</template>
<script lang="ts" setup>
import {
start_node,
end_node,
createGraph,
getNewNode
} from '@/views/mes/processroute/components/graphbase.data'
import * as orderDayconfigApi from '@/api/mes/orderDayConfig'
import * as OrderDayApi from '@/api/mes/orderDay'
import {ProcessSearch} from '../../publicUtil/processSearch.data'
import * as ProcessApi from '@/api/wms/process'
import { Graph } from '@antv/x6'
import * as TeamApi from '@/api/wms/team'
import {searchUser} from "@/views/wms/basicDataManage/orderManage/team/team.data";
import {DeviceInfo, OrderDay} from "@/views/mes/orderDay/orderDay.data";
const graphContainer = ref<HTMLElement | null>(null)
const graph = ref<Graph>()
const message = useMessage() //
const { t } = useI18n() //
const activeName = ref('workstation')
const formLoading = ref(false)
const dialogFormVisibleUser = ref(false)
const processData = ref([])
const processCode = ref('')
//const isPublish=ref(false)
const queryParams:orderDayconfigApi.OrderDayQueryParamVo=ref()
const props = defineProps({
//
isSearchFilterButtonHide: {
type: Boolean,
default: false
},
//
basicFormWidth: {
type: String,
default: ''
},
allSchemas: {
type: Object,
required: true,
default: null
}
})
const workerData=ref([])
const detailData = ref(props.allSchemas)
const route = useRoute() //
const routeName = ref()
routeName.value = route.name
routeName.value = routeName.value.substring(0, routeName.value.length - 4) + 'Detail'
//const updateKey = ref(0)
const dialogWidth = ref()
const materialsData = ref()
const equipmentData=ref([])
const workstationData=ref([])
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const graphJson =ref()
const currentNode = ref({
name:'',
id:''
})
const showMaterialsData=ref() //
const page=ref({
total:0,
current:1,
size:7
})
/** 打开弹窗 */
const open = ( row?: any, titleName?: any) => {
//console.log("scheduleDetail-182",row)
currentNode.value.name=''
currentNode.value.id=''
workerData.value=[]
equipmentData.value = []
materialsData.value = []
showMaterialsData.value=[]
page.value.total = 0
page.value.current = 1
workstationData.value = []
dialogVisible.value = true
detailData.value = row
dialogWidth.value = props.basicFormWidth + '%'
queryParams.planNoDay=row.planNoDay
queryParams.productCode=row.productCode
queryParams.workroomCode=row.workroomCode
queryParams.lineCode=row.lineCode
queryParams.processrouteCode=row.processrouteCode
queryParams.batchCode=row.batchCode
//
if (titleName) {
dialogTitle.value = titleName
} else {
dialogTitle.value = type
}
nextTick?.(() => {
graph.value = createGraph(graphContainer.value as HTMLElement, true, 240, 320)
graph.value.on('node:click', ({ e, x, y, node, view }) => {
nodeClick(e, x, y, node, view)
})
getProcessroute()
getConfigProcessRouteNode()
})
}
const getTotalcounts=(a:any)=>{
return detailData.value.planCount*a
}
//BOM
const getProcessBom=async (code:any) => {
queryParams.processCode=code
let res = await orderDayconfigApi.getOrderDayBomByOrder(queryParams)
materialsData.value=res
if(materialsData.value.length>0){
page.value.total = materialsData.value.length
page.value.current = 1
showMaterialsData.value=materialsData.value.slice(0,page.value.size)
}
}
// const currentStartNode = ref({
// id:''
// })
//线
const getProcessroute = async () => {
let res = await orderDayconfigApi.getConfigProcessRoute(queryParams)
graphJson.value=JSON.parse(res.newGraphData)
graph.value?.fromJSON(graphJson.value.cells)
//
//currentStartNode.value = graphJson.value.cells[0]
currentNode.value = graphJson.value.cells[0]
//
nodeClick('','','',currentNode.value,'')
}
//
const getConfigProcessRouteNode= async () => {
let res = await orderDayconfigApi.getConfigProcessRouteNode(queryParams)
processData.value=res
}
//
const getConfigProcessWorkstation= async (code:any) => {
queryParams.processCode=code
workstationData.value = await orderDayconfigApi.getConfigProcessWorkstation(queryParams)
}
//
const getConfigProcessWorker= async (code:any) => {
queryParams.processCode=code
workerData.value = await orderDayconfigApi.getConfigProcessWorker(queryParams)
}
//
const getConfigProcessEquipment= async (code:any) => {
queryParams.processCode=code
equipmentData.value = await orderDayconfigApi.getConfigProcessEquipment(queryParams)
}
const nodeClick = (e, x, y, node, view) => {
//console.log(node.id)
getProcessBom(node.id)
getConfigProcessWorkstation(node.id)
getConfigProcessWorker(node.id)
getConfigProcessEquipment(node.id)
processCode.value = node.id
currentNode.value.id=node.id
//console.log(node)
currentNode.value.name=node.attrs.title.text
}
const handleClose=()=>{
dialogVisible.value = false,
emit('close')
}
const handleCurrentChangeM=(value: number)=>{
let index=(value-1)*page.value.size
page.value.current=value
showMaterialsData.value=materialsData.value.slice(index,index+page.value.size)
}
const handlePrevClickM=(value: number)=>{
page.value.current=value-1
if(page.value.current==0) {
page.value.current=1
}
}
const handleNextClickM=(value: number)=>{
page.value.current=value+1
if(page.value.current>page.value.total/page.value.size) {
page.value.current=page.value.total/page.value.size -1
}
}
defineOptions({ name: 'SechledDetail' })
defineExpose({ open }) // open
//
const emit = defineEmits([
'close'
])
</script>
<style lang="scss">
.el-drawer__body {
background: #f5f5f5 !important;
}
::v-deep(.label-class-name) {
color: #dedede;
}
</style>

35
src/views/mes/orderDay/index.vue

@ -62,6 +62,7 @@
<!-- 详情 --> <!-- 详情 -->
<orderDetail ref="detailRef" :all-schemas="OrderDay.allSchemas" /> <orderDetail ref="detailRef" :all-schemas="OrderDay.allSchemas" />
<scheduleDetailR ref="sDetailRef" :all-schemas="OrderDay.allSchemas" :basicFormWidth="75" @close="publishClosed" />
<scheduleDetail ref="scheduleDetailRef" :all-schemas="OrderDay.allSchemas" :basicFormWidth="75" @close="publishClosed" /> <scheduleDetail ref="scheduleDetailRef" :all-schemas="OrderDay.allSchemas" :basicFormWidth="75" @close="publishClosed" />
<!-- 导入 --> <!-- 导入 -->
<ImportForm <ImportForm
@ -82,6 +83,9 @@ import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue' import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
import orderDetail from './components/orderDetail.vue' import orderDetail from './components/orderDetail.vue'
import scheduleDetail from './components/schedule.vue' import scheduleDetail from './components/schedule.vue'
import scheduleDetailR from './components/scheduleDetail.vue'
defineOptions({ name: 'MesOrderDay' }) defineOptions({ name: 'MesOrderDay' })
@ -196,8 +200,11 @@ const buttonBaseClick = (val, item) => {
} }
} }
const publishClosed=()=>{ const publishClosed=()=>{
//console.log('publishClosed') //console.log('orderday-publishClosed-200')
getList() nextTick(() => {
getList()
})
} }
// //
const isShowMainButton = (row,val) => { const isShowMainButton = (row,val) => {
@ -242,7 +249,7 @@ const butttondata = (row) => {
// - // -
const buttonTableClick = async (val, row) => { const buttonTableClick = (val, row) => {
if (val == 'edit') { // if (val == 'edit') { //
openForm('update', row) openForm('update', row)
} else if (val == 'delete') { // } else if (val == 'delete') { //
@ -252,6 +259,7 @@ const buttonTableClick = async (val, row) => {
}else if(val=='stopPlan'){ // }else if(val=='stopPlan'){ //
stopPlan(row.id) stopPlan(row.id)
} }
getList()
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
@ -282,18 +290,25 @@ const formsSuccess = async (formType,data) => {
} }
basicFormRef.value.dialogVisible = false basicFormRef.value.dialogVisible = false
getList() await getList()
} }
/** 详情操作 */ /** 详情操作 */
const detailRef = ref() const detailRef = ref()
const sDetailRef=ref()
const openDetail = (row: any, titleName: any, titleValue: any) => { const openDetail = (row: any, titleName: any, titleValue: any) => {
detailRef.value.openDetail(row, titleName, titleValue, 'basicOrderDay') if(row.status=='1'){
detailRef.value.openDetail(row, titleName, titleValue, 'basicOrderDay')
}else{
//console.log('orderDay-openDetail-303',row)
sDetailRef.value.open(row, titleName)
}
} }
/** 发布操作 */ /** 发布操作 */
const scheduleDetailRef = ref() const scheduleDetailRef = ref()
const openScheduledDetail = (row: any, titleName: any, titleValue: any) => { const openScheduledDetail = ( titleName: any,row: any, titleValue: any) => {
scheduleDetailRef.value.open(row, titleName, titleValue) scheduleDetailRef.value.open( titleName, row,titleValue)
} }
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (id: number) => { const handleDelete = async (id: number) => {
@ -323,9 +338,9 @@ const handleExport = async () => {
exportLoading.value = false exportLoading.value = false
} }
} }
const stopPlan = async (id) => { const stopPlan = (id) => {
await OrderDayApi.stopPlan(id) OrderDayApi.stopPlan(id)
getList()
} }
/** 导入 */ /** 导入 */
const importFormRef = ref() const importFormRef = ref()

10
src/views/mes/orderDay/orderDay.data.ts

@ -11,9 +11,9 @@ export const OrderDayRules = reactive({
// batchCode: [ // batchCode: [
// { required: false, message: '请输入一个日计划编号', trigger: 'blur' } // { required: false, message: '请输入一个日计划编号', trigger: 'blur' }
// ], // ],
planNoMonth: [ // planNoMonth: [
{ required: true, message: '请输入一个月计划编号', trigger: 'blur' } // { required: true, message: '请输入一个月计划编号', trigger: 'blur' }
], // ],
productCode: [ productCode: [
{ required: true, message: '请选择一个产品', trigger: 'blur' } { required: true, message: '请选择一个产品', trigger: 'blur' }
], ],
@ -106,7 +106,7 @@ export const OrderDay = useCrudSchemas(reactive<CrudSchema[]>([
isForm: false, isForm: false,
isTable: true, isTable: true,
isDetail:true, isDetail:true,
isSearch: false, isSearch: true,
width: '80px', width: '80px',
dictType: DICT_TYPE.MES_PLANDO_STATUS, dictType: DICT_TYPE.MES_PLANDO_STATUS,
dictClass: 'string', dictClass: 'string',
@ -214,7 +214,7 @@ export const OrderDay = useCrudSchemas(reactive<CrudSchema[]>([
dictClass: 'string', dictClass: 'string',
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'FALSE',
componentProps: { componentProps: {
inactiveValue: 'FALSE', inactiveValue: 'FALSE',
activeValue: 'TRUE' activeValue: 'TRUE'

14
src/views/mes/process/index.vue

@ -283,13 +283,13 @@ const changeTabs = (data) =>{
tabsCreateApi = ProcessApi.createPatternRelation tabsCreateApi = ProcessApi.createPatternRelation
tmpPopList = PatternPopList.allSchemas tmpPopList = PatternPopList.allSchemas
} }
else if(data.prop == 'ItembasicTab'){ // else if(data.prop == 'ItembasicTab'){
apiPage.value = ProcessApi.getItembasicPage // apiPage.value = ProcessApi.getItembasicPage
detailAllSchemas.value = ItembasicTab.allSchemas // detailAllSchemas.value = ItembasicTab.allSchemas
tabsDeleteApi = ProcessApi.deleteItembasicRelation // tabsDeleteApi = ProcessApi.deleteItembasicRelation
tabsCreateApi = ProcessApi.createItembasicRelation // tabsCreateApi = ProcessApi.createItembasicRelation
tmpPopList = ItembasicPopList.allSchemas // tmpPopList = ItembasicPopList.allSchemas
} // }
} }
/** 详情操作 */ /** 详情操作 */

2
src/views/mes/qualityform/index.vue

@ -53,7 +53,7 @@
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" <Detail ref="detailRef"
:isBasic="false" :isBasic="false"
:isBasicMes="true" :isBasicMes="false"
:allSchemas="Qualityform.allSchemas" :allSchemas="Qualityform.allSchemas"
:detailAllSchemas="QualityformDetail.allSchemas" :detailAllSchemas="QualityformDetail.allSchemas"
:detailAllSchemasRules="QualityformDetailRules" :detailAllSchemasRules="QualityformDetailRules"

121
src/views/mes/workScheduling/components/finish.vue

@ -0,0 +1,121 @@
<template>
<Dialog
:title="dialogTitle"
v-model="dialogVisible"
:close-on-click-modal="true"
:vLoading="formLoading"
>
<template #title>{{ dialogTitle }}</template>
<el-form>
<el-form-item label="当前工序">
<el-input v-model="currentProcess" disabled></el-input>
</el-form-item>
<el-form-item label="选择人员">
<el-select v-model="personSelected">
<el-option v-for="item in personData" :key="item.workerCode" :label="item.workerName" />
</el-select>
</el-form-item>
<el-form-item label="报工数量">
<el-input-number v-model="reportCount" @change="handleCount"></el-input-number>
</el-form-item>
<el-form-item label="工时">
<el-input-number v-model="workTerm"></el-input-number>
</el-form-item>
<el-form-item label="是否已质检">
<el-switch v-model="checkFlag" active-value="true"> </el-switch>
</el-form-item>
<el-form-item label="合格数量">
<el-input-number
v-model="qualified"
:disabled="!checkFlag"
@change="handleCount"
></el-input-number>
</el-form-item>
<el-form-item label="不合格数量">
<el-input-number disabled v-model="unqualified"></el-input-number>
</el-form-item>
</el-form>
<template #footer
><el-button @click="dialogVisible = false">关闭</el-button>
<el-button type="primary" @click="saveReport">保存</el-button></template
>
</Dialog>
</template>
<script lang="ts" setup>
import { Dialog } from '@/components/Dialog'
import * as workschedulingApi from '@/api/mes/workScheduling'
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
import dayjs from 'dayjs'
const message = useMessage() //
const { t } = useI18n() //
const { wsCache } = useCache()
const rowData = ref()
const dialogVisible = ref(false)
const dialogTitle = ref()
const formLoading = ref(false)
const personSelected = ref()
const currentProcess = ref()
const personData = ref([{ value: '', label: '' }])
const reportCount = ref()
const qualified = ref()
const checkFlag = ref(false)
const unqualified = ref(0)
const workTerm = ref()
const user = wsCache.get(CACHE_KEY.USER)
const handleCount = () => {
if (reportCount.value > rowData.value.planCount) {
message.alert('报工数量不能超出计划数量!计划数【'+rowData.value.planCount+'】')
reportCount.value =rowData.value.planCount
return
}
if (checkFlag) {
if (reportCount.value < qualified.value) {
message.alert('合格数不能超出报工数!')
return
}
if (qualified.value == undefined || qualified.value == 0) {
qualified.value = reportCount.value
}
unqualified.value = reportCount.value - qualified.value
}
}
const openDetail = (row: any, titleName: any) => {
//console.log('workscheduling-finishReport-60', user)
currentProcess.value = row.workingNode
rowData.value = row
dialogVisible.value = true
dialogTitle.value = titleName
getCurrentWorkerList(row)
}
const getCurrentWorkerList = async (row) => {
let params = {
planDayCode: row.planMasterCode,
processCode: row.workingNode
}
personData.value = await workschedulingApi.getCurrentWorkerList(params)
}
//
const saveReport = () => {
let data = {
reportDate: dayjs(new Date()).format('YYYY-MM-DD HH:mm:sss'),
schedulingCode: rowData.value.schedulingCode,
processCode: currentProcess.value,
list: [
{
reportCount: reportCount.value,
workTerm: workTerm.value,
reportPerson: personSelected.value,
qualified: qualified.value,
unqualified: unqualified.value
}
]
}
workschedulingApi.completeHandle(data)
}
//
const emit = defineEmits(['success', 'close'])
defineExpose({ openDetail }) // open
</script>

143
src/views/mes/workScheduling/components/report.vue

@ -0,0 +1,143 @@
<template>
<Dialog
:title="dialogTitle"
v-model="dialogVisible"
:close-on-click-modal="true"
:vLoading="formLoading"
>
<template #title>{{ dialogTitle }}</template>
<el-form>
<el-form-item label="选择工序">
<el-select v-model="processCodeSelected" @change="processChange" value-key="processCode">
<el-option v-for="item in processOption" :key="item.processCode" :label="item.processName" :value="item.processCode" />
</el-select>
</el-form-item>
<el-form-item label="选择人员">
<el-select v-model="personSelected">
<el-option v-for="item in personOption" :key="item.workerCode" :label="item.workerName" :value="item.workerCode" />
</el-select>
</el-form-item>
<el-form-item label="报工数量">
<el-input-number v-model="reportCount" @change="handleCount"></el-input-number>
</el-form-item>
<el-form-item label="工时">
<el-input-number v-model="workTerm"></el-input-number>
</el-form-item>
<el-form-item label="是否已质检">
<el-switch v-model="checkFlag" active-value="true"> </el-switch>
</el-form-item>
<el-form-item label="合格数量">
<el-input-number
v-model="qualified"
:disabled="!checkFlag"
@change="handleCount"
></el-input-number>
</el-form-item>
<el-form-item label="不合格数量">
<el-input-number disabled v-model="unqualified"></el-input-number>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="dialogVisible = false">关闭</el-button>
<el-button type="primary" :disabled="saveFlag" @click="saveReport">保存</el-button>
</template> </Dialog
>+
</template>
<script lang="ts" setup>
import { Dialog } from '@/components/Dialog'
import * as workschedulingApi from '@/api/mes/workScheduling'
import dayjs from 'dayjs'
const message = useMessage() //
const { t } = useI18n() //
const rowData = ref()
const openDetail = async (row: any, titleName: any) => {
rowData.value = row
dialogVisible.value = true
dialogTitle.value = titleName
getProcessList(row)
}
const dialogVisible = ref(false)
const dialogTitle = ref()
const formLoading = ref(false)
const processOption = ref([])
const personOption=ref([])
const processCodeSelected = ref()
const personSelected = ref()
const checkFlag = ref(false)
const unqualified = ref()
const reportCount = ref()
const qualified = ref()
const workTerm = ref()
const saveFlag=ref(false)
//
const getProcessList=async(row)=>{
let params={
planDayCode:row.planMasterCode,
schedulingCode:row.schedulingCode
}
processOption.value=await workschedulingApi.getProcessList(params)
}
const processChange=(val:any)=>{
console.log("processChange-81",val)
getCurrentWorkerList(val)
}
//
const getCurrentWorkerList = async (val) => {
console.log("personOption-91",val)
let params = {
planDayCode: rowData.value.planMasterCode,
processCode: val
}
personOption.value = await workschedulingApi.getCurrentWorkerList(params)
}
//
const handleCount = () => {
if (reportCount.value > rowData.value.planCount) {
message.alert('报工数量不能超出计划数量!计划数【'+rowData.value.planCount+'】')
reportCount.value =rowData.value.planCount
return
}
if (checkFlag.value) {
if (reportCount.value < qualified.value) {
message.alert('合格数不能超出报工数!')
qualified.value=0
return
}
if (qualified.value == undefined || qualified.value == 0) {
qualified.value = reportCount.value
}
unqualified.value = reportCount.value - qualified.value
}
}
//
const saveReport = async() => {
let data = {
reportDate: dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss'),
schedulingCode: rowData.value.schedulingCode,
processCode: processCodeSelected.value,
list: [
{
reportCount: reportCount.value,
workTerm: workTerm.value,
reportPerson: personSelected.value,
qualified: qualified.value,
unqualified: unqualified.value
}
]
}
saveFlag.value = true
//console.log("report-saveReport-82",data)
await workschedulingApi.reportWorkByProcess(data)
saveFlag.value = false
dialogVisible.value = false
emit('close')
}
//
const emit = defineEmits(['success', 'close'])
defineExpose({ openDetail }) // open
</script>

44
src/views/mes/workScheduling/index.vue

@ -67,7 +67,8 @@
@searchTableSuccessDetail="searchTableSuccessDetail" @searchTableSuccessDetail="searchTableSuccessDetail"
:key="count" :key="count"
/> />
<Report ref="reportRef" @close="handleClose"></Report>
<Finish ref="reportFinishRef" @close="handleClose"></Finish>
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/mes/work-scheduling/import" :importTemplateData="importTemplateData" @success="importSuccess" /> <ImportForm ref="importFormRef" url="/mes/work-scheduling/import" :importTemplateData="importTemplateData" @success="importSuccess" />
</template> </template>
@ -81,7 +82,8 @@ import * as defaultButtons from '@/utils/disposition/defaultButtons'
import TableHead from '@/components/TableHead/src/TableHead.vue' import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue' import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
import Detail from './components/Detail.vue' import Detail from './components/Detail.vue'
import { async } from '@antv/x6/lib/registry/marker/async' import Report from './components/report.vue'
import Finish from './components/finish.vue'
defineOptions({ name: 'MesWorkScheduling' }) defineOptions({ name: 'MesWorkScheduling' })
@ -167,14 +169,18 @@ const buttonBaseClick = (val, item) => {
// FINISHED("9", ""); // FINISHED("9", "");
// - // -
const butttondata=(row) =>{ return [ const butttondata=(row) =>{ return [
defaultButtons.mainListEditBtn({label:"调序",hasPermi:'mes:workScheduling:update'}), // defaultButtons.mainListEditBtn({label:"调序",hide: isShowMainButton(row,['-1','0','3']),hasPermi:'mes:workScheduling:update'}), //
//defaultButtons.mainListDeleteBtn({hasPermi:'mes:workScheduling:delete'}), // //defaultButtons.mainListDeleteBtn({hasPermi:'mes:workScheduling:delete'}), //
defaultButtons.mainListHandleBtn({label:"终止",name:'terminate',hide: isShowMainButton(row,['-1','0']),hasPermi:'mes:workScheduling:update'}), // defaultButtons.mainListHandleBtn({label:"终止",name:'terminate',hide: isShowMainButton(row,['-1','0']),hasPermi:'mes:workScheduling:update'}), //
defaultButtons.mainListHandleBtn({label:"暂停",name:'pause',hide: isShowMainButton(row,['1']),hasPermi:'mes:workScheduling:update'}), defaultButtons.mainListHandleBtn({label:"暂停",name:'pause',hide: isShowMainButton(row,['1']),hasPermi:'mes:workScheduling:update'}),
defaultButtons.mainListHandleBtn({label:"恢复",name:'resume',hide: isShowMainButton(row,['3']),hasPermi:'mes:workScheduling:update'}), defaultButtons.mainListHandleBtn({label:"恢复",name:'resume',hide: isShowMainButton(row,['3']),hasPermi:'mes:workScheduling:update'}),
//defaultButtons.mainListHandleBtn({label:"",name:'change', hasPermi:'mes:workScheduling:update'}), // defaultButtons.mainListHandleBtn({label:"开工",name:'start',hide: isShowMainButton(row,['0']),hasPermi:'mes:workScheduling:update'}),
defaultButtons.mainListHandleBtn({label:"报工",name:'report',hide: isShowMainButton(row,['1'] ),hasPermi:'mes:workScheduling:update'}),
defaultButtons.mainListHandleBtn({label:"完工",name:'finish',hide: isShowMainButton(row,['1']),hasPermi:'mes:workScheduling:update'}),
defaultButtons.mainListHandleBtn({label:"叫料",name:'callMaterial',hide: isShowMainButton(row,['1']),hasPermi:'mes:workScheduling:update'}),
]} ]}
const reportRef=ref()
const reportFinishRef=ref()
// - // -
const buttonTableClick = async (val, row) => { const buttonTableClick = async (val, row) => {
if (val == 'edit') { // if (val == 'edit') { //
@ -185,7 +191,16 @@ const buttonTableClick = async (val, row) => {
changeBillStatus(row,"3") changeBillStatus(row,"3")
}else if (val == 'resume') { // }else if (val == 'resume') { //
changeBillStatus(row,"1") changeBillStatus(row,"1")
}else if(val=='start'){
changeBillStatus(row,"1")
}else if(val=='report'){
reportRef.value.openDetail(row,"报工")
}else if(val=='finish'){
finishReport(row)
} else if(val=='callMaterial'){
} }
getList()
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
@ -193,7 +208,20 @@ const basicFormRef = ref()
const openForm = (type: string, row?: any) => { const openForm = (type: string, row?: any) => {
basicFormRef.value.open(type, row) basicFormRef.value.open(type, row)
} }
//
const finishReport=async(row)=>{
let params={
planDayCode:row.planMasterCode,
processCode:row.workingNode
}
//console.log("workscheduling-finishReport-213",row)
let res=await WorkSchedulingApi.getNodePosition(params)
if(res==='end'){
reportFinishRef.value.openDetail(row,"完工")
}else{
message.alert("当前工序不是完工工序,不能进行完工操作!")
}
}
// form // form
const formsSuccess = async (formType,data) => { const formsSuccess = async (formType,data) => {
var isHave =WorkScheduling.allSchemas.formSchema.some(function (item) { var isHave =WorkScheduling.allSchemas.formSchema.some(function (item) {
@ -264,7 +292,9 @@ const importTemplateData = reactive({
const importSuccess = () => { const importSuccess = () => {
getList() getList()
} }
const handleClose=()=>{
getList()
}
// //
const searchFormClick = (searchData) => { const searchFormClick = (searchData) => {
tableObject.params = { tableObject.params = {

12
src/views/mes/workScheduling/workScheduling.data.ts

@ -118,7 +118,8 @@ export const WorkScheduling = useCrudSchemas(reactive<CrudSchema[]>([
}, },
{ {
label: '执行状态', label: '执行状态',
field: 'flagDo', // field: 'flagDo',
field: 'status',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
isForm:false, isForm:false,
@ -163,8 +164,9 @@ export const WorkScheduling = useCrudSchemas(reactive<CrudSchema[]>([
label: '操作', label: '操作',
field: 'action', field: 'action',
isForm: false, isForm: false,
width: '220px',
table: { table: {
width: 150, width: 'wrapContent',
fixed: 'right' fixed: 'right'
} }
} }
@ -194,7 +196,7 @@ export const WorkSchedulingDetail = useCrudSchemas(reactive<CrudSchema[]>([
isForm:false, isForm:false,
isDetail:false, isDetail:false,
}, },
{ {
label: '创建时间', label: '创建时间',
field: 'createTime', field: 'createTime',
@ -295,7 +297,7 @@ export const WorkSchedulingDetail = useCrudSchemas(reactive<CrudSchema[]>([
}, },
sort: 'custom', sort: 'custom',
}, },
{ {
label: '计划数量', label: '计划数量',
field: 'planCount', field: 'planCount',
@ -359,7 +361,7 @@ export const WorkSchedulingDetail = useCrudSchemas(reactive<CrudSchema[]>([
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{ {
label: '生产人', label: '生产人',
field: 'receivePerson', field: 'receivePerson',

0
src/views/qms/basicDataManage/counter/counter.data.ts → src/views/qms/counter/counter.data.ts

0
src/views/qms/basicDataManage/counter/index.vue → src/views/qms/counter/index.vue

0
src/views/qms/basicDataManage/dynamicRule/dynamicRule.data.ts → src/views/qms/dynamicRule/dynamicRule.data.ts

0
src/views/qms/basicDataManage/dynamicRule/index.vue → src/views/qms/dynamicRule/index.vue

0
src/views/qms/inspection/inspectionJob/addForm.vue → src/views/qms/inspectionJob/addForm.vue

0
src/views/qms/inspection/inspectionJob/detail.vue → src/views/qms/inspectionJob/detail.vue

2
src/views/qms/inspection/inspectionJob/index.vue → src/views/qms/inspectionJob/index.vue

@ -59,7 +59,7 @@
<script setup lang="ts"> <script setup lang="ts">
import download from '@/utils/download' import download from '@/utils/download'
import { InspectionJobMain, InspectionJobMainRules, InspectionJobDetail, InspectionJobDetailRules,InspectionJobPackage,InspectionJobPackageRules} from './inspectionJobMain.data' import { InspectionJobMain, InspectionJobMainRules, InspectionJobDetail, InspectionJobDetailRules,InspectionJobPackage,InspectionJobPackageRules} from './inspectionJobMain.data'
import { InspectionTemplateMain,InspectionTemplateProcess,InspectionTemplateFeatures,InspectionTemplateRules } from '../../basicDataManage/inspectionTemplate/inspectionTemplate.data' import { InspectionTemplateMain,InspectionTemplateProcess,InspectionTemplateFeatures,InspectionTemplateRules } from '../inspectionTemplate/inspectionTemplate.data'
import * as InspectionJobPackageApi from '@/api/qms/inspectionJob/InspectionJobPackage/InspectionJobPackage' import * as InspectionJobPackageApi from '@/api/qms/inspectionJob/InspectionJobPackage/InspectionJobPackage'
import * as InspectionJobMainApi from '@/api/qms/inspectionJob/inspectionJobMain' import * as InspectionJobMainApi from '@/api/qms/inspectionJob/inspectionJobMain'

0
src/views/qms/inspection/inspectionJob/inspectionJobMain.data.ts → src/views/qms/inspectionJob/inspectionJobMain.data.ts

0
src/views/qms/inspection/inspectionRecord/addForm.vue → src/views/qms/inspectionRecord/addForm.vue

0
src/views/qms/inspection/inspectionRecord/detail.vue → src/views/qms/inspectionRecord/detail.vue

0
src/views/qms/inspection/inspectionRecord/index.vue → src/views/qms/inspectionRecord/index.vue

0
src/views/qms/inspection/inspectionRecord/inspectionRecordMain.data.ts → src/views/qms/inspectionRecord/inspectionRecordMain.data.ts

0
src/views/qms/inspection/inspectionRequest/index.vue → src/views/qms/inspectionRequest/index.vue

0
src/views/qms/inspection/inspectionRequest/inspectionRequestMain.data.ts → src/views/qms/inspectionRequest/inspectionRequestMain.data.ts

6
src/views/qms/basicDataManage/inspectionScheme/addForm.vue → src/views/qms/inspectionScheme/addForm.vue

@ -637,7 +637,7 @@ import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
import * as InspectionProcessPageApi from '@/api/qms/inspectionTemplate' import * as InspectionProcessPageApi from '@/api/qms/inspectionTemplate'
import { SearchTable } from '@/components/SearchTable' import { SearchTable } from '@/components/SearchTable'
import { SamplingProcess } from '@/views/qms/samplingProcess/samplingProcess.data' import { SamplingProcess } from '@/views/qms/samplingProcess/samplingProcess.data'
import { InspectionTemplateMain } from '@/views/qms/basicDataManage/inspectionTemplate/inspectionTemplate.data' import { InspectionTemplateMain } from '@/views/qms/inspectionTemplate/inspectionTemplate.data'
import * as InspectionTemplateApi from '@/api/qms/inspectionTemplate' import * as InspectionTemplateApi from '@/api/qms/inspectionTemplate'
import { Itembasic } from '@/views/wms/basicDataManage/itemManage/itembasic/itembasic.data' import { Itembasic } from '@/views/wms/basicDataManage/itemManage/itembasic/itembasic.data'
import * as ItemBasicApi from '@/api/wms/itembasic' import * as ItemBasicApi from '@/api/wms/itembasic'
@ -645,9 +645,9 @@ import * as SamplingProcessApi from '@/api/qms/samplingProcess' //采样过程
import * as InspectionMethodApi from '@/api/qms/inspectionMethod' // import * as InspectionMethodApi from '@/api/qms/inspectionMethod' //
import { InspectionMethod } from '@/views/qms/inspectionMethod/inspectionMethod.data' // import { InspectionMethod } from '@/views/qms/inspectionMethod/inspectionMethod.data' //
import * as DynamicRuleApi from '@/api/qms/dynamicRule' // import * as DynamicRuleApi from '@/api/qms/dynamicRule' //
import { DynamicRule } from '@/views/qms/basicDataManage/dynamicRule/dynamicRule.data' // import { DynamicRule } from '@/views/qms/dynamicRule/dynamicRule.data' //
import * as SelectedSetApi from '@/api/qms/selectedSet' // import * as SelectedSetApi from '@/api/qms/selectedSet' //
import { SelectedSet } from '@/views/qms/basicDataManage/selectedSet/selectedSet.data' // import { SelectedSet } from '@/views/qms/selectedSet/selectedSet.data' //
import {validateTwoNum} from '@/utils/validator' import {validateTwoNum} from '@/utils/validator'
const message = useMessage() // const message = useMessage() //

0
src/views/qms/basicDataManage/inspectionScheme/index.vue → src/views/qms/inspectionScheme/index.vue

0
src/views/qms/basicDataManage/inspectionScheme/inspectionScheme.data.ts → src/views/qms/inspectionScheme/inspectionScheme.data.ts

0
src/views/qms/basicDataManage/inspectionStage/index.vue → src/views/qms/inspectionStage/index.vue

0
src/views/qms/basicDataManage/inspectionStage/inspectionStage.data.ts → src/views/qms/inspectionStage/inspectionStage.data.ts

4
src/views/qms/basicDataManage/inspectionTemplate/addForm.vue → src/views/qms/inspectionTemplate/addForm.vue

@ -431,9 +431,9 @@ import * as SamplingProcessApi from '@/api/qms/samplingProcess' //采样过程
import * as InspectionMethodApi from '@/api/qms/inspectionMethod' // import * as InspectionMethodApi from '@/api/qms/inspectionMethod' //
import { InspectionMethod } from '@/views/qms/inspectionMethod/inspectionMethod.data' // import { InspectionMethod } from '@/views/qms/inspectionMethod/inspectionMethod.data' //
import * as DynamicRuleApi from '@/api/qms/dynamicRule' // import * as DynamicRuleApi from '@/api/qms/dynamicRule' //
import { DynamicRule } from '@/views/qms/basicDataManage/dynamicRule/dynamicRule.data' // import { DynamicRule } from '@/views/qms/dynamicRule/dynamicRule.data' //
import * as SelectedSetApi from '@/api/qms/selectedSet' // import * as SelectedSetApi from '@/api/qms/selectedSet' //
import { SelectedSet } from '@/views/qms/basicDataManage/selectedSet/selectedSet.data' // import { SelectedSet } from '@/views/qms/selectedSet/selectedSet.data' //
import { validateInteger,validateTwoNum,validateMaxNumber5,validateNumSix } from '@/utils/validator' import { validateInteger,validateTwoNum,validateMaxNumber5,validateNumSix } from '@/utils/validator'
const message = useMessage() // const message = useMessage() //

0
src/views/qms/basicDataManage/inspectionTemplate/index.vue → src/views/qms/inspectionTemplate/index.vue

0
src/views/qms/basicDataManage/inspectionTemplate/inspectionTemplate.data.ts → src/views/qms/inspectionTemplate/inspectionTemplate.data.ts

0
src/views/qms/basicDataManage/selectedProject/index.vue → src/views/qms/selectedProject/index.vue

0
src/views/qms/basicDataManage/selectedProject/selectedProject.data.ts → src/views/qms/selectedProject/selectedProject.data.ts

0
src/views/qms/basicDataManage/selectedSet/index.vue → src/views/qms/selectedSet/index.vue

0
src/views/qms/basicDataManage/selectedSet/selectedSet.data.ts → src/views/qms/selectedSet/selectedSet.data.ts

7
src/views/system/user/UserAssignRoleForm.vue

@ -1,13 +1,13 @@
<template> <template>
<Dialog v-model="dialogVisible" title="分配角色"> <Dialog v-model="dialogVisible" title="分配角色">
<el-form ref="formRef" v-loading="formLoading" :model="formData" label-width="80px"> <el-form ref="formRef" v-loading="formLoading" :model="formData" :rules="formRules" label-width="80px">
<el-form-item label="用户名称"> <el-form-item label="用户名称">
<el-input v-model="formData.username" :disabled="true" /> <el-input v-model="formData.username" :disabled="true" />
</el-form-item> </el-form-item>
<el-form-item label="用户昵称"> <el-form-item label="用户昵称">
<el-input v-model="formData.nickname" :disabled="true" /> <el-input v-model="formData.nickname" :disabled="true" />
</el-form-item> </el-form-item>
<el-form-item label="角色"> <el-form-item label="角色" prop="roleIds">
<el-select v-model="formData.roleIds" multiple placeholder="请选择角色"> <el-select v-model="formData.roleIds" multiple placeholder="请选择角色">
<el-option v-for="item in roleList" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in roleList" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
@ -37,6 +37,9 @@ const formData = ref({
username: '', username: '',
roleIds: [] roleIds: []
}) })
const formRules = reactive({
roleIds: [{ required: true, message:'请选择角色', trigger: 'change' }]
})
const formRef = ref() // Ref const formRef = ref() // Ref
const roleList = ref([]) // const roleList = ref([]) //

4
src/views/wms/basicDataManage/itemManage/packageunit/packageunit.data.ts

@ -144,7 +144,7 @@ export const Packageunit = useCrudSchemas(reactive<CrudSchema[]>([
isSearch: false, isSearch: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'FALSE',
componentProps: { componentProps: {
inactiveValue: 'FALSE', inactiveValue: 'FALSE',
activeValue: 'TRUE' activeValue: 'TRUE'
@ -435,7 +435,7 @@ export const PackageunitCopy = useCrudSchemas(reactive<CrudSchema[]>([
isSearch: false, isSearch: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'FALSE',
componentProps: { componentProps: {
inactiveValue: 'FALSE', inactiveValue: 'FALSE',
activeValue: 'TRUE' activeValue: 'TRUE'

233
src/views/wms/basicDataManage/itemManage/relegateRequest/index.vue

@ -0,0 +1,233 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<Search :schema="RelegateRequest.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
</ContentWrap>
<!-- 列表头部 -->
<TableHead
:HeadButttondata="HeadButttondata"
@button-base-click="buttonBaseClick"
:routeName="routeName"
@updataTableColumns="updataTableColumns"
@searchFormClick="searchFormClick"
:allSchemas="RelegateRequest.allSchemas"
/>
<!-- 列表 -->
<ContentWrap>
<Table
:columns="tableColumns"
:data="tableObject.tableList"
:loading="tableObject.loading"
:pagination="{
total: tableObject.total
}"
v-model:pageSize="tableObject.pageSize"
v-model:currentPage="tableObject.currentPage"
v-model:sort="tableObject.sort"
>
<template #code="{row}">
<el-button type="primary" link @click="openDetail(row, '代码', row.code)">
<span>{{ row.code }}</span>
</el-button>
</template>
<template #action="{ row }">
<ButtonBase :Butttondata="butttondata" @button-base-click="buttonTableClick($event,row)" />
</template>
</Table>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<BasicForm
ref="basicFormRef"
@success="formsSuccess"
:rules="RelegateRequestRules"
:formAllSchemas="RelegateRequest.allSchemas"
:apiUpdate="RelegateRequestApi.updateRelegateRequest"
:apiCreate="RelegateRequestApi.createRelegateRequest"
@searchTableSuccess="searchTableSuccess"
:isBusiness="false"
/>
<!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="RelegateRequest.allSchemas" />
<!-- 导入 -->
<ImportForm ref="importFormRef" url="/wms/relegate-request/import" :importTemplateData="importTemplateData" @success="importSuccess" />
</template>
<script setup lang="ts">
import download from '@/utils/download'
import { RelegateRequest,RelegateRequestRules } from './relegateRequest.data'
import * as RelegateRequestApi from '@/api/wms/relegateRequest'
import * as defaultButtons from '@/utils/disposition/defaultButtons'
import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
import Detail from '@/components/Detail/src/Detail.vue'
defineOptions({ name: 'RelegateRequest' })
const message = useMessage() //
const { t } = useI18n() //
const route = useRoute() //
const routeName = ref()
routeName.value = route.name
const tableColumns = ref(RelegateRequest.allSchemas.tableColumns)
//
const searchTableSuccess = (formField, searchField, val, formRef) => {
nextTick(() => {
const setV = {}
setV[formField] = val[0][searchField]
formRef.setValues(setV)
})
}
//
const updataTableColumns = (val) => {
tableColumns.value = val
}
const { tableObject, tableMethods } = useTable({
getListApi: RelegateRequestApi.getRelegateRequestPage //
})
//
const { getList, setSearchParams } = tableMethods
//
const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'wms:relegate-request:create'}), //
defaultButtons.defaultImportBtn({hasPermi:'wms:relegate-request:import'}), //
defaultButtons.defaultExportBtn({hasPermi:'wms:relegate-request:export'}), //
defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), //
// {
// label: '',
// name: 'zdy',
// hide: false,
// type: 'primary',
// icon: 'Select',
// color: ''
// },
]
//
const buttonBaseClick = (val, item) => {
if (val == 'add') { //
openForm('create')
} else if (val == 'import') { //
handleImport()
} else if (val == 'export') { //
handleExport()
} else if (val == 'refresh') { //
getList()
} else if (val == 'filtrate') { //
} else { //
console.log('其他按钮', item)
}
}
// -
const butttondata = [
defaultButtons.mainListEditBtn({hasPermi:'wms:relegate-request:update'}), //
defaultButtons.mainListDeleteBtn({hasPermi:'wms:relegate-request:delete'}), //
]
// -
const buttonTableClick = async (val, row) => {
if (val == 'edit') { //
openForm('update', row)
} else if (val == 'delete') { //
handleDelete(row.id)
}
}
/** 添加/修改操作 */
const basicFormRef = ref()
const openForm = (type: string, row?: any) => {
basicFormRef.value.open(type, row)
}
// form
const formsSuccess = async (formType,data) => {
if (formType === 'create') {
await RelegateRequestApi.createRelegateRequest(data)
message.success(t('common.createSuccess'))
} else {
await RelegateRequestApi.updateRelegateRequest(data)
message.success(t('common.updateSuccess'))
}
basicFormRef.value.dialogVisible = false
getList()
}
/** 详情操作 */
const detailRef = ref()
const openDetail = (row: any, titleName: any, titleValue: any) => {
detailRef.value.openDetail(row, titleName, titleValue, 'basicRelegateRequest')
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await RelegateRequestApi.deleteRelegateRequest(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const exportLoading = ref(false) //
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await RelegateRequestApi.exportRelegateRequest(tableObject.params)
download.excel(data, '物料降级信息.xlsx')
} catch {
} finally {
exportLoading.value = false
}
}
/** 导入 */
const importFormRef = ref()
const handleImport = () => {
importFormRef.value.open()
}
//
const importTemplateData = reactive({
templateUrl: '',
templateTitle: '物料降级信息导入模版.xlsx'
})
//
const importSuccess = () => {
getList()
}
//
const searchFormClick = (searchData) => {
tableObject.params = {
isSearch: true,
filters: searchData.filters
}
getList() //
}
/** 初始化 **/
onMounted(async () => {
getList()
importTemplateData.templateUrl = await RelegateRequestApi.importTemplate()
})
</script>

243
src/views/wms/basicDataManage/itemManage/relegateRequest/relegateRequest.data.ts

@ -0,0 +1,243 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime'
import * as ItembasicApi from '@/api/wms/itembasic'
import { Itembasic } from '@/views/wms/basicDataManage/itemManage/itembasic/itembasic.data'
// 表单校验
export const RelegateRequestRules = reactive({
itemCode: [required],
downItemCode: [required],
businessType: [required],
available: [required],
departmentCode: [required],
concurrencyStamp: [required],
})
export const RelegateRequest = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '单据号',
field: 'number',
sort: 'custom',
isSearch: true,
},
{
label: '物料代码',
field: 'itemCode',
sort: 'custom',
isSearch: true,
form: {
componentProps: {
isSearchList: true,
searchListPlaceholder: '请选择物料代码',
searchField: 'itemCode',
searchTitle: '客户物料基础信息',
searchAllSchemas: Itembasic.allSchemas,
searchPage: ItembasicApi.getItembasicPage,
searchCondition: [{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '降级后物料代码',
field: 'downItemCode',
sort: 'custom',
isSearch: true,
},
{
label: '计量单位',
field: 'uom',
sort: 'custom',
form: {
componentProps: {
disabled: true,
}
},
},
{
label: '数量',
field: 'qty',
sort: 'custom',
},
{
label: '从批次',
field: 'fromBatch',
sort: 'custom',
form: {
componentProps: {
disabled: true,
}
},
},
{
label: '从包装号',
field: 'fromPackingNumber',
sort: 'custom',
form: {
componentProps: {
disabled: true,
}
},
},
{
label: '从库位代码',
field: 'fromLocationCode',
sort: 'custom',
form: {
componentProps: {
disabled: true,
}
},
},
{
label: '从库区类型',
field: 'fromAreaTypes',
sort: 'custom',
isForm:false,
},
{
label: '从库区代码',
field: 'fromAreaCodes',
sort: 'custom',
isForm:false,
},
{
label: '从仓库代码',
field: 'fromWarehouseCode',
sort: 'custom',
isForm:false,
},
{
label: '到包装号',
field: 'toPackingNumber',
sort: 'custom',
},
{
label: '到批次',
field: 'toBatch',
sort: 'custom',
},
{
label: '到库位代码',
field: 'toLocationCode',
sort: 'custom',
},
{
label: '到仓库代码',
field: 'toWarehouseCode',
sort: 'custom',
isForm:false,
},
{
label: '到库区类型',
field: 'toAreaTypes',
sort: 'custom',
isForm:false,
},
{
label: '到库区代码',
field: 'toAreaCodes',
sort: 'custom',
isForm:false,
},
{
label: '是否可用',
field: 'available',
sort: 'custom',
isForm:false,
},
{
label: '备注',
field: 'remark',
sort: 'custom',
},
{
label: '部门',
field: 'departmentCode',
sort: 'custom',
isForm:false,
},
{
label: '地点ID',
field: 'siteId',
sort: 'custom',
form: {
component: 'InputNumber',
value: 0
},
isForm:false,
},
{
label: '扩展属性',
field: 'extraProperties',
sort: 'custom',
isForm:false,
},
{
label: '创建时间',
field: 'createTime',
sort: 'custom',
formatter: dateFormatter,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
isForm: false,
},
{
label: '状态',
field: 'status',
dictType: DICT_TYPE.REQUEST_STATUS,
dictClass: 'string',
isSearch: true,
isForm: false,
isTable: true,
sort: 'custom',
table: {
width: 150
},
},
{
label: '并发乐观锁',
field: 'concurrencyStamp',
sort: 'custom',
isForm:false,
form: {
component: 'InputNumber',
value: 0
},
},
{
label: '工作流流水号',
field: 'serialNumber',
isForm:false,
sort: 'custom',
},
{
label: '权限所属人员id',
field: 'ruleUserId',
sort: 'custom',
isForm:false,
form: {
component: 'InputNumber',
value: 0
},
},
{
label: '操作',
field: 'action',
isForm: false,
table: {
width: 150,
fixed: 'right'
}
}
]))

8
src/views/wms/basicDataManage/supplierManage/purchaseprice/index.vue

@ -28,7 +28,7 @@
v-model:sort="tableObject.sort" v-model:sort="tableObject.sort"
> >
<template #supplierCode="{row}"> <template #supplierCode="{row}">
<el-button type="primary" link @click="openDetail(row, '供应商代码', row.supplierCode)"> <el-button type="primary" link @click="openDetail(row, t('ts.供应商代码'), row.supplierCode)">
<span>{{ row.supplierCode }}</span> <span>{{ row.supplierCode }}</span>
</el-button> </el-button>
</template> </template>
@ -183,7 +183,7 @@ const formsSuccess = async (formType,data) => {
}); });
if(isHave){ if(isHave){
if(data.activeTime && data.expireTime && data.activeTime >=data.expireTime){ if(data.activeTime && data.expireTime && data.activeTime >=data.expireTime){
message.error('失效时间要大于生效时间') message.error(t('ts.失效时间要大于生效时间'))
return; return;
} }
} }
@ -239,7 +239,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await PurchasepriceApi.exportPurchaseprice(tableObject.params) const data = await PurchasepriceApi.exportPurchaseprice(tableObject.params)
download.excel(data, '采购价格单.xlsx') download.excel(data, `${t('ts.采购价格单')}.xlsx`)
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false
@ -254,7 +254,7 @@ const handleImport = () => {
// //
const importTemplateData = reactive({ const importTemplateData = reactive({
templateUrl: '', templateUrl: '',
templateTitle: '采购价格单导入模版.xlsx' templateTitle: `${t('ts.采购价格单导入模版')}.xlsx`
}) })
// //
const importSuccess = () => { const importSuccess = () => {

6
src/views/wms/basicDataManage/supplierManage/supplier/index.vue

@ -174,7 +174,7 @@ const formsSuccess = async (formType, data) => {
}) })
if (isHave) { if (isHave) {
if (data.activeTime && data.expireTime && data.activeTime >= data.expireTime) { if (data.activeTime && data.expireTime && data.activeTime >= data.expireTime) {
message.error('失效时间要大于生效时间') message.error(t('ts.失效时间要大于生效时间'))
return return
} }
} }
@ -221,7 +221,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await SupplierApi.exportSupplier(tableObject.params) const data = await SupplierApi.exportSupplier(tableObject.params)
download.excel(data, '供应商.xlsx') download.excel(data, `${t('ts.供应商')}.xlsx`)
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false
@ -236,7 +236,7 @@ const handleImport = () => {
// //
const importTemplateData = reactive({ const importTemplateData = reactive({
templateUrl: '', templateUrl: '',
templateTitle: '供应商导入模版.xlsx' templateTitle: `${t('ts.供应商导入模版')}.xlsx`
}) })
// //
const importSuccess = () => { const importSuccess = () => {

8
src/views/wms/basicDataManage/supplierManage/supplieritem/index.vue

@ -28,7 +28,7 @@
v-model:sort="tableObject.sort" v-model:sort="tableObject.sort"
> >
<template #supplierCode="{row}"> <template #supplierCode="{row}">
<el-button type="primary" link @click="openDetail(row, '供应商代码', row.supplierCode)"> <el-button type="primary" link @click="openDetail(row, t('ts.供应商代码'), row.supplierCode)">
<span>{{ row.supplierCode }}</span> <span>{{ row.supplierCode }}</span>
</el-button> </el-button>
</template> </template>
@ -182,7 +182,7 @@ const formsSuccess = async (formType,data) => {
}); });
if(isHave){ if(isHave){
if(data.activeTime && data.expireTime && data.activeTime >=data.expireTime){ if(data.activeTime && data.expireTime && data.activeTime >=data.expireTime){
message.error('失效时间要大于生效时间') message.error(t('ts.失效时间要大于生效时间'))
return; return;
} }
} }
@ -238,7 +238,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await SupplieritemApi.exportSupplieritem(tableObject.params) const data = await SupplieritemApi.exportSupplieritem(tableObject.params)
download.excel(data, '供应商物料.xlsx') download.excel(data, `${t('ts.供应商物料')}.xlsx`)
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false
@ -253,7 +253,7 @@ const handleImport = () => {
// //
const importTemplateData = reactive({ const importTemplateData = reactive({
templateUrl: '', templateUrl: '',
templateTitle: '供应商物料导入模版.xlsx' templateTitle: `${t('ts.供应商物料导入模版')}.xlsx`
}) })
// //
const importSuccess = () => { const importSuccess = () => {

26
src/views/wms/deliversettlementManage/deliverplan/saleMain/saleMain.data.ts

@ -4,6 +4,9 @@ import { dateFormatter,dateFormatter2 } from '@/utils/formatTime'
import * as CustomerApi from '@/api/wms/customer' import * as CustomerApi from '@/api/wms/customer'
import { Customer } from '@/views/wms/basicDataManage/customerManage/customer/customer.data' import { Customer } from '@/views/wms/basicDataManage/customerManage/customer/customer.data'
import * as PackageunitApi from '@/api/wms/packageunit'
import { Packageunit } from '@/views/wms/basicDataManage/itemManage/packageunit/packageunit.data'
import * as ItembasicApi from '@/api/wms/itembasic' import * as ItembasicApi from '@/api/wms/itembasic'
import { Itembasic } from '@/views/wms/basicDataManage/itemManage/itembasic/itembasic.data' import { Itembasic } from '@/views/wms/basicDataManage/itemManage/itembasic/itembasic.data'
@ -357,15 +360,28 @@ export const SaleDetail = useCrudSchemas(reactive<CrudSchema[]>([
{ {
label: '包装规格', label: '包装规格',
field: 'packUnit', field: 'packUnit',
// dictType: DICT_TYPE.PACK_UNIT,
// dictClass: 'string',
isTable: true,
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 150
}, },
tableForm: { tableForm:{
type: 'Select' isInpuFocusShow: true, // 开启查询弹窗
searchListPlaceholder: '请选择包装规格代码',
searchField: 'code',
searchTitle: '包装规格信息',
searchAllSchemas: Packageunit.allSchemas, // 查询弹窗所需类
searchPage: PackageunitApi.getPackageunitPage, // 查询弹窗所需分页方法
},
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择包装规格代码', // 输入框占位文本
searchField: 'code', // 查询弹窗赋值字段
searchTitle: '包装规格信息', // 查询弹窗标题
searchAllSchemas: Packageunit.allSchemas, // 查询弹窗所需类
searchPage: PackageunitApi.getPackageunitPage, // 查询弹窗所需分页方法
}
} }
}, },
{ {

224
src/views/wms/deliversettlementManage/saleShipmentMainRecord/index.vue

@ -0,0 +1,224 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<Search :schema="SaleShipmentMainRecord.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
</ContentWrap>
<!-- 列表头部 -->
<TableHead
:HeadButttondata="HeadButttondata"
@button-base-click="buttonBaseClick"
:routeName="routeName"
@updataTableColumns="updataTableColumns"
@searchFormClick="searchFormClick"
:allSchemas="SaleShipmentMainRecord.allSchemas"
/>
<!-- 列表 -->
<ContentWrap>
<Table
:columns="tableColumns"
:data="tableObject.tableList"
:loading="tableObject.loading"
:pagination="{
total: tableObject.total
}"
v-model:pageSize="tableObject.pageSize"
v-model:currentPage="tableObject.currentPage"
v-model:sort="tableObject.sort"
>
<template #code="{row}">
<el-button type="primary" link @click="openDetail(row, '代码', row.code)">
<span>{{ row.code }}</span>
</el-button>
</template>
<template #action="{ row }">
<ButtonBase :Butttondata="butttondata" @button-base-click="buttonTableClick($event,row)" />
</template>
</Table>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<BasicForm
ref="basicFormRef"
@success="formsSuccess"
:rules="SaleShipmentMainRecordRules"
:formAllSchemas="SaleShipmentMainRecord.allSchemas"
:apiUpdate="SaleShipmentMainRecordApi.updateSaleShipmentMainRecord"
:apiCreate="SaleShipmentMainRecordApi.createSaleShipmentMainRecord"
@searchTableSuccess="searchTableSuccess"
:isBusiness="false"
/>
<!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="SaleShipmentMainRecord.allSchemas" />
<!-- 导入 -->
</template>
<script setup lang="ts">
import download from '@/utils/download'
import { SaleShipmentMainRecord,SaleShipmentMainRecordRules } from './saleShipmentMainRecord.data'
import * as SaleShipmentMainRecordApi from '@/api/wms/saleShipmentMainRecord'
import * as defaultButtons from '@/utils/disposition/defaultButtons'
import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
import Detail from '@/components/Detail/src/Detail.vue'
defineOptions({ name: 'SaleShipmentMainRecord' })
const message = useMessage() //
const { t } = useI18n() //
const route = useRoute() //
const routeName = ref()
routeName.value = route.name
const tableColumns = ref(SaleShipmentMainRecord.allSchemas.tableColumns)
//
const searchTableSuccess = (formField, searchField, val, formRef) => {
nextTick(() => {
const setV = {}
setV[formField] = val[0][searchField]
formRef.setValues(setV)
})
}
//
const updataTableColumns = (val) => {
tableColumns.value = val
}
const { tableObject, tableMethods } = useTable({
getListApi: SaleShipmentMainRecordApi.getSaleShipmentMainRecordPage //
})
//
const { getList, setSearchParams } = tableMethods
//
const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'wms:saleShipmentMainRecord:create'}), //
defaultButtons.defaultExportBtn({hasPermi:'wms:saleShipmentMainRecord:export'}), //
defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), //
// {
// label: '',
// name: 'zdy',
// hide: false,
// type: 'primary',
// icon: 'Select',
// color: ''
// },
]
//
const buttonBaseClick = (val, item) => {
if (val == 'add') { //
openForm('create')
} else if (val == 'export') { //
handleExport()
} else if (val == 'refresh') { //
getList()
} else if (val == 'filtrate') { //
} else { //
console.log('其他按钮', item)
}
}
// -
const butttondata = [
defaultButtons.mainListEditBtn({hasPermi:'wms:saleShipmentMainRecord:update'}), //
defaultButtons.mainListDeleteBtn({hasPermi:'wms:saleShipmentMainRecord:delete'}), //
]
// -
const buttonTableClick = async (val, row) => {
if (val == 'edit') { //
openForm('update', row)
} else if (val == 'delete') { //
handleDelete(row.id)
}
}
/** 添加/修改操作 */
const basicFormRef = ref()
const openForm = (type: string, row?: any) => {
basicFormRef.value.open(type, row)
}
// form
const formsSuccess = async (formType,data) => {
var isHave =SaleShipmentMainRecord.allSchemas.formSchema.some(function (item) {
return item.field === 'activeTime' || item.field === 'expireTime';
});
if(isHave){
if(data.activeTime && data.expireTime && data.activeTime >=data.expireTime){
message.error('失效时间要大于生效时间')
return;
}
}
if(data.activeTime==0)data.activeTime = null;
if(data.expireTime==0)data.expireTime = null;
if (formType === 'create') {
await SaleShipmentMainRecordApi.createSaleShipmentMainRecord(data)
message.success(t('common.createSuccess'))
} else {
await SaleShipmentMainRecordApi.updateSaleShipmentMainRecord(data)
message.success(t('common.updateSuccess'))
}
basicFormRef.value.dialogVisible = false
getList()
}
/** 详情操作 */
const detailRef = ref()
const openDetail = (row: any, titleName: any, titleValue: any) => {
detailRef.value.openDetail(row, titleName, titleValue, 'basicSaleShipmentMainRecord')
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await SaleShipmentMainRecordApi.deleteSaleShipmentMainRecord(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const exportLoading = ref(false) //
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await SaleShipmentMainRecordApi.exportSaleShipmentMainRecord(tableObject.params)
download.excel(data, '销售发运记录主.xlsx')
} catch {
} finally {
exportLoading.value = false
}
}
//
const searchFormClick = (searchData) => {
tableObject.params = {
isSearch: true,
filters: searchData.filters
}
getList() //
}
/** 初始化 **/
onMounted(async () => {
getList()
})
</script>

278
src/views/wms/deliversettlementManage/saleShipmentMainRecord/saleShipmentMainRecord.data.ts

@ -0,0 +1,278 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime'
// 表单校验
export const SaleShipmentMainRecordRules = reactive({
})
export const SaleShipmentMainRecord = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '单据号',
field: 'number',
sort: 'custom',
isSearch: true,
},
{
label: '申请单号',
field: 'requestNumber',
sort: 'custom',
isSearch: true,
},
{
label: '客户代码',
field: 'customerCode',
sort: 'custom',
isSearch: true,
},
{
label: '发票时间',
field: 'invoiceTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
valueFormat: 'x'
}
},
},
{
label: '执行时间',
field: 'executeTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
valueFormat: 'x'
}
},
},
{
label: '是否可用',
field: 'available',
sort: 'custom',
isSearch: true,
},
{
label: '部门',
field: 'departmentCode',
sort: 'custom',
isSearch: true,
},
{
label: '业务类型',
field: 'businessType',
sort: 'custom',
isSearch: true,
},
{
label: '创建时间',
field: 'createTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
isForm: false,
},
{
label: '地点ID',
field: 'siteId',
sort: 'custom',
isSearch: true,
},
{
label: '操作',
field: 'action',
isForm: false,
table: {
width: 150,
fixed: 'right'
}
}
]))
// 表单校验
export const SaleShipmentDetailRecordRules = reactive({
})
export const SaleShipmentDetailRecord = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '单据号',
field: 'number',
sort: 'custom',
isSearch: true,
},
{
label: '销售订单号',
field: 'soNumber',
sort: 'custom',
isSearch: true,
},
{
label: '销售订单行',
field: 'soLine',
sort: 'custom',
isSearch: true,
},
{
label: '从货主代码',
field: 'fromOwnerCode',
sort: 'custom',
isSearch: true,
},
{
label: '包装号',
field: 'packingNumber',
sort: 'custom',
isSearch: true,
},
{
label: '批次',
field: 'batch',
sort: 'custom',
isSearch: true,
},
{
label: '库存状态',
field: 'inventoryStatus',
sort: 'custom',
isSearch: true,
form: {
component: 'Radio'
},
},
{
label: '从库位代码',
field: 'fromLocationCode',
sort: 'custom',
isSearch: true,
},
{
label: '主表ID',
field: 'masterId',
sort: 'custom',
isSearch: true,
form: {
component: 'InputNumber',
value: 0
},
},
{
label: '物品代码',
field: 'itemCode',
sort: 'custom',
isSearch: true,
},
{
label: '物品名称',
field: 'itemName',
sort: 'custom',
isSearch: true,
},
{
label: '物品描述1',
field: 'itemDesc1',
sort: 'custom',
isSearch: true,
},
{
label: '物品描述2',
field: 'itemDesc2',
sort: 'custom',
isSearch: true,
},
{
label: '项目代码',
field: 'projectCode',
sort: 'custom',
isSearch: true,
},
{
label: '数量',
field: 'qty',
sort: 'custom',
isSearch: true,
},
{
label: '计量单位',
field: 'uom',
sort: 'custom',
isSearch: true,
},
{
label: '备注',
field: 'remark',
sort: 'custom',
isSearch: true,
},
{
label: '创建时间',
field: 'createTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
isForm: false,
},
{
label: '并发乐观锁',
field: 'concurrencyStamp',
sort: 'custom',
isSearch: true,
},
{
label: '地点ID',
field: 'siteId',
sort: 'custom',
isSearch: true,
form: {
component: 'InputNumber',
value: 0
},
},
{
label: '操作',
field: 'action',
isForm: false,
table: {
width: 150,
fixed: 'right'
}
}
]))

75
src/views/wms/deliversettlementManage/saleShipmentMainRequest/index.vue

@ -1,7 +1,7 @@
<template> <template>
<ContentWrap> <ContentWrap>
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<Search :schema="SaleShipmentMain.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" /> <Search :schema="[...SaleShipmentMain.allSchemas.searchSchema,...SaleShipmentDetail.allSchemas.searchSchema]" @search="setSearchParams" @reset="setSearchParams" />
</ContentWrap> </ContentWrap>
<!-- 列表头部 --> <!-- 列表头部 -->
@ -33,8 +33,8 @@
<span>{{ row.number }}</span> <span>{{ row.number }}</span>
</el-button> </el-button>
</template> </template>
<template #action="{ row }"> <template #action="{ row,$index }">
<ButtonBase :Butttondata="butttondata" @button-base-click="buttonTableClick($event,row)" /> <ButtonBase :Butttondata="butttondata(row,$index)" @button-base-click="buttonTableClick($event,row)" />
</template> </template>
</Table> </Table>
</ContentWrap> </ContentWrap>
@ -43,7 +43,7 @@
<BasicForm <BasicForm
ref="basicFormRef" ref="basicFormRef"
:isOpenSearchTable="true" :isOpenSearchTable="true"
fieldTableColumn="itemCode" fieldTableColumn="soLine"
@success="getList" @success="getList"
:rules="SaleShipmentMainRules" :rules="SaleShipmentMainRules"
:formAllSchemas="SaleShipmentMain.allSchemas" :formAllSchemas="SaleShipmentMain.allSchemas"
@ -79,7 +79,7 @@
/> />
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/wms/sale-shipment-main/import" :importTemplateData="importTemplateData" @success="importSuccess" /> <ImportForm ref="importFormRef" url="/wms/sale-shipment-main-request/import" :importTemplateData="importTemplateData" @success="importSuccess" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -99,21 +99,29 @@ const { t } = useI18n() // 国际化
const route = useRoute() // const route = useRoute() //
const routeName = ref() const routeName = ref()
routeName.value = route.name routeName.value = route.name
const tableColumns = ref(SaleShipmentMain.allSchemas.tableColumns) const tableColumns = ref([...SaleShipmentMain.allSchemas.tableColumns,...SaleShipmentDetail.allSchemas.tableMainColumns])
// // // //
const trueFalse = ref(false) const trueFalse = ref(false)
// //
const searchTableSuccess = (formField, searchField, val, formRef) => { const searchTableSuccess = (formField, searchField, val, formRef, type, row ) => {
nextTick(() => { nextTick(() => {
const setV = {} if (type == 'tableForm') {
row['soLine'] = val[0]['lineNumber']
row['soNumber'] = val[0]['number']
row['itemCode'] = val[0]['itemCode']
row['projectCode'] = val[0]['projectCode']
row['uom'] = val[0]['uom']
}else {
const setV = {}
if(formField == 'CustomerCode') { if(formField == 'CustomerCode') {
setV['CustomerCode'] = val[0]['CustomerCode'] setV['CustomerCode'] = val[0]['CustomerCode']
} else { } else {
setV[formField] = val[0][searchField] setV[formField] = val[0][searchField]
} }
formRef.setValues(setV) formRef.setValues(setV)
}
}) })
} }
@ -121,7 +129,15 @@ const searchTableSuccess = (formField, searchField, val, formRef) => {
const searchTableSuccessDetail = (formField, searchField, val, formRef ) => { const searchTableSuccessDetail = (formField, searchField, val, formRef ) => {
nextTick(() => { nextTick(() => {
const setV = {} const setV = {}
setV[formField] = val[0][searchField] if(formField == 'soLine') {
setV['soLine'] = val[0]['lineNumber']
setV['soNumber'] = val[0]['number']
setV['itemCode'] = val[0]['itemCode']
setV['projectCode'] = val[0]['projectCode']
setV['uom'] = val[0]['uom']
}else {
setV[formField] = val[0][searchField]
}
formRef.setValues(setV) formRef.setValues(setV)
}) })
} }
@ -134,7 +150,7 @@ const updataTableColumns = (val) => {
} }
const { tableObject, tableMethods } = useTable({ const { tableObject, tableMethods } = useTable({
getListApi: SaleShipmentMainApi.getSaleShipmentMainPage // getListApi: SaleShipmentDetailApi.getSaleShipmentDetailPage //
}) })
// //
@ -180,12 +196,34 @@ const buttonBaseClick = (val, item) => {
} }
} }
//
const isShowMainButton = (row,val) => {
if (val.indexOf(row.status) > -1) {
return false
} else {
return true
}
}
// - // -
const butttondata = [ const butttondata = (row,$index) => {
const findIndex = row['masterId']?tableObject.tableList.findIndex(item=>item['masterId'] == row['masterId']):-1
if(findIndex>0&&findIndex<$index){
return []
}
return [
defaultButtons.mainListEditBtn({hasPermi:'wms:sale-shipment-main-request:update'}), // defaultButtons.mainListEditBtn({hasPermi:'wms:sale-shipment-main-request:update'}), //
defaultButtons.mainListCloseBtn({hide:isShowMainButton(row,['1','2','3','4','6']),hasPermi:'wms:sale-shipment-main-request:close'}), //
defaultButtons.mainListReAddBtn({hide:isShowMainButton(row,['4','5']),hasPermi:'wms:sale-shipment-main-request:reAdd'}), //
defaultButtons.mainListSubmitBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:sale-shipment-main-request:submit'}), //
defaultButtons.mainListTurnDownBtn({hide:isShowMainButton(row,['2']),hasPermi:'wms:sale-shipment-main-request:refused'}), //
defaultButtons.mainListApproveBtn({hide:isShowMainButton(row,['2']),hasPermi:'wms:sale-shipment-main-request:agree'}), //
defaultButtons.mainListHandleBtn({hide:isShowMainButton(row,['3']),hasPermi:'wms:sale-shipment-main-request:handle'}), //
defaultButtons.mainListEditBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:sale-shipment-main-request:update'}), //
defaultButtons.mainListDeleteBtn({hasPermi:'wms:sale-shipment-main-request:delete'}), // defaultButtons.mainListDeleteBtn({hasPermi:'wms:sale-shipment-main-request:delete'}), //
] ]
}
const tableData = ref([]) const tableData = ref([])
@ -247,9 +285,18 @@ const submitForm = async (formType, data) => {
} }
} }
/**
* tableForm方法
*/
const tableFormKeys = {}
SaleShipmentDetail.allSchemas.tableFormColumns.forEach(item => {
tableFormKeys[item.field] = item.default ? item.default : ''
})
// //
const handleAddTable = () => { const handleAddTable = () => {
tableData.value.push(JSON.parse(JSON.stringify(tableFormKeys))) let tableForm = JSON.parse(JSON.stringify(tableFormKeys))
tableData.value.push(tableForm)
} }
// //
const handleDeleteTable = (item, index) => { const handleDeleteTable = (item, index) => {

174
src/views/wms/deliversettlementManage/saleShipmentMainRequest/saleShipmentMain.data.ts

@ -4,8 +4,8 @@ import { dateFormatter } from '@/utils/formatTime'
import * as CustomerApi from '@/api/wms/customer' import * as CustomerApi from '@/api/wms/customer'
import { Customer } from '@/views/wms/basicDataManage/customerManage/customer/customer.data' import { Customer } from '@/views/wms/basicDataManage/customerManage/customer/customer.data'
import * as SaleMainApi from '@/api/wms/saleMain' import * as SaleDetailApi from '@/api/wms/saleDetail'
import { SaleMain } from '@/views/wms/deliversettlementManage/deliverplan/saleMain/saleMain.data' import { SaleDetail } from '@/views/wms/deliversettlementManage/deliverplan/saleMain/saleMain.data'
import * as getRequestsettingApi from '@/api/wms/requestsetting/index' import * as getRequestsettingApi from '@/api/wms/requestsetting/index'
// 获取自动提交自动通过自动执行,跳过任务直接删生成记录的默认值 // 获取自动提交自动通过自动执行,跳过任务直接删生成记录的默认值
@ -27,6 +27,9 @@ export const SaleShipmentMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'customerCode', field: 'customerCode',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
table: {
width: 150
},
form: { form: {
// labelMessage: '信息提示说明!!!', // labelMessage: '信息提示说明!!!',
componentProps: { componentProps: {
@ -51,6 +54,9 @@ export const SaleShipmentMain = useCrudSchemas(reactive<CrudSchema[]>([
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
isForm: false, isForm: false,
table: {
width: 150
},
}, },
{ {
label: '业务类型', label: '业务类型',
@ -65,11 +71,15 @@ export const SaleShipmentMain = useCrudSchemas(reactive<CrudSchema[]>([
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
isForm: false,
}, },
{ {
label: '发票时间', label: '发票时间',
field: 'invoiceTime', field: 'invoiceTime',
sort: 'custom', sort: 'custom',
table: {
width: 180
},
formatter: dateFormatter, formatter: dateFormatter,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
@ -87,6 +97,13 @@ export const SaleShipmentMain = useCrudSchemas(reactive<CrudSchema[]>([
} }
}, },
}, },
{
label: '地点',
field: 'siteId',
sort: 'custom',
isSearch: true,
hiddenInMain: true,
},
{ {
label: '部门', label: '部门',
field: 'departmentCode', field: 'departmentCode',
@ -243,33 +260,14 @@ export const SaleShipmentDetail = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
tableForm:{ isSearch: true,
isInpuFocusShow: true, // 开启查询弹窗 tableForm: {
searchListPlaceholder: '请选择销售订单号', type: 'Select',
searchField: 'number', disabled: true
searchTitle: '销售订单信息',
searchAllSchemas: SaleMain.allSchemas,
searchPage: SaleMainApi.getSaleMainPage,
searchCondition: [{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}, },
form: { form: {
// labelMessage: '信息提示说明!!!',
componentProps: { componentProps: {
isSearchList: true, disabled: true
searchListPlaceholder: '请选择销售订单号',
searchField: 'number',
searchTitle: '销售订单信息',
searchAllSchemas: SaleMain.allSchemas,
searchPage: SaleMainApi.getSaleMainPage,
searchCondition: [{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
} }
} }
}, },
@ -285,8 +283,8 @@ export const SaleShipmentDetail = useCrudSchemas(reactive<CrudSchema[]>([
searchListPlaceholder: '请选择销售订单行', searchListPlaceholder: '请选择销售订单行',
searchField: 'lineNumber', searchField: 'lineNumber',
searchTitle: '销售订单信息', searchTitle: '销售订单信息',
searchAllSchemas: SaleMain.allSchemas, searchAllSchemas: SaleDetail.allSchemas,
searchPage: SaleMainApi.getSaleMainPage, searchPage: SaleDetailApi.getSaleDetailPage,
searchCondition: [{ searchCondition: [{
key: 'available', key: 'available',
value: 'TRUE', value: 'TRUE',
@ -300,27 +298,35 @@ export const SaleShipmentDetail = useCrudSchemas(reactive<CrudSchema[]>([
searchListPlaceholder: '请选择销售订单行', searchListPlaceholder: '请选择销售订单行',
searchField: 'lineNumber', searchField: 'lineNumber',
searchTitle: '销售订单信息', searchTitle: '销售订单信息',
searchAllSchemas: SaleMain.allSchemas, searchAllSchemas: SaleDetail.allSchemas,
searchPage: SaleMainApi.getSaleMainPage, searchPage: SaleDetailApi.getSaleDetailPage,
searchCondition: [{ searchCondition: [{
key: 'available', key: 'available',
value: 'TRUE', value: 'TRUE',
isMainValue: false isMainValue: false
},
{
key: 'customerCode',
value: 'customerCode',
isMainValue: true
}] }]
} }
} }
}, },
{ {
label: '从货主代码', label: '物品代码',
field: 'fromOwnerCode', field: 'itemCode',
sort: 'custom',
isSearch: true,
},
{
label: '包装号',
field: 'packingNumber',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
tableForm: {
type: 'Select',
disabled: true
},
form: {
componentProps: {
disabled: true
}
}
}, },
{ {
label: '批次', label: '批次',
@ -329,62 +335,84 @@ export const SaleShipmentDetail = useCrudSchemas(reactive<CrudSchema[]>([
isSearch: true, isSearch: true,
}, },
{ {
label: '库存状态', label: '从货主代码',
field: 'inventoryStatus', field: 'fromOwnerCode',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
form: { isForm: false,
component: 'Radio' isTableForm: false
},
}, },
{ {
label: '从库位代码', label: '包装号',
field: 'fromLocationCode', field: 'packingNumber',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
isForm: false,
isTableForm: false
}, },
{ {
label: '主表ID', label: '库存状态',
field: 'masterId', field: 'inventoryStatus',
// dictType: DICT_TYPE.INVENTORY_STATUS,
// dictClass: 'string',
isTable: true,
sort: 'custom', sort: 'custom',
isSearch: true, table: {
form: { width: 150
component: 'InputNumber',
value: 0
}, },
isTableForm: false,
hiddenInMain: true,
isForm: false,
}, },
{ {
label: '物品代码', label: '客户库位',
field: 'itemCode', field: 'fromLocationCode',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
isTableForm: true
}, },
{ {
label: '物品名称', label: '物品名称',
field: 'itemName', field: 'itemName',
sort: 'custom', sort: 'custom',
isSearch: true, table: {
width: 150
},
isForm: false,
isTableForm: false
}, },
{ {
label: '物品描述1', label: '物品描述1',
field: 'itemDesc1', field: 'itemName',
sort: 'custom', sort: 'custom',
isSearch: true, table: {
width: 150
},
isForm: false,
isTableForm: false
}, },
{ {
label: '物品描述2', label: '物品描述2',
field: 'itemDesc2', field: 'itemName',
sort: 'custom', sort: 'custom',
isSearch: true, table: {
width: 150
},
isForm: false,
isTableForm: false
}, },
{ {
label: '项目代码', label: '项目代码',
field: 'projectCode', field: 'projectCode',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
isTableForm: false,
hiddenInMain: true,
}, },
{ {
label: '数量', label: '开票数量',
field: 'qty', field: 'qty',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
@ -392,14 +420,29 @@ export const SaleShipmentDetail = useCrudSchemas(reactive<CrudSchema[]>([
{ {
label: '计量单位', label: '计量单位',
field: 'uom', field: 'uom',
dictType: DICT_TYPE.UOM,
dictClass: 'string',
isTable: true,
sort: 'custom', sort: 'custom',
isSearch: true, table: {
width: 150
},
tableForm: {
type: 'Select',
disabled: true
},
form: {
componentProps: {
disabled: true
}
}
}, },
{ {
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
isTableForm: false
}, },
{ {
label: '创建时间', label: '创建时间',
@ -416,16 +459,7 @@ export const SaleShipmentDetail = useCrudSchemas(reactive<CrudSchema[]>([
} }
}, },
isForm: false, isForm: false,
}, isTableForm: false
{
label: '地点ID',
field: 'siteId',
sort: 'custom',
isSearch: true,
form: {
component: 'InputNumber',
value: 0
},
}, },
{ {
label: '操作', label: '操作',

91
src/views/wms/productionManage/productdismantle/productdismantleRecordMain/productdismantleRecordMain.data.ts

@ -150,6 +150,7 @@ export const ProductdismantleRecordMain = useCrudSchemas(reactive<CrudSchema[]>(
label: '部门', label: '部门',
field: 'departmentCode', field: 'departmentCode',
sort: 'custom', sort: 'custom',
isTable:false,
table: { table: {
width: 150 width: 150
}, },
@ -159,7 +160,7 @@ export const ProductdismantleRecordMain = useCrudSchemas(reactive<CrudSchema[]>(
field: 'interfaceType', field: 'interfaceType',
dictType: DICT_TYPE.INTERFACE_TYPE, dictType: DICT_TYPE.INTERFACE_TYPE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 150
@ -169,6 +170,7 @@ export const ProductdismantleRecordMain = useCrudSchemas(reactive<CrudSchema[]>(
label: '业务类型', label: '业务类型',
field: 'businessType', field: 'businessType',
sort: 'custom', sort: 'custom',
isTable: false,
table: { table: {
width: 150 width: 150
}, },
@ -177,6 +179,7 @@ export const ProductdismantleRecordMain = useCrudSchemas(reactive<CrudSchema[]>(
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
isTable: false,
table: { table: {
width: 150 width: 150
}, },
@ -185,6 +188,7 @@ export const ProductdismantleRecordMain = useCrudSchemas(reactive<CrudSchema[]>(
label: '创建者', label: '创建者',
field: 'creator', field: 'creator',
sort: 'custom', sort: 'custom',
isTable: false,
table: { table: {
width: 150 width: 150
}, },
@ -200,6 +204,7 @@ export const ProductdismantleRecordMain = useCrudSchemas(reactive<CrudSchema[]>(
table: { table: {
width: 180 width: 180
}, },
isTable: false,
form: { form: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -230,7 +235,7 @@ export const ProductdismantleRecordMain = useCrudSchemas(reactive<CrudSchema[]>(
field: 'fromAreaTypes', field: 'fromAreaTypes',
dictType: DICT_TYPE.AREA_TYPE, dictType: DICT_TYPE.AREA_TYPE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 150
@ -240,6 +245,7 @@ export const ProductdismantleRecordMain = useCrudSchemas(reactive<CrudSchema[]>(
label: '从库区代码范围', label: '从库区代码范围',
field: 'fromAreaCodes', field: 'fromAreaCodes',
sort: 'custom', sort: 'custom',
isTable: false,
table: { table: {
width: 150 width: 150
}, },
@ -250,7 +256,7 @@ export const ProductdismantleRecordMain = useCrudSchemas(reactive<CrudSchema[]>(
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isSearch: true, isSearch: true,
isTable: true, isTable: false,
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 150
@ -323,6 +329,7 @@ export const ProductdismantleRecordDetaila = useCrudSchemas(reactive<CrudSchema[
label: '从货主代码', label: '从货主代码',
field: 'fromOwnerCode', field: 'fromOwnerCode',
sort: 'custom', sort: 'custom',
isTable: false,
table: { table: {
width: 150 width: 150
}, },
@ -456,6 +463,7 @@ export const ProductdismantleRecordDetaila = useCrudSchemas(reactive<CrudSchema[
label: '单据号', label: '单据号',
field: 'number', field: 'number',
sort: 'custom', sort: 'custom',
hiddenInMain:true,
table: { table: {
width: 180 width: 180
}, },
@ -468,42 +476,7 @@ export const ProductdismantleRecordDetaila = useCrudSchemas(reactive<CrudSchema[
width: 150 width: 150
}, },
}, },
{
label: '备注',
field: 'remark',
sort: 'custom',
table: {
width: 150
},
},
{
label: '创建时间',
field: 'createTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
},
{
label: '创建者',
field: 'creator',
sort: 'custom',
table: {
width: 150
},
},
{ {
label: '物料名称', label: '物料名称',
field: 'itemName', field: 'itemName',
@ -532,6 +505,7 @@ export const ProductdismantleRecordDetaila = useCrudSchemas(reactive<CrudSchema[
label: '项目代码', label: '项目代码',
field: 'projectCode', field: 'projectCode',
sort: 'custom', sort: 'custom',
isTable: false,
table: { table: {
width: 150 width: 150
}, },
@ -579,7 +553,43 @@ export const ProductdismantleRecordDetaila = useCrudSchemas(reactive<CrudSchema[
field: 'interfaceType', field: 'interfaceType',
dictType: DICT_TYPE.INTERFACE_TYPE, dictType: DICT_TYPE.INTERFACE_TYPE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
sort: 'custom',
table: {
width: 150
},
},
{
label: '备注',
field: 'remark',
sort: 'custom',
table: {
width: 150
},
},
{
label: '创建时间',
field: 'createTime',
formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
},
{
label: '创建者',
field: 'creator',
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 150
@ -590,6 +600,7 @@ export const ProductdismantleRecordDetaila = useCrudSchemas(reactive<CrudSchema[
field: 'action', field: 'action',
isDetail: false, isDetail: false,
isForm: false , isForm: false ,
isTable:false,
table: { table: {
width: 150, width: 150,
fixed: 'right' fixed: 'right'

35
src/views/wms/productionManage/productdismantle/productdismantleRequestMain/productdismantleRequestMain.data.ts

@ -141,19 +141,20 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
table: { table: {
width: 150 width: 150
}, },
isForm: false isForm: false,
isTable:false,
}, },
{ {
label: '从库区类型范围', label: '从库区类型范围',
field: 'fromAreaTypes', field: 'fromAreaTypes',
dictType: DICT_TYPE.AREA_TYPE, dictType: DICT_TYPE.AREA_TYPE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 150
}, },
isForm: false isForm: false,
}, },
{ {
label: '从库区代码范围', label: '从库区代码范围',
@ -162,7 +163,8 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
table: { table: {
width: 150 width: 150
}, },
isForm: false isForm: false,
isTable: false,
}, },
{ {
label: '业务类型', label: '业务类型',
@ -177,7 +179,8 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
disabled: true disabled: true
} }
}, },
isForm: false isForm: false,
isTable:false,
}, },
{ {
label: '备注', label: '备注',
@ -208,6 +211,7 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
valueFormat: 'x', valueFormat: 'x',
} }
}, },
isTable: false,
isForm: false, isForm: false,
}, },
{ {
@ -217,6 +221,7 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
table: { table: {
width: 150 width: 150
}, },
isTable: false,
isForm: false, isForm: false,
}, },
{ {
@ -269,6 +274,7 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
table: { table: {
width: 150 width: 150
}, },
isTable: false,
isForm:false, isForm:false,
formatter: (_: Recordable, __: TableColumn, cellValue: number) => { formatter: (_: Recordable, __: TableColumn, cellValue: number) => {
return userDeptArray.find((account) => account.id == cellValue)?.name return userDeptArray.find((account) => account.id == cellValue)?.name
@ -325,6 +331,7 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
valueFormat: 'x', valueFormat: 'x',
} }
}, },
isTable: false,
isForm: false isForm: false
}, },
{ {
@ -334,6 +341,7 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
table: { table: {
width: 150 width: 150
}, },
isTable: false,
isForm: false isForm: false
}, },
{ {
@ -341,7 +349,7 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
field: 'autoCommit', field: 'autoCommit',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
isForm:false, isForm:false,
sort: 'custom', sort: 'custom',
table: { table: {
@ -362,7 +370,7 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
field: 'autoAgree', field: 'autoAgree',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
isForm:false, isForm:false,
sort: 'custom', sort: 'custom',
table: { table: {
@ -383,7 +391,7 @@ export const ProductdismantleRequestMain = useCrudSchemas(reactive<CrudSchema[]>
field: 'autoExecute', field: 'autoExecute',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
isForm:false, isForm:false,
sort: 'custom', sort: 'custom',
table: { table: {
@ -782,6 +790,7 @@ export const ProductdismantleRequestDetaila = useCrudSchemas(reactive<CrudSchema
table: { table: {
width: 150 width: 150
}, },
isTable:false,
isTableForm: false, isTableForm: false,
isForm: false, isForm: false,
}, },
@ -790,11 +799,11 @@ export const ProductdismantleRequestDetaila = useCrudSchemas(reactive<CrudSchema
field: 'packUnit', field: 'packUnit',
// dictType: DICT_TYPE.PACK_UNIT, // dictType: DICT_TYPE.PACK_UNIT,
// dictClass: 'string', // dictClass: 'string',
isTable: true,
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 150
}, },
isTable:false,
isTableForm: false, isTableForm: false,
isForm: false, isForm: false,
}, },
@ -805,6 +814,7 @@ export const ProductdismantleRequestDetaila = useCrudSchemas(reactive<CrudSchema
table: { table: {
width: 150 width: 150
}, },
isTable:false,
isTableForm: false, isTableForm: false,
isForm: false, isForm: false,
}, },
@ -815,6 +825,7 @@ export const ProductdismantleRequestDetaila = useCrudSchemas(reactive<CrudSchema
table: { table: {
width: 180 width: 180
}, },
hiddenInMain:true,
isTableForm: false, isTableForm: false,
form: { form: {
componentProps: { componentProps: {
@ -888,6 +899,7 @@ export const ProductdismantleRequestDetaila = useCrudSchemas(reactive<CrudSchema
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
sortTableDefault:1002,
table: { table: {
width: 150 width: 150
}, },
@ -895,6 +907,7 @@ export const ProductdismantleRequestDetaila = useCrudSchemas(reactive<CrudSchema
{ {
label: '创建时间', label: '创建时间',
field: 'createTime', field: 'createTime',
sortTableDefault:1000,
formatter: dateFormatter, formatter: dateFormatter,
detail: { detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss' dateFormat: 'YYYY-MM-DD HH:mm:ss'
@ -919,6 +932,7 @@ export const ProductdismantleRequestDetaila = useCrudSchemas(reactive<CrudSchema
label: '创建者', label: '创建者',
field: 'creator', field: 'creator',
sort: 'custom', sort: 'custom',
sortTableDefault:1001,
table: { table: {
width: 150 width: 150
}, },
@ -929,6 +943,7 @@ export const ProductdismantleRequestDetaila = useCrudSchemas(reactive<CrudSchema
label: '最后更新时间', label: '最后更新时间',
field: 'updateTime', field: 'updateTime',
formatter: dateFormatter, formatter: dateFormatter,
isTable:false,
detail: { detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss' dateFormat: 'YYYY-MM-DD HH:mm:ss'
}, },
@ -952,6 +967,7 @@ export const ProductdismantleRequestDetaila = useCrudSchemas(reactive<CrudSchema
label: '最后更新者', label: '最后更新者',
field: 'updater', field: 'updater',
sort: 'custom', sort: 'custom',
isTable:false,
table: { table: {
width: 150 width: 150
}, },
@ -1014,6 +1030,7 @@ export const ProductdismantleRequestDetaila = useCrudSchemas(reactive<CrudSchema
width: 150, width: 150,
fixed: 'right' fixed: 'right'
}, },
hiddenInMain:true,
isTableForm:true, isTableForm:true,
tableForm: { tableForm: {
type: 'action', type: 'action',

4
src/views/wms/productionManage/productreceiptscrap/productreceiptscrapJobMain/index.vue

@ -62,7 +62,7 @@
:detailAllSchemas="ProductreceiptJobDetail.allSchemas" :detailAllSchemas="ProductreceiptJobDetail.allSchemas"
:detailAllSchemasRules="ProductreceiptJobDetailRules" :detailAllSchemasRules="ProductreceiptJobDetailRules"
:searchTableParams="searchTableParams" :searchTableParams="searchTableParams"
:apiPage="ProductreceiptJobDetailApi.getProductreceiptJobDetailPage" :apiPage="ProductreceiptJobDetailApi.getProductreceiptJobDetailPageScarp"
/> />
</template> </template>
@ -108,7 +108,7 @@ const searchTableSuccess = (formField, searchField, val, formRef, type, row ) =>
} }
const { tableObject, tableMethods } = useTable({ const { tableObject, tableMethods } = useTable({
getListApi: ProductreceiptJobDetailApi.getProductreceiptJobDetailPage // getListApi: ProductreceiptJobDetailApi.getProductreceiptJobDetailPageScarp //
}) })
// //

4
src/views/wms/productionManage/productreceiptscrap/productreceiptscrapRecordMain/index.vue

@ -57,7 +57,7 @@
:allSchemas="ProductreceiptRecordMain.allSchemas" :allSchemas="ProductreceiptRecordMain.allSchemas"
:detailAllSchemas="ProductreceiptRecordDetail.allSchemas" :detailAllSchemas="ProductreceiptRecordDetail.allSchemas"
:detailAllSchemasRules="ProductreceiptRecordDetailRules" :detailAllSchemasRules="ProductreceiptRecordDetailRules"
:apiPage="ProductreceiptRecordDetailApi.getProductreceiptRecordDetailPage" :apiPage="ProductreceiptRecordDetailApi.getProductreceiptRecordDetailPageScrap"
:buttondataTable="buttondataTable" :buttondataTable="buttondataTable"
@tableFormButton="tableFormButton" @tableFormButton="tableFormButton"
/> />
@ -128,7 +128,7 @@ const updataTableColumns = (val) => {
} }
const { tableObject, tableMethods } = useTable({ const { tableObject, tableMethods } = useTable({
getListApi: ProductreceiptRecordDetailApi.getProductreceiptRecordDetailPage // getListApi: ProductreceiptRecordDetailApi.getProductreceiptRecordDetailPageScrap //
}) })
// //

9
src/views/wms/productionManage/productreceiptscrap/productreceiptscrapRequestMain/index.vue

@ -66,7 +66,7 @@
:detailAllSchemasRules="ProductreceiptRequestDetailRules" :detailAllSchemasRules="ProductreceiptRequestDetailRules"
:apiCreate="ProductreceiptRequestDetailApi.createProductreceiptRequestDetail" :apiCreate="ProductreceiptRequestDetailApi.createProductreceiptRequestDetail"
:apiUpdate="ProductreceiptRequestDetailApi.updateProductreceiptRequestDetail" :apiUpdate="ProductreceiptRequestDetailApi.updateProductreceiptRequestDetail"
:apiPage="ProductreceiptRequestDetailApi.getProductreceiptRequestDetailPage" :apiPage="ProductreceiptRequestDetailApi.getProductreceiptRequestDetailPageScrap"
:apiDelete="ProductreceiptRequestDetailApi.deleteProductreceiptRequestDetail" :apiDelete="ProductreceiptRequestDetailApi.deleteProductreceiptRequestDetail"
@searchTableSuccessDetail="searchTableSuccessDetail" @searchTableSuccessDetail="searchTableSuccessDetail"
:buttondataTable="buttondataTable" :buttondataTable="buttondataTable"
@ -158,7 +158,7 @@ const isCreateLabel = ref(false)
const formLabelRef = ref() const formLabelRef = ref()
const labelType = ref('') // const labelType = ref('') //
const { tableObject: detatableData, tableMethods: detatableMethods } =useTable({ const { tableObject: detatableData, tableMethods: detatableMethods } =useTable({
getListApi: ProductreceiptRequestDetailApi.getProductreceiptRequestDetailPage getListApi: ProductreceiptRequestDetailApi.getProductreceiptRequestDetailPageScrap
}) })
const { getList:getDetailList } = detatableMethods const { getList:getDetailList } = detatableMethods
@ -203,7 +203,7 @@ const searchTableSuccessDetail = (formField, searchField, val, formRef ) => {
} }
const { tableObject, tableMethods } = useTable({ const { tableObject, tableMethods } = useTable({
getListApi: ProductreceiptRequestDetailApi.getProductreceiptRequestDetailPage // getListApi: ProductreceiptRequestDetailApi.getProductreceiptRequestDetailPageScrap //
}) })
// //
@ -545,9 +545,12 @@ const submitForm = async (formType, data) => {
} }
try { try {
if (formType === 'create') { if (formType === 'create') {
data.productionLineCode = data.subList[0].productionLineCode;
data.type='scrap'
await ProductreceiptRequestMainApi.createProductreceiptRequestMain(data) await ProductreceiptRequestMainApi.createProductreceiptRequestMain(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
data.type='scrap'
await ProductreceiptRequestMainApi.updateProductreceiptRequestMain(data) await ProductreceiptRequestMainApi.updateProductreceiptRequestMain(data)
message.success(t('common.updateSuccess')) message.success(t('common.updateSuccess'))
} }

1
src/views/wms/productionManage/productrepair/productrepairRequestMain/index.vue

@ -589,6 +589,7 @@ const submitForm = async (formType, data) => {
if (!item.childList) { if (!item.childList) {
childListRs = false childListRs = false
} }
item.productionLineCode = data.productionLineCode
}) })
if (!childListRs) { if (!childListRs) {
message.warning('请填写Bom信息!') message.warning('请填写Bom信息!')

3
src/views/wms/productionManage/productrepair/productrepairRequestMain/productrepairRequestMain.data.ts

@ -592,9 +592,8 @@ export const ProductrepairRequestDetaila = useCrudSchemas(reactive<CrudSchema[]>
{ {
label: 'Bom来源库位代码', label: 'Bom来源库位代码',
field: 'fromLocationCode', field: 'fromLocationCode',
sort: 'custom',
table: { table: {
width: 160 width: 190
}, },
sortTableDefault:18, sortTableDefault:18,
tableForm: { tableForm: {

23
src/views/wms/productionManage/productscrap/productscrapRecordMain/productscrapRecordMain.data.ts

@ -1,25 +1,6 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas' import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter,dateFormatter2 } from '@/utils/formatTime' import { dateFormatter,dateFormatter2 } from '@/utils/formatTime'
import {Workshop} from "@/views/wms/basicDataManage/factoryModeling/workshop/workshop.data";
import * as WorkshopApi from "@/api/wms/workshop";
import {Team} from "@/views/wms/basicDataManage/orderManage/team/team.data";
import * as TeamApi from "@/api/wms/team";
import {Shift} from "@/views/wms/basicDataManage/orderManage/shift/shift.data";
import * as ShiftApi from "@/api/wms/shift";
import {
Productionline
} from "@/views/wms/basicDataManage/factoryModeling/productionline/productionline.data";
import * as ProductionlineApi from "@/api/wms/productionline";
import {
Workstation
} from "@/views/wms/basicDataManage/factoryModeling/workstation/workstation.data";
import * as WorkstationApi from "@/api/wms/workstation";
import {Process} from "@/views/wms/basicDataManage/factoryModeling/process/process.data";
import * as ProcessApi from "@/api/wms/process";
import {
Productionlineitem
} from "@/views/wms/basicDataManage/itemManage/productionlineitem/productionlineitem.data";
import * as ProductionlineitemApi from "@/api/wms/productionlineitem";
/** /**
* @returns {Array} * @returns {Array}
@ -50,7 +31,7 @@ export const ProductscrapRecordMain = useCrudSchemas(reactive<CrudSchema[]>([
dictType: DICT_TYPE.REQUEST_STATUS, dictType: DICT_TYPE.REQUEST_STATUS,
dictClass: 'string', dictClass: 'string',
isForm:false, isForm:false,
isTable: true, isTable: false,
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 150

1
src/views/wms/productionManage/productscrap/productscrapRequestMain/index.vue

@ -648,6 +648,7 @@ const submitForm = async (formType, data) => {
if (!item.childList) { if (!item.childList) {
childListRs = false childListRs = false
} }
item.productionLineCode = data.productionLineCode
}) })
if (!childListRs) { if (!childListRs) {
message.warning('请填写Bom信息!') message.warning('请填写Bom信息!')

1
src/views/wms/productionManage/productscrap/productscrapRequestMain/productscrapRequestMain.data.ts

@ -1053,6 +1053,7 @@ export const ProductscrapRequestDetail = useCrudSchemas(reactive<CrudSchema[]>([
field: 'action', field: 'action',
isDetail: false, isDetail: false,
isForm: false , isForm: false ,
hiddenInMain:true,
table: { table: {
width: 150, width: 150,
fixed: 'right' fixed: 'right'

4
src/views/wms/purchasereceiptManage/inspect/inspectRecordMain/index.vue

@ -151,10 +151,10 @@ const buttonTableClick = async (val, row) => {
/** 生成采购上架申请按钮操作 */ /** 生成采购上架申请按钮操作 */
const handlePutawayRequest = async (number:string) => { const handlePutawayRequest = async (number:string) => {
try{ try{
await message.confirm(t('确认生成上架申请吗?')) await message.confirm(t('ts.确认生成上架申请吗?'))
tableObject.loading = true tableObject.loading = true
await InspectRecordMainApi.createPutAwayRequest(number) await InspectRecordMainApi.createPutAwayRequest(number)
message.success(t('上架申请生成成功')) message.success(t('ts.上架申请生成成功'))
await getList() await getList()
}catch{}finally{ }catch{}finally{
tableObject.loading = false tableObject.loading = false

12
src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRecordMain/index.vue

@ -177,10 +177,10 @@ const buttonTableClick = async (val, row) => {
/** 生成采购上架申请按钮操作 */ /** 生成采购上架申请按钮操作 */
const handleCreatePutawayRequest = async (number:string) => { const handleCreatePutawayRequest = async (number:string) => {
try{ try{
await message.confirm(t('确认生成上架申请吗?')) await message.confirm(t('ts.确认生成上架申请吗?'))
tableObject.loading = true tableObject.loading = true
await PurchasereceiptRecordMainApi.createPutawayRequest(number) await PurchasereceiptRecordMainApi.createPutawayRequest(number)
message.success(t('上架申请生成成功')) message.success(t('ts.上架申请生成成功'))
await getList() await getList()
}catch{}finally{ }catch{}finally{
tableObject.loading = false tableObject.loading = false
@ -190,10 +190,10 @@ const handleCreatePutawayRequest = async (number:string) => {
/** 生成到货检验申请按钮操作 */ /** 生成到货检验申请按钮操作 */
const handleCreateInspectRequest = async (number:string) => { const handleCreateInspectRequest = async (number:string) => {
try{ try{
await message.confirm(t('确认生成到货检验申请吗?')) await message.confirm(t('ts.确认生成到货检验申请吗?'))
tableObject.loading = true tableObject.loading = true
await PurchasereceiptRecordMainApi.createInspectRequest(number) await PurchasereceiptRecordMainApi.createInspectRequest(number)
message.success(t('到货检验申请生成成功')) message.success(t('ts.到货检验申请生成成功'))
await getList() await getList()
}catch{}finally{ }catch{}finally{
tableObject.loading = false tableObject.loading = false
@ -227,7 +227,7 @@ const openDetail = (row: any, titleName: any, titleValue: any) => {
// table // table
const buttondataTable = ref([{ const buttondataTable = ref([{
label: '查看其他包装规格', label: t('ts.查看其他包装规格'),
name: 'viewParentPickingNumber', name: 'viewParentPickingNumber',
hide: false, hide: false,
type: 'primary', type: 'primary',
@ -268,7 +268,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await PurchasereceiptRecordMainApi.exportPurchasereceiptRecordMain(tableObject.params) const data = await PurchasereceiptRecordMainApi.exportPurchasereceiptRecordMain(tableObject.params)
download.excel(data, '采购收货记录主.xlsx') download.excel(data, `${t('ts.采购收货记录主')}.xlsx`)
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false

2
src/views/wms/purchasereceiptManage/purchasereceipt/purchasereceiptRequestMain/index.vue

@ -402,7 +402,7 @@ const submitFormLabel = async (formType, data) => {
console.log("data==",data) console.log("data==",data)
data.subList = detatableData.tableList data.subList = detatableData.tableList
console.log("detatableData",detatableData) console.log("detatableData",detatableData)
await message.confirm('是否为此数据生成标签?') await message.confirm(t('ts.是否为此数据生成标签?'))
await PurchasereceiptRequestMainApi.genLabel(data) //genLabelId.value await PurchasereceiptRequestMainApi.genLabel(data) //genLabelId.value
isCreateLabel.value = true isCreateLabel.value = true
message.success('创建标签成功') message.success('创建标签成功')

2
src/views/wms/purchasereceiptManage/purchasereturn/purchasereturnRecordMain/index.vue

@ -168,7 +168,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await PurchasereturnRecordMainApi.exportPurchasereturnRecordMain(tableObject.params) const data = await PurchasereturnRecordMainApi.exportPurchasereturnRecordMain(tableObject.params)
download.excel(data, '采购退货记录主.xlsx') download.excel(data, `${t('ts.采购退货记录主')}.xlsx`)
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false

2
src/views/wms/purchasereceiptManage/sparereceipt/sparereceiptRequestMain/index.vue

@ -407,7 +407,7 @@ const { getList:getDetailList } = detatableMethods
// //
const submitFormLabel = async (formType, data) => { const submitFormLabel = async (formType, data) => {
try { try {
await message.confirm('是否为此数据生成标签?') await message.confirm(t('ts.是否为此数据生成标签?'))
await PurchasereceiptRequestMainApi.genLabel(genLabelId.value) await PurchasereceiptRequestMainApi.genLabel(genLabelId.value)
isCreateLabel.value = true isCreateLabel.value = true
message.success('创建标签成功') message.success('创建标签成功')

20
src/views/wms/purchasereceiptManage/supplierdeliver/demandforecastingMain/index.vue

@ -234,11 +234,11 @@ const openForm =async (type: string, row?: number) => {
const handleClose = async (id : number) => { const handleClose = async (id : number) => {
try { try {
// //
await message.confirm('是否关闭所选中数据?') await message.confirm(t('ts.是否关闭所选中数据?'))
tableObject.loading = true tableObject.loading = true
// //
await DemandforecastingMainApi.closePurchaseMain(id) await DemandforecastingMainApi.closePurchaseMain(id)
message.success(t('关闭成功!')) message.success(t('ts.关闭成功!'))
tableObject.loading = false tableObject.loading = false
// //
await getList() await getList()
@ -251,11 +251,11 @@ const handleClose = async (id : number) => {
const handleOpen = async (id : number) => { const handleOpen = async (id : number) => {
try { try {
// //
await message.confirm('是否打开所选中数据?') await message.confirm(t('ts.是否打开所选中数据?'))
tableObject.loading = true tableObject.loading = true
// //
await DemandforecastingMainApi.openPurchaseMain(id) await DemandforecastingMainApi.openPurchaseMain(id)
message.success(t('打开成功!')) message.success(t('ts.打开成功!'))
tableObject.loading = false tableObject.loading = false
// //
await getList() await getList()
@ -268,11 +268,11 @@ const handleClose = async (id : number) => {
const handlePublish = async (id : number) => { const handlePublish = async (id : number) => {
try { try {
// //
await message.confirm('是否发布所选中数据?') await message.confirm(t('ts.是否发布所选中数据?'))
tableObject.loading = true tableObject.loading = true
// //
await DemandforecastingMainApi.publishPurchaseMain(id) await DemandforecastingMainApi.publishPurchaseMain(id)
message.success(t('发布成功!')) message.success(t('ts.发布成功!'))
tableObject.loading = false tableObject.loading = false
// //
await getList() await getList()
@ -285,11 +285,11 @@ const handleClose = async (id : number) => {
const handleWit = async (id : number) => { const handleWit = async (id : number) => {
try { try {
// //
await message.confirm('是否下架所选中数据?') await message.confirm(t('ts.是否下架所选中数据?'))
tableObject.loading = true tableObject.loading = true
// //
await DemandforecastingMainApi.witPurchaseMain(id) await DemandforecastingMainApi.witPurchaseMain(id)
message.success(t('下架成功!')) message.success(t('ts.下架成功!'))
tableObject.loading = false tableObject.loading = false
// //
await getList() await getList()
@ -330,7 +330,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await DemandforecastingMainApi.exportDemandforecastingMain(tableObject.params) const data = await DemandforecastingMainApi.exportDemandforecastingMain(tableObject.params)
download.excel(data, '要货预测主.xlsx') download.excel(data, `${t('ts.要货预测主')}.xlsx`)
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false
@ -383,7 +383,7 @@ const handleImport = () => {
// //
const importTemplateData = reactive({ const importTemplateData = reactive({
templateUrl: '', templateUrl: '',
templateTitle: '要货预测主导入模版.xlsx' templateTitle: `${t('ts.要货预测主导入模版')}.xlsx`
}) })
// //

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save