Browse Source

解决冲突

master_hella_20240701
ljlong_2630 8 months ago
parent
commit
154c077895
  1. 2
      README.md
  2. 4
      src/api/eam/basicMaintenanceOption/index.ts
  3. 32
      src/api/eam/equipmentMaintenanceMain/index.ts
  4. 10
      src/api/eam/equipmentReportRepairRequest/index.ts
  5. 11
      src/api/eam/maintenance/index.ts
  6. 57
      src/api/eam/relationMaintenancePlanItem/index.ts
  7. 37
      src/api/home/index.ts
  8. 5
      src/api/wms/balance/index.ts
  9. 5
      src/api/wms/inventoryinitRecordDetail/index.ts
  10. 5
      src/api/wms/inventorymoveRecordMain/index.ts
  11. 13
      src/api/wms/location/index.ts
  12. 11
      src/api/wms/qadproductionplan/index.ts
  13. 6
      src/api/wms/supplierdeliverRequestMain/index.ts
  14. 5
      src/api/wms/supplierinvoiceRequestMain/index.ts
  15. 3
      src/api/wms/unplannedissueRecordDetail/index.ts
  16. 3
      src/api/wms/unplannedissueRequestDetail/index.ts
  17. 13
      src/components/BasicForm/src/BasicForm.vue
  18. 2
      src/components/SearchHigh/src/SearchHigh.vue
  19. 46
      src/components/SearchTable/src/SearchTable.vue
  20. 40
      src/components/Table/src/Table.vue
  21. 2
      src/components/TableDetail/src/TableDetail.vue
  22. 2
      src/components/XButton/src/ButtonBase.vue
  23. 2
      src/config/axios/config.ts
  24. 4
      src/config/axios/index.ts
  25. 15
      src/hooks/web/useMessage.ts
  26. 1
      src/layout/components/Menu/src/components/useRenderMenuTitle.tsx
  27. 6
      src/locales/en-US.ts
  28. 8
      src/locales/zh-CN.ts
  29. 8
      src/styles/index.scss
  30. 4
      src/utils/dict.ts
  31. 95
      src/utils/disposition/defaultButtons.ts
  32. 20
      src/utils/validator.ts
  33. 27
      src/views/eam/basicMaintenanceOption/index.vue
  34. 391
      src/views/eam/basicMaintenanceOption/itemSelectSetForm.vue
  35. 56
      src/views/eam/equipmentMaintenanceMain/MaintenanceOrderDetail.vue
  36. 250
      src/views/eam/equipmentMaintenanceMain/equipmentMaintenanceMain.data.ts
  37. 216
      src/views/eam/equipmentMaintenanceMain/finishForm1.vue
  38. 215
      src/views/eam/equipmentMaintenanceMain/finishForm2.vue
  39. 183
      src/views/eam/equipmentMaintenanceMain/index.vue
  40. 377
      src/views/eam/equipmentMaintenanceRecordMain/equipmentMaintenanceRecordMain.data.ts
  41. 30
      src/views/eam/equipmentMaintenanceRecordMain/index.vue
  42. 141
      src/views/eam/equipmentReportRepairRequest/audiForm.vue
  43. 155
      src/views/eam/equipmentReportRepairRequest/equipmentReportRepairRequest.data.ts
  44. 194
      src/views/eam/equipmentReportRepairRequest/index.vue
  45. 142
      src/views/eam/maintenance/audiForm.vue
  46. 101
      src/views/eam/maintenance/index.vue
  47. 183
      src/views/eam/maintenance/maintenance.data.ts
  48. 1
      src/views/error/404.vue
  49. 106
      src/views/home/components/material.vue
  50. 95
      src/views/home/components/produce.vue
  51. 10
      src/views/home/components/product.vue
  52. 65
      src/views/home/components/supplierIndex.vue
  53. 9
      src/views/home/index.vue
  54. 20
      src/views/mes/productBackline/index.vue
  55. 8
      src/views/mes/productBackline/productBackline.data.ts
  56. 20
      src/views/mes/productOffline/index.vue
  57. 8
      src/views/mes/productOffline/productOffline.data.ts
  58. 1
      src/views/mes/reworkBatch/reworkBatch.data.ts
  59. 144
      src/views/qms/aql/aql.data.ts
  60. 4
      src/views/qms/inspectionJob/addForm.vue
  61. 2
      src/views/qms/inspectionJob/detail.vue
  62. 4
      src/views/qms/inspectionJob/inspectionJobMain.data.ts
  63. 2
      src/views/qms/inspectionRecord/addForm.vue
  64. 3
      src/views/qms/inspectionRecord/index.vue
  65. 10
      src/views/qms/inspectionRecord/inspectionRecordMain.data.ts
  66. 6
      src/views/qms/inspectionTemplate/addForm.vue
  67. 14
      src/views/qms/sampleCode/sampleCode.data.ts
  68. 22
      src/views/qms/samplingProcess/index.vue
  69. 4
      src/views/qms/samplingProcess/samplingProcess.data.ts
  70. 14
      src/views/system/user/UserForm.vue
  71. 14
      src/views/wms/basicDataManage/customerManage/customerdock/customerdock.data.ts
  72. 3
      src/views/wms/basicDataManage/customerManage/customerdock/index.vue
  73. 1
      src/views/wms/basicDataManage/factoryModeling/dock/dock.data.ts
  74. 23
      src/views/wms/basicDataManage/factoryModeling/dock/index.vue
  75. 6
      src/views/wms/basicDataManage/factoryModeling/location/location.data.ts
  76. 10
      src/views/wms/basicDataManage/factoryModeling/productionline/index.vue
  77. 42
      src/views/wms/basicDataManage/itemManage/itempackage/index.vue
  78. 2
      src/views/wms/basicDataManage/itemManage/itempackage/itempackage.data.ts
  79. 24
      src/views/wms/basicDataManage/itemManage/relegate/relegateRequest/index.vue
  80. 11
      src/views/wms/basicDataManage/itemManage/relegate/relegateRequest/relegateRequestMain.data.ts
  81. 6
      src/views/wms/basicDataManage/orderManage/shift/index.vue
  82. 8
      src/views/wms/basicDataManage/orderManage/shift/shift.data.ts
  83. 4
      src/views/wms/basicDataManage/orderManage/team/team.data.ts
  84. 2
      src/views/wms/basicDataManage/strategySetting/strategy/upShelfStrategy/AddForm.vue
  85. 9
      src/views/wms/basicDataManage/subject/subjectAccount/subjectAccount.data.ts
  86. 12
      src/views/wms/basicDataManage/systemSetting/supplierUser/index.vue
  87. 10
      src/views/wms/basicDataManage/systemSetting/supplierUser/supplierUser.data.ts
  88. 20
      src/views/wms/countManage/countadjust/countadjustRecordMain/countadjustRecordMain.data.ts
  89. 20
      src/views/wms/countManage/countadjust/countadjustRequestMain/countadjustRequestMain.data.ts
  90. 3
      src/views/wms/deliversettlementManage/customerreturn/customerreturnRequestMain/customerreturnRequestMain.data.ts
  91. 2
      src/views/wms/deliversettlementManage/customerreturn/customerreturnRequestMain/index.vue
  92. 3
      src/views/wms/deliversettlementManage/customersettle/customersettleRequestMain/customersettleRequestMain.data.ts
  93. 20
      src/views/wms/deliversettlementManage/deliver/deliverRequestMain/index.vue
  94. 6
      src/views/wms/deliversettlementManage/saleShipmentMainRequest/index.vue
  95. 3
      src/views/wms/deliversettlementManage/saleShipmentMainRequest/saleShipmentMain.data.ts
  96. 12
      src/views/wms/deliversettlementManage/stockup/stockupMainRequest/stockupMainRequest.data.ts
  97. 7
      src/views/wms/inventoryManage/balance/index.vue
  98. 2
      src/views/wms/inventoryjobManage/containermanage/containerMainRequest/containerMainRequest.data.ts
  99. 2
      src/views/wms/inventoryjobManage/containermanage/initialContainerMainRequest/initialContainerMainRequest.data.ts
  100. 2
      src/views/wms/inventoryjobManage/containermanage/scrapContainerMainRequest/scrapContainerMainRequest.data.ts

2
README.md

@ -1,4 +1,4 @@
## dev发布2024-05-23-002 ## dev发布2024-06-01-001
**xxxx.data.ts 文件配置说明** **xxxx.data.ts 文件配置说明**
**form表单查询弹窗配置** **form表单查询弹窗配置**
form: { form: {

4
src/api/eam/basicMaintenanceOption/index.ts

@ -1,10 +1,10 @@
import request from '@/config/axios' import request from '@/config/axios'
import {EquipmentMainPartVO} from "@/api/eam/equipmentMainPart";
export interface BasicMaintenanceOptionVO { export interface BasicMaintenanceOptionVO {
id: number id: number
code: string code: string
name: string name: string
selectId: string
describing: string describing: string
isUpdated: boolean isUpdated: boolean
type: string type: string
@ -34,7 +34,7 @@ export const getBasicMaintenanceOption = async (id: number) => {
} }
// 新增保养方案 // 新增保养方案
export const createBasicMaintenanceOption = async (data: BasicMaintenanceOptionVO) => { export const createBasicMaintenanceOption = async (data) => {
return await request.post({ url: `/eam/basic-maintenance-option/create`, data }) return await request.post({ url: `/eam/basic-maintenance-option/create`, data })
} }

32
src/api/eam/equipmentMaintenanceMain/index.ts

@ -3,27 +3,32 @@ import {EquipmentMainPartVO} from "@/api/eam/equipmentMainPart";
export interface EquipmentMaintenanceMainVO { export interface EquipmentMaintenanceMainVO {
id: number id: number
number: string
describing: string describing: string
number: string
sources: string
equipmentCode: string equipmentCode: string
type: string type: string
classes: string
planNumber: string
faultType: string faultType: string
cycle: string planNumber: string
times: string planStartTime: Date
planEndTime: Date
startTime: Date
endTime: Date
classType: string
verifyer: number verifyer: number
verifyContent: string verifyContent: string
verifyTime: Date verifyTime: Date
maintenancer: number maintenancer: number
maintenancePhone: string maintenancePhone: string
completeResult: string
completionTime: Date completionTime: Date
maintenanceTime: Date maintenanceTime: Date
status: string status: string
autoOrder: string
autoPerform: string
autoVerify: string
directCreateRecord: string
factoryAreaCode: string factoryAreaCode: string
workshopCode: string workshopCode: string
workshopSectionCode: string
departmentCode: string departmentCode: string
remark: string remark: string
siteId: string siteId: string
@ -49,6 +54,12 @@ export const getEquipmentMaintenanceMain = async (id: number) => {
return await request.get({ url: `/eam/equipment-maintenance-main/get?id=` + id }) return await request.get({ url: `/eam/equipment-maintenance-main/get?id=` + id })
} }
export const getMaintenanceOrderConfig = async () => {
return await request.get({ url: `/eam/equipment-maintenance-main/get-order-config`})
}
// 新增设备保养工单主 // 新增设备保养工单主
export const createEquipmentMaintenanceMain = async (data: EquipmentMaintenanceMainVO) => { export const createEquipmentMaintenanceMain = async (data: EquipmentMaintenanceMainVO) => {
return await request.post({ url: `/eam/equipment-maintenance-main/create`, data }) return await request.post({ url: `/eam/equipment-maintenance-main/create`, data })
@ -84,7 +95,12 @@ export const updateMaintenanceOrder = async (data: EquipmentMainPartVO) => {
return await request.post({ url: `/eam/equipment-maintenance-main/updateOrder`, data }) return await request.post({ url: `/eam/equipment-maintenance-main/updateOrder`, data })
} }
//执行保养工单 //完成保养工单
export const executeMaintenanceOrder = async (data: EquipmentMainPartVO) => { export const executeMaintenanceOrder = async (data: EquipmentMainPartVO) => {
return await request.post({ url: `/eam/equipment-maintenance-main/execute`, data }) return await request.post({ url: `/eam/equipment-maintenance-main/execute`, data })
} }
//验证不通过,打回保养工单
export const backMaintenanceOrder = async (data: EquipmentMainPartVO) => {
return await request.post({ url: `/eam/equipment-maintenance-main/fallback`, data })
}

10
src/api/eam/equipmentReportRepairRequest/index.ts

@ -71,3 +71,13 @@ export const exportEquipmentReportRepairRequest = async (params) => {
export const importTemplate = () => { export const importTemplate = () => {
return request.download({ url: '/eam/equipment-report-repair-request/get-import-template' }) return request.download({ url: '/eam/equipment-report-repair-request/get-import-template' })
} }
// 修改报修工单状态
export const updateEquipmentReportRepairOrder = async (data: EquipmentReportRepairRequestVO) => {
return await request.post({ url: `/eam/equipment-report-repair-request/updateOrder`, data })
}
// 完成并创建维修工单
export const createEquipmentWeixiuOrder = async (data: EquipmentReportRepairRequestVO) => {
return await request.post({ url: `/eam/equipment-report-repair-request/updateCreateOrder`, data })
}

11
src/api/eam/maintenance/index.ts

@ -1,5 +1,6 @@
import request from '@/config/axios' import request from '@/config/axios'
import {InspectionItemSelectSetVO} from "@/api/eam/inspectionItemSelectSet"; import {InspectionItemSelectSetVO} from "@/api/eam/inspectionItemSelectSet";
import {EquipmentMainPartVO} from "@/api/eam/equipmentMainPart";
export interface MaintenanceVO { export interface MaintenanceVO {
id: number id: number
@ -56,6 +57,11 @@ export const updateMaintenance = async (data: MaintenanceVO) => {
return await request.put({ url: `/eam/maintenance/update`, data }) return await request.put({ url: `/eam/maintenance/update`, data })
} }
// 修改保养计划-审核
export const updateMaintenanceAudi = async (data: MaintenanceVO) => {
return await request.post({ url: `/eam/maintenance/updateAudi`, data })
}
// 删除保养计划 // 删除保养计划
export const deleteMaintenance = async (id: number) => { export const deleteMaintenance = async (id: number) => {
return await request.delete({ url: `/eam/maintenance/delete?id=` + id }) return await request.delete({ url: `/eam/maintenance/delete?id=` + id })
@ -75,3 +81,8 @@ export const importTemplate = () => {
export const updateEnableCode = async (data: MaintenanceVO) => { export const updateEnableCode = async (data: MaintenanceVO) => {
return await request.post({ url: `/eam/maintenance/ables` , data }) return await request.post({ url: `/eam/maintenance/ables` , data })
} }
// 修改计划状态
export const updateMaintenancePlan = async (data: MaintenanceVO) => {
return await request.post({ url: `/eam/maintenance/updatePlan`, data })
}

57
src/api/eam/relationMaintenancePlanItem/index.ts

@ -0,0 +1,57 @@
import request from '@/config/axios'
export interface RelationMaintenancePlanItemVO {
id: number
planNumber: string
itemCode: string
itemName: string
isSelectd: boolean
departmentCode: string
remark: string
siteId: string
available: string
deletionTime: Date
deleterId: byte[]
concurrencyStamp: number
}
// 查询保养计划表和保养项关系列表
export const getRelationMaintenancePlanItemPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/eam/relation-maintenance-plan-item/senior', data })
} else {
return await request.get({ url: `/eam/relation-maintenance-plan-item/page`, params })
}
}
// 查询保养计划表和保养项关系详情
export const getRelationMaintenancePlanItem = async (id: number) => {
return await request.get({ url: `/eam/relation-maintenance-plan-item/get?id=` + id })
}
// 新增保养计划表和保养项关系
export const createRelationMaintenancePlanItem = async (data: RelationMaintenancePlanItemVO) => {
return await request.post({ url: `/eam/relation-maintenance-plan-item/create`, data })
}
// 修改保养计划表和保养项关系
export const updateRelationMaintenancePlanItem = async (data: RelationMaintenancePlanItemVO) => {
return await request.put({ url: `/eam/relation-maintenance-plan-item/update`, data })
}
// 删除保养计划表和保养项关系
export const deleteRelationMaintenancePlanItem = async (id: number) => {
return await request.delete({ url: `/eam/relation-maintenance-plan-item/delete?id=` + id })
}
// 导出保养计划表和保养项关系 Excel
export const exportRelationMaintenancePlanItem = async (params) => {
return await request.download({ url: `/eam/relation-maintenance-plan-item/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/eam/relation-maintenance-plan-item/get-import-template' })
}

37
src/api/home/index.ts

@ -20,3 +20,40 @@ export const getProductData = async () => {
return await request.get({ url: `/wms/index/indexProduct` }) return await request.get({ url: `/wms/index/indexProduct` })
} }
// 超期库存预警
export const getOverdueBalance = async (params) => {
return await request.get({ url: `/wms/index/pageOverdueBalance`,params })
}
// 呆滞库存预警
export const getStagnantBalance = async (params) => {
return await request.get({ url: `/wms/index/pageStagnantBalance` ,params})
}
// 高低储预警
export const getWarningBalance = async (params) => {
return await request.get({ url: `/wms/index/pageWarningBalance` ,params})
}
// 本月退货明细
export const getPurchasereturnRecordMonth = async (params) => {
return await request.get({ url: `/wms/index/pagePurchasereturnRecordMonth`,params })
}
// 本月索赔明细
export const getPurchaseclaimRecordMonth = async (params) => {
return await request.get({ url: `/wms/index/pagePurchaseclaimRecordMonth`,params })
}
// 今日生产计划
export const getProductionToday = async (params) => {
return await request.get({ url: `/wms/index/pageProductionToday`,params })
}
// 线边安全库存
export const getSafeLocation = async (params) => {
return await request.get({ url: `/wms/index/pageSafeLocation`,params })
}
// 待上架成品库存
export const getProductputawayJobDetail = async (params) => {
return await request.get({ url: `/wms/index/pageProductputawayJobDetail`,params })
}

5
src/api/wms/balance/index.ts

@ -105,6 +105,11 @@ export const getBalancePageSpare = async (params) => {
} }
} }
// 根据物料code 批次 和库位码查询库存余额总数
export const getSumByConditions= async (params) => {
return await request.get({ url: `/wms/balance/getSumByConditions`, params })
}
// 查询库存余额详情 // 查询库存余额详情
export const getBalance = async (id: number) => { export const getBalance = async (id: number) => {
return await request.get({ url: `/wms/balance/get?id=` + id }) return await request.get({ url: `/wms/balance/get?id=` + id })

5
src/api/wms/inventoryinitRecordDetail/index.ts

@ -73,3 +73,8 @@ export const exportInventoryinitRecordDetail = async (params) => {
export const importTemplate = () => { export const importTemplate = () => {
return request.download({ url: '/wms/inventoryinit-record-detail/get-import-template' }) return request.download({ url: '/wms/inventoryinit-record-detail/get-import-template' })
} }
// 批量打印
export const printLabelBatchByIdSelection = async (data: any) => {
return await request.post({ url: `/wms/inventoryinit-record-main/printLabelBatchById` ,data})
}

5
src/api/wms/inventorymoveRecordMain/index.ts

@ -126,3 +126,8 @@ export const exportScrapToHoldRecordMain = async (params) => {
export const importTemplate = () => { export const importTemplate = () => {
return request.download({ url: '/wms/inventorymove-record-main/get-import-template' }) return request.download({ url: '/wms/inventorymove-record-main/get-import-template' })
} }
// 下载用户导入模板(除库存移动外)
export const importTemplateExceptMove = () => {
return request.download({ url: '/wms/inventorymove-record-main/get-import-template-exceptMove' })
}

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

@ -38,7 +38,7 @@ export const getLocationPageRepleinsh = async (params) => {
if (params.isSearch) { if (params.isSearch) {
delete params.isSearch delete params.isSearch
const data = {...params} const data = {...params}
return request.post({ url: '/wms/location/senior', data }) return request.post({ url: '/wms/location/getForRepleinshSenior', data })
} else { } else {
return await request.get({ url: `/wms/location/pageForRepleinsh`, params }) return await request.get({ url: `/wms/location/pageForRepleinsh`, params })
} }
@ -68,6 +68,17 @@ export const deleteLocation = async (id: number) => {
return await request.delete({ url: `/wms/location/delete?id=` + id }) return await request.delete({ url: `/wms/location/delete?id=` + id })
} }
// 根据业务类型以及库区查询库位列表
export const getLocationListByAreaAndBusinesstype = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return request.post({ url: '/wms/location/pageBusinessTypeToLocationSenior1', data })
} else {
return await request.get({ url: `/wms/location/pageBusinessTypeToLocation1`, params })
}
}
// 导出库位 Excel // 导出库位 Excel
export const exportLocation = async (params) => { export const exportLocation = async (params) => {
if (params.isSearch) { if (params.isSearch) {

11
src/api/wms/qadproductionplan/index.ts

@ -26,6 +26,17 @@ export const getQadProductionPlanMainPage = async (params) => {
return await request.get({ url: `/wms/qad-production-plan-main/page`, params }) return await request.get({ url: `/wms/qad-production-plan-main/page`, params })
} }
} }
export const getQadProductionPlanDetailPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/qad-production-plan-detail/senior', data })
} else {
return await request.get({ url: `/wms/qad-production-plan-detail/page`, params })
}
}
// 查询QAD生产计划主详情 // 查询QAD生产计划主详情
export const getQadProductionPlanMain = async (id: number) => { export const getQadProductionPlanMain = async (id: number) => {

6
src/api/wms/supplierdeliverRequestMain/index.ts

@ -96,6 +96,12 @@ export const genLabel = async (data:SupplierdeliverRequestMainVO) => {
return await request.post({ url: `/wms/supplierdeliver-request-main/genLabel`,data }) return await request.post({ url: `/wms/supplierdeliver-request-main/genLabel`,data })
} }
// 校验是否修改了包装数量
export const checkPackQty = async (data:SupplierdeliverRequestMainVO) => {
return await request.post({ url: `/wms/supplierdeliver-request-main/checkPackQty`,data })
}
// 生成记录 // 生成记录
export const genRecordsSupplierdeliverRequestMain = async (id) => { export const genRecordsSupplierdeliverRequestMain = async (id) => {
return await request.post({ url: `/wms/supplierdeliver-request-main/genRecords?id=` + id }) return await request.post({ url: `/wms/supplierdeliver-request-main/genRecords?id=` + id })

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

@ -97,6 +97,11 @@ export const financerejSupplierinvoiceRequestMain = async (id: number) => {
return await request.post({ url: `/wms/supplierinvoice-request-main/financeRej?id=` + id }) return await request.post({ url: `/wms/supplierinvoice-request-main/financeRej?id=` + id })
} }
// 作废--供应商发货申请主
export const repealSupplierinvoiceRequestMain = async (id: number) => {
return await request.post({ url: `/wms/supplierinvoice-request-main/repeal?id=` + id })
}
// 生成记录 // 生成记录
export const genRecordsSupplierinvoiceRequestMain = async (id) => { export const genRecordsSupplierinvoiceRequestMain = async (id) => {
return await request.post({ url: `/wms/supplierinvoice-request-main/genRecords?id=` + id }) return await request.post({ url: `/wms/supplierinvoice-request-main/genRecords?id=` + id })

3
src/api/wms/unplannedissueRecordDetail/index.ts

@ -38,6 +38,9 @@ export const getUnplannedissueRecordDetailPage = async (params) => {
'action':'==', 'action':'==',
'value':'1' 'value':'1'
} }
if(!data.filters){
data.filters = []
}
data.filters.push(dataTypeCondition) data.filters.push(dataTypeCondition)
return await request.post({ url: '/wms/unplannedissue-record-detail/senior', data }) return await request.post({ url: '/wms/unplannedissue-record-detail/senior', data })
} else { } else {

3
src/api/wms/unplannedissueRequestDetail/index.ts

@ -33,6 +33,9 @@ export const getUnplannedissueRequestDetailPage = async (params) => {
'action':'==', 'action':'==',
'value':'1' 'value':'1'
} }
if(!data.filters){
data.filters = [];
}
data.filters.push(dataTypeCondition) data.filters.push(dataTypeCondition)
return await request.post({ url: '/wms/unplannedissue-request-detail/senior', data }) return await request.post({ url: '/wms/unplannedissue-request-detail/senior', data })
} else { } else {

13
src/components/BasicForm/src/BasicForm.vue

@ -130,6 +130,7 @@ import ButtonBase from '@/components/XButton/src/ButtonBase.vue'
import TableForm from '@/components/TableForm/src/TableForm.vue' import TableForm from '@/components/TableForm/src/TableForm.vue'
import TableFormCountPlan from '@/components/TableFormCountPlan/src/TableFormCountPlan.vue' import TableFormCountPlan from '@/components/TableFormCountPlan/src/TableFormCountPlan.vue'
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict' import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
import { debounce } from 'lodash-es'
const props = defineProps({ const props = defineProps({
// //
@ -390,6 +391,13 @@ const opensearchTable = (
return return
} }
}else if(searchCondition[i].isTableRowValue){ }else if(searchCondition[i].isTableRowValue){
if(searchCondition[i].required){
if (row[searchCondition[i].value] == '' ||row[searchCondition[i].value] == undefined) {
message.warning(searchCondition[i].message?searchCondition[i].message:'前置条件未选择!')
return
}
}
row[searchCondition[i].value]
//table //table
_searchCondition[searchCondition[i].key] = row[searchCondition[i].value] _searchCondition[searchCondition[i].key] = row[searchCondition[i].value]
} else { } else {
@ -558,7 +566,9 @@ const buttonBaseClick = (val) => {
} }
// //
else if (val == 'save') { else if (val == 'save') {
debounce(() => {
submitForm() submitForm()
}, 2000)()
} }
// //
else if (val == 'close') { else if (val == 'close') {
@ -731,7 +741,6 @@ const clearInput = (field, row, index) => {
* @param cur 改变后值 * @param cur 改变后值
*/ */
const onChange = (field, cur) => { const onChange = (field, cur) => {
console.log(2222222222222)
emit('onChange', field, cur, formRef) emit('onChange', field, cur, formRef)
} }
@ -774,7 +783,7 @@ const buttonOperationClick = (row, label, index)=> {
const inputStringBlur = (headerItem, row, index)=> { const inputStringBlur = (headerItem, row, index)=> {
emit("inputStringBlur", headerItem, row, index); emit("inputStringBlur", headerItem, row, index);
} }
defineExpose({ open, formRef, opensearchTable, dialogVisible, formLoading ,handleAddTable}) // open defineExpose({ open, formRef, opensearchTable, dialogVisible, formLoading ,handleAddTable,changeDialogWidth}) // open
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

2
src/components/SearchHigh/src/SearchHigh.vue

@ -86,7 +86,7 @@ const moreListData = ref({
// - // -
const butttondata = [ const butttondata = [
defaultButtons.defaultSearchBtn(null), // defaultButtons.defaultSearchBtn(null), //
defaultButtons.defaultSearchResetBtn(null), // // defaultButtons.defaultSearchResetBtn(null), //
] ]
// ==,!=,>,<,>=,<=,like,in,notIn,betweeen,isNull,isNotNull // ==,!=,>,<,>=,<=,like,in,notIn,betweeen,isNull,isNotNull
const moreListOptions = ref({ const moreListOptions = ref({

46
src/components/SearchTable/src/SearchTable.vue

@ -10,6 +10,7 @@
:HeadButttondata="HeadButttondata" :HeadButttondata="HeadButttondata"
:routeName="routeName" :routeName="routeName"
@searchFormClick="searchFormClick" @searchFormClick="searchFormClick"
@buttonBaseClick="buttonBaseClick"
:allSchemas="allSchemasRef" :allSchemas="allSchemasRef"
/> />
<ContentWrap> <ContentWrap>
@ -26,6 +27,7 @@
v-model:sort="tableObjectRef.sort" v-model:sort="tableObjectRef.sort"
:searchTableSelectionsList="searchTableSelectionsList" :searchTableSelectionsList="searchTableSelectionsList"
:selection="true" :selection="true"
:selectionTotal="multipleBol"
:reserveSelection="true" :reserveSelection="true"
row-key="id" row-key="id"
/> />
@ -53,10 +55,18 @@ routeName.value = route.name
const searchDialogVisible = ref(false) // const searchDialogVisible = ref(false) //
const dialogTitle = ref('') // const dialogTitle = ref('') //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
const multipleBol = ref(false)
// //
const HeadButttondata = ref([ const HeadButttondata = ref(multipleBol.value?
[
defaultButtons.defaultWhenPageBtn(null), //
defaultButtons.defaultUnselectPageBtn(null), //
defaultButtons.defaultDeselectAllBtn(null), //
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
]:[
defaultButtons.defaultFilterBtn(null) //
]) ])
/** 打开弹窗 */ /** 打开弹窗 */
@ -71,26 +81,37 @@ const searchFieldRef = ref()
const typeRef = ref() const typeRef = ref()
const rowRef = ref() const rowRef = ref()
const allSchemasRef = ref() const allSchemasRef = ref()
const multipleBol = ref(false)
const searchConditionRef = ref() const searchConditionRef = ref()
const searchTableSelectionsList = ref()// const searchTableSelectionsList = ref()//
const openData = (titleName: any, tableObject:any ,allSchemas: any,multiple: any) => { const openData = (titleName: any, tableObject:any ,allSchemas: any,multiple: any) => {
dialogWidth.value = '80%' dialogWidth.value = '80%'
HeadButttondata.value = [ multipleBol.value = multiple
HeadButttondata.value = multiple?[
defaultButtons.defaultWhenPageBtn(null), //
defaultButtons.defaultUnselectPageBtn(null), //
defaultButtons.defaultDeselectAllBtn(null), //
defaultButtons.defaultFilterBtn(null), //
]:[
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
] ]
dialogTitle.value = t(`ts.${titleName}`).replace('ts.','') dialogTitle.value = t(`ts.${titleName}`).replace('ts.','')
tableObjectRef.value = tableObject tableObjectRef.value = tableObject
searchDialogVisible.value = true searchDialogVisible.value = true
multipleBol.value = multiple
allSchemasRef.value = allSchemas allSchemasRef.value = allSchemas
searchSchema.value = allSchemas.searchSchema searchSchema.value = allSchemas.searchSchema
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, searchTableSelections: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, searchTableSelections:any) => {
dialogWidth.value = '80%' dialogWidth.value = '80%'
HeadButttondata.value = [ multipleBol.value = multiple
HeadButttondata.value = multiple?[
defaultButtons.defaultWhenPageBtn(null), //
defaultButtons.defaultUnselectPageBtn(null), //
defaultButtons.defaultDeselectAllBtn(null), //
defaultButtons.defaultFilterBtn(null), //
]:
[
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
] ]
searchDialogVisible.value = true searchDialogVisible.value = true
@ -108,7 +129,6 @@ const open = (titleName: any, allSchemas: any,getApiPage: any, formField: any, s
getPage.value = getApiPage getPage.value = getApiPage
typeRef.value = type typeRef.value = type
rowRef.value = row rowRef.value = row
multipleBol.value = multiple
// dialogTitle.value = t('action.' + type) // dialogTitle.value = t('action.' + type)
dialogTitle.value = t(`ts.${titleName}`).replace('ts.','') dialogTitle.value = t(`ts.${titleName}`).replace('ts.','')
searchTableSelectionsList.value = searchTableSelections searchTableSelectionsList.value = searchTableSelections
@ -175,6 +195,20 @@ const searchFormClick = (searchData) => {
} }
getListRef.value() // getListRef.value() //
} }
const buttonBaseClick = (val, item) => {
//
if (val == 'DeselectAll') {
//
searchTableRef.value.clearSelection()
} else if (val == 'UnselectPage') {
//
searchTableRef.value.togglePageSelection()
} else if (val == 'WhenPage') {
//
searchTableRef.value.toggleAllSelection(true)
}
}
defineExpose({ open,openData,hiddenFilterButton ,changeDialogWidth}) // open defineExpose({ open,openData,hiddenFilterButton ,changeDialogWidth}) // open

40
src/components/Table/src/Table.vue

@ -21,6 +21,8 @@ export default defineComponent({
currentPage: propTypes.number.def(1), currentPage: propTypes.number.def(1),
// //
selection: propTypes.bool.def(false), selection: propTypes.bool.def(false),
//
selectionTotal: propTypes.bool.def(false),
// schemashowOverflowTooltip, // schemashowOverflowTooltip,
showOverflowTooltip: propTypes.bool.def(true), showOverflowTooltip: propTypes.bool.def(true),
// //
@ -115,12 +117,36 @@ export default defineComponent({
const selections = ref<Recordable[]>([]) const selections = ref<Recordable[]>([])
const sortRef = ref() const sortRef = ref()
//
const selectRow = ()=>{ const selectRow = ()=>{
emit('getSelectionRows', currentPageRef.value,elTableRef.value?.getSelectionRows()) emit('getSelectionRows', currentPageRef.value,elTableRef.value?.getSelectionRows())
} }
const selectAll = (val)=>{ //
const selectAll = ()=>{
emit('getSelectionRows', currentPageRef.value,elTableRef.value?.getSelectionRows()) emit('getSelectionRows', currentPageRef.value,elTableRef.value?.getSelectionRows())
} }
//
const togglePageSelection = ()=>{
unref(getProps).data.forEach(row=>{
elTableRef.value!.toggleRowSelection(row)
})
}
// /
const toggleAllSelection = (isAll)=>{
if(isAll){
//
if(elTableRef.value?.getSelectionRows().length<unref(getProps).data.length){
elTableRef.value!.toggleAllSelection()
}
}
}
//
const clearSelection = ()=>{
console.log('clearSelection')
elTableRef.value!.clearSelection()
}
const selectionChange = (selection: Recordable[]) => { const selectionChange = (selection: Recordable[]) => {
selections.value = selection selections.value = selection
} }
@ -134,7 +160,11 @@ export default defineComponent({
setProps, setProps,
setColumn, setColumn,
selections, selections,
toggleRowSelection toggleRowSelection,
selectAll,
toggleAllSelection,
togglePageSelection,
clearSelection
}) })
const pagination = computed(() => { const pagination = computed(() => {
@ -358,13 +388,15 @@ export default defineComponent({
append: () => getSlot(slots, 'append') append: () => getSlot(slots, 'append')
}} }}
</ElTable> </ElTable>
{unref(getProps).selectionTotal ? (
<div class="mt-5px">已选{selections.value.length}条数据</div>
):undefined}
{unref(getProps).pagination ? ( {unref(getProps).pagination ? (
// update by Pagination // update by Pagination
<ElPagination <ElPagination
v-model:pageSize={pageSizeRef.value} v-model:pageSize={pageSizeRef.value}
v-model:currentPage={currentPageRef.value} v-model:currentPage={currentPageRef.value}
class="float-right mb-15px mt-15px" class="float-right mt-15px"
{...unref(pagination)} {...unref(pagination)}
></ElPagination> ></ElPagination>
) : undefined} ) : undefined}

2
src/components/TableDetail/src/TableDetail.vue

@ -1,7 +1,7 @@
<template> <template>
<!-- 详情 --> <!-- 详情 -->
<div class="expandTable" :style="{width:width}" style="padding:10px"> <!-- 列表头部 --> <div class="expandTable" :style="{width:width}" style="padding:10px"> <!-- 列表头部 -->
<Table style="width:100%;border:1px solid red" <Table style="width:100%;"
:columns="detailAllSchemasRef.tableColumns" :columns="detailAllSchemasRef.tableColumns"
:data="tableObjectRef.tableList" :data="tableObjectRef.tableList"
:loading="tableObjectRef.loading" :loading="tableObjectRef.loading"

2
src/components/XButton/src/ButtonBase.vue

@ -11,7 +11,7 @@
@click="buttonBaseClick(item.name, item, $event)" @click="buttonBaseClick(item.name, item, $event)"
> >
<Icon v-if="item.icon" :icon="item.icon" class="mr-1px" /> <Icon v-if="item.icon" :icon="item.icon" class="mr-1px" />
{{ item.label }} <span :style="{width:item.width+'px'||'auto'}" :class="[item.width?'ellipsis':'']">{{ item.label }}</span>
</el-button> </el-button>
<!-- 设置按钮 --> <!-- 设置按钮 -->
<el-popover <el-popover

2
src/config/axios/config.ts

@ -16,7 +16,7 @@ const config: {
/** /**
* *
*/ */
request_timeout: 30000, request_timeout: 300000,
/** /**
* *

4
src/config/axios/index.ts

@ -2,6 +2,7 @@ import { service } from './service'
import { config } from './config' import { config } from './config'
import { useCache } from '@/hooks/web/useCache' import { useCache } from '@/hooks/web/useCache'
import router from '@/router'
const { default_headers } = config const { default_headers } = config
const { wsCache } = useCache() const { wsCache } = useCache()
@ -18,7 +19,8 @@ const request = (option: any) => {
responseType: responseType, responseType: responseType,
headers: { headers: {
'Content-Type': headersType || default_headers, 'Content-Type': headersType || default_headers,
'language': language 'language': language,
'Referer1': router.currentRoute.value.fullPath.split('?')[0]
} }
}) })
} }

15
src/hooks/web/useMessage.ts

@ -59,11 +59,20 @@ export const useMessage = () => {
type: 'warning' type: 'warning'
}) })
}, },
// 确认窗体 // 验证窗体
confirmPassword(content: string, tip?: string) { confirmPassword(content: string, tip?: string) {
return ElMessageBox.confirm(content, tip ? tip : t('common.confirmTitle'), { return ElMessageBox.confirm(content, tip ? tip : t('common.confirmTitle'), {
confirmButtonText: t('通过'), confirmButtonText: t('验证通过'),
cancelButtonText: t('不通过'), cancelButtonText: t('验证不通过'),
type: 'warning'
})
},
// 审核窗体
confirmAudi(content: string, tip?: string) {
return ElMessageBox.confirm(content, tip ? tip : t('common.confirmTitle'), {
distinguishCancelAndClose: true,
confirmButtonText: t('审核通过'),
cancelButtonText: t('审核不通过'),
type: 'warning' type: 'warning'
}) })
}, },

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

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

6
src/locales/en-US.ts

@ -774,6 +774,7 @@ export default {
:'Item packaging information', :'Item packaging information',
:'System Prompt', :'System Prompt',
:'Do you generate labels for this data?', :'Do you generate labels for this data?',
:'Do you want to modify the quantity of material packaging?',
:'Do you process the selected data?', :'Do you process the selected data?',
:'shipments', :'shipments',
:'Label information', :'Label information',
@ -863,6 +864,9 @@ export default {
:'Export', :'Export',
:'Refresh', :'Refresh',
:'Filter', :'Filter',
:'As Page',
:'Unselect Page',
:'Deselect All',
:'Settings', :'Settings',
:'Confirm', :'Confirm',
'确 定':'Confirm', '确 定':'Confirm',
@ -938,6 +942,7 @@ export default {
:'Unit Price', :'Unit Price',
'是否发布所选中数据?':'Do you publish the selected data?', '是否发布所选中数据?':'Do you publish the selected data?',
'是否关闭所选中数据?':'Do you want to close the selected data?', '是否关闭所选中数据?':'Do you want to close the selected data?',
'是否作废所选中数据?':'Do you want to void the selected data?',
'发布成功!':'Release Successfully!', '发布成功!':'Release Successfully!',
'是否下架所选中数据?':'Do you want to remove selected data?', '是否下架所选中数据?':'Do you want to remove selected data?',
'下架成功!':'Removed Successfully!', '下架成功!':'Removed Successfully!',
@ -946,6 +951,7 @@ export default {
'是否打开所选中数据?':'Open the selected data?', '是否打开所选中数据?':'Open the selected data?',
'打开成功!':'Open Successfully!', '打开成功!':'Open Successfully!',
'关闭成功!':'Closed Successfully', '关闭成功!':'Closed Successfully',
'作废成功!':'Invalid successfully',
'失效时间要大于生效时间':'The expiration time must be longer than the effective time', '失效时间要大于生效时间':'The expiration time must be longer than the effective time',
'供应商导入模版':'Supplier import template', '供应商导入模版':'Supplier import template',
'供应商物料':'Supplier Material', '供应商物料':'Supplier Material',

8
src/locales/zh-CN.ts

@ -79,7 +79,7 @@ export default {
}, },
error: { error: {
noPermission: `抱歉,您无权访问此页面。`, noPermission: `抱歉,您无权访问此页面。`,
pageError: '抱歉,您访问的页面不存在', pageError: '抱歉,您访问的页面不存在',
networkError: '抱歉,服务器报告错误。', networkError: '抱歉,服务器报告错误。',
returnToHome: '返回首页' returnToHome: '返回首页'
}, },
@ -774,6 +774,7 @@ export default {
:'物品包装信息', :'物品包装信息',
:'系统提示', :'系统提示',
:'是否为此数据生成标签', :'是否为此数据生成标签',
:'是否修改物料包装标包数量',
:'是否处理所选中数据', :'是否处理所选中数据',
:'发货', :'发货',
:'标签信息', :'标签信息',
@ -863,6 +864,9 @@ export default {
:'导出', :'导出',
:'刷新', :'刷新',
:'筛选', :'筛选',
:'选择当页',
:'反选当页',
:'取消全选',
:'设置', :'设置',
:'确定', :'确定',
'确 定':'确 定', '确 定':'确 定',
@ -938,6 +942,7 @@ export default {
:'单价', :'单价',
'是否发布所选中数据?':'是否发布所选中数据?', '是否发布所选中数据?':'是否发布所选中数据?',
'是否关闭所选中数据?':'是否关闭所选中数据?', '是否关闭所选中数据?':'是否关闭所选中数据?',
'是否作废所选中数据?':'是否作废所选中数据?',
'发布成功!':'发布成功!', '发布成功!':'发布成功!',
'是否下架所选中数据?':'是否下架所选中数据?', '是否下架所选中数据?':'是否下架所选中数据?',
'下架成功!':'下架成功!', '下架成功!':'下架成功!',
@ -946,6 +951,7 @@ export default {
'是否打开所选中数据?':'是否打开所选中数据?', '是否打开所选中数据?':'是否打开所选中数据?',
'打开成功!':'打开成功!', '打开成功!':'打开成功!',
'关闭成功!':'关闭成功!', '关闭成功!':'关闭成功!',
'作废成功!':'作废成功!',
'失效时间要大于生效时间':'失效时间要大于生效时间', '失效时间要大于生效时间':'失效时间要大于生效时间',
'供应商导入模版':'供应商导入模版', '供应商导入模版':'供应商导入模版',
'供应商物料':'供应商物料', '供应商物料':'供应商物料',

8
src/styles/index.scss

@ -33,3 +33,11 @@
border-left-color: var(--el-color-primary); border-left-color: var(--el-color-primary);
} }
} }
.ellipsis{
overflow: hidden;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
word-break: break-all;
}

4
src/utils/dict.ts

@ -357,5 +357,7 @@ export enum DICT_TYPE {
EAM_ORDER_STATUS = 'eam_order_status',// 工单状态 EAM_ORDER_STATUS = 'eam_order_status',// 工单状态
TOOL_CLASS = 'tool_class', //工装类型 TOOL_CLASS = 'tool_class', //工装类型
TOOL_OUT_TYPE = 'tool_out_type', //工装出库类型 TOOL_OUT_TYPE = 'tool_out_type', //工装出库类型
EAM_PLAN_STATUS = 'eam_plan_status', // 保养计划状态
EAM_REPAIR_STATUS = 'eam_repair_status', // 报修状态
OFF_BACK_STATUS = 'off_back_status'
} }

95
src/utils/disposition/defaultButtons.ts

@ -159,7 +159,45 @@ export function defaultSearchResetBtn(option:any) {
hasPermi: '' hasPermi: ''
}) })
} }
// 选择当页
export function defaultWhenPageBtn(option:any) {
return __defaultBtnOption(option,{
label: t(`ts.选择当页`).replace('ts.', ''),
name: 'WhenPage',
hide: false,
type: 'primary',
color: '',
float:'right',
link: false, // 文本展现按钮
hasPermi: ''
})
}
// 反选当页
export function defaultUnselectPageBtn(option:any) {
return __defaultBtnOption(option,{
label: t(`ts.反选当页`).replace('ts.', ''),
name: 'UnselectPage',
hide: false,
type: 'primary',
color: '',
float:'right',
link: false, // 文本展现按钮
hasPermi: ''
})
}
// 取消全选
export function defaultDeselectAllBtn(option:any) {
return __defaultBtnOption(option,{
label: t(`ts.取消全选`).replace('ts.', ''),
name: 'DeselectAll',
hide: false,
type: 'primary',
color: '',
float:'right',
link: false, // 文本展现按钮
hasPermi: ''
})
}
// form表单-保存按钮 // form表单-保存按钮
export function formSaveBtn(option:any) { export function formSaveBtn(option:any) {
return __defaultBtnOption(option,{ return __defaultBtnOption(option,{
@ -377,6 +415,45 @@ export function mainListValidateBtn(option:any) {
}) })
} }
// 主列表-审核按钮
export function mainListAuditingBtn(option:any) {
return __defaultBtnOption(option,{
label: t(`ts.审核`).replace('ts.', ''),
name: 'auditing',
hide: false,
type: 'primary',
color: '',
link: true, // 文本展现按钮
hasPermi: ''
})
}
// 主列表-审核完成按钮
export function mainListAuditedBtn(option:any) {
return __defaultBtnOption(option,{
label: t(`ts.审核完成`).replace('ts.', ''),
name: 'audited',
hide: false,
type: 'primary',
color: '',
link: true, // 文本展现按钮
hasPermi: ''
})
}
// 主列表-撤回按钮
export function mainListRevokeBtn(option:any) {
return __defaultBtnOption(option,{
label: t(`ts.撤回`).replace('ts.', ''),
name: 'revoke',
hide: false,
type: 'primary',
color: '',
link: true, // 文本展现按钮
hasPermi: ''
})
}
// 主列表-绑定 // 主列表-绑定
export function mainListBindBtn(option:any) { export function mainListBindBtn(option:any) {
return __defaultBtnOption(option,{ return __defaultBtnOption(option,{
@ -479,7 +556,19 @@ export function mainListOrderPubBtn(option:any) {
hasPermi: '' hasPermi: ''
}) })
} }
// 主列表-订单流程-批量发布按钮
export function mainListSelectionOrderPubBtn(option:any) {
return __defaultBtnOption(option,{
label: t(`ts.发布`).replace('ts.', ''),
name: 'mainOrderSelectionPub',
hide: false,
type: 'primary',
color: '',
float:'left',
link: false, // 文本展现按钮
hasPermi: ''
})
}
// 主列表-订单流程-关闭按钮 // 主列表-订单流程-关闭按钮
export function mainListOrderCloBtn(option:any) { export function mainListOrderCloBtn(option:any) {
return __defaultBtnOption(option,{ return __defaultBtnOption(option,{
@ -552,6 +641,7 @@ export function mainListPlanUploadQualityReportBtn(option:any) {
name: 'mainPlanUploadQualityReport', name: 'mainPlanUploadQualityReport',
hide: false, hide: false,
type: 'primary', type: 'primary',
width:86,
color: '', color: '',
link: true, // 文本展现按钮 link: true, // 文本展现按钮
hasPermi: '' hasPermi: ''
@ -1013,6 +1103,7 @@ function __defaultBtnOption(option:any,specific:any){
hide:option && option.hide ? option.hide : specific.hide, hide:option && option.hide ? option.hide : specific.hide,
link:option && option.link ? option.link : specific.link, link:option && option.link ? option.link : specific.link,
hasPermi:option && option.hasPermi ? option.hasPermi : specific.hasPermi, hasPermi:option && option.hasPermi ? option.hasPermi : specific.hasPermi,
width:option && option.width ? option.width : specific.width,
...option ...option
} }
} }

20
src/utils/validator.ts

@ -315,6 +315,23 @@ export function validateTwoNum(rule, value, callback) {
} }
callback() callback()
} }
// 数字格式 小数点后六位
export function validateSixNum(rule, value, callback) {
if (value) {
const numReg = /^\d+(\.\d+)?$/
const numTwoReg = /^\d*\.{0,6}\d{0,6}$/
if (numReg.test(value)) {
if (numTwoReg.test(value)) {
callback()
} else {
callback(new Error('小数点后最多6位'))
}
} else {
callback(new Error('请输入数字'))
}
}
callback()
}
// 小数点前位数不得大于6位 // 小数点前位数不得大于6位
export function validateNumSix(rule, value, callback) { export function validateNumSix(rule, value, callback) {
if (value) { if (value) {
@ -804,5 +821,6 @@ export default {
validateYS, validateYS,
validateMaxNumber5, validateMaxNumber5,
validatePercent, validatePercent,
validateNumSix validateNumSix,
validateSixNum
} }

27
src/views/eam/basicMaintenanceOption/index.vue

@ -39,16 +39,17 @@
</ContentWrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<BasicForm <!-- <BasicForm-->
ref="basicFormRef" <!-- ref="basicFormRef"-->
@success="formsSuccess" <!-- @success="formsSuccess"-->
:rules="BasicMaintenanceOptionRules" <!-- :rules="BasicMaintenanceOptionRules"-->
:formAllSchemas="BasicMaintenanceOption.allSchemas" <!-- :formAllSchemas="BasicMaintenanceOption.allSchemas"-->
:apiUpdate="BasicMaintenanceOptionApi.updateBasicMaintenanceOption" <!-- :apiUpdate="BasicMaintenanceOptionApi.updateBasicMaintenanceOption"-->
:apiCreate="BasicMaintenanceOptionApi.createBasicMaintenanceOption" <!-- :apiCreate="BasicMaintenanceOptionApi.createBasicMaintenanceOption"-->
@searchTableSuccess="searchTableSuccess" <!-- @searchTableSuccess="searchTableSuccess"-->
:isBusiness="false" <!-- :isBusiness="false"-->
/> <!-- />-->
<ItemForm ref="basicFormRef" @success="getData"/>
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="BasicMaintenanceOption.allSchemas" /> <Detail ref="detailRef" :isBasic="true" :allSchemas="BasicMaintenanceOption.allSchemas" />
@ -65,6 +66,7 @@ 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/src/Detail.vue' import Detail from '@/components/Detail/src/Detail.vue'
import ItemForm from "@/views/eam/basicMaintenanceOption/itemSelectSetForm.vue";
defineOptions({ name: 'BasicMaintenanceOption' }) defineOptions({ name: 'BasicMaintenanceOption' })
@ -205,6 +207,11 @@ const formsSuccess = async (formType,data) => {
getList() getList()
} }
//
const getData = async() => {
getList();
}
/** 详情操作 */ /** 详情操作 */
const detailRef = ref() const detailRef = ref()
const openDetail = (row: any, titleName: any, titleValue: any) => { const openDetail = (row: any, titleName: any, titleValue: any) => {

391
src/views/eam/basicMaintenanceOption/itemSelectSetForm.vue

@ -0,0 +1,391 @@
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle">
<el-form
ref="basicFormRef"
v-loading="formLoading"
:model="formData"
:rules="formRules"
label-width="100px"
>
<el-row>
<el-col :span="12">
<el-form-item label="方案编号" prop="code">
<el-input v-model="formData.code" placeholder="方案编号" :disabled="isDisabled"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="方案名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入方案名称" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否可修改" prop="isUpdated">
<el-select v-model="formData.isUpdated" style="width: 200px">
<el-option label="是" value="TRUE"></el-option>
<el-option label="否" value="FALSE"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="描述" prop="describing">
<el-input v-model="formData.describing" placeholder="请输入描述" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否可用" prop="available">
<el-select v-model="formData.available" style="width: 200px">
<el-option label="是" value="TRUE"></el-option>
<el-option label="否" value="FALSE"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="选择集ID" prop="selectId">
<div class="tag-container flex gap-2">
<el-tag v-for="ent in tags" :key="ent.selectId" closable :disable-transitions="false" @close="handleClose(ent.selectId)">
{{ ent.selectId}}
</el-tag>
<el-input v-if="inputVisible" ref="InputRef" v-model="inputValue" class="w-20" size="small"/>
<el-button v-else class="button-new-tag" size="small" @click="addItem">
添加保养选择集
</el-button>
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-table :data="maintenanceItemData" style="width: 100%; height: 80%">
<el-table-column prop="itemCode" label="保养项ID" />
<el-table-column prop="itemName" label="保养名称" />
<!-- <el-table-column prop="equipmentParts" label="保养部位" />-->
<el-table-column prop="isSelectd" label="" width="150" >
<template #header>
<span>是否必选默认是</span>
</template>
<template #default="scope">
<el-switch
v-model="scope.row.isSelectd"
active-color="#13ce66"
inactive-color="#ff4949"
active-text="是"
inactive-text="否"
/>
</template>
</el-table-column>
</el-table>
<template #footer>
<el-button :disabled="formLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
</template>
</Dialog>
<!--添加巡检项弹窗-->
<SearchTable ref="searchTableRef" @searchTableSuccess="searchTableSuccess" />
</template>
<script lang="ts" setup>
import * as BasicMaintenanceOptionApi from '@/api/eam/basicMaintenanceOption'
import request from "@/config/axios";
import { SearchTable } from '@/components/SearchTable'
import { BasicMaintenanceItemSelectSet} from "@/views/eam/maintenanceItemSelectSet/maintenanceItemSelectSet.data";
import * as maintenanceItemSelectSetApi from "@/api/eam/maintenanceItemSelectSet";
import {ElInput} from "element-plus";
import {
BasicMaintenanceOptionVO,
createBasicMaintenanceOption, updateBasicMaintenanceOption
} from "@/api/eam/basicMaintenanceOption";
defineOptions({ name: 'TeamForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const tags=ref([])
const inputValue = ref('')
const inputVisible = ref(false)
const isDisabled = ref(false)
const InputRef = ref<InstanceType<typeof ElInput>>()
//
const maintenanceItemData = ref([])
const itemData = ref({
id: '',
content: '',
selectId:''
})
const formData = ref({
code: '',
name: '',
describing: '',
isUpdated: '',
remark: '',
available: '',
selectId: '',
optionItem:[]
})
const formRules = reactive({
code: [
{ required: true, message: '方案编号不能为空', trigger: 'blur' },
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
name: [
{ required: true, message: '方案名称不能为空', trigger: 'blur' },
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
isUpdated: [
{ required: true, message: '不能为空', trigger: 'blur' },
],
available: [
{ required: true, message: '不能为空', trigger: 'blur' },
],
remark: [
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
})
const basicFormRef = ref() // Ref
/** 删除巡检项 */
const handleClose = (id: string) => {
console.log(id)
console.log(tags)
const index = tags.value.findIndex(tag => tag.selectId === id);
if (index !== -1) {
tags.value.splice(index, 1);
}
}
/** 弹窗相关参数 */
const searchTableRef = ref();
const _searchTableTitle = ref();
const _searchTableAllSchemas = ref();
const _searchTablePage = ref();
const _formField = ref();
const _searchField = ref();
const _multiple = ref();
const _type = ref();
const _row = ref();
const _searchCondition = ref({})
const addItem = () =>{
addItemCommon(true,'baoYangItem')
}
/** 选择巡检项弹窗 */
const addItemCommon = (multiple,field) => {
_searchCondition.value = {}
const filters: any[] = []
filters.push({
action: "==",
column: 'available',
value: 'TRUE'
})
//
_searchCondition.value.isSearch = true
_searchCondition.value.filters = filters
_searchTableTitle.value = '选择保养项'
//_multiple.value = multiple
_formField.value = field
_searchField.value = field
_searchTablePage.value = maintenanceItemSelectSetApi.getBasicMaintenanceItemSelectSetPage
_searchTableAllSchemas.value = BasicMaintenanceItemSelectSet.allSchemas
openCommon()
}
/** 弹窗选择之后 回调函数 添加选择集 */
const searchTableSuccess = (formField, searchField, val, formRef, type, row ) => {
nextTick?.(async () => {
if (formField === 'baoYangItem') {
let itemsId = '';
//ID
val.forEach(item => {
const isExist = tags.value.some(tag => tag.id === item.id);
if (!isExist) {
const newItem = {};
newItem['itemCode'] = item.itemCode;
newItem['selectId'] = item.id;
tags.value = [];
tags.value.push(newItem);
}
itemsId = item.itemCode;
});
//
try {
formLoading.value = true;
maintenanceItemData.value = [];
for (const item of itemsId.split(",")) {
let res = await request.get({url: `/eam/basic/maintenance-item/get?id=` + item})
const newItem = {};
newItem['itemCode'] = res.id;
newItem['itemName'] = res.name;
newItem['equipmentParts'] = res.equipmentParts;
newItem['isSelectd'] = true;
maintenanceItemData.value.push(newItem);
}
} finally {
formLoading.value = false;
}
}
})
}
/*打开弹窗*/
const openCommon = () => {
searchTableRef.value.open(
_searchTableTitle.value,
_searchTableAllSchemas.value,
_searchTablePage.value,
_formField.value,
_searchField.value,
_multiple.value,
_type.value,
_row.value,
_searchCondition.value
)
}
/** 初始化弹窗 */
const open = async (type: string, row?: object) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
//
if (row) {
isDisabled.value = true;
formLoading.value = true
formData.value = row;
//
let item = (row.id.toString()).split(",")
try {
tags.value=[];
for (var i = 0; i < item.length; i++) {
itemData.value = await request.get({ url: `/eam/basic-maintenance-option/get?id=` + item[i] });
tags.value.push(itemData.value);
}
} finally {
formLoading.value = false
}
//
let res = await request.get({url: `/eam/relation-maintenance-option-item/getList?optionCode=` + row.code})
try {
maintenanceItemData.value = [];
formLoading.value = true;
for (const item of res) {
const newItem = {};
newItem['id'] = item.id;
newItem['itemCode'] = item.itemCode;
newItem['itemName'] = item.itemName;
newItem['isSelectd'] = item.isSelectd;
maintenanceItemData.value.push(newItem);
}
} finally {
formLoading.value = false;
}
}
//
else {
resetForm()
isDisabled.value = false;
}
}
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
if (!basicFormRef) return
const valid = await basicFormRef.value.validate()
if (!valid) return
if (maintenanceItemData.value.length > 10 ){
message.warning('保养项最多10个');
return
}
// ID
formData.value.selectId = tags.value[0].selectId
//
formLoading.value = true
//formData.value.members = JSON.stringify(tags.value)
try {
if (formType.value === 'create') {
for (var i = 0; i < maintenanceItemData.value.length; i++) {
maintenanceItemData.value[i].optionCode = formData.value.code
}
formData.value.optionItem = maintenanceItemData.value
//
await BasicMaintenanceOptionApi.createBasicMaintenanceOption(formData.value)
message.success(t('common.createSuccess'))
} else {
for (var i = 0; i < maintenanceItemData.value.length; i++) {
maintenanceItemData.value[i].optionCode = formData.value.code
}
formData.value.optionItem = maintenanceItemData.value
console.log(formData.value)
await BasicMaintenanceOptionApi.updateBasicMaintenanceOption(formData.value)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
code: '',
name: '',
describing: '',
isUpdated: '',
remark: '',
available: '',
selectId: ''
}
tags.value=[];
maintenanceItemData.value = [];
basicFormRef.value?.resetFields()
}
</script>
<style scoped>
.tag-container {
margin-top: 10px; /* 可根据需要调整标签容器与表单项之间的间距 */
border: 1px solid #ccc; /* 添加边框样式 */
padding: 10px; /* 可根据需要调整容器内边距 */
width: 950px; /* 设置固定宽度为 950px */
overflow-y: auto; /* 当内容溢出容器高度时显示滚动条 */
word-wrap: break-word; /* 使用 word-wrap 属性实现超出范围换行 */
overflow-wrap: break-word; /* 兼容性更好的写法 */
flex-wrap: wrap;
}
.input-with-button {
display: flex;
align-items: center;
width: 100%;
}
.input-with-button > .el-input {
flex: 1;
/*margin-right: 10px;*/
}
</style>

56
src/views/eam/equipmentMaintenanceMain/DetailEam.vue → src/views/eam/equipmentMaintenanceMain/MaintenanceOrderDetail.vue

@ -585,9 +585,11 @@ const formRef = ref()
const titleNameRef = ref() const titleNameRef = ref()
const titleValueRef = ref() const titleValueRef = ref()
const count =ref(0) const count =ref(0)
const planNumber = ref();
const openDetail = async (row: any, titleName: any, titleValue: any, tableName: any) => { const openDetail = async (row: any, titleName: any, titleValue: any, tableName: any) => {
titleNameRef.value = titleName titleNameRef.value = titleName
titleValueRef.value = titleValue titleValueRef.value = titleValue
planNumber.value = row.planNumber
remarksData.data = { remarksData.data = {
tableId: row.masterId||row.id, tableId: row.masterId||row.id,
tableName: tableName tableName: tableName
@ -707,7 +709,7 @@ const isShowMainButton = (row, val) => {
const { getList } = tableMethodsRef.value const { getList } = tableMethodsRef.value
// //
const buttonBaseClick = (val, item) => { const buttonBaseClick = (val, item ,row) => {
if (val == 'add') { if (val == 'add') {
// //
if(props.isOpenSearchTable){ if(props.isOpenSearchTable){
@ -728,6 +730,8 @@ const buttonBaseClick = (val, item) => {
undefined,undefined undefined,undefined
) )
}else{ }else{
console.log(planNumber.value)
openForm('create') openForm('create')
} }
} else if (val == 'import') { } else if (val == 'import') {
@ -824,10 +828,8 @@ const buttonTableClick = async (val, row) => {
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const openForm = async (type: string, row?: number) => { const openForm = async (type: string, row?: number) => {
formRef.value.open(type, row, masterParmas.value) formRef.value.open(type, row, masterParmas.value)
emit('detailOpenForm', type, row) emit('detailOpenForm', type, row)
if(type == "create"){ if(type == "create"){
EquipmentMaintenanceDetail.allSchemas.formSchema.forEach((item) => { EquipmentMaintenanceDetail.allSchemas.formSchema.forEach((item) => {
if(item.field == 'peoples'){ if(item.field == 'peoples'){
@ -854,20 +856,41 @@ const openForm = async (type: string, row?: number) => {
} }
if(item.field == 'name'){ if(item.field == 'name'){
EquipmentMaintenanceDetailRules.name[0].required = true EquipmentMaintenanceDetailRules.name[0].required = true
item.componentProps.searchCondition = []
const newItem1 = {};
newItem1['action'] = '==';
newItem1['value'] = planNumber.value;
newItem1['key'] = 'planNumber';
item.componentProps.searchCondition.push(newItem1)
const newItem2 = {};
newItem2['action'] = '==';
newItem2['value'] = 'TRUE';
newItem2['key'] = 'available';
item.componentProps.searchCondition.push(newItem2)
const newItem3 = {};
newItem3['action'] = '==';
newItem3['value'] = false;
newItem3['key'] = 'isSelectd';
item.componentProps.searchCondition.push(newItem3)
} }
}) })
}else{ }else{
if(row.peoples !== null && row.peoples !== undefined){
row.peoples = row.peoples.toString() row.peoples = row.peoples.toString()
}
if(row.estimatedMinutes !== null && row.estimatedMinutes !== undefined){
row.estimatedMinutes = row.estimatedMinutes.toString() row.estimatedMinutes = row.estimatedMinutes.toString()
}
if(row.actualMinutes !== null && row.actualMinutes !== undefined){
row.actualMinutes = row.actualMinutes.toString() row.actualMinutes = row.actualMinutes.toString()
}
EquipmentMaintenanceDetail.allSchemas.formSchema.forEach((item) => { EquipmentMaintenanceDetail.allSchemas.formSchema.forEach((item) => {
if(item.field == 'peoples'){ if(item.field == 'peoples'){
console.log(item);
item.componentProps.disabled = false item.componentProps.disabled = false
EquipmentMaintenanceDetailRules.peoples[0].required = true EquipmentMaintenanceDetailRules.peoples[0].required = true
} }
if(item.field == 'estimatedMinutes'){ if(item.field == 'estimatedMinutes'){
EquipmentMaintenanceDetailRules.estimatedMinutes[0].required = false EquipmentMaintenanceDetailRules.estimatedMinutes[0].required = true
} }
if(item.field == 'actualMinutes'){ if(item.field == 'actualMinutes'){
item.componentProps.disabled = false item.componentProps.disabled = false
@ -886,6 +909,22 @@ const openForm = async (type: string, row?: number) => {
} }
if(item.field == 'name'){ if(item.field == 'name'){
EquipmentMaintenanceDetailRules.name[0].required = true EquipmentMaintenanceDetailRules.name[0].required = true
item.componentProps.searchCondition = []
const newItem1 = {};
newItem1['action'] = '==';
newItem1['value'] = planNumber.value;
newItem1['key'] = 'planNumber';
item.componentProps.searchCondition.push(newItem1)
const newItem2 = {};
newItem2['action'] = '==';
newItem2['value'] = 'TRUE';
newItem2['key'] = 'available';
item.componentProps.searchCondition.push(newItem2)
const newItem3 = {};
newItem3['action'] = '==';
newItem3['value'] = false;
newItem3['key'] = 'isSelectd';
item.componentProps.searchCondition.push(newItem3)
} }
}) })
} }
@ -951,7 +990,12 @@ const handleDelete = async (id: number) => {
// //
await getList() await getList()
updateKey.value += 1 updateKey.value += 1
} catch {} } catch {
emit('handleMainFefresh')
//
await getList()
updateKey.value += 1
}
} }
// //
const searchFormClick = async (searchData) => { const searchFormClick = async (searchData) => {

250
src/views/eam/equipmentMaintenanceMain/equipmentMaintenanceMain.data.ts

@ -4,17 +4,19 @@ import {EquipmentAccounts} from "@/views/eam/equipmentAccounts/equipmentAccounts
import * as EquipmentItemApi from "@/api/eam/equipmentAccounts"; import * as EquipmentItemApi from "@/api/eam/equipmentAccounts";
import {Workshop} from "@/views/wms/basicDataManage/factoryModeling/workshop/workshop.data"; import {Workshop} from "@/views/wms/basicDataManage/factoryModeling/workshop/workshop.data";
import * as WorkshopApi from "@/api/wms/workshop"; import * as WorkshopApi from "@/api/wms/workshop";
import {MaintenanceItem} from "@/views/eam/maintenanceItem/maintenanceItem.data"; import {RelationMaintenancePlanItem} from "@/views/eam/maintenance/maintenance.data";
import * as ItemApi from "@/api/eam/maintenanceItem"; import * as ItemApi from "@/api/eam/relationMaintenancePlanItem";
import {validateroundNumber} from "@/utils/validator"; import {validateroundNumber} from "@/utils/validator";
// 表单校验 // 表单校验
export const EquipmentMaintenanceMainRules = reactive({ export const EquipmentMaintenanceMainRules = reactive({
number: [required], number: [required],
sources: [required],
equipmentCode: [required], equipmentCode: [required],
planNumber: [required], type: [required],
planStartTime: [required],
planEndTime: [required],
status: [required], status: [required],
factoryAreaCode: [required],
}) })
export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
@ -28,25 +30,26 @@ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
isDetail:false, isDetail:false,
}, },
{ {
label: '保养工单编号', label: '描述',
field: 'number', field: 'describing',
sort: 'custom', sort: 'custom',
isSearch: false,
isTable: false,
isForm: false, isForm: false,
isSearch: true, isDetail:false,
}, },
{ {
label: '描述', label: '保养工单编号',
field: 'describing', field: 'number',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{ {
label: '设备类别', label: '来源字典',
field: 'type', field: 'sources',
dictType: DICT_TYPE.DEVICE_TYPE,
dictClass: 'string',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
isSearch: false,
}, },
{ {
label: '设备编号', label: '设备编号',
@ -74,57 +77,99 @@ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
} }
}, },
{ {
label: '班次枚举', label: '设备类别',
field: 'classes', field: 'type',
sort: 'custom', dictType: DICT_TYPE.DEVICE_TYPE,
isSearch: true, dictClass: 'string',
},
{
label: '保养计划工单号',
field: 'planNumber',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
isSearch: false,
}, },
{ {
label: '故障类型枚举', label: '故障类型枚举',
field: 'faultType', field: 'faultType',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
isSearch: false,
}, },
{ {
label: '保养周期', label: '保养计划工单号',
field: 'cycle', field: 'planNumber',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{ {
label: '保养次数', label: '计划开始时间',
field: 'times', field: 'planStartTime',
sort: 'custom', sort: 'custom',
isSearch: true, formatter: dateFormatter,
isSearch: false,
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: { form: {
component: 'InputNumber', component: 'DatePicker',
value: 0 componentProps: {
type: 'datetime',
valueFormat: 'x'
}
}, },
}, },
{ {
label: '验证人', label: '计划结束时间',
field: 'verifyer', field: 'planEndTime',
sort: 'custom', sort: 'custom',
isSearch: true, formatter: dateFormatter,
isSearch: false,
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: '验证内容', label: '保养开始时间',
field: 'verifyContent', field: 'startTime',
sort: 'custom', sort: 'custom',
isSearch: true, formatter: dateFormatter,
isSearch: false,
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: '验证时间', label: '保养结束时间',
field: 'verifyTime', field: 'endTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: true, isSearch: false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -142,29 +187,36 @@ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
}, },
}, },
{ {
label: '保养人id', label: '保养班组',
field: 'maintenancer', field: 'classType',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
}, },
{ {
label: '保养人联系电话', label: '验证人',
field: 'maintenancePhone', field: 'verifyer',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
}, },
{ {
label: '结果枚举临时措施、完成', label: '验证内容',
field: 'completeResult', field: 'verifyContent',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
form: {
component: 'Editor',
componentProps: {
valueHtml: '',
height: 200
}
},
}, },
{ {
label: '完成时间', label: '验证时间',
field: 'completionTime', field: 'verifyTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: true, isSearch: false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -182,11 +234,23 @@ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
}, },
}, },
{ {
label: '保养时间', label: '保养人id',
field: 'maintenanceTime', field: 'maintenancer',
sort: 'custom',
isSearch: false,
},
{
label: '保养人联系电话',
field: 'maintenancePhone',
sort: 'custom',
isSearch: false,
},
{
label: '完成时间',
field: 'completionTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: true, isSearch: false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -203,6 +267,28 @@ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
} }
}, },
}, },
// {
// label: '保养时间',
// field: 'maintenanceTime',
// 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: '流程状态', label: '流程状态',
field: 'status', field: 'status',
@ -211,20 +297,41 @@ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
dictType: DICT_TYPE.EAM_ORDER_STATUS, dictType: DICT_TYPE.EAM_ORDER_STATUS,
dictClass: 'string', dictClass: 'string',
}, },
// {
// label: '自动接单',
// field: 'autoOrder',
// sort: 'custom',
// isSearch: true,
// },
// {
// label: '自动执行',
// field: 'autoPerform',
// sort: 'custom',
// isSearch: true,
// },
// {
// label: '自动验证',
// field: 'autoVerify',
// sort: 'custom',
// isSearch: true,
// },
{
label: '直接生成记录',
field: 'directCreateRecord',
sort: 'custom',
isSearch: false,
},
{ {
label: '所属厂区编号', label: '所属厂区编号',
field: 'factoryAreaCode', field: 'factoryAreaCode',
sort: 'custom', sort: 'custom',
isSearch: false, isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
}, },
{ {
label: '车间编号', label: '车间编号',
field: 'workshopCode', field: 'workshopCode',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
required: true, required: true,
form: { form: {
// labelMessage: '信息提示说明!!!', // labelMessage: '信息提示说明!!!',
@ -248,7 +355,7 @@ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'createTime', field: 'createTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: true, isSearch: false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -272,7 +379,7 @@ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
}, },
{ {
label: '地点ID', label: '地点ID',
@ -287,9 +394,10 @@ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
label: '是否可用默认TRUE', label: '是否可用默认TRUE',
field: 'available', field: 'available',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
dictType: DICT_TYPE.TRUE_FALSE, isTable: false,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑 isForm: false,
isDetail:false,
}, },
{ {
label: '删除时间', label: '删除时间',
@ -350,6 +458,7 @@ export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
])) ]))
export const EquipmentMaintenanceDetailRules = reactive({ export const EquipmentMaintenanceDetailRules = reactive({
number: [required], number: [required],
masterId: [required], masterId: [required],
@ -383,8 +492,7 @@ export const EquipmentMaintenanceDetailRules = reactive({
validator:validateroundNumber, validator:validateroundNumber,
message: '请输入正确的正整数', message: '请输入正确的正整数',
trigger: 'blur'}], trigger: 'blur'}],
completionTime: [required], // completionTime: [
// [
// { // {
// required:false , // required:false ,
// message:'该项为必填项', // message:'该项为必填项',
@ -506,16 +614,12 @@ export const EquipmentMaintenanceDetail = useCrudSchemas(reactive<CrudSchema[]>(
form: { form: {
componentProps: { componentProps: {
isSearchList: true, // 开启查询弹窗 isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择 类别编码', searchListPlaceholder: '请选择 非必选保养项',
searchTitle: '保养项信息', // 查询弹窗标题 searchTitle: '非必选保养项信息', // 查询弹窗标题
searchAllSchemas: MaintenanceItem.allSchemas, // 查询弹窗所需类 searchAllSchemas: RelationMaintenancePlanItem.allSchemas, // 查询弹窗所需类
searchField: 'name', // 查询弹窗赋值字段 searchField: 'itemName', // 查询弹窗赋值字段
searchPage: ItemApi.getMaintenanceItemPage, // 查询弹窗所需分页方法 searchPage: ItemApi.getRelationMaintenancePlanItemPage, // 查询弹窗所需分页方法
searchCondition: [{ searchCondition: []
key: 'available',
value: 'TRUE',
action: '=='
}]
} }
} }
}, },

216
src/views/eam/equipmentMaintenanceMain/finishForm1.vue

@ -0,0 +1,216 @@
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle" :close-on-click-modal="false">
<el-form ref="basicFormRef" v-loading="formLoading" :model="formData" :rules="formRules" label-width="100px">
<el-row>
<el-col :span="12">
<el-form-item label="验证人" prop="verifyer">
<el-input v-model="formData.verifyer" placeholder="请输入验证人" :disabled="isDisabled"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="验证内容" prop="verifyContent">
<el-input v-model="formData.verifyContent" placeholder="请输入验证内容" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="验证时间" prop="verifyTime">
<el-date-picker
v-model="formData.verifyTime"
type="datetime"
value-format="x"
placeholder="选择验证时间">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button :disabled="formLoading" type="primary" @click="submitForm('success')"> </el-button>
<el-button @click="handleClose('close')"> </el-button>
</template>
</Dialog>
<!--添加巡检项弹窗-->
<SearchTable ref="searchTableRef" @searchTableSuccess="searchTableSuccess" />
</template>
<script lang="ts" setup>
import * as EquipmentMaintenanceMainApi from '@/api/eam/equipmentMaintenanceMain'
import { SearchTable } from '@/components/SearchTable'
import {ElInput} from "element-plus";
defineOptions({ name: 'TeamForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const tags=ref([])
const inputValue = ref('')
const inputVisible = ref(false)
const isDisabled = ref(false)
const InputRef = ref<InstanceType<typeof ElInput>>()
const formData = ref({
id:'',
number:'',
verifyer: '',
verifyContent: '',
verifyTime: '',
maintenancer: '',
maintenancePhone: '',
})
const formRules = reactive({
verifyer: [
{ required: true, message: '验证人不能为空', trigger: 'blur' },
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
verifyContent: [
{ required: true, message: '验证内容不能为空', trigger: 'blur' },
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
verifyTime: [
{ required: true, message: '验证时间不能为空', trigger: 'blur' },
],
maintenancer: [
{ required: true, message: '保养人ID不能为空', trigger: 'blur' },
],
maintenancePhone: [
{ required: true, message: '保养人电话不能为空', trigger: 'blur' },
],
})
const basicFormRef = ref() // Ref
// /** */
// const searchTableRef = ref();
// const _searchTableTitle = ref();
// const _searchTableAllSchemas = ref();
// const _searchTablePage = ref();
// const _formField = ref();
// const _searchField = ref();
// const _multiple = ref();
// const _type = ref();
// const _row = ref();
// const _searchCondition = ref({})
//
//
// const addItem = () =>{
// addItemCommon(true,'xunJianItem')
// }
//
// /** */
// const addItemCommon = (multiple,field) => {
// _searchCondition.value = {}
// const filters: any[] = []
// filters.push({
// action: "==",
// column: 'available',
// value: 'TRUE'
// })
// //
// _searchCondition.value.isSearch = true
// _searchCondition.value.filters = filters
// _searchTableTitle.value = ''
// _multiple.value = multiple
// _formField.value = field
// _searchField.value = field
// _searchTablePage.value = inspectionItemApi.getInspectionItemPage
// _searchTableAllSchemas.value = InspectionItem.allSchemas
// openCommon()
// }
//
// /** */
// const searchTableSuccess = (formField, searchField, val, formRef, type, row ) => {
// nextTick?.(() => {
// if (formField === 'xunJianItem') {
// val.forEach(item => {
// const isExist = tags.value.some(tag => tag.content === item.content);
// if (!isExist){
// const newItem = {};
// newItem['content'] = item.content;
// newItem['id'] = item.id;
// tags.value.push(newItem);
// }
// });
// }
// })
// }
// /**/
// const openCommon = () => {
// searchTableRef.value.open(
// _searchTableTitle.value,
// _searchTableAllSchemas.value,
// _searchTablePage.value,
// _formField.value,
// _searchField.value,
// _multiple.value,
// _type.value,
// _row.value,
// _searchCondition.value
// )
// }
/** 初始化弹窗 */
const open = async (type: string, row?: object) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
//
formData.value.id = row.id
formData.value.number = row.planNumber
}
defineExpose({ open }) // open
/** 提交表单 */
const submitForm = async (val) => {
//success
emit('success',formData.value.id)
//
if (!basicFormRef) return
const valid = await basicFormRef.value.validate()
if (!valid) return
//
await EquipmentMaintenanceMainApi.updateEquipmentMaintenanceMain(formData.value)
dialogVisible.value = false
}
const handleClose=(val)=>{
dialogVisible.value = false
emit('close',val)
}
//
const emit = defineEmits(['close','success'])
</script>
<style scoped>
.tag-container {
margin-top: 10px; /* 可根据需要调整标签容器与表单项之间的间距 */
border: 1px solid #ccc; /* 添加边框样式 */
padding: 10px; /* 可根据需要调整容器内边距 */
width: 950px; /* 设置固定宽度为 950px */
overflow-y: auto; /* 当内容溢出容器高度时显示滚动条 */
word-wrap: break-word; /* 使用 word-wrap 属性实现超出范围换行 */
overflow-wrap: break-word; /* 兼容性更好的写法 */
flex-wrap: wrap;
}
.input-with-button {
display: flex;
align-items: center;
width: 100%;
}
.input-with-button > .el-input {
flex: 1;
/*margin-right: 10px;*/
}
</style>

215
src/views/eam/equipmentMaintenanceMain/finishForm2.vue

@ -0,0 +1,215 @@
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle" :close-on-click-modal="false">
<el-form ref="basicFormRef" v-loading="formLoading" :model="formData" :rules="formRules" label-width="100px">
<el-row>
<el-col :span="12">
<el-form-item label="保养人ID" prop="maintenancer">
<el-input v-model="formData.maintenancer" placeholder="请输入保养人" :disabled="isDisabled"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="保养人电话" prop="maintenancePhone">
<el-input v-model="formData.maintenancePhone" placeholder="请输入保养人电话" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="保养开始时间" prop="startTime">
<el-date-picker
v-model="formData.startTime"
type="datetime"
value-format="x"
placeholder="选择保养开始时间">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="保养结束时间" prop="endTime">
<el-date-picker
v-model="formData.endTime"
type="datetime"
value-format="x"
placeholder="保养结束时间">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button :disabled="formLoading" type="primary" @click="submitForm('success')"> </el-button>
<el-button @click="handleClose('close')"> </el-button>
</template>
</Dialog>
<!--添加巡检项弹窗-->
<SearchTable ref="searchTableRef" @searchTableSuccess="searchTableSuccess" />
</template>
<script lang="ts" setup>
import * as EquipmentMaintenanceMainApi from '@/api/eam/equipmentMaintenanceMain'
import { SearchTable } from '@/components/SearchTable'
import {ElInput} from "element-plus";
defineOptions({ name: 'TeamForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const tags=ref([])
const inputValue = ref('')
const inputVisible = ref(false)
const isDisabled = ref(false)
const InputRef = ref<InstanceType<typeof ElInput>>()
const formData = ref({
id:'',
number:'',
maintenancer: '',
maintenancePhone: '',
startTime:'',
endTime:'',
})
const formRules = reactive({
maintenancer: [
{ required: true, message: '保养人ID不能为空', trigger: 'blur' },
],
maintenancePhone: [
{ required: true, message: '保养人电话不能为空', trigger: 'blur' },
],
})
const basicFormRef = ref() // Ref
// /** */
// const searchTableRef = ref();
// const _searchTableTitle = ref();
// const _searchTableAllSchemas = ref();
// const _searchTablePage = ref();
// const _formField = ref();
// const _searchField = ref();
// const _multiple = ref();
// const _type = ref();
// const _row = ref();
// const _searchCondition = ref({})
//
//
// const addItem = () =>{
// addItemCommon(true,'xunJianItem')
// }
//
// /** */
// const addItemCommon = (multiple,field) => {
// _searchCondition.value = {}
// const filters: any[] = []
// filters.push({
// action: "==",
// column: 'available',
// value: 'TRUE'
// })
// //
// _searchCondition.value.isSearch = true
// _searchCondition.value.filters = filters
// _searchTableTitle.value = ''
// _multiple.value = multiple
// _formField.value = field
// _searchField.value = field
// _searchTablePage.value = inspectionItemApi.getInspectionItemPage
// _searchTableAllSchemas.value = InspectionItem.allSchemas
// openCommon()
// }
//
// /** */
// const searchTableSuccess = (formField, searchField, val, formRef, type, row ) => {
// nextTick?.(() => {
// if (formField === 'xunJianItem') {
// val.forEach(item => {
// const isExist = tags.value.some(tag => tag.content === item.content);
// if (!isExist){
// const newItem = {};
// newItem['content'] = item.content;
// newItem['id'] = item.id;
// tags.value.push(newItem);
// }
// });
// }
// })
// }
// /**/
// const openCommon = () => {
// searchTableRef.value.open(
// _searchTableTitle.value,
// _searchTableAllSchemas.value,
// _searchTablePage.value,
// _formField.value,
// _searchField.value,
// _multiple.value,
// _type.value,
// _row.value,
// _searchCondition.value
// )
// }
/** 初始化弹窗 */
const open = async (type: string, row?: object) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
//
formData.value.id = row.id
formData.value.number = row.planNumber
}
defineExpose({ open }) // open
/** 提交表单 */
const submitForm = async (val) => {
//success
emit('success',formData.value.id)
//
if (!basicFormRef) return
const valid = await basicFormRef.value.validate()
if (!valid) return
//
await EquipmentMaintenanceMainApi.updateEquipmentMaintenanceMain(formData.value)
dialogVisible.value = false
}
const handleClose=(val)=>{
dialogVisible.value = false
emit('close',val)
}
//
const emit = defineEmits(['close','success'])
</script>
<style scoped>
.tag-container {
margin-top: 10px; /* 可根据需要调整标签容器与表单项之间的间距 */
border: 1px solid #ccc; /* 添加边框样式 */
padding: 10px; /* 可根据需要调整容器内边距 */
width: 950px; /* 设置固定宽度为 950px */
overflow-y: auto; /* 当内容溢出容器高度时显示滚动条 */
word-wrap: break-word; /* 使用 word-wrap 属性实现超出范围换行 */
overflow-wrap: break-word; /* 兼容性更好的写法 */
flex-wrap: wrap;
}
.input-with-button {
display: flex;
align-items: center;
width: 100%;
}
.input-with-button > .el-input {
flex: 1;
/*margin-right: 10px;*/
}
</style>

183
src/views/eam/equipmentMaintenanceMain/index.vue

@ -51,6 +51,21 @@
@onChange="onChange" @onChange="onChange"
/> />
<BasicForm
ref="basicFormRef"
@success="formsSuccess"
:rules="EquipmentMaintenanceMainRules"
:formAllSchemas="EquipmentMaintenanceMain.allSchemas"
:apiUpdate="EquipmentMaintenanceMainApi.updateEquipmentMaintenanceMain"
:apiCreate="EquipmentMaintenanceMainApi.createEquipmentMaintenanceMain"
@searchTableSuccess="searchTableSuccess"
:isBusiness="false"
@onChange="onChange"
/>
<FinishForm1 ref="finishForm1Ref" @success="getData1" @close="getClosed1"/>
<FinishForm2 ref="finishForm2Ref" @success="getData2" @close="getClosed2"/>
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" <Detail ref="detailRef"
:isBasic="false" :isBasic="false"
@ -82,7 +97,9 @@ import * as EquipmentMaintenanceDetailApi from '@/api/eam/equipmentMaintenanceDe
import * as defaultButtons from '@/utils/disposition/defaultButtons' 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 '@/views/eam/equipmentMaintenanceMain/DetailEam.vue' import Detail from '@/views/eam/equipmentMaintenanceMain/MaintenanceOrderDetail.vue'
import FinishForm1 from '@/views/eam/equipmentMaintenanceMain/finishForm1.vue'
import FinishForm2 from '@/views/eam/equipmentMaintenanceMain/finishForm2.vue'
import {Maintenance} from "@/views/eam/maintenance/maintenance.data"; import {Maintenance} from "@/views/eam/maintenance/maintenance.data";
import {EquipmentAccounts} from "@/views/eam/equipmentAccounts/equipmentAccounts.data"; import {EquipmentAccounts} from "@/views/eam/equipmentAccounts/equipmentAccounts.data";
import * as EquipmentItemApi from "@/api/eam/equipmentAccounts"; import * as EquipmentItemApi from "@/api/eam/equipmentAccounts";
@ -122,7 +139,7 @@ const { getList, setSearchParams } = tableMethods
// //
const HeadButttondata = [ const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'eam:equipmentMaintenanceMain:create'}), // //defaultButtons.defaultAddBtn({hasPermi:'eam:equipmentMaintenanceMain:create'}), //
//defaultButtons.defaultImportBtn({hasPermi:'eam:equipmentMaintenanceMain:import'}), // //defaultButtons.defaultImportBtn({hasPermi:'eam:equipmentMaintenanceMain:import'}), //
defaultButtons.defaultExportBtn({hasPermi:'eam:equipmentMaintenanceMain:export'}), // defaultButtons.defaultExportBtn({hasPermi:'eam:equipmentMaintenanceMain:export'}), //
defaultButtons.defaultFreshBtn(null), // defaultButtons.defaultFreshBtn(null), //
@ -174,12 +191,12 @@ const isShowStatusButton = (row,val) => {
const butttondata = (row) => { const butttondata = (row) => {
return [ return [
defaultButtons.mainListEditBtn({hasPermi:'eam:equipmentMaintenanceMain:update'}), // defaultButtons.mainListEditBtn({hasPermi:'eam:equipmentMaintenanceMain:update'}), //
defaultButtons.mainListReceiveOrderBtn({hide: isShowStatusButton(row,['3']),hasPermi:'eam:maintenance:update'}), // defaultButtons.mainListReceiveOrderBtn({hide: isShowStatusButton(row,['3']),hasPermi:'eam:equipmentMaintenanceMain:update'}), //
defaultButtons.mainListExecuteBtn({hide: isShowStatusButton(row,['4']),hasPermi:'eam:maintenance:update'}), // defaultButtons.mainListExecuteBtn({hide: isShowStatusButton(row,['4']),hasPermi:'eam:equipmentMaintenanceMain:update'}), //
defaultButtons.mainListFinishBtn({hide: isShowStatusButton(row,['5']),hasPermi:'eam:maintenance:update'}), // defaultButtons.mainListFinishBtn({hide: isShowStatusButton(row,['5']),hasPermi:'eam:equipmentMaintenanceMain:update'}), //
defaultButtons.mainListValidateBtn({hide: isShowStatusButton(row,['6']),hasPermi:'eam:maintenance:update'}), // defaultButtons.mainListValidateBtn({hide: isShowStatusButton(row,['6']),hasPermi:'eam:equipmentMaintenanceMain:update'}), //
defaultButtons.mainListEnableBtn({hide:isShowMainButton(row,['FALSE']),hasPermi:'eam:maintenance:update'}), defaultButtons.mainListEnableBtn({hide:isShowMainButton(row,['FALSE']),hasPermi:'eam:equipmentMaintenanceMain:update'}),
defaultButtons.mainListDisableBtn({hide:isShowMainButton(row,['TRUE']),hasPermi:'eam:maintenance:update'}), defaultButtons.mainListDisableBtn({hide:isShowMainButton(row,['TRUE']),hasPermi:'eam:equipmentMaintenanceMain:update'}),
] ]
} }
@ -194,9 +211,9 @@ const buttonTableClick = async (val, row) => {
} else if (val == 'execute') { // } else if (val == 'execute') { //
handleExecute(row.id) handleExecute(row.id)
} else if (val == 'finish') { // } else if (val == 'finish') { //
handleFinish(row.id) handleFinish(row)
} else if (val == 'validate') { // } else if (val == 'validate') { //
handleValidate(row.id) handleValidate(row)
} }
} }
@ -256,7 +273,7 @@ const searchTableSuccessDetail = (formField, searchField, val, formRef ) => {
const setV = {} const setV = {}
let result = ''; let result = '';
for (var i = 0; i < val.length; i++) { for (var i = 0; i < val.length; i++) {
result += val[i].name + ','; result += val[i].itemName + ',';
} }
if(result.endsWith(',')){ if(result.endsWith(',')){
result = result.substring(0,result.length -1) result = result.substring(0,result.length -1)
@ -320,8 +337,8 @@ const handleExecute = async (id: number) => {
}) })
params.value.id = id params.value.id = id
params.value.status = '5' params.value.status = '5'
// //
await EquipmentMaintenanceMainApi.executeMaintenanceOrder(params.value) await EquipmentMaintenanceMainApi.updateMaintenanceOrder(params.value)
message.success(t('执行成功')) message.success(t('执行成功'))
// //
await getList() await getList()
@ -329,50 +346,68 @@ const handleExecute = async (id: number) => {
} }
/** 完成按钮操作 */ /** 完成按钮操作 */
const handleFinish = async (id: number) => { const finishForm2Ref = ref()
try { const handleFinish = async (row) => {
// //
await message.delConfirm('是否完成所选中工单?'); await message.delConfirm('是否完成所选中工单?');
const params = ref({
id: '', //
status:'', finishForm2Ref.value.open('update', row);
})
params.value.id = id //let res = await EquipmentMaintenanceMainApi.getMaintenanceOrderConfig();
params.value.status = '5' //
// // if(res.remark === 'TRUE'){
await EquipmentMaintenanceMainApi.executeMaintenanceOrder(params.value) // try {
message.success(t('工单已完成')) //
// //
await getList() // // //
} catch {} // // await message.delConfirm('');
// // const params = ref({
// // id: '',
// // status:'',
// // })
// // params.value.id = row.id
// // params.value.status = '5'
// // //
// // await EquipmentMaintenanceMainApi.executeMaintenanceOrder(params.value)
// // message.success(t(''))
// // //
// // await getList()
// } catch {}
// }
// //
// if(res.remark === 'FALSE'){
// try {
// //
// await message.delConfirm('');
//
// //
// finishForm2Ref.value.open('update', row);
//
// } catch {}
// }
} }
/** 验证按钮操作 */ /** 验证按钮操作 */
const handleValidate = async (id: number) => { const finishForm1Ref = ref()
try { const handleValidate = async (row) => {
const params = ref({ await message.delConfirm('是否验证所选中工单?');
id: '',
status:'',
})
//
message.confirmPassword(t('')).then(async () => { message.confirmPassword(t('')).then(async () => {
params.value.id = id //
params.value.status = '7' //
await EquipmentMaintenanceMainApi.updateMaintenanceOrder(params.value) finishForm1Ref.value.open('update', row);
message.success(t('工单已流转'))
//
await getList()
}).catch (async () => { }).catch (async () => {
params.value.id = id const params = ref({id: '', status:''})
params.value.id = row.id
params.value.status = '5' params.value.status = '5'
await EquipmentMaintenanceMainApi.updateMaintenanceOrder(params.value) await EquipmentMaintenanceMainApi.backMaintenanceOrder(params.value)
message.success(t('工单已流转')) message.success(t('工单已打回'))
// //
await getList() await getList()
}) })
} catch {}
} }
/** 启用 */ /** 启用 */
@ -497,6 +532,62 @@ const searchFormClick = (searchData) => {
getList() // getList() //
} }
//finishForm1
const getClosed1=(val)=> {
nextTick?.(() => {
console.log(val)
getList()
})
}
//finishForm1
const getData1=(val)=> {
nextTick?.(async () => {
console.log(val)
try {
const params = ref({
id: '',
status:'',
})
params.value.id = val
params.value.status = '7'
await EquipmentMaintenanceMainApi.updateMaintenanceOrder(params.value)
message.success(t('工单已流转'))
//
await getList()
} catch {}
}
)
}
//finishForm2
const getClosed2=(val)=> {
nextTick?.(() => {
console.log(val)
getList()
})
}
//finishForm2
const getData2=(val)=> {
nextTick?.(async () => {
console.log(val)
const params = ref({
id: '',
status: '',
})
params.value.id = val
params.value.status = '5'
//
await EquipmentMaintenanceMainApi.executeMaintenanceOrder(params.value)
message.success(t('工单已完成'))
//
await getList()
})
}
/** 初始化 **/ /** 初始化 **/
onMounted(async () => { onMounted(async () => {
getList() getList()

377
src/views/eam/equipmentMaintenanceRecordMain/equipmentMaintenanceRecordMain.data.ts

@ -4,138 +4,229 @@ import { dateFormatter } from '@/utils/formatTime'
// 表单校验 // 表单校验
export const EquipmentMaintenanceRecordMainRules = reactive({ export const EquipmentMaintenanceRecordMainRules = reactive({
number: [required], number: [required],
sources: [required],
equipmentCode: [required], equipmentCode: [required],
planNumber: [required], type: [required],
status: [required], planStartTime: [required],
factoryAreaCode: [required], planEndTime: [required],
concurrencyStamp: [required] startTime: [required],
endTime: [required],
}) })
export const EquipmentMaintenanceRecordMain = useCrudSchemas(reactive<CrudSchema[]>([ export const EquipmentMaintenanceRecordMain = useCrudSchemas(reactive<CrudSchema[]>([
{ {
label: '保养编号', label: 'id',
field: 'number', field: 'id',
sort: 'custom',
isForm: false,
},
{
label: '记录编号',
field: 'recordNo',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: true,
}, },
{ {
label: '描述', label: '描述',
field: 'describing', field: 'describing',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: true,
isSearch: false,
},
{
label: '保养工单',
field: 'number',
sort: 'custom',
isSearch: true,
},
{
label: '来源字典',
field: 'sources',
sort: 'custom',
isSearch: true,
isSearch: false,
}, },
{ {
label: '设备编号', label: '设备编号',
field: 'equipmentCode', field: 'equipmentCode',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: true,
}, },
{ {
label: '设备类别', label: '故障类型枚举',
field: 'category', field: 'faultType',
sort: 'custom', sort: 'custom',
dictType: DICT_TYPE.DEVICE_TYPE,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: true, isSearch: true,
form: { isSearch: false,
component: 'SelectV2'
}
}, },
{ {
label: '班次枚举', label: '工装或设备字典',
field: 'classes', field: 'type',
sort: 'custom', sort: 'custom',
// dictType: DICT_TYPE.SHIFT_TYPE,
// dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: true, isSearch: true,
dictType: DICT_TYPE.DEVICE_TYPE,
dictClass: 'string',
}, },
{ {
label: '保养计划工单', label: '保养计划工单',
field: 'planNumber', field: 'planNumber',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: true,
}, },
{ {
label: '故障类型枚举', label: '计划开始时间',
field: 'faultType', field: 'planStartTime',
sort: 'custom', sort: 'custom',
dictType: DICT_TYPE.FAILURE_REASON, formatter: dateFormatter,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑 isSearch: false,
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: { form: {
component: 'SelectV2' component: 'DatePicker',
componentProps: {
type: 'datetime',
valueFormat: 'x'
} }
}, },
},
{ {
label: '保养周期', label: '计划结束时间',
field: 'cycle', field: 'planEndTime',
sort: 'custom', sort: 'custom',
dictType: DICT_TYPE.MAINTENANCE_CYCLE, formatter: dateFormatter,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑 isSearch: false,
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: '保养次数', label: '保养开始时间',
field: 'times', field: 'startTime',
sort: 'custom', sort: 'custom',
isSearch: true formatter: dateFormatter,
isSearch: false,
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: '验证人', label: '保养结束时间',
field: 'verifyer2', field: 'endTime',
sort: 'custom', sort: 'custom',
isSearch: true, formatter: dateFormatter,
isSearch: false,
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: { form: {
component: 'InputNumber', component: 'DatePicker',
value: 0 componentProps: {
type: 'datetime',
valueFormat: 'x'
} }
}, },
},
{ {
label: '验证内容', label: '保养班组',
field: 'verifyContent2', field: 'classType',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
}, },
{ {
label: '验证时间', label: '验证',
field: 'verifyTime2', field: 'verifyer',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
}, },
{ {
label: '保养人', label: '验证内容',
field: 'maintenancer', field: 'verifyContent',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
form: { form: {
component: 'InputNumber', component: 'Editor',
value: 0 componentProps: {
valueHtml: '',
height: 200
} }
}, },
},
{ {
label: '保养人联系电话', label: '验证时间',
field: 'maintenancePhone', field: 'verifyTime',
sort: 'custom', sort: 'custom',
isSearch: true formatter: dateFormatter,
isSearch: false,
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: '结果枚举', label: '保养人id',
field: 'completeResult', field: 'maintenancer',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
}, },
{ {
label: '完成时间', label: '保养人联系电话',
field: 'completionTime2', field: 'maintenancePhone',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
}, },
{ {
label: '保养时间', label: '完成时间',
field: 'maintenanceTime', field: 'completionTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: true, isSearch: false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -150,59 +241,173 @@ export const EquipmentMaintenanceRecordMain = useCrudSchemas(reactive<CrudSchema
type: 'datetime', type: 'datetime',
valueFormat: 'x' valueFormat: 'x'
} }
}
}, },
},
// {
// label: '保养时间',
// field: 'maintenanceTime',
// 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: '流程状态枚举', label: '流程状态',
field: 'status', field: 'status',
sort: 'custom', sort: 'custom',
dictType: DICT_TYPE.JOB_STATUS,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: true, isSearch: true,
form: { dictType: DICT_TYPE.EAM_ORDER_STATUS,
component: 'Radio' dictClass: 'string',
} },
// {
// label: '自动接单',
// field: 'autoOrder',
// sort: 'custom',
// isSearch: true,
// },
// {
// label: '自动执行',
// field: 'autoPerform',
// sort: 'custom',
// isSearch: true,
// },
// {
// label: '自动验证',
// field: 'autoVerify',
// sort: 'custom',
// isSearch: true,
// },
{
label: '直接生成记录',
field: 'directCreateRecord',
sort: 'custom',
isSearch: false,
}, },
{ {
label: '所属厂区编号', label: '所属厂区编号',
field: 'factoryAreaCode', field: 'factoryAreaCode',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
}, },
{ {
label: '车间编号', label: '车间编号',
field: 'workshopCode', field: 'workshopCode',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
},
{
label: '创建时间',
field: 'createTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: false,
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: '工段编号', label: '部门id',
field: 'workshopSectionCode', field: 'departmentCode',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
}, },
{ {
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
}, },
{ {
label: '是否可用', label: '地点ID',
field: 'siteId',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '是否可用默认TRUE',
field: 'available', field: 'available',
sort: 'custom', sort: 'custom',
dictType: DICT_TYPE.TRUE_FALSE, isSearch: false,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑 isTable: false,
isSearch: true, isForm: false,
form: { isDetail:false,
component: 'Switch', },
value: 'TRUE', {
label: '删除时间',
field: 'deletionTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
search: {
component: 'DatePicker',
componentProps: { componentProps: {
inactiveValue: 'FALSE', valueFormat: 'YYYY-MM-DD HH:mm:ss',
activeValue: 'TRUE' type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
} }
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
valueFormat: 'x'
} }
}, },
},
{
label: '删除人id',
field: 'deleterId',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '并发乐观锁',
field: 'concurrencyStamp',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
form: {
component: 'InputNumber',
value: 0
},
},
{ {
label: '操作', label: '操作',
field: 'action', field: 'action',

30
src/views/eam/equipmentMaintenanceRecordMain/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 #recordNo="{row}">
<el-button type="primary" link @click="openDetail(row, '代码', row.code)"> <el-button type="primary" link @click="openDetail(row, '代码', row.recordNo)">
<span>{{ row.code }}</span> <span>{{ row.recordNo }}</span>
</el-button> </el-button>
</template> </template>
<template #action="{ row }"> <template #action="{ row }">
@ -51,7 +51,17 @@
/> />
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="EquipmentMaintenanceRecordMain.allSchemas" /> <Detail ref="detailRef"
:isBasic="false"
:allSchemas="EquipmentMaintenanceRecordMain.allSchemas"
:detailAllSchemasRules="EquipmentMaintenanceRecordDetailRules"
:detailAllSchemas="EquipmentMaintenanceRecordDetail.allSchemas"
:apiPage="EquipmentMaintenanceRecordDetailApi.getEquipmentMaintenanceRecordDetailPage"
:detailButtonIsShowAdd=false
:detailButtonIsShowEdit=false
:detailButtonIsShowDelete=false
/>
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/eam/equipment-maintenance-record-main/import" :importTemplateData="importTemplateData" @success="importSuccess" /> <ImportForm ref="importFormRef" url="/eam/equipment-maintenance-record-main/import" :importTemplateData="importTemplateData" @success="importSuccess" />
@ -60,7 +70,9 @@
<script setup lang="ts"> <script setup lang="ts">
import download from '@/utils/download' import download from '@/utils/download'
import { EquipmentMaintenanceRecordMain,EquipmentMaintenanceRecordMainRules } from './equipmentMaintenanceRecordMain.data' import { EquipmentMaintenanceRecordMain,EquipmentMaintenanceRecordMainRules } from './equipmentMaintenanceRecordMain.data'
import { EquipmentMaintenanceRecordDetail,EquipmentMaintenanceRecordDetailRules } from '../equipmentMaintenanceRecordDetail/equipmentMaintenanceRecordDetail.data'
import * as EquipmentMaintenanceRecordMainApi from '@/api/eam/equipmentMaintenanceRecordMain' import * as EquipmentMaintenanceRecordMainApi from '@/api/eam/equipmentMaintenanceRecordMain'
import * as EquipmentMaintenanceRecordDetailApi from '@/api/eam/equipmentMaintenanceRecordDetail'
import * as defaultButtons from '@/utils/disposition/defaultButtons' 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'
@ -99,9 +111,9 @@ const { getList, setSearchParams } = tableMethods
// //
const HeadButttondata = [ const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'wms:equipmentMaintenanceRecordMain:create'}), // defaultButtons.defaultAddBtn({hasPermi:'eam:equipmentMaintenanceRecordMain:create'}), //
defaultButtons.defaultImportBtn({hasPermi:'wms:equipmentMaintenanceRecordMain:import'}), // //defaultButtons.defaultImportBtn({hasPermi:'eam:equipmentMaintenanceRecordMain:import'}), //
defaultButtons.defaultExportBtn({hasPermi:'wms:equipmentMaintenanceRecordMain:export'}), // defaultButtons.defaultExportBtn({hasPermi:'eam:equipmentMaintenanceRecordMain:export'}), //
defaultButtons.defaultFreshBtn(null), // defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), // defaultButtons.defaultSetBtn(null), //
@ -133,8 +145,8 @@ const buttonBaseClick = (val, item) => {
// - // -
const butttondata = [ const butttondata = [
defaultButtons.mainListEditBtn({hasPermi:'wms:equipmentMaintenanceRecordMain:update'}), // //defaultButtons.mainListEditBtn({hasPermi:'eam:equipmentMaintenanceRecordMain:update'}), //
defaultButtons.mainListDeleteBtn({hasPermi:'wms:equipmentMaintenanceRecordMain:delete'}), // //defaultButtons.mainListDeleteBtn({hasPermi:'eam:equipmentMaintenanceRecordMain:delete'}), //
] ]
// - // -

141
src/views/eam/equipmentReportRepairRequest/audiForm.vue

@ -0,0 +1,141 @@
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle" :close-on-click-modal="false">
<el-form ref="basicFormRef" v-loading="formLoading" :model="formData" :rules="formRules" label-width="100px">
<el-row>
<el-col :span="12">
<el-form-item label="审核人" prop="approver">
<el-input v-model="formData.approver" placeholder="请输入审核人" :disabled="isDisabled"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核内容" prop="approveContent">
<el-input v-model="formData.approveContent" placeholder="请输入审核内容" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="审核时间" prop="approveTime">
<el-date-picker
v-model="formData.approveTime"
type="datetime"
value-format="x"
placeholder="选择审核时间">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button :disabled="formLoading" type="primary" @click="submitForm('success')"> </el-button>
<el-button @click="handleClose('close')"> </el-button>
</template>
</Dialog>
<!--添加巡检项弹窗-->
<SearchTable ref="searchTableRef" @searchTableSuccess="searchTableSuccess" />
</template>
<script lang="ts" setup>
import { SearchTable } from '@/components/SearchTable'
import {ElInput} from "element-plus";
import * as EquipmentReportRepairRequestApi from "@/api/eam/equipmentReportRepairRequest";
defineOptions({ name: 'TeamForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const tags=ref([])
const inputValue = ref('')
const inputVisible = ref(false)
const isDisabled = ref(false)
const InputRef = ref<InstanceType<typeof ElInput>>()
const formData = ref({
id:'',
number:'',
approver: '',
approveContent: '',
approveTime: '',
})
const formRules = reactive({
approver: [
{ required: true, message: '审核人不能为空', trigger: 'blur' },
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
approveContent: [
{ required: true, message: '审核内容不能为空', trigger: 'blur' },
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
approveTime: [
{ required: true, message: '审核时间不能为空', trigger: 'blur' },
],
})
const basicFormRef = ref() // Ref
/** 初始化弹窗 */
const open = async (type: string, row?: object) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
//
formData.value.id = row.id
formData.value.number = row.number
}
defineExpose({ open }) // open
/** 提交表单 */
const submitForm = async (val) => {
//success
emit('success',formData.value.id)
//
if (!basicFormRef) return
const valid = await basicFormRef.value.validate()
if (!valid) return
//
await EquipmentReportRepairRequestApi.updateEquipmentReportRepairRequest(formData.value)
dialogVisible.value = false
}
const handleClose=(val)=>{
dialogVisible.value = false
emit('close',val)
}
//
const emit = defineEmits(['close','success'])
</script>
<style scoped>
.tag-container {
margin-top: 10px; /* 可根据需要调整标签容器与表单项之间的间距 */
border: 1px solid #ccc; /* 添加边框样式 */
padding: 10px; /* 可根据需要调整容器内边距 */
width: 950px; /* 设置固定宽度为 950px */
overflow-y: auto; /* 当内容溢出容器高度时显示滚动条 */
word-wrap: break-word; /* 使用 word-wrap 属性实现超出范围换行 */
overflow-wrap: break-word; /* 兼容性更好的写法 */
flex-wrap: wrap;
}
.input-with-button {
display: flex;
align-items: center;
width: 100%;
}
.input-with-button > .el-input {
flex: 1;
/*margin-right: 10px;*/
}
</style>

155
src/views/eam/equipmentReportRepairRequest/equipmentReportRepairRequest.data.ts

@ -1,5 +1,9 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas' import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime' import {EquipmentAccounts} from "@/views/eam/equipmentAccounts/equipmentAccounts.data";
import * as EquipmentItemApi from "@/api/eam/equipmentAccounts";
import {Workshop} from "@/views/wms/basicDataManage/factoryModeling/workshop/workshop.data";
import * as WorkshopApi from "@/api/wms/workshop";
import {dateFormatter} from '@/utils/formatTime'
// 表单校验 // 表单校验
export const EquipmentReportRepairRequestRules = reactive({ export const EquipmentReportRepairRequestRules = reactive({
@ -9,7 +13,9 @@ export const EquipmentReportRepairRequestRules = reactive({
urgency: [required], urgency: [required],
repairmaner: [required], repairmaner: [required],
status: [required], status: [required],
concurrencyStamp: [required] shutDown:[required],
repairPhone:[required],
available:[required],
}) })
export const EquipmentReportRepairRequest = useCrudSchemas(reactive<CrudSchema[]>([ export const EquipmentReportRepairRequest = useCrudSchemas(reactive<CrudSchema[]>([
@ -17,7 +23,9 @@ export const EquipmentReportRepairRequest = useCrudSchemas(reactive<CrudSchema[]
label: '报修编号', label: '报修编号',
field: 'number', field: 'number',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: true,
isForm: false,
isDetail:true,
}, },
{ {
label: '类型', label: '类型',
@ -25,16 +33,32 @@ export const EquipmentReportRepairRequest = useCrudSchemas(reactive<CrudSchema[]
sort: 'custom', sort: 'custom',
dictType: DICT_TYPE.DEVICE_TYPE, dictType: DICT_TYPE.DEVICE_TYPE,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑 dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: true, isSearch: false,
form: {
component: 'SelectV2'
}
}, },
{ {
label: '设备工装编号', label: '设备工装编号',
field: 'equipmentCode', field: 'equipmentCode',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: true,
isForm: true,
form: {
componentProps: {
isSearchList: true, // 开启查询弹窗
searchTitle: '设备信息', // 查询弹窗标题
searchListPlaceholder: '请选择 设备编号', // 输入框占位文本
searchAllSchemas: EquipmentAccounts.allSchemas, // 查询弹窗所需类
searchField: 'code', // 查询弹窗赋值字段
searchPage: EquipmentItemApi.getEquipmentAccountsPage, // 查询弹窗所需分页方法
multiple:true,
searchCondition: [{
key: 'status',
value: 'NORMAL',
action: '==',
isSearch: true,
isMainValue: false
}]
}
}
}, },
{ {
label: '紧急程度', label: '紧急程度',
@ -51,15 +75,12 @@ export const EquipmentReportRepairRequest = useCrudSchemas(reactive<CrudSchema[]
dictType: DICT_TYPE.FAILURE_REASON, dictType: DICT_TYPE.FAILURE_REASON,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑 dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: true, isSearch: true,
form: {
component: 'SelectV2'
}
}, },
{ {
label: '故障描述', label: '故障描述',
field: 'describing', field: 'describing',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false
}, },
{ {
label: '是否停机', label: '是否停机',
@ -76,80 +97,76 @@ export const EquipmentReportRepairRequest = useCrudSchemas(reactive<CrudSchema[]
label: '报修图片', label: '报修图片',
field: 'images', field: 'images',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
},
{
label: '所属厂区编号',
field: 'factoryAreaCode',
sort: 'custom',
isSearch: true
}, },
// {
// label: '所属厂区编号',
// field: 'factoryAreaCode',
// sort: 'custom',
// isSearch: false,
// },
{ {
label: '车间编号', label: '车间编号',
field: 'workshopCode', field: 'workshopCode',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
required: true,
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '车间', // 输入框占位文本
searchField: 'code', // 查询弹窗赋值字段
searchTitle: '车间信息', // 查询弹窗标题
searchAllSchemas: Workshop.allSchemas, // 查询弹窗所需类
searchPage: WorkshopApi.getWorkshopPage, // 查询弹窗所需分页方法
searchCondition: [{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}, },
{
label: '工段编号',
field: 'workshopSectionCode',
sort: 'custom',
isSearch: true
}, },
{ {
label: '报修人', label: '报修人',
field: 'repairmaner', field: 'repairmaner',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
form: {
component: 'InputNumber',
value: 0
}
}, },
{ {
label: '报修人联系电话', label: '报修人联系电话',
field: 'repairPhone', field: 'repairPhone',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false
}, },
{ {
label: '报修状态', label: '报修状态',
field: 'status', field: 'status',
sort: 'custom', sort: 'custom',
isSearch: true, dictType: DICT_TYPE.EAM_REPAIR_STATUS,
form: { dictClass: 'string',
component: 'Radio' isSearch: false,
} isForm: false,
}, },
{ {
label: '审核人', label: '审核人',
field: 'approver', field: 'approver',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
form: {
component: 'InputNumber',
value: 0
}
}, },
{ {
label: '审核内容', label: '审核内容',
field: 'approveContent', field: 'approveContent',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
form: {
component: 'Editor',
componentProps: {
valueHtml: '',
height: 200
}
}
}, },
{ {
label: '审核时间', label: '审核时间',
field: 'approveTime', field: 'approveTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: true, isSearch: false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -166,29 +183,29 @@ export const EquipmentReportRepairRequest = useCrudSchemas(reactive<CrudSchema[]
} }
} }
}, },
{ // {
label: '自动审核', // label: '自动审核',
field: 'autoExamine', // field: 'autoExamine',
sort: 'custom', // sort: 'custom',
isSearch: true // isSearch: true
}, // },
{ // {
label: '自动通过', // label: '自动通过',
field: 'autoAgree', // field: 'autoAgree',
sort: 'custom', // sort: 'custom',
isSearch: true // isSearch: true
}, // },
{ // {
label: '自动确认', // label: '自动确认',
field: 'autoVerify', // field: 'autoVerify',
sort: 'custom', // sort: 'custom',
isSearch: true // isSearch: true
}, // },
{ {
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
}, },
{ {
label: '是否可用', label: '是否可用',

194
src/views/eam/equipmentReportRepairRequest/index.vue

@ -27,13 +27,13 @@
v-model:currentPage="tableObject.currentPage" v-model:currentPage="tableObject.currentPage"
v-model:sort="tableObject.sort" v-model:sort="tableObject.sort"
> >
<template #code="{row}"> <template #number="{row}">
<el-button type="primary" link @click="openDetail(row, '代码', row.code)"> <el-button type="primary" link @click="openDetail(row, '代码', row.number)">
<span>{{ row.code }}</span> <span>{{ row.number }}</span>
</el-button> </el-button>
</template> </template>
<template #action="{ row }"> <template #action="{ row }">
<ButtonBase :Butttondata="butttondata" @button-base-click="buttonTableClick($event,row)" /> <ButtonBase :Butttondata="butttondata(row)" @button-base-click="buttonTableClick($event,row)" />
</template> </template>
</Table> </Table>
</ContentWrap> </ContentWrap>
@ -48,11 +48,15 @@
:apiCreate="EquipmentReportRepairRequestApi.createEquipmentReportRepairRequest" :apiCreate="EquipmentReportRepairRequestApi.createEquipmentReportRepairRequest"
@searchTableSuccess="searchTableSuccess" @searchTableSuccess="searchTableSuccess"
:isBusiness="false" :isBusiness="false"
@onChange="onChange"
/> />
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="EquipmentReportRepairRequest.allSchemas" /> <Detail ref="detailRef" :isBasic="true" :allSchemas="EquipmentReportRepairRequest.allSchemas" />
<!-- 审核页面 -->
<AudiForm ref="audiFormRef" @success="getData" @close="getClosed"/>
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/eam/equipment-report-repair-request/import" :importTemplateData="importTemplateData" @success="importSuccess" /> <ImportForm ref="importFormRef" url="/eam/equipment-report-repair-request/import" :importTemplateData="importTemplateData" @success="importSuccess" />
</template> </template>
@ -65,6 +69,11 @@ 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/src/Detail.vue' import Detail from '@/components/Detail/src/Detail.vue'
import AudiForm from '@/views/eam/equipmentReportRepairRequest/audiForm.vue'
import {EquipmentAccounts} from "@/views/eam/equipmentAccounts/equipmentAccounts.data";
import * as EquipmentItemApi from "@/api/eam/equipmentAccounts";
import {ToolAccounts} from "@/views/eam/toolAccounts/toolAccounts.data";
import * as ToolItemApi from "@/api/eam/toolAccounts";
defineOptions({ name: 'EquipmentReportRepairRequest' }) defineOptions({ name: 'EquipmentReportRepairRequest' })
@ -99,9 +108,9 @@ const { getList, setSearchParams } = tableMethods
// //
const HeadButttondata = [ const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'wms:equipmentReportRepairRequest:create'}), // defaultButtons.defaultAddBtn({hasPermi:'eam:equipmentReportRepairRequest:create'}), //
defaultButtons.defaultImportBtn({hasPermi:'wms:equipmentReportRepairRequest:import'}), // //defaultButtons.defaultImportBtn({hasPermi:'eam:equipmentReportRepairRequest:import'}), //
defaultButtons.defaultExportBtn({hasPermi:'wms:equipmentReportRepairRequest:export'}), // defaultButtons.defaultExportBtn({hasPermi:'eam:equipmentReportRepairRequest:export'}), //
defaultButtons.defaultFreshBtn(null), // defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), // defaultButtons.defaultSetBtn(null), //
@ -131,11 +140,26 @@ const buttonBaseClick = (val, item) => {
} }
} }
const isShowStatusButton = (row,val) => {
if (val.indexOf(row.status) > -1) {
return false
} else {
return true
}
}
// - // -
const butttondata = [ const butttondata = (row) => {
defaultButtons.mainListEditBtn({hasPermi:'wms:equipmentReportRepairRequest:update'}), // return [
defaultButtons.mainListDeleteBtn({hasPermi:'wms:equipmentReportRepairRequest:delete'}), // defaultButtons.mainListEditBtn({hide: isShowStatusButton(row, ['0']),hasPermi: 'eam:equipmentReportRepairRequest:update'}), //
] defaultButtons.mainListAuditingBtn({hide: isShowStatusButton(row, ['0']), hasPermi: 'eam:equipmentReportRepairRequest:update'}), //
defaultButtons.mainListAuditedBtn({hide: isShowStatusButton(row, ['2']), hasPermi: 'eam:equipmentReportRepairRequest:update'}), //
defaultButtons.mainListRevokeBtn({hide: isShowStatusButton(row, ['0']), hasPermi: 'eam:equipmentReportRepairRequest:update'}), //
defaultButtons.mainListFinishBtn({hide: isShowStatusButton(row,['3']),hasPermi:'eam:equipmentReportRepairRequest:update'}),
defaultButtons.mainListDeleteBtn({hasPermi:'eam:equipmentReportRepairRequest:update'}), //
]
}
// - // -
const buttonTableClick = async (val, row) => { const buttonTableClick = async (val, row) => {
@ -143,12 +167,31 @@ const buttonTableClick = async (val, row) => {
openForm('update', row) openForm('update', row)
} else if (val == 'delete') { // } else if (val == 'delete') { //
handleDelete(row.id) handleDelete(row.id)
} else if (val == 'auditing') { //
handleAuditing(row.id)
} else if (val == 'revoke') { //
handleRevoke(row.id)
} else if (val == 'audited') { //
handleAudited(row)
} else if (val == 'finish') { //
handleFinish(row.id)
} }
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const basicFormRef = ref() const basicFormRef = ref()
const openForm = (type: string, row?: any) => { const openForm = (type: string, row?: any) => {
if(type == "create"){
EquipmentReportRepairRequest.allSchemas.formSchema.forEach((item) => {
if(item.field == 'status'){
}
})
}else{
EquipmentReportRepairRequest.allSchemas.formSchema.forEach((item) => {
if(item.field == 'status'){
}
})
}
basicFormRef.value.open(type, row) basicFormRef.value.open(type, row)
} }
@ -182,6 +225,79 @@ const openDetail = (row: any, titleName: any, titleValue: any) => {
detailRef.value.openDetail(row, titleName, titleValue, 'basicEquipmentReportRepairRequest') detailRef.value.openDetail(row, titleName, titleValue, 'basicEquipmentReportRepairRequest')
} }
//
const handleFinish = async (id: number) => {
await message.delConfirm('是否完成,并创建维修工单?');
try {
const params = ref({
id: '',
status:'',
})
params.value.id = id
params.value.status = '5'
await EquipmentReportRepairRequestApi.updateEquipmentReportRepairOrder(params.value)
message.success(t('common.updateSuccess'))
//
await getList()
} catch {}
}
//
const handleAudited = async (row) => {
message.confirmAudi(t('')).then(async () => {
//
audiFormRef.value.open('update', row);
}).catch(async (action: Action) => {
if(action === 'cancel'){
const params = ref({
id: '',
status:'',
})
params.value.id = row.id
params.value.status = '4'
await EquipmentReportRepairRequestApi.updateEquipmentReportRepairOrder(params.value)
message.success(t('common.updateSuccess'))
//
await getList()
}
})
}
//
const audiFormRef = ref()
const handleAuditing = async (id: number) => {
await message.delConfirm('是否审核所选中工单?');
try {
const params = ref({
id: '',
status:'',
})
params.value.id = id
params.value.status = '2'
await EquipmentReportRepairRequestApi.updateEquipmentReportRepairOrder(params.value)
message.success(t('common.updateSuccess'))
//
await getList()
} catch {}
}
/** 撤回按钮操作 */
const handleRevoke = async (id: number) => {
await message.delConfirm('是否撤回所选中工单?');
try {
const params = ref({
id: '',
status:'',
})
params.value.id = id
params.value.status = '1'
await EquipmentReportRepairRequestApi.updateEquipmentReportRepairOrder(params.value)
message.success(t('common.updateSuccess'))
//
await getList()
} catch {}
}
/** 删除按钮操作 */ /** 删除按钮操作 */
const handleDelete = async (id: number) => { const handleDelete = async (id: number) => {
try { try {
@ -226,6 +342,62 @@ const importSuccess = () => {
getList() getList()
} }
//audiForm
const getClosed=(val)=> {
nextTick?.(() => {
getList()
})
}
//audiForm
const getData=(val)=> {
nextTick?.(async () => {
try {
const params = ref({
id: '',
status:'',
})
params.value.id = val
params.value.status = '3'
await EquipmentReportRepairRequestApi.updateEquipmentReportRepairOrder(params.value)
message.success(t('工单已流转'))
//
await getList()
} catch {}
}
)
}
const onChange = (field, item) => {
//
if(field == 'type' && item == 'DEVICE'){
EquipmentReportRepairRequest.allSchemas.formSchema.forEach((items) => {
if (items.field == 'equipmentCode') {
basicFormRef.value.formRef.setValues({
equipmentCode:''
})
items.componentProps.searchAllSchemas = EquipmentAccounts.allSchemas
items.componentProps.searchPage = EquipmentItemApi.getEquipmentAccountsPage
}
})
}
//
if(field == 'type' && item == 'EQUIPMENT'){
EquipmentReportRepairRequest.allSchemas.formSchema.forEach((items) => {
if (items.field == 'equipmentCode') {
basicFormRef.value.formRef.setValues({
equipmentCode:''
})
items.componentProps.searchAllSchemas = ToolAccounts.allSchemas
items.componentProps.searchPage = ToolItemApi.getToolAccountsPage
}
})
}
}
// //
const searchFormClick = (searchData) => { const searchFormClick = (searchData) => {
tableObject.params = { tableObject.params = {

142
src/views/eam/maintenance/audiForm.vue

@ -0,0 +1,142 @@
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle" :close-on-click-modal="false">
<el-form ref="basicFormRef" v-loading="formLoading" :model="formData" :rules="formRules" label-width="100px">
<el-row>
<el-col :span="12">
<el-form-item label="审核人" prop="approver">
<el-input v-model="formData.approver" placeholder="请输入审核人" :disabled="isDisabled"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核内容" prop="approveContent">
<el-input v-model="formData.approveContent" placeholder="请输入审核内容" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="审核时间" prop="approveTime">
<el-date-picker
v-model="formData.approveTime"
type="datetime"
value-format="x"
placeholder="选择审核时间">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button :disabled="formLoading" type="primary" @click="submitForm('success')"> </el-button>
<el-button @click="handleClose('close')"> </el-button>
</template>
</Dialog>
<!--添加巡检项弹窗-->
<SearchTable ref="searchTableRef" @searchTableSuccess="searchTableSuccess" />
</template>
<script lang="ts" setup>
import * as MaintenanceApi from '@/api/eam/maintenance'
import { SearchTable } from '@/components/SearchTable'
import {ElInput} from "element-plus";
import {updateMaintenanceAudi} from "@/api/eam/maintenance";
defineOptions({ name: 'TeamForm' })
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const tags=ref([])
const inputValue = ref('')
const inputVisible = ref(false)
const isDisabled = ref(false)
const InputRef = ref<InstanceType<typeof ElInput>>()
const formData = ref({
id:'',
number:'',
approver: '',
approveContent: '',
approveTime: '',
})
const formRules = reactive({
approver: [
{ required: true, message: '审核人不能为空', trigger: 'blur' },
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
approveContent: [
{ required: true, message: '审核内容不能为空', trigger: 'blur' },
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }
],
approveTime: [
{ required: true, message: '审核时间不能为空', trigger: 'blur' },
],
})
const basicFormRef = ref() // Ref
/** 初始化弹窗 */
const open = async (type: string, row?: object) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
//
formData.value.id = row.id
formData.value.number = row.number
}
defineExpose({ open }) // open
/** 提交表单 */
const submitForm = async (val) => {
//success
emit('success',formData.value.id)
//
if (!basicFormRef) return
const valid = await basicFormRef.value.validate()
if (!valid) return
//
await MaintenanceApi.updateMaintenanceAudi(formData.value)
dialogVisible.value = false
}
const handleClose=(val)=>{
dialogVisible.value = false
emit('close',val)
}
//
const emit = defineEmits(['close','success'])
</script>
<style scoped>
.tag-container {
margin-top: 10px; /* 可根据需要调整标签容器与表单项之间的间距 */
border: 1px solid #ccc; /* 添加边框样式 */
padding: 10px; /* 可根据需要调整容器内边距 */
width: 950px; /* 设置固定宽度为 950px */
overflow-y: auto; /* 当内容溢出容器高度时显示滚动条 */
word-wrap: break-word; /* 使用 word-wrap 属性实现超出范围换行 */
overflow-wrap: break-word; /* 兼容性更好的写法 */
flex-wrap: wrap;
}
.input-with-button {
display: flex;
align-items: center;
width: 100%;
}
.input-with-button > .el-input {
flex: 1;
/*margin-right: 10px;*/
}
</style>

101
src/views/eam/maintenance/index.vue

@ -54,6 +54,8 @@
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="Maintenance.allSchemas" /> <Detail ref="detailRef" :isBasic="true" :allSchemas="Maintenance.allSchemas" />
<AudiForm ref="audiFormRef" @success="getData" @close="getClosed"/>
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/eam/maintenance/import" :importTemplateData="importTemplateData" @success="importSuccess" /> <ImportForm ref="importFormRef" url="/eam/maintenance/import" :importTemplateData="importTemplateData" @success="importSuccess" />
</template> </template>
@ -66,11 +68,13 @@ 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/src/Detail.vue' import Detail from '@/components/Detail/src/Detail.vue'
import AudiForm from '@/views/eam/maintenance/audiForm.vue'
import {EquipmentAccounts} from "@/views/eam/equipmentAccounts/equipmentAccounts.data"; import {EquipmentAccounts} from "@/views/eam/equipmentAccounts/equipmentAccounts.data";
import * as EquipmentItemApi from "@/api/eam/equipmentAccounts"; import * as EquipmentItemApi from "@/api/eam/equipmentAccounts";
import { ToolAccounts } from "@/views/eam/toolAccounts/toolAccounts.data"; import { ToolAccounts } from "@/views/eam/toolAccounts/toolAccounts.data";
import * as ToolItemApi from "@/api/eam/toolAccounts"; import * as ToolItemApi from "@/api/eam/toolAccounts";
defineOptions({ name: 'Maintenance' }) defineOptions({ name: 'Maintenance' })
const message = useMessage() // const message = useMessage() //
@ -144,11 +148,20 @@ const isShowMainButton = (row,val) => {
} }
} }
const isShowStatusButton = (row,val) => {
if (val.indexOf(row.status) > -1) {
return false
} else {
return true
}
}
// - // -
const butttondata = (row) => { const butttondata = (row) => {
return [ return [
defaultButtons.mainListEditBtn({hasPermi:'eam:maintenance:update'}), // defaultButtons.mainListEditBtn({hide: isShowStatusButton(row,['0']),hasPermi:'eam:maintenance:update'}), //
//defaultButtons.mainListDeleteBtn({hasPermi:'eam:basicInspectionOption:delete'}), // defaultButtons.mainListAuditingBtn({hide: isShowStatusButton(row,['0']),hasPermi:'eam:maintenance:update'}), //
defaultButtons.mainListFinishBtn({hide: isShowStatusButton(row,['3']),hasPermi:'eam:maintenance:update'}), //
defaultButtons.mainListEnableBtn({hide:isShowMainButton(row,['FALSE']),hasPermi:'eam:maintenance:update'}), defaultButtons.mainListEnableBtn({hide:isShowMainButton(row,['FALSE']),hasPermi:'eam:maintenance:update'}),
defaultButtons.mainListDisableBtn({hide:isShowMainButton(row,['TRUE']),hasPermi:'eam:maintenance:update'}), defaultButtons.mainListDisableBtn({hide:isShowMainButton(row,['TRUE']),hasPermi:'eam:maintenance:update'}),
] ]
@ -164,12 +177,29 @@ const buttonTableClick = async (val, row) => {
handleEnable(row.id) handleEnable(row.id)
} else if (val == 'disable') { } else if (val == 'disable') {
handleDisable(row.id) handleDisable(row.id)
} else if (val == 'auditing') { //
handleAuditing(row.id)
} else if (val == 'finish') { //
handleFinish(row)
} }
} }
/** 添加/修改操作 */ /** 添加/修改操作 */
const basicFormRef = ref() const basicFormRef = ref()
const openForm = (type: string, row?: any) => { const openForm = (type: string, row?: any) => {
if(type == "create"){
Maintenance.allSchemas.formSchema.forEach((item) => {
if(item.field == 'status'){
item.componentProps.disabled = true
}
})
}else{
Maintenance.allSchemas.formSchema.forEach((item) => {
if(item.field == 'status'){
item.componentProps.disabled = false
}
})
}
basicFormRef.value.open(type, row) basicFormRef.value.open(type, row)
} }
@ -216,6 +246,45 @@ const handleDelete = async (id: number) => {
} catch {} } catch {}
} }
//
const handleFinish = async (row) => {
message.confirmAudi(t('')).then(async () => {
//
audiFormRef.value.open('update', row);
}).catch(async (action: Action) => {
if(action === 'cancel'){
const params = ref({
id: '',
status:'',
})
params.value.id = row.id
params.value.status = '5'
await MaintenanceApi.updateMaintenancePlan(params.value)
message.success(t('common.updateSuccess'))
//
await getList()
}
})
}
//
const audiFormRef = ref()
const handleAuditing = async (id: number) => {
await message.delConfirm('是否审核所选中工单?');
try {
const params = ref({
id: '',
status:'',
})
params.value.id = id
params.value.status = '3'
await MaintenanceApi.updateMaintenancePlan(params.value)
message.success(t('common.updateSuccess'))
//
await getList()
} catch {}
}
/** 启用 */ /** 启用 */
const handleEnable = async (id: number) => { const handleEnable = async (id: number) => {
try { try {
@ -314,6 +383,34 @@ const searchFormClick = (searchData) => {
getList() // getList() //
} }
//audiForm
const getClosed=(val)=> {
nextTick?.(() => {
getList()
})
}
//audiForm
const getData=(val)=> {
nextTick?.(async () => {
try {
const params = ref({
id: '',
status:'',
})
params.value.id = val
params.value.status = '4'
await MaintenanceApi.updateMaintenancePlan(params.value)
message.success(t('计划已流转'))
//
await getList()
} catch {}
}
)
}
/** 初始化 **/ /** 初始化 **/
onMounted(async () => { onMounted(async () => {
getList() getList()

183
src/views/eam/maintenance/maintenance.data.ts

@ -47,7 +47,7 @@ export const Maintenance = useCrudSchemas(reactive<CrudSchema[]>([
dictType: DICT_TYPE.DEVICE_TYPE, dictType: DICT_TYPE.DEVICE_TYPE,
dictClass: 'string', dictClass: 'string',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
}, },
{ {
label: '设备工装编号', label: '设备工装编号',
@ -112,7 +112,7 @@ export const Maintenance = useCrudSchemas(reactive<CrudSchema[]>([
field: 'startTime', field: 'startTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: true, isSearch: false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -134,7 +134,7 @@ export const Maintenance = useCrudSchemas(reactive<CrudSchema[]>([
field: 'endTime', field: 'endTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: true, isSearch: false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -156,26 +156,27 @@ export const Maintenance = useCrudSchemas(reactive<CrudSchema[]>([
field: 'status', field: 'status',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
dictType: DICT_TYPE.EAM_PLAN_STATUS,
dictClass: 'string',
}, },
{ {
label: '审核人', label: '审核人',
field: 'approver', field: 'approver',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
}, },
{ {
label: '审核内容', label: '审核内容',
field: 'approveContent', field: 'approveContent',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
}, },
{ {
label: '审核时间', label: '审核时间',
field: 'approveTime', field: 'approveTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: true, isSearch: false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -214,7 +215,7 @@ export const Maintenance = useCrudSchemas(reactive<CrudSchema[]>([
label: '直接生成记录', label: '直接生成记录',
field: 'directCreateRecord', field: 'directCreateRecord',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
}, },
{ {
label: '所属厂区编号', label: '所属厂区编号',
@ -229,7 +230,7 @@ export const Maintenance = useCrudSchemas(reactive<CrudSchema[]>([
label: '车间编号', label: '车间编号',
field: 'workshopCode', field: 'workshopCode',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
required: true, required: true,
form: { form: {
// labelMessage: '信息提示说明!!!', // labelMessage: '信息提示说明!!!',
@ -253,7 +254,7 @@ export const Maintenance = useCrudSchemas(reactive<CrudSchema[]>([
field: 'createTime', field: 'createTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: true, isSearch: false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -277,7 +278,7 @@ export const Maintenance = useCrudSchemas(reactive<CrudSchema[]>([
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
}, },
{ {
label: '地点ID', label: '地点ID',
@ -357,3 +358,163 @@ export const Maintenance = useCrudSchemas(reactive<CrudSchema[]>([
} }
} }
])) ]))
// 表单校验
export const RelationMaintenancePlanItemRules = reactive({
planNumber: [required],
itemCode: [required],
itemName: [required],
})
export const RelationMaintenancePlanItem = useCrudSchemas(reactive<CrudSchema[]>([
{
label: 'id',
field: 'id',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '计划编号',
field: 'planNumber',
sort: 'custom',
isSearch: true,
},
{
label: '项编号',
field: 'itemCode',
sort: 'custom',
isSearch: true,
},
{
label: '保养名称',
field: 'itemName',
sort: 'custom',
isSearch: true,
},
{
label: '是否必选',
field: 'isSelectd',
sort: 'custom',
isSearch: true,
dictType: DICT_TYPE.FALSE_OR_TRUE,
dictClass: 'string',
},
{
label: '创建时间',
field: 'createTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
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: 'departmentCode',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '备注',
field: 'remark',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '地点ID',
field: 'siteId',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '是否可用默认TRUE',
field: 'available',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '删除时间',
field: 'deletionTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
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: '删除人id',
field: 'deleterId',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '并发乐观锁',
field: 'concurrencyStamp',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
form: {
component: 'InputNumber',
value: 0
},
},
{
label: '操作',
field: 'action',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
table: {
width: 150,
fixed: 'right'
}
}
]))

1
src/views/error/404.vue

@ -1,6 +1,5 @@
<template> <template>
<Error @error-click="push('/')" /> <Error @error-click="push('/')" />
<div>哈哈哈哈</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
defineOptions({ name: 'Error404' }) defineOptions({ name: 'Error404' })

106
src/views/home/components/material.vue

@ -32,13 +32,15 @@
</div> </div>
</div> </div>
<div class="two-row mt-14px"> <div class="two-row mt-14px">
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]" >
<!-- 呆滞库存预警 -->
<div class="title">{{ t('home.slack_stock_warning')}}</div> <div class="title">{{ t('home.slack_stock_warning')}}</div>
<el-table <el-table
:data="materialData?.stagnantBalanceList" :data="stagnantBalanceList"
style="width: 100%" style="width: 100%"
stripe stripe
height="240px" height="240px"
row-key="id"
> >
<el-table-column prop="itemCode" :label="t('home.material_code')" width="180px" /> <el-table-column prop="itemCode" :label="t('home.material_code')" width="180px" />
<el-table-column prop="batch" :label="t('home.batch')" width="180px" /> <el-table-column prop="batch" :label="t('home.batch')" width="180px" />
@ -87,14 +89,27 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination style="margin-top:10px"
v-model:current-page="currentPage_stagnantBalance"
v-model:page-size="pageSize_stagnantBalance"
:page-sizes="[10, 20, 30, 50, 100]"
:small="true"
:background="false"
layout="total, sizes, prev, pager, next, jumper"
:total="total_stagnantBalance"
@size-change="getStagnantBalance"
@current-change="getStagnantBalance"
/>
</div> </div>
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 超期库存预警 -->
<div class="title">{{ t('home.overstock_warning') }}</div> <div class="title">{{ t('home.overstock_warning') }}</div>
<el-table <el-table
:data="materialData?.overdueBalanceList" :data="overdueBalanceList"
style="width: 100%" style="width: 100%"
stripe stripe
height="240px" height="240px"
row-key="id"
> >
<el-table-column prop="itemCode" :label="t('home.material_code')" width="180px" /> <el-table-column prop="itemCode" :label="t('home.material_code')" width="180px" />
<el-table-column prop="batch" :label="t('home.batch')" width="180px" /> <el-table-column prop="batch" :label="t('home.batch')" width="180px" />
@ -143,13 +158,25 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination style="margin-top:10px"
v-model:current-page="currentPage_overdueBalance"
v-model:page-size="pageSize_overdueBalance"
:page-sizes="[10, 20, 30, 50, 100]"
:small="true"
:background="false"
layout="total, sizes, prev, pager, next, jumper"
:total="total_overdueBalance"
@size-change="getOverdueBalance"
@current-change="getOverdueBalance"
/>
</div> </div>
</div> </div>
<div class="two-row mt-14px"> <div class="two-row mt-14px">
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 高低储预警 -->
<div class="title">{{ t('home.high_and_low_storage_warning') }}</div> <div class="title">{{ t('home.high_and_low_storage_warning') }}</div>
<el-table <el-table
:data="materialData?.warningBalanceList" :data="warningBalanceList"
style="width: 100%" style="width: 100%"
stripe stripe
height="240px" height="240px"
@ -201,8 +228,20 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination style="margin-top:10px"
v-model:current-page="currentPage_warningBalance"
v-model:page-size="pageSize_warningBalance"
:page-sizes="[10, 20, 30, 50, 100]"
:small="true"
:background="false"
layout="total, sizes, prev, pager, next, jumper"
:total="total_warningBalance"
@size-change="getWarningBalance"
@current-change="getWarningBalance"
/>
</div> </div>
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 待处理任务 -->
<div class="title">{{ t('home.waiting_tasks') }}</div> <div class="title">{{ t('home.waiting_tasks') }}</div>
<Echart :options="barOptions" :height="280" :key="lineIndex" /> <Echart :options="barOptions" :height="280" :key="lineIndex" />
</div> </div>
@ -222,12 +261,13 @@ const lineIndex = ref(0)
const materialData = ref() const materialData = ref()
// //
const getMaterialData = async () => { const getMaterialData = () => {
await IndexApi.getMaterialData().then((res) => { IndexApi.getMaterialData().then((res) => {
materialData.value = res materialData.value = res
getJobCharts() getJobCharts()
}) })
} }
const formatter = (type, dict) => { const formatter = (type, dict) => {
let str = getStrDictOptions(dict).filter((item) => type == item.value)[0]?.label let str = getStrDictOptions(dict).filter((item) => type == item.value)[0]?.label
return str return str
@ -250,9 +290,59 @@ const getJobCharts = async () => {
]) ])
lineIndex.value++ lineIndex.value++
} }
onMounted(async () => { onMounted(() => {
await getMaterialData() getMaterialData()
//
Promise.all([ getStagnantBalance(),getOverdueBalance(),getWarningBalance()])
}) })
//
const currentPage_stagnantBalance = ref(1)
const pageSize_stagnantBalance = ref(10)
const total_stagnantBalance= ref(100)
const stagnantBalanceList = ref([])
const getStagnantBalance = ()=>{
IndexApi.getStagnantBalance({
pageNo: currentPage_stagnantBalance.value,
pageSize: pageSize_stagnantBalance.value
}).then((res) => {
console.log('getStagnantBalance',res)
stagnantBalanceList.value = res.list
total_stagnantBalance.value = res.total
})
}
//
const currentPage_overdueBalance = ref(1)
const pageSize_overdueBalance = ref(10)
const total_overdueBalance= ref(100)
const overdueBalanceList = ref([])
const getOverdueBalance = ()=>{
IndexApi.getOverdueBalance({
pageNo: currentPage_overdueBalance.value,
pageSize: pageSize_overdueBalance.value
}).then((res) => {
console.log('getOverdueBalance',res)
overdueBalanceList.value = res.list
total_overdueBalance.value = res.total
})
}
//
const currentPage_warningBalance = ref(1)
const pageSize_warningBalance = ref(10)
const total_warningBalance= ref(100)
const warningBalanceList = ref([])
const getWarningBalance = ()=>{
IndexApi.getWarningBalance({
pageNo: currentPage_warningBalance.value,
pageSize: pageSize_warningBalance.value
}).then((res) => {
console.log('getWarningBalance',res)
warningBalanceList.value = res.list
total_warningBalance.value = res.total
})
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.title { .title {

95
src/views/home/components/produce.vue

@ -3,9 +3,10 @@
<div class="row"> <div class="row">
<div class="two-row"> <div class="two-row">
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 今日生产计划 -->
<div class="title">{{ t('home.today_production_plan')}}</div> <div class="title">{{ t('home.today_production_plan')}}</div>
<el-table <el-table
:data="produceData?.productionTodayList" :data="productionTodayList"
style="width: 100%" style="width: 100%"
stripe stripe
height="240px" height="240px"
@ -33,10 +34,22 @@
</el-table-column> </el-table-column>
<el-table-column prop="businessType" :label="t('home.business_type')" /> <el-table-column prop="businessType" :label="t('home.business_type')" />
</el-table> </el-table>
<el-pagination style="margin-top:10px"
v-model:current-page="currentPage_productionToday"
v-model:page-size="pageSize_productionToday"
:page-sizes="[10, 20, 30, 50, 100]"
:small="true"
:background="false"
layout="total, sizes, prev, pager, next, jumper"
:total="total_productionToday"
@size-change="getProductionToday"
@current-change="getProductionToday"
/>
</div> </div>
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 线边安全库存 -->
<div class="title">{{ t('home.line_side_safety_stock') }}</div> <div class="title">{{ t('home.line_side_safety_stock') }}</div>
<el-table :data="produceData?.safeLocationList" style="width: 100%" stripe height="240px"> <el-table :data="safeLocationList" style="width: 100%" stripe height="240px">
<el-table-column prop="code" :label="t('home.code')" width="180" /> <el-table-column prop="code" :label="t('home.code')" width="180" />
<el-table-column prop="name" :label="t('home.name')" width="180" /> <el-table-column prop="name" :label="t('home.name')" width="180" />
<el-table-column prop="warehouseCode" :label="t('home.warehouse_code')" width="180" /> <el-table-column prop="warehouseCode" :label="t('home.warehouse_code')" width="180" />
@ -64,13 +77,25 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination style="margin-top:10px"
v-model:current-page="currentPage_safeLocation"
v-model:page-size="pageSize_safeLocation"
:page-sizes="[10, 20, 30, 50, 100]"
:small="true"
:background="false"
layout="total, sizes, prev, pager, next, jumper"
:total="total_safeLocation"
@size-change="getSafeLocation"
@current-change="getSafeLocation"
/>
</div> </div>
</div> </div>
<div class="two-row mt-14px"> <div class="two-row mt-14px">
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 待上架成品库存 -->
<div class="title">{{t('home.inventory_of_finished_products_waiting_to_be_putway')}}</div> <div class="title">{{t('home.inventory_of_finished_products_waiting_to_be_putway')}}</div>
<el-table <el-table
:data="produceData?.productputawayJobDetailList" :data="productputawayJobDetailList"
style="width: 100%" style="width: 100%"
stripe stripe
height="240px" height="240px"
@ -153,6 +178,17 @@
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination style="margin-top:10px"
v-model:current-page="currentPage_productputawayJobDetail"
v-model:page-size="pageSize_productputawayJobDetail"
:page-sizes="[10, 20, 30, 50, 100]"
:small="true"
:background="false"
layout="total, sizes, prev, pager, next, jumper"
:total="total_productputawayJobDetail"
@size-change="getProductputawayJobDetail"
@current-change="getProductputawayJobDetail"
/>
</div> </div>
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<div class="title">{{t('home.waiting_tasks')}}</div> <div class="title">{{t('home.waiting_tasks')}}</div>
@ -201,8 +237,57 @@ const getJobCharts = async () => {
]) ])
lineIndex.value++ lineIndex.value++
} }
onMounted(async () => { //
await getProduceData() const currentPage_productionToday = ref(1)
const pageSize_productionToday = ref(10)
const total_productionToday= ref(100)
const productionTodayList = ref([])
const getProductionToday = ()=>{
IndexApi.getProductionToday({
pageNo: currentPage_productionToday.value,
pageSize: pageSize_productionToday.value
}).then((res) => {
console.log('getPurchasereturnRecordMonth',res)
productionTodayList.value = res.list
total_productionToday.value = res.total
})
}
// 线
const currentPage_safeLocation = ref(1)
const pageSize_safeLocation = ref(10)
const total_safeLocation= ref(100)
const safeLocationList = ref([])
const getSafeLocation = ()=>{
IndexApi.getSafeLocation({
pageNo: currentPage_safeLocation.value,
pageSize: pageSize_safeLocation.value
}).then((res) => {
console.log('getPurchasereturnRecordMonth',res)
safeLocationList.value = res.list
total_safeLocation.value = res.total
})
}
//
const currentPage_productputawayJobDetail = ref(1)
const pageSize_productputawayJobDetail = ref(10)
const total_productputawayJobDetail= ref(100)
const productputawayJobDetailList = ref([])
const getProductputawayJobDetail = ()=>{
IndexApi.getProductputawayJobDetail({
pageNo: currentPage_productputawayJobDetail.value,
pageSize: pageSize_productputawayJobDetail.value
}).then((res) => {
console.log('待上架成品库存',res)
productputawayJobDetailList.value = res.list
total_productputawayJobDetail.value = res.total
})
}
onMounted( () => {
// getProduceData()
Promise.all([getProductionToday(),getSafeLocation(),getProductputawayJobDetail()])
}) })
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

10
src/views/home/components/product.vue

@ -11,7 +11,8 @@
</div> </div>
</div> </div>
<div class="two-row mt-14px"> <div class="two-row mt-14px">
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]" style="border:1px solid red">
<!-- 呆滞库存预警 -->
<div class="title">{{ t('home.slack_stock_warning') }}</div> <div class="title">{{ t('home.slack_stock_warning') }}</div>
<el-table <el-table
:data="productData?.stagnantBalanceList" :data="productData?.stagnantBalanceList"
@ -68,6 +69,7 @@
</el-table> </el-table>
</div> </div>
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 超期库存预警 -->
<div class="title">{{ t('home.overstock_warning') }}</div> <div class="title">{{ t('home.overstock_warning') }}</div>
<el-table <el-table
:data="productData?.overdueBalanceList" :data="productData?.overdueBalanceList"
@ -126,6 +128,7 @@
</div> </div>
<div class="two-row mt-14px"> <div class="two-row mt-14px">
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 高低储预警 -->
<div class="title">{{ t('home.high_and_low_storage_warning') }}</div> <div class="title">{{ t('home.high_and_low_storage_warning') }}</div>
<el-table <el-table
:data="productData?.warningBalanceList" :data="productData?.warningBalanceList"
@ -182,6 +185,7 @@
</el-table> </el-table>
</div> </div>
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 待处理任务 -->
<div class="title">{{ t('home.waiting_tasks') }}</div> <div class="title">{{ t('home.waiting_tasks') }}</div>
<Echart :options="barOptions" :height="280" :key="lineIndex" /> <Echart :options="barOptions" :height="280" :key="lineIndex" />
</div> </div>
@ -228,8 +232,8 @@ const getJobCharts = async () => {
]) ])
lineIndex.value++ lineIndex.value++
} }
onMounted(async () => { onMounted( () => {
await getProductData() // getProductData()
}) })
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

65
src/views/home/components/supplierIndex.vue

@ -147,9 +147,10 @@
</div> </div>
<div class="two-row mt-14px"> <div class="two-row mt-14px">
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 本月退货明细 -->
<div class="title">{{t('home.month_return_detials')}}</div> <div class="title">{{t('home.month_return_detials')}}</div>
<el-table <el-table
:data="supplierData?.purchasereturnRecordMonth" :data="purchasereturnRecordMonth"
style="width: 100%" style="width: 100%"
stripe stripe
height="240px" height="240px"
@ -199,11 +200,23 @@
</el-table-column> </el-table-column>
<el-table-column prop="creator" :label="t('home.creater')" width="120" /> <el-table-column prop="creator" :label="t('home.creater')" width="120" />
</el-table> </el-table>
<el-pagination style="margin-top:10px"
v-model:current-page="currentPage_purchasereturn"
v-model:page-size="pageSize_purchasereturn"
:page-sizes="[10, 20, 30, 50, 100]"
:small="true"
:background="false"
layout="total, sizes, prev, pager, next, jumper"
:total="total_purchasereturn"
@size-change="getPurchasereturnRecordMonth"
@current-change="getPurchasereturnRecordMonth"
/>
</div> </div>
<div class="data1 w-[47.3%]"> <div class="data1 w-[47.3%]">
<!-- 本月索赔明细 -->
<div class="title">{{t('home.claim_details_month')}}</div> <div class="title">{{t('home.claim_details_month')}}</div>
<el-table <el-table
:data="supplierData?.purchasereturnRecordMonth" :data="purchaseclaimRecordMonth"
style="width: 100%" style="width: 100%"
stripe stripe
height="240px" height="240px"
@ -223,6 +236,17 @@
</el-table-column> </el-table-column>
<el-table-column prop="creator" :label="t('home.creater')" width="120" /> <el-table-column prop="creator" :label="t('home.creater')" width="120" />
</el-table> </el-table>
<el-pagination style="margin-top:10px"
v-model:current-page="currentPage_purchaseclaim"
v-model:page-size="pageSize_purchaseclaim"
:page-sizes="[10, 20, 30, 50, 100]"
:small="true"
:background="false"
layout="total, sizes, prev, pager, next, jumper"
:total="total_purchaseclaim"
@size-change="getPurchaseclaimRecordMonth"
@current-change="getPurchaseclaimRecordMonth"
/>
</div> </div>
</div> </div>
</div> </div>
@ -354,9 +378,42 @@ const formatter = (type,dict) => {
let str = getStrDictOptions(dict).filter((item) => type == item.value)[0]?.label let str = getStrDictOptions(dict).filter((item) => type == item.value)[0]?.label
return str return str
} }
onMounted(async () => {
await getSupplierData() // 退
const currentPage_purchasereturn = ref(1)
const pageSize_purchasereturn = ref(10)
const total_purchasereturn= ref(100)
const purchasereturnRecordMonth = ref([])
const getPurchasereturnRecordMonth = ()=>{
IndexApi.getPurchasereturnRecordMonth({
pageNo: currentPage_purchasereturn.value,
pageSize: pageSize_purchasereturn.value
}).then((res) => {
console.log('getPurchasereturnRecordMonth',res)
purchasereturnRecordMonth.value = res.list
total_purchasereturn.value = res.total
})
}
//
const currentPage_purchaseclaim = ref(1)
const pageSize_purchaseclaim = ref(10)
const total_purchaseclaim= ref(100)
const purchaseclaimRecordMonth = ref([])
const getPurchaseclaimRecordMonth = ()=>{
IndexApi.getPurchaseclaimRecordMonth({
pageNo: currentPage_purchaseclaim.value,
pageSize: pageSize_purchaseclaim.value
}).then((res) => {
console.log('getPurchaseclaimRecordMonth',res)
purchaseclaimRecordMonth.value = res.list
total_purchaseclaim.value = res.total
})
}
onMounted( () => {
getSupplierData()
getList() getList()
//
Promise.all([getPurchaseclaimRecordMonth(),getPurchasereturnRecordMonth()])
}) })
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

9
src/views/home/index.vue

@ -1,9 +1,14 @@
<template> <template>
<div> <div>
<supplierIndex v-hasRole="['super_admin','supplier']"/> <!-- <supplierIndex v-hasRole="['super_admin','supplier']"/>
<material v-hasRole="['super_admin']"/> <material v-hasRole="['super_admin']"/>
<product v-hasRole="['super_admin']"/> <product v-hasRole="['super_admin']"/>
<produce v-hasRole="['super_admin']"/> <produce v-hasRole="['super_admin']"/> -->
<supplierIndex />
<material/>
<!-- material 中四个table重复了先去掉了 -->
<!-- <product/> -->
<produce/>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>

20
src/views/mes/productBackline/index.vue

@ -33,7 +33,7 @@
</el-button> </el-button>
</template> </template>
<template #action="{ row }"> <template #action="{ row }">
<ButtonBase :Butttondata="butttondata" @button-base-click="buttonTableClick($event,row)" /> <ButtonBase :Butttondata="butttondata(row)" @button-base-click="buttonTableClick($event,row)" />
</template> </template>
</Table> </Table>
</ContentWrap> </ContentWrap>
@ -138,10 +138,20 @@ const buttonBaseClick = (val, item) => {
} }
// - // -
const butttondata = [ const butttondata = (row) => {
defaultButtons.mainListEditBtn({hasPermi:'mes:product-backline:update'}), // return [
defaultButtons.mainListDeleteBtn({hasPermi:'mes:product-backline:delete'}), // defaultButtons.mainListEditBtn({hide: isShowMainButton(row,['1']),hasPermi:'mes:reworkSingle:update'}), //
] defaultButtons.mainListDeleteBtn({hide: isShowMainButton(row,['1']),hasPermi:'mes:reworkSingle:delete'}), //
]
}
const isShowMainButton = (row,val) => {
if (val.indexOf(row.status) > -1) {
return false
} else {
return true
}
}
// - // -
const buttonTableClick = async (val, row) => { const buttonTableClick = async (val, row) => {

8
src/views/mes/productBackline/productBackline.data.ts

@ -92,6 +92,14 @@ export const ProductBackline = useCrudSchemas(reactive<CrudSchema[]>([
} }
} }
}, },
{
label: '状态',
field: 'status',
sort: 'custom',
isSearch: true,
dictType: DICT_TYPE.OFF_BACK_STATUS,
dictClass: 'string',
},
{ {
label: '返线工序', label: '返线工序',
field: 'processCode', field: 'processCode',

20
src/views/mes/productOffline/index.vue

@ -33,7 +33,7 @@
</el-button> </el-button>
</template> </template>
<template #action="{ row }"> <template #action="{ row }">
<ButtonBase :Butttondata="butttondata" @button-base-click="buttonTableClick($event,row)" /> <ButtonBase :Butttondata="butttondata(row)" @button-base-click="buttonTableClick($event,row)" />
</template> </template>
</Table> </Table>
</ContentWrap> </ContentWrap>
@ -138,10 +138,20 @@ const buttonBaseClick = (val, item) => {
} }
// - // -
const butttondata = [ const butttondata = (row) => {
defaultButtons.mainListEditBtn({hasPermi:'mes:product-offline:update'}), // return [
defaultButtons.mainListDeleteBtn({hasPermi:'mes:product-offline:delete'}), // defaultButtons.mainListEditBtn({hide: isShowMainButton(row,['1']),hasPermi:'mes:reworkSingle:update'}), //
] defaultButtons.mainListDeleteBtn({hide: isShowMainButton(row,['1']),hasPermi:'mes:reworkSingle:delete'}), //
]
}
const isShowMainButton = (row,val) => {
if (val.indexOf(row.status) > -1) {
return false
} else {
return true
}
}
// - // -
const buttonTableClick = async (val, row) => { const buttonTableClick = async (val, row) => {

8
src/views/mes/productOffline/productOffline.data.ts

@ -114,6 +114,14 @@ export const ProductOffline = useCrudSchemas(reactive<CrudSchema[]>([
} }
} }
}, },
{
label: '状态',
field: 'status',
sort: 'custom',
isSearch: true,
dictType: DICT_TYPE.OFF_BACK_STATUS,
dictClass: 'string',
},
{ {
label: '产品去向', label: '产品去向',
field: 'productDestination', field: 'productDestination',

1
src/views/mes/reworkBatch/reworkBatch.data.ts

@ -9,6 +9,7 @@ export const ReworkBatchRules = reactive({
productionCode:[required], productionCode:[required],
replaceFlag:[required], replaceFlag:[required],
status:[required], status:[required],
productionCount:[required]
}) })
export const ReworkBatch = useCrudSchemas(reactive<CrudSchema[]>([ export const ReworkBatch = useCrudSchemas(reactive<CrudSchema[]>([

144
src/views/qms/aql/aql.data.ts

@ -7,60 +7,60 @@ import { validateNum } from "@/utils/validator";
export const AqlRules = reactive({ export const AqlRules = reactive({
code: [required], code: [required],
inspectionQualification: [required], inspectionQualification: [required],
sampleCharacterCode: [{ required, max: 1, message: '长度不得超过1个字符', trigger: 'blur' }], sampleCharacterCode: [required, {max: 1, message: '长度不得超过1个字符', trigger: 'blur' }],
sampleQty: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], sampleQty: [required,{ validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a0separator010: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a0separator010: [required,{ validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r0separator010: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r0separator010: [required,{ validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a0separator015: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a0separator015: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r0separator015: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r0separator015: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a0separator025: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a0separator025: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r0separator025: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r0separator025: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a0separator040: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a0separator040: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r0separator040: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r0separator040: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a0separator065: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a0separator065: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r0separator065: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r0separator065: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a0separator10: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a0separator10: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r0separator10: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r0separator10: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a0separator15: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a0separator15: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r0separator15: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r0separator15: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a0separator25: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a0separator25: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r0separator25: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r0separator25: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a0separator40: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a0separator40: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r0separator40: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r0separator40: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a0separator65: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a0separator65: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r0separator65: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r0separator65: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a1separator0: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a1separator0: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r1separator0: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r1separator0: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a1separator5: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a1separator5: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r1separator5: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r1separator5: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a2separator5: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a2separator5: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r2separator5: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r2separator5: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a4separator0: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a4separator0: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r4separator0: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r4separator0: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a6separator5: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a6separator5: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r6separator5: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r6separator5: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a10: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a10: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r10: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r10: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a15: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a15: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r15: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r15: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a25: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a25: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r25: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r25: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a40: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a40: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r40: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r40: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a65: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a65: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r65: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r65: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a100: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a100: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r100: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r100: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a150: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a150: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r150: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r150: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a250: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a250: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r250: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r250: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a400: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a400: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r400: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r400: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a650: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a650: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r650: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r650: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
a1000: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], a1000: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
r1000: [{ required, validator: validateNum, message: '请输入整数', trigger: 'blur' }], r1000: [required,{validator: validateNum, message: '请输入整数', trigger: 'blur' }],
}) })
const samplingSchemeList = await getSamplingScheme() const samplingSchemeList = await getSamplingScheme()
export const Aql = useCrudSchemas(reactive<CrudSchema[]>([ export const Aql = useCrudSchemas(reactive<CrudSchema[]>([
@ -553,24 +553,24 @@ export const Aql = useCrudSchemas(reactive<CrudSchema[]>([
width: 175 width: 175
} }
}, },
{ // {
label: '是否可用', // label: '是否可用',
field: 'available', // field: 'available',
sort: 'custom', // sort: 'custom',
dictType: DICT_TYPE.TRUE_FALSE, // dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑 // dictClass: 'string', // 默认都是字符串类型其他暂不考虑
form: { // form: {
component: 'Switch', // component: 'Switch',
value: 'TRUE', // value: 'TRUE',
componentProps: { // componentProps: {
inactiveValue: 'FALSE', // inactiveValue: 'FALSE',
activeValue: 'TRUE' // activeValue: 'TRUE'
} // }
}, // },
table: { // table: {
width: 110 // width: 110
} // }
}, // },
{ {
label: '操作', label: '操作',
field: 'action', field: 'action',

4
src/views/qms/inspectionJob/addForm.vue

@ -367,7 +367,7 @@
item.inspectionJobCharacteristicsUpdateReqVO = item.inspectionJobCharacteristicsRespVO item.inspectionJobCharacteristicsUpdateReqVO = item.inspectionJobCharacteristicsRespVO
// //
allSamplePieceSize.value += parseFloat((parseFloat(item.inspectionJobCharacteristicsUpdateReqVO.sampleQty) * parseFloat(item.inspectionJobCharacteristicsUpdateReqVO.samplePieceSize)).toFixed(2)) allSamplePieceSize.value += parseFloat((parseFloat(item.inspectionJobCharacteristicsUpdateReqVO.sampleQty) * parseFloat(item.inspectionJobCharacteristicsUpdateReqVO.samplePieceSize)).toFixed(6))
// rules.value['inspectionJobCharacteristicsUpdateReqVO.quantifyCapping'][0].required = true // rules.value['inspectionJobCharacteristicsUpdateReqVO.quantifyCapping'][0].required = true
if (!item.inspectionJobCharacteristicsUpdateReqVO.recordInspectionQuantifyList) { if (!item.inspectionJobCharacteristicsUpdateReqVO.recordInspectionQuantifyList) {
// //
@ -430,7 +430,7 @@
if (data.value.packageList[i].sampleAmount == null) { if (data.value.packageList[i].sampleAmount == null) {
if (allSamplePieceSize.value > data.value.packageList[i].amount) { if (allSamplePieceSize.value > data.value.packageList[i].amount) {
data.value.packageList[i].sampleAmount = data.value.packageList[i].amount data.value.packageList[i].sampleAmount = data.value.packageList[i].amount
allSamplePieceSize.value = parseFloat((allSamplePieceSize.value - data.value.packageList[i].amount).toFixed(2)) allSamplePieceSize.value = parseFloat((allSamplePieceSize.value - data.value.packageList[i].amount).toFixed(6))
} else { } else {
data.value.packageList[i].sampleAmount = allSamplePieceSize.value data.value.packageList[i].sampleAmount = allSamplePieceSize.value
allSamplePieceSize.value = 0 allSamplePieceSize.value = 0

2
src/views/qms/inspectionJob/detail.vue

@ -70,7 +70,7 @@
<el-col :span="12"> <el-col :span="12">
<el-form-item label="每份样品量" prop="inspectionJobCharacteristicsRespVO.samplePieceSize"> <el-form-item label="每份样品量" prop="inspectionJobCharacteristicsRespVO.samplePieceSize">
<div style="display: flex; width: 100%"> <div style="display: flex; width: 100%">
<el-input v-model="item.inspectionJobCharacteristicsRespVO.samplePieceSize" disabled placeholder="请输入样品份数" /> <el-input v-model="item.inspectionJobCharacteristicsRespVO.samplePieceSize" disabled placeholder="请输入每份样品量" />
</div> </div>
</el-form-item> </el-form-item>
</el-col> </el-col>

4
src/views/qms/inspectionJob/inspectionJobMain.data.ts

@ -2,7 +2,7 @@ import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter2 } from '@/utils/formatTime' import { dateFormatter2 } from '@/utils/formatTime'
import { validateHanset, validateEmail } from '@/utils/validator' import { validateHanset, validateEmail } from '@/utils/validator'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import { validateTwoNum } from '@/utils/validator' import { validateTwoNum,validateSixNum} from '@/utils/validator'
const { t } = useI18n() // 国际化 const { t } = useI18n() // 国际化
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict' import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
const resultEntryMethodList = getStrDictOptions(DICT_TYPE.INSPECTION_CHARACTERISTICS_RESULT_ENTRY) const resultEntryMethodList = getStrDictOptions(DICT_TYPE.INSPECTION_CHARACTERISTICS_RESULT_ENTRY)
@ -610,5 +610,5 @@ export const InspectionJobPackage = useCrudSchemas(reactive<CrudSchema[]>([
//表单校验 //表单校验
export const InspectionJobPackageRules = reactive({ export const InspectionJobPackageRules = reactive({
sampleAmount: [required, sampleAmount: [required,
{ validator:validateTwoNum, message: '小数点后最多2位', trigger: 'blur'}] { validator:validateSixNum, trigger: 'blur'}]
}) })

2
src/views/qms/inspectionRecord/addForm.vue

@ -244,7 +244,7 @@ const tableFormBlur = (field, val,row)=>{
row.qualifiedAmount = 0 row.qualifiedAmount = 0
}else{ }else{
row.qualifiedAmount = row.amount - val row.qualifiedAmount = row.amount - val
row.qualifiedAmount = row.qualifiedAmount.toFixed(2) row.qualifiedAmount = row.qualifiedAmount.toFixed(6)
} }
} }

3
src/views/qms/inspectionRecord/index.vue

@ -125,6 +125,9 @@ import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
} }
const isShowMainButton = (row, val) => { const isShowMainButton = (row, val) => {
if(!row.callbackRequestNumber) {//callbackRequestNumber使
return true;
}
if(row.useDecision) { if(row.useDecision) {
return row.isPublished return row.isPublished
} else { } else {

10
src/views/qms/inspectionRecord/inspectionRecordMain.data.ts

@ -2,7 +2,7 @@ import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter2 } from '@/utils/formatTime' import { dateFormatter2 } from '@/utils/formatTime'
import { validateHanset, validateEmail } from '@/utils/validator' import { validateHanset, validateEmail } from '@/utils/validator'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import {validateTwoNum } from '@/utils/validator' import {validateTwoNum,validateSixNum } from '@/utils/validator'
const { t } = useI18n() // 国际化 const { t } = useI18n() // 国际化
/** /**
@ -716,18 +716,18 @@ export const InspectionRecordPackage = useCrudSchemas(reactive<CrudSchema[]>([
export const InspectionRecordPackageRules = reactive({ export const InspectionRecordPackageRules = reactive({
qualifiedAmount: [ qualifiedAmount: [
required, required,
{ validator:validateTwoNum, message: '小数点后最多2位', trigger: 'blur'} { validator:validateSixNum, message: '小数点后最多6位', trigger: 'blur'}
], ],
frozenAmount: [ frozenAmount: [
required, required,
{ validator:validateTwoNum, message: '小数点后最多2位', trigger: 'blur'} { validator:validateSixNum, message: '小数点后最多6位', trigger: 'blur'}
], ],
destroyAmount: [ destroyAmount: [
required, required,
{ validator:validateTwoNum, message: '小数点后最多2位', trigger: 'blur'} { validator:validateSixNum, message: '小数点后最多6位', trigger: 'blur'}
], ],
noQualifiedAmount: [ noQualifiedAmount: [
required, required,
{ validator:validateTwoNum, message: '小数点后最多2位', trigger: 'blur'} { validator:validateSixNum, message: '小数点后最多6位', trigger: 'blur'}
], ],
}) })

6
src/views/qms/inspectionTemplate/addForm.vue

@ -815,7 +815,7 @@ const submitForm = async () => {
) )
if (arr && arr.length > 0) { if (arr && arr.length > 0) {
const str = arr.map((item) => item.description).join(',') const str = arr.map((item) => item.description).join(',')
message.error(`${str}是否设定上线,是否设定下限,是否设定目标值至少一项为是`) message.error(`${str}工序是否设定上线,是否设定下限,是否设定目标值至少一项为是`)
return return
} }
// ,, // ,,
@ -833,7 +833,7 @@ const submitForm = async () => {
) )
if (arr1 && arr1.length > 0) { if (arr1 && arr1.length > 0) {
const str = arr1.map((item) => item.description).join(',') const str = arr1.map((item) => item.description).join(',')
message.error(`${str}上限值,下限值,目标值小数位数不可以大于小数位`) message.error(`${str}工序上限值,下限值,目标值小数位数不可以大于小数位`)
return return
} }
// //
@ -851,7 +851,7 @@ const submitForm = async () => {
console.log(99,arr2) console.log(99,arr2)
if (arr2 && arr2.length > 0) { if (arr2 && arr2.length > 0) {
const str = arr2.map((item) => item.description).join(',') const str = arr2.map((item) => item.description).join(',')
message.error(`${str}上限值应大于目标值大于下限值`) message.error(`${str}工序上限值应大于目标值大于下限值`)
return return
} }
if (formType.value == 'create') { if (formType.value == 'create') {

14
src/views/qms/sampleCode/sampleCode.data.ts

@ -8,13 +8,13 @@ export const SampleCodeRules = reactive({
code: [required], code: [required],
batchLowLimiting: [{ validator:validateNum, message: '请输入整数', trigger: 'blur'}], batchLowLimiting: [{ validator:validateNum, message: '请输入整数', trigger: 'blur'}],
batchUpperLimiting: [{ required:true, message: '该项为必填', trigger: 'blur'}, { validator:validateNum, message: '请输入整数', trigger: 'blur'}], batchUpperLimiting: [{ required:true, message: '该项为必填', trigger: 'blur'}, { validator:validateNum, message: '请输入整数', trigger: 'blur'}],
s1: [{ required }], s1: [ required ],
s2: [{ required }], s2: [required ],
s3: [{ required }], s3: [ required ],
s4: [{ required }], s4: [ required ],
g1: [{ required }], g1: [ required ],
g2: [{ required }], g2: [ required ],
g3: [{ required }] g3: [ required ]
}) })
const samplingSchemeList = await getSamplingScheme() const samplingSchemeList = await getSamplingScheme()
export const SampleCode = useCrudSchemas(reactive<CrudSchema[]>([ export const SampleCode = useCrudSchemas(reactive<CrudSchema[]>([

22
src/views/qms/samplingProcess/index.vue

@ -66,7 +66,7 @@ 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/src/Detail.vue' import Detail from '@/components/Detail/src/Detail.vue'
import {validatePercent } from '@/utils/validator' import {validatePercent, validateInteger, validateTwoNum } from '@/utils/validator'
defineOptions({ name: 'SamplingProcess' }) defineOptions({ name: 'SamplingProcess' })
@ -267,27 +267,21 @@ const updateFormFields = (sampleType, formRef) => {
sampleQtyLabel = '样品份数'; sampleQtyLabel = '样品份数';
sampleQtyDisabled = true; sampleQtyDisabled = true;
sampleQtyRequired = false; sampleQtyRequired = false;
if( SamplingProcessRules.sampleQty.length==3){ SamplingProcessRules.sampleQty = [{ required: false, message: '该项为必填项', trigger: 'blur'}]
SamplingProcessRules.sampleQty.pop()
}
break; break;
case '2': case '2':
sampleQtyLabel = '样品份数(%)'; sampleQtyLabel = '样品份数(%)';
sampleQtyDisabled = false; sampleQtyDisabled = false;
sampleQtyRequired = true; sampleQtyRequired = true;
if( SamplingProcessRules.sampleQty.length==2){ SamplingProcessRules.sampleQty = [{ required: true, message: '该项为必填项', trigger: 'blur' },{validator:validatePercent, message: '百分比范围 0 ~ 100', trigger: 'blur'},{validator:validateTwoNum, message: '小数点后最多2位', trigger: 'blur'}]
SamplingProcessRules.sampleQty.push({
validator:validatePercent, message: '百分比范围 0 ~ 100', trigger: 'blur'
})
}
break; break;
case '3': case '3':
sampleQtyLabel = '样品份数'; sampleQtyLabel = '样品份数';
sampleQtyDisabled = false; sampleQtyDisabled = false;
sampleQtyRequired = true; sampleQtyRequired = true;
if( SamplingProcessRules.sampleQty.length==3){ SamplingProcessRules.sampleQty = [{ required: true, message: '该项为必填项', trigger: 'blur' },{validator:validateInteger, message: '样品份数必须为正整数', trigger: 'blur'}]
SamplingProcessRules.sampleQty.pop()
}
break; break;
case '4': case '4':
sampleQtyLabel = '样品份数'; sampleQtyLabel = '样品份数';
@ -295,9 +289,7 @@ const updateFormFields = (sampleType, formRef) => {
sampleQtyRequired = false; sampleQtyRequired = false;
sampleProgCodeDisabled = false; sampleProgCodeDisabled = false;
sampleProgCodeRequired = true; sampleProgCodeRequired = true;
if( SamplingProcessRules.sampleQty.length==3){ SamplingProcessRules.sampleQty = [{ required: false, message: '该项为必填项', trigger: 'blur'}]
SamplingProcessRules.sampleQty.pop()
}
break; break;
default: default:
break; break;

4
src/views/qms/samplingProcess/samplingProcess.data.ts

@ -8,8 +8,8 @@ export const SamplingProcessRules = reactive({
sampleType: [required], sampleType: [required],
evaluationMode: [required], evaluationMode: [required],
description: [required], description: [required],
sampleQty:ref([{ required: true, message: '该项为必填项', trigger: 'blur' },{validator:validateTwoNum, message: '小数点后最多2位', trigger: 'blur'}]), sampleQty:[{ required: true, message: '该项为必填项', trigger: 'blur' },{validator:validateTwoNum, message: '小数点后最多2位', trigger: 'blur'}],
sampleProgCode:ref([{ required: true, message: '该项为必填项', trigger: 'blur' }]), sampleProgCode:[{ required: true, message: '该项为必填项', trigger: 'blur' }],
inspectionQty: [required, {validator:validateInteger, message: '请输入正确的整数', trigger: 'blur'}] inspectionQty: [required, {validator:validateInteger, message: '请输入正确的整数', trigger: 'blur'}]
}) })
const samplingSchemeList = await getSamplingScheme() const samplingSchemeList = await getSamplingScheme()

14
src/views/system/user/UserForm.vue

@ -138,13 +138,13 @@ const formRules = reactive({
trigger: ['blur', 'change'] trigger: ['blur', 'change']
} }
], ],
mobile: [ // mobile: [
{ // {
pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/, // pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
message: '请输入正确的手机号码', // message: '',
trigger: 'blur' // trigger: 'blur'
} // }
] // ]
}) })
const formRef = ref() // Ref const formRef = ref() // Ref
const deptList = ref<Tree[]>([]) // const deptList = ref<Tree[]>([]) //

14
src/views/wms/basicDataManage/customerManage/customerdock/customerdock.data.ts

@ -138,10 +138,11 @@ export const Customerdock = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isForm:false isForm:true,
// form: { form: {
// // labelMessage: '信息提示说明!!!', // // labelMessage: '信息提示说明!!!',
// componentProps: { componentProps: {
disabled:true
// isSearchList: true, // 开启查询弹窗 // isSearchList: true, // 开启查询弹窗
// searchListPlaceholder: '请选择库位代码', // 输入框占位文本 // searchListPlaceholder: '请选择库位代码', // 输入框占位文本
// searchField: 'code', // 查询弹窗赋值字段 // searchField: 'code', // 查询弹窗赋值字段
@ -155,8 +156,8 @@ export const Customerdock = useCrudSchemas(reactive<CrudSchema[]>([
// isSearch: true, // isSearch: true,
// isMainValue: false // isMainValue: false
// }] // }]
// } }
// } }
}, },
{ {
label: '是否可用', label: '是否可用',
@ -284,6 +285,9 @@ export const CustomerdockRules = reactive({
{ max: 50, message: '不得超过50个字符', trigger: 'blur' }, { max: 50, message: '不得超过50个字符', trigger: 'blur' },
{ validator:validateYS, message: '请输入正确的代码', trigger: 'blur'} { validator:validateYS, message: '请输入正确的代码', trigger: 'blur'}
], ],
defaultLocationCode:[
{ required: true, message: '请选择库位代码', trigger: 'blur' },
],
name: [ name: [
{ max: 50, message: '不得超过50个字符', trigger: 'blur' } { max: 50, message: '不得超过50个字符', trigger: 'blur' }
], ],

3
src/views/wms/basicDataManage/customerManage/customerdock/index.vue

@ -204,6 +204,9 @@ const searchTableSuccess = (formField, searchField, val, formRef) => {
nextTick(() => { nextTick(() => {
const setV = {} const setV = {}
setV[formField] = val[0][searchField] setV[formField] = val[0][searchField]
if(formField=='code'){
setV['defaultLocationCode'] = val[0]['defaultLocationCode']
}
formRef.setValues(setV) formRef.setValues(setV)
}) })
} }

1
src/views/wms/basicDataManage/factoryModeling/dock/dock.data.ts

@ -80,6 +80,7 @@ export const Dock = useCrudSchemas(reactive<CrudSchema[]>([
form: { form: {
// labelMessage: '信息提示说明!!!', // labelMessage: '信息提示说明!!!',
componentProps: { componentProps: {
enterSearch:true,
isSearchList: true, // 开启查询弹窗 isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择库位代码', // 输入框占位文本 searchListPlaceholder: '请选择库位代码', // 输入框占位文本
searchField: 'code', // 查询弹窗赋值字段 searchField: 'code', // 查询弹窗赋值字段

23
src/views/wms/basicDataManage/factoryModeling/dock/index.vue

@ -48,6 +48,7 @@
:apiCreate="DockApi.createDock" :apiCreate="DockApi.createDock"
@searchTableSuccess="searchTableSuccess" @searchTableSuccess="searchTableSuccess"
:isBusiness="false" :isBusiness="false"
@onEnter="onEnter"
/> />
<!-- 详情 --> <!-- 详情 -->
@ -66,6 +67,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/src/Detail.vue' import Detail from '@/components/Detail/src/Detail.vue'
import * as LocationApi from '@/api/wms/location'
import { Location } from '@/views/wms/basicDataManage/factoryModeling/location/location.data'
defineOptions({ name: 'Dock' }) defineOptions({ name: 'Dock' })
@ -164,6 +167,26 @@ const openForm = (type: string, row?: any) => {
} }
basicFormRef.value.open(type, row) basicFormRef.value.open(type, row)
} }
const onEnter = async (field,value)=>{
console.log('onEnter',field,value)
if('defaultLocationCode'==field){
//
basicFormRef.value.opensearchTable('itemCode', 'code', '库位信息', Location.allSchemas, LocationApi.getLocationPage,[{
key: 'available',
value: 'TRUE',
action: '==',
isSearch: true,
isMainValue: false
},{
key: 'code',
value: value,
action: '==',
isSearch: true,
isMainValue: false
}])
}
}
// //
const searchTableSuccess = (formField, searchField, val, formRef) => { const searchTableSuccess = (formField, searchField, val, formRef) => {

6
src/views/wms/basicDataManage/factoryModeling/location/location.data.ts

@ -405,9 +405,9 @@ export const LocationRules = reactive({
locationGroupCode: [ locationGroupCode: [
{ required: true, message: '请输入库位组代码', trigger: 'change' } { required: true, message: '请输入库位组代码', trigger: 'change' }
], ],
erpLocationCode: [ // erpLocationCode: [
{ required: true, message: '请选择ERP库位类型', trigger: 'change' } // { required: true, message: '请选择ERP库位类型', trigger: 'change' }
], // ],
// type: [ // type: [
// { required: true, message: '请选择类型', trigger: 'change' } // { required: true, message: '请选择类型', trigger: 'change' }
// ], // ],

10
src/views/wms/basicDataManage/factoryModeling/productionline/index.vue

@ -67,7 +67,7 @@ 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/src/Detail.vue'
// 线 // 线
defineOptions({ name: 'Productionline' }) defineOptions({ name: 'Productionline' })
const message = useMessage() // const message = useMessage() //
@ -154,10 +154,10 @@ const openForm = (type: string, row?: any) => {
if (item.field == 'code') { if (item.field == 'code') {
item.componentProps.disabled = true item.componentProps.disabled = true
} }
if (item.field == 'workshopCode') { // if (item.field == 'workshopCode') {
item.componentProps.disabled = true // item.componentProps.disabled = true
item.componentProps.isSearchList = false // item.componentProps.isSearchList = false
} // }
}) })
}else { }else {

42
src/views/wms/basicDataManage/itemManage/itempackage/index.vue

@ -52,6 +52,7 @@
:apiCreate="ItempackagingApi.createItempackaging" :apiCreate="ItempackagingApi.createItempackaging"
@searchTableSuccess="searchTableSuccess" @searchTableSuccess="searchTableSuccess"
:isBusiness="false" :isBusiness="false"
@onEnter="onEnter"
/> />
<!-- 详情 --> <!-- 详情 -->
@ -75,6 +76,10 @@ 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/src/Detail.vue' import Detail from '@/components/Detail/src/Detail.vue'
import * as ItembasicApi from '@/api/wms/itembasic'
import { Itembasic } from '../itembasic/itembasic.data'
import * as PackageunitApi from '@/api/wms/packageunit'
import { Packageunit } from '../packageunit/packageunit.data'
defineOptions({ name: 'Itempackaging' }) defineOptions({ name: 'Itempackaging' })
@ -205,12 +210,49 @@ const formsSuccess = async (formType, data) => {
basicFormRef.value.dialogVisible = false basicFormRef.value.dialogVisible = false
getList() getList()
} }
const onEnter = async (field,value)=>{
console.log('onEnter',field,value)
if('itemCode'==field){
//
basicFormRef.value.opensearchTable('itemCode', 'code', '物料基础信息', Itembasic.allSchemas, ItembasicApi.getItembasicPage,[{
key: 'available',
value: 'TRUE',
action: '==',
isSearch: true,
isMainValue: false
},{
key: 'code',
value: value,
action: '==',
isSearch: true,
isMainValue: false
}])
}else if('packUnit'==field){
//
basicFormRef.value.opensearchTable('packUnit', 'code', '包装规格信息', Packageunit.allSchemas, PackageunitApi.getPackageunitPage,[{
key: 'available',
value: 'TRUE',
action: '==',
isSearch: true,
isMainValue: false
},{
key: 'code',
value: value,
action: '==',
isSearch: true,
isMainValue: false
}])
}
}
// //
const searchTableSuccess = (formField, searchField, val, formRef) => { const searchTableSuccess = (formField, searchField, val, formRef) => {
nextTick(() => { nextTick(() => {
const setV = {} const setV = {}
setV[formField] = val[0][searchField] setV[formField] = val[0][searchField]
if('itemCode'==formField){
setV['uom'] = val[0]['uom'] setV['uom'] = val[0]['uom']
}
formRef.setValues(setV) formRef.setValues(setV)
}) })
} }

2
src/views/wms/basicDataManage/itemManage/itempackage/itempackage.data.ts

@ -23,6 +23,7 @@ export const Itempackaging = useCrudSchemas(reactive<CrudSchema[]>([
form: { form: {
// labelMessage: '信息提示说明!!!', // labelMessage: '信息提示说明!!!',
componentProps: { componentProps: {
enterSearch: true, //可输入回车
isSearchList: true, // 开启查询弹窗 isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择物料代码', // 输入框占位文本 searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'code', // 查询弹窗赋值字段 searchField: 'code', // 查询弹窗赋值字段
@ -64,6 +65,7 @@ export const Itempackaging = useCrudSchemas(reactive<CrudSchema[]>([
form: { form: {
// labelMessage: '信息提示说明!!!', // labelMessage: '信息提示说明!!!',
componentProps: { componentProps: {
enterSearch: true, //可输入回车
isSearchList: true, // 开启查询弹窗 isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择包装规格', // 输入框占位文本 searchListPlaceholder: '请选择包装规格', // 输入框占位文本
searchField: 'code', // 查询弹窗赋值字段 searchField: 'code', // 查询弹窗赋值字段

24
src/views/wms/basicDataManage/itemManage/relegate/relegateRequest/index.vue

@ -137,11 +137,13 @@ RelegateRequestDetail.allSchemas.tableFormColumns.map(item => {
key: 'businessType', key: 'businessType',
value: businessType, value: businessType,
isMainValue: false isMainValue: false
},{ }
key: 'available', // ,{
value: 'TRUE', // key: 'available',
isMainValue: false // value: 'TRUE',
},{ // isMainValue: false
// }
,{
message: '请选择从仓库代码!', message: '请选择从仓库代码!',
key: 'warehouseCode', key: 'warehouseCode',
value: 'fromWarehouseCode', value: 'fromWarehouseCode',
@ -153,11 +155,13 @@ RelegateRequestDetail.allSchemas.tableFormColumns.map(item => {
key: 'businessType', key: 'businessType',
value: businessType, value: businessType,
isMainValue: false isMainValue: false
},{ },
key: 'available', // {
value: 'TRUE', // key: 'available',
isMainValue: false // value: 'TRUE',
},{ // isMainValue: false
// },
{
message: '请选择从仓库代码!', message: '请选择从仓库代码!',
key: 'warehouseCode', key: 'warehouseCode',
value: 'fromWarehouseCode', value: 'fromWarehouseCode',

11
src/views/wms/basicDataManage/itemManage/relegate/relegateRequest/relegateRequestMain.data.ts

@ -324,11 +324,12 @@ export const RelegateRequestDetail = useCrudSchemas(reactive<CrudSchema[]>([
searchAllSchemas: Balance.allSchemas, // 查询弹窗所需类 searchAllSchemas: Balance.allSchemas, // 查询弹窗所需类
searchPage: BalanceApi.getBalanceByBusinessTypeByItemType, // 查询弹窗所需分页方法 searchPage: BalanceApi.getBalanceByBusinessTypeByItemType, // 查询弹窗所需分页方法
searchCondition:[ searchCondition:[
{ // {
key: 'available', // key: 'available',
value: 'TRUE', // value: 'TRUE',
isMainValue: false // isMainValue: false
},{ // }
,{
message: '请选择从仓库代码!', message: '请选择从仓库代码!',
key: 'fromWarehouseCode', key: 'fromWarehouseCode',
value: 'fromWarehouseCode', value: 'fromWarehouseCode',

6
src/views/wms/basicDataManage/orderManage/shift/index.vue

@ -165,12 +165,14 @@ const openForm = (type: string, row?: any) => {
// form // form
const formsSuccess = async (formType,data) => { const formsSuccess = async (formType,data) => {
console.log('endAtNextDay',data)
var isHave =Shift.allSchemas.formSchema.some(function (item) { var isHave =Shift.allSchemas.formSchema.some(function (item) {
return item.field === 'beginTime' || item.field === 'entTime'; return item.field === 'beginTime' || item.field === 'entTime';
}); });
if(isHave){
if(data['endAtNextDay']=='FALSE'&&isHave){
if(data.beginTime && data.entTime && data.beginTime >=data.entTime){ if(data.beginTime && data.entTime && data.beginTime >=data.entTime){
message.error('开始时间大于结束时间') message.error('开始时间大于结束时间')
return; return;
} }
} }

8
src/views/wms/basicDataManage/orderManage/shift/shift.data.ts

@ -47,9 +47,9 @@ export const Shift = useCrudSchemas(reactive<CrudSchema[]>([
valueFormat: 'x', valueFormat: 'x',
} }
}, },
isSearch: true, isSearch: false,
search: { search: {
show: true, show: false,
component: 'TimePicker', component: 'TimePicker',
componentProps: { componentProps: {
valueFormat: 'HH:mm:ss', valueFormat: 'HH:mm:ss',
@ -78,9 +78,9 @@ export const Shift = useCrudSchemas(reactive<CrudSchema[]>([
valueFormat: 'x', valueFormat: 'x',
} }
}, },
isSearch: true, isSearch: false,
search: { search: {
show: true, show: false,
component: 'TimePicker', component: 'TimePicker',
componentProps: { componentProps: {
valueFormat: 'HH:mm:ss', valueFormat: 'HH:mm:ss',

4
src/views/wms/basicDataManage/orderManage/team/team.data.ts

@ -76,8 +76,8 @@ export const Team = useCrudSchemas(reactive<CrudSchema[]>([
field: 'available', field: 'available',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
isSearch: true, isSearch: false,
sort: 'custom', sort: 'custom',
form: { form: {
component: 'Switch', component: 'Switch',

2
src/views/wms/basicDataManage/strategySetting/strategy/upShelfStrategy/AddForm.vue

@ -686,7 +686,7 @@ const getFormCustomerList = async () => {
const filterMethod = (query: string) => { const filterMethod = (query: string) => {
if (query) { if (query) {
options.supplierList = options.originSupplierList.filter((item) => { options.supplierList = options.originSupplierList.filter((item) => {
if(item.name==''){ if(!item.name||item.name==''){
return item.code.includes(query) return item.code.includes(query)
}else{ }else{
return item.name.includes(query) return item.name.includes(query)

9
src/views/wms/basicDataManage/subject/subjectAccount/subjectAccount.data.ts

@ -152,6 +152,15 @@ export const SubjectAccount = useCrudSchemas(reactive<CrudSchema[]>([
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')] defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
} }
}, },
form: {
component: 'DatePicker',
componentProps: {
style: {width:'100%'},
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isForm: false, isForm: false,
}, },
{ {

12
src/views/wms/basicDataManage/systemSetting/supplierUser/index.vue

@ -55,7 +55,15 @@
<Detail ref="detailRef" :isBasic="true" :allSchemas="SupplierUser.allSchemas" /> <Detail ref="detailRef" :isBasic="true" :allSchemas="SupplierUser.allSchemas" />
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/wms/supplier-user/import" :importTemplateData="importTemplateData" @success="importSuccess" /> <ImportForm
ref="importFormRef"
url="/wms/supplier-user/import"
:importTemplateData="importTemplateData"
@success="importSuccess"
:updateIsDisable="true"
:coverIsDisable="true"
:mode="2"
/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -66,7 +74,7 @@ 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/src/Detail.vue' import Detail from '@/components/Detail/src/Detail.vue'
//
defineOptions({ name: 'SupplierUser' }) defineOptions({ name: 'SupplierUser' })
const message = useMessage() // const message = useMessage() //

10
src/views/wms/basicDataManage/systemSetting/supplierUser/supplierUser.data.ts

@ -87,6 +87,7 @@ export const SupplierUser = useCrudSchemas(reactive<CrudSchema[]>([
form: { form: {
// labelMessage: '信息提示说明!!!', // labelMessage: '信息提示说明!!!',
componentProps: { componentProps: {
dialogWidth:'1025px',//搜索出来弹窗的宽度
isSearchList: true, isSearchList: true,
searchListPlaceholder: '请选用户信息', searchListPlaceholder: '请选用户信息',
searchField: 'id', searchField: 'id',
@ -169,6 +170,15 @@ export const SupplierUser = useCrudSchemas(reactive<CrudSchema[]>([
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')] defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
} }
}, },
form: {
component: 'DatePicker',
componentProps: {
style: { width: '100%' },
type: 'datetime',
dateFormat: 'YYYY-MM-DD HH:mm:ss',
valueFormat: 'x',
}
},
isForm: false, isForm: false,
}, },
{ {

20
src/views/wms/countManage/countadjust/countadjustRecordMain/countadjustRecordMain.data.ts

@ -24,15 +24,15 @@ export const CountadjustRecordMain = useCrudSchemas(reactive<CrudSchema[]>([
}, },
isSearch: true isSearch: true
}, },
{ // {
label: '盘点记录单号', // label: '盘点记录单号',
field: 'countRecordNumber', // field: 'countRecordNumber',
sort: 'custom', // sort: 'custom',
table: { // table: {
width: 180 // width: 180
}, // },
isSearch: true // isSearch: true
}, // },
{ {
label: '仓库代码', label: '仓库代码',
field: 'warehouseCode', field: 'warehouseCode',
@ -214,7 +214,7 @@ export const CountadjustRecordMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'available', field: 'available',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isSearch: true, isSearch: false,
isTable: true, isTable: true,
form: { form: {
component: 'Switch', component: 'Switch',

20
src/views/wms/countManage/countadjust/countadjustRequestMain/countadjustRequestMain.data.ts

@ -55,16 +55,16 @@ export const CountadjustRequestMain = useCrudSchemas(<CrudSchema[]>([
}, },
}, },
{ // {
label: '申请单号', // label: '申请单号',
field: 'requestNumber', // field: 'requestNumber',
sort: 'custom', // sort: 'custom',
table: { // table: {
width: 150 // width: 150
}, // },
isSearch: true, // isSearch: true,
isForm: false, // isForm: false,
}, // },
{ {
label: '盘点记录单号', label: '盘点记录单号',
field: 'countRecordNumber', field: 'countRecordNumber',

3
src/views/wms/deliversettlementManage/customerreturn/customerreturnRequestMain/customerreturnRequestMain.data.ts

@ -868,6 +868,7 @@ export const CustomerreturnRequestDetail = useCrudSchemas(reactive<CrudSchema[]>
table: { table: {
width: 150 width: 150
}, },
isTableForm:false,
isForm:false, isForm:false,
}, },
{ {
@ -878,6 +879,7 @@ export const CustomerreturnRequestDetail = useCrudSchemas(reactive<CrudSchema[]>
table: { table: {
width: 150 width: 150
}, },
isTableForm:false,
isForm:false, isForm:false,
}, },
{ {
@ -887,6 +889,7 @@ export const CustomerreturnRequestDetail = useCrudSchemas(reactive<CrudSchema[]>
table: { table: {
width: 150 width: 150
}, },
isTableForm:false,
isForm:false, isForm:false,
}, },
{ {

2
src/views/wms/deliversettlementManage/customerreturn/customerreturnRequestMain/index.vue

@ -327,7 +327,7 @@ const butttondata = (row,$index) => {
{ {
label: '生成标签', label: '生成标签',
name: 'ssbq', name: 'ssbq',
hide: isShowMainButton(row, ['3']), hide: isShowMainButton(row, ['3','6']),
type: 'primary', type: 'primary',
icon: '', icon: '',
color: '', color: '',

3
src/views/wms/deliversettlementManage/customersettle/customersettleRequestMain/customersettleRequestMain.data.ts

@ -421,6 +421,8 @@ export const CustomersettleRequestDetail = useCrudSchemas(reactive<CrudSchema[]>
label: '单据号', label: '单据号',
field: 'number', field: 'number',
sort: 'custom', sort: 'custom',
isTable: false,
isForm: false,
table: { table: {
width: 180, width: 180,
fixed: 'left' fixed: 'left'
@ -717,6 +719,7 @@ export const CustomersettleRequestDetail = 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'

20
src/views/wms/deliversettlementManage/deliver/deliverRequestMain/index.vue

@ -558,10 +558,24 @@ const importSuccess = () => {
// //
const searchFormClick = (searchData) => { const searchFormClick = (searchData) => {
tableObject.params = { tableObject.params.isSearch = true
isSearch: true, let filters = [...searchData.filters]
filters: searchData.filters if(!filters.find(item=>item.column=='business_type')){
if ( routeName.value == 'DeliverRequestMain') {
filters = [...filters,{
action:'==',
column:'business_type',
value:'Deliver',
}]
} else if ( routeName.value == 'ZZBJDeliverRequestMain') {
filters = [...filters,{
action:'==',
column:'business_type',
value:'ZZBJDeliver',
}]
}
} }
tableObject.params.filters = filters
getList() // getList() //
} }

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

@ -221,12 +221,12 @@ const butttondata = (row,$index) => {
} }
return [ return [
defaultButtons.mainListEditBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:sale-shipment-main-request:update'}), // defaultButtons.mainListEditBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:sale-shipment-main-request:update'}), //
defaultButtons.mainListCloseBtn({hide:isShowMainButton(row,['2','3','4']),hasPermi:'wms:sale-shipment-main-request:close'}), // 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.mainListReAddBtn({hide:isShowMainButton(row,['5']),hasPermi:'wms:sale-shipment-main-request:reAdd'}), //
defaultButtons.mainListSubmitBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:sale-shipment-main-request:submit'}), // 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.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.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.mainListHandleBtn({hide:isShowMainButton(row,['3','8']),hasPermi:'wms:sale-shipment-main-request:handle'}), //
// defaultButtons.mainListDeleteBtn({hasPermi:'wms:sale-shipment-main-request:delete'}), // // defaultButtons.mainListDeleteBtn({hasPermi:'wms:sale-shipment-main-request:delete'}), //
] ]
} }

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

@ -219,6 +219,9 @@ export const SaleShipmentMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'createTime', field: 'createTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {

12
src/views/wms/deliversettlementManage/stockup/stockupMainRequest/stockupMainRequest.data.ts

@ -165,6 +165,9 @@ export const StockupMainRequest = useCrudSchemas(reactive<CrudSchema[]>([
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: false, isSearch: false,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -186,6 +189,9 @@ export const StockupMainRequest = useCrudSchemas(reactive<CrudSchema[]>([
formatter: dateFormatter, formatter: dateFormatter,
isSearch: false, isSearch: false,
isTable: false, isTable: false,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -212,6 +218,9 @@ export const StockupMainRequest = useCrudSchemas(reactive<CrudSchema[]>([
formatter: dateFormatter, formatter: dateFormatter,
isSearch: false, isSearch: false,
isTable: false, isTable: false,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -238,6 +247,9 @@ export const StockupMainRequest = useCrudSchemas(reactive<CrudSchema[]>([
formatter: dateFormatter, formatter: dateFormatter,
isSearch: false, isSearch: false,
isTable: false, isTable: false,
detail: {
dateFormat: 'YYYY-MM-DD HH:mm:ss'
},
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {

7
src/views/wms/inventoryManage/balance/index.vue

@ -173,8 +173,14 @@ const handleSelectionPoint = async ()=>{
rows = [...rows,...item.selectionRows.map(item1=>item1.packingNumber)] rows = [...rows,...item.selectionRows.map(item1=>item1.packingNumber)]
}) })
console.log('批量打印',rows.join(',')) console.log('批量打印',rows.join(','))
let getLoading = ElLoading.service({
lock: true,
text: 'loading...',
background: 'rgba(0, 0, 0, 0.7)'
})
PackageApi.getBalanceToPackageSelection(rows).then(res => { PackageApi.getBalanceToPackageSelection(rows).then(res => {
console.log('res',res); console.log('res',res);
getLoading?.close()
if(res.zzLabel){ if(res.zzLabel){
// //
const src = ref(BASE_URL + '/jmreport/view/922734157577715712?token=' + getAccessToken()) const src = ref(BASE_URL + '/jmreport/view/922734157577715712?token=' + getAccessToken())
@ -188,6 +194,7 @@ const handleSelectionPoint = async ()=>{
}).catch(err => { }).catch(err => {
console.log(err) console.log(err)
getLoading?.close()
}) })
// window.open(srcPoint.value+'&relateNumber='+rows.join(',')) // window.open(srcPoint.value+'&relateNumber='+rows.join(','))
} }

2
src/views/wms/inventoryjobManage/containermanage/containerMainRequest/containerMainRequest.data.ts

@ -95,7 +95,7 @@ export const ContainerMainRequest = useCrudSchemas(reactive<CrudSchema[]>([
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
isTable: false isTable: false
}, },
{ {

2
src/views/wms/inventoryjobManage/containermanage/initialContainerMainRequest/initialContainerMainRequest.data.ts

@ -99,7 +99,7 @@ export const ContainerMainRequest = useCrudSchemas(reactive<CrudSchema[]>([
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
isTable:false, isTable:false,
}, },
{ {

2
src/views/wms/inventoryjobManage/containermanage/scrapContainerMainRequest/scrapContainerMainRequest.data.ts

@ -95,7 +95,7 @@ export const ContainerMainRequest = useCrudSchemas(reactive<CrudSchema[]>([
label: '备注', label: '备注',
field: 'remark', field: 'remark',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
isTable: false isTable: false
}, },
{ {

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

Loading…
Cancel
Save