Browse Source

解决冲突

master_hella_20240701
ljlong_2630 6 months ago
parent
commit
834f4dc3a5
  1. 3
      .env
  2. 5
      .env.hella13
  3. 5
      .env.hella14
  4. 2
      .env.hella15
  5. 2
      .env.hella16
  6. 7
      .env.hella8
  7. 7
      .env.hella9
  8. 1
      .gitignore
  9. 3
      README.md
  10. 2
      index.html
  11. 74
      src/api/eam/equipmentMaintenanceMain/index.ts
  12. 77
      src/api/eam/maintenance/index.ts
  13. 38
      src/api/eam/sparePart/index.ts
  14. 5
      src/api/mes/processroute/index.ts
  15. 5
      src/api/qms/inspectionScheme/index.ts
  16. 10
      src/api/system/tenant/index.ts
  17. 2
      src/api/wms/balance/index.ts
  18. 10
      src/api/wms/countJobMain/index.ts
  19. 11
      src/api/wms/customeritem/index.ts
  20. 11
      src/api/wms/deliverPlanDetail/index.ts
  21. 13
      src/api/wms/deliverPlanMain/index.ts
  22. 13
      src/api/wms/deliverRequestMain/index.ts
  23. 10
      src/api/wms/location/index.ts
  24. 5
      src/api/wms/package/index.ts
  25. 7
      src/api/wms/purchasereceiptJobMain/index.ts
  26. 13
      src/api/wms/purchasereceiptRecordDetail/index.ts
  27. 60
      src/api/wms/qadCostcentre/index.ts
  28. 59
      src/api/wms/qadProject/index.ts
  29. 66
      src/api/wms/subjectAccount/index.ts
  30. 20
      src/components/Form/src/Form.vue
  31. 5
      src/components/Form/src/components/useRenderSelect.tsx
  32. 7
      src/components/Form/src/helper.ts
  33. 339
      src/components/ImportForm/src/ImportDetailForm.vue
  34. 5
      src/components/Table/src/Table.vue
  35. 7
      src/components/TableForm/src/TableForm.vue
  36. 4
      src/components/UploadFile/src/UploadFile.vue
  37. 16
      src/components/rowDrop/index.vue
  38. 3
      src/hooks/web/useTitle.ts
  39. 3
      src/layout/components/Footer/src/Footer.vue
  40. 38
      src/locales/en-US.ts
  41. 35
      src/locales/zh-CN.ts
  42. 6
      src/main.ts
  43. 3
      src/utils/dict.ts
  44. 4
      src/utils/disposition/defaultButtons.ts
  45. 4
      src/views/eam/basicMaintenanceOption/basicMaintenanceOption.data.ts
  46. 10
      src/views/eam/documentType/documentType.data.ts
  47. 6
      src/views/eam/documentType/index.vue
  48. 12
      src/views/eam/documentTypeSelectSet/documentTypeSelectSet.data.ts
  49. 25
      src/views/eam/documentTypeSelectSet/itemSelectSetForm.vue
  50. 318
      src/views/eam/equipmentMaintenanceMain/equipmentMaintenanceMain.data.ts
  51. 244
      src/views/eam/equipmentMaintenanceMain/index.vue
  52. 326
      src/views/eam/maintenance/index.vue
  53. 322
      src/views/eam/maintenance/maintenance.data.ts
  54. 9
      src/views/eam/maintenanceItem/maintenanceItem.data.ts
  55. 4
      src/views/eam/sparePart/index.vue
  56. 215
      src/views/eam/sparePart/sparePart.data.ts
  57. 2
      src/views/login/components/LoginForm.vue
  58. 12
      src/views/login/forgetPassword.vue
  59. 4
      src/views/login/login.vue
  60. 1
      src/views/mes/dismantlingMain/dismantlingMain.data.ts
  61. 2
      src/views/mes/dismantlingMain/index.vue
  62. 24
      src/views/mes/holiday/holiday.data.ts
  63. 6
      src/views/mes/hrPersonAbility/hrPersonAbility.data.ts
  64. 39
      src/views/mes/item/index.vue
  65. 57
      src/views/mes/item/item.data.ts
  66. 4
      src/views/mes/orderDay/components/schedule.vue
  67. 2
      src/views/mes/orderDay/index.vue
  68. 15
      src/views/mes/ordermonthplan/mesOrderMonthMain.data.ts
  69. 6
      src/views/mes/processroute/components/configDialog.vue
  70. 7
      src/views/mes/processroute/processroute.data.ts
  71. 31
      src/views/mes/qualityclass/qualityclass.data.ts
  72. 21
      src/views/mes/qualitygroup/qualitygroup.data.ts
  73. 4
      src/views/mes/reworkBatch/index.vue
  74. 4
      src/views/mes/reworkSingle/index.vue
  75. 10
      src/views/mes/workSchedulingQaform/index.vue
  76. 43
      src/views/mes/workSchedulingQaform/workSchedulingQaform.data.ts
  77. 48
      src/views/mes/workcalendar/index.vue
  78. 4
      src/views/mes/workstation/workstation.data.ts
  79. 14
      src/views/qms/inspectionRecord/index.vue
  80. 22
      src/views/qms/inspectionScheme/index.vue
  81. 6
      src/views/wms/basicDataManage/customerManage/saleprice/saleprice.data.ts
  82. 3
      src/views/wms/basicDataManage/factoryModeling/location/location.data.ts
  83. 4
      src/views/wms/basicDataManage/itemManage/itemarea/itemarea.data.ts
  84. 19
      src/views/wms/basicDataManage/itemManage/itembasic/itembasic.data.ts
  85. 2
      src/views/wms/basicDataManage/itemManage/itemwarehouse/itemwarehouse.data.ts
  86. 45
      src/views/wms/basicDataManage/labelManage/callmaterials/callmaterials.data.ts
  87. 7
      src/views/wms/basicDataManage/labelManage/callmaterials/index.vue
  88. 48
      src/views/wms/basicDataManage/labelManage/locationLabel/index.vue
  89. 29
      src/views/wms/basicDataManage/labelManage/purchasePackage/index.vue
  90. 118
      src/views/wms/basicDataManage/strategySetting/strategy/supplieDeliveryStrategy/AddForm.vue
  91. 18
      src/views/wms/basicDataManage/strategySetting/strategy/upShelfStrategy/AddForm.vue
  92. 244
      src/views/wms/basicDataManage/subject/qadCostcentre/index.vue
  93. 167
      src/views/wms/basicDataManage/subject/qadCostcentre/qadCostcentre.data.ts
  94. 244
      src/views/wms/basicDataManage/subject/qadProject/index.vue
  95. 186
      src/views/wms/basicDataManage/subject/qadProject/qadProject.data.ts
  96. 253
      src/views/wms/basicDataManage/subject/subjectAccount/index.vue
  97. 166
      src/views/wms/basicDataManage/subject/subjectAccount/subjectAccount.data.ts
  98. 84
      src/views/wms/countManage/count/countJobMain/countJobMain.data.ts
  99. 69
      src/views/wms/countManage/count/countJobMain/index.vue
  100. 52
      src/views/wms/deliversettlementManage/customerreturn/customerreturnRequestMain/customerreturnRequestMain.data.ts

3
.env

@ -15,3 +15,6 @@ VITE_APP_CAPTCHA_ENABLE=true
# 百度统计 # 百度统计
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
# 查看质检报告环境
VITE_REPORT_URL = 'http://dev.ccwin-in.com:25400'

5
.env.hella13

@ -28,7 +28,7 @@ VITE_SOURCEMAP=false
VITE_BASE_PATH=/ VITE_BASE_PATH=/
# 输出路径 # 输出路径
VITE_OUT_DIR=sfms3.0 VITE_OUT_DIR=sfms3.0-ui
# 自定义接口路径 # 自定义接口路径
VITE_INTERFACE_URL='http://172.21.32.13:90/magic/web/index.html' VITE_INTERFACE_URL='http://172.21.32.13:90/magic/web/index.html'
@ -38,3 +38,6 @@ VITE_JMREPORT_BASE_URL='http://172.21.32.13:90'
# 租户配置 # 租户配置
VITE_TENANT='["长春"]' VITE_TENANT='["长春"]'
# 查看质检报告环境
VITE_REPORT_URL = 'https://scp.faway-hella.com'

5
.env.hella14

@ -28,7 +28,7 @@ VITE_SOURCEMAP=false
VITE_BASE_PATH=/ VITE_BASE_PATH=/
# 输出路径 # 输出路径
VITE_OUT_DIR=sfms3.0 VITE_OUT_DIR=sfms3.0-ui
# 自定义接口路径 # 自定义接口路径
VITE_INTERFACE_URL='http://172.21.32.14:90/magic/web/index.html' VITE_INTERFACE_URL='http://172.21.32.14:90/magic/web/index.html'
@ -38,3 +38,6 @@ VITE_JMREPORT_BASE_URL='http://172.21.32.14:90'
# 租户配置 # 租户配置
VITE_TENANT='["长春"]' VITE_TENANT='["长春"]'
# 查看质检报告环境
VITE_REPORT_URL = 'https://scptest.faway-hella.com'

2
.env.hella15

@ -28,7 +28,7 @@ VITE_SOURCEMAP=false
VITE_BASE_PATH=/ VITE_BASE_PATH=/
# 输出路径 # 输出路径
VITE_OUT_DIR=sfms3.0 VITE_OUT_DIR=sfms3.0-ui
# 自定义接口路径 # 自定义接口路径
VITE_INTERFACE_URL='https://scp.faway-hella.com/magic/web/index.html' VITE_INTERFACE_URL='https://scp.faway-hella.com/magic/web/index.html'

2
.env.hella16

@ -28,7 +28,7 @@ VITE_SOURCEMAP=false
VITE_BASE_PATH=/ VITE_BASE_PATH=/
# 输出路径 # 输出路径
VITE_OUT_DIR=sfms3.0 VITE_OUT_DIR=sfms3.0-ui
# 自定义接口路径 # 自定义接口路径
VITE_INTERFACE_URL='https://scptest.faway-hella.com/magic/web/index.html' VITE_INTERFACE_URL='https://scptest.faway-hella.com/magic/web/index.html'

7
.env.hella8

@ -28,7 +28,7 @@ VITE_SOURCEMAP=false
VITE_BASE_PATH=/ VITE_BASE_PATH=/
# 输出路径 # 输出路径
VITE_OUT_DIR=sfms3.0 VITE_OUT_DIR=sfms3.0-ui
# 自定义接口路径 # 自定义接口路径
VITE_INTERFACE_URL='http://172.22.32.8:90/magic/web/index.html' VITE_INTERFACE_URL='http://172.22.32.8:90/magic/web/index.html'
@ -38,4 +38,7 @@ VITE_JMREPORT_BASE_URL='http://172.22.32.8:90'
# 租户配置 # 租户配置
VITE_TENANT='["成都"]' VITE_TENANT='["成都"]'
# 查看质检报告环境
VITE_REPORT_URL = 'https://scp.faway-hella.com'

7
.env.hella9

@ -28,7 +28,7 @@ VITE_SOURCEMAP=false
VITE_BASE_PATH=/ VITE_BASE_PATH=/
# 输出路径 # 输出路径
VITE_OUT_DIR=sfms3.0 VITE_OUT_DIR=sfms3.0-ui
# 自定义接口路径 # 自定义接口路径
VITE_INTERFACE_URL='http://172.22.32.9:90/magic/web/index.html' VITE_INTERFACE_URL='http://172.22.32.9:90/magic/web/index.html'
@ -37,4 +37,7 @@ VITE_INTERFACE_URL='http://172.22.32.9:90/magic/web/index.html'
VITE_JMREPORT_BASE_URL='http://172.22.32.9:90' VITE_JMREPORT_BASE_URL='http://172.22.32.9:90'
# 租户配置 # 租户配置
VITE_TENANT='["成都"]' VITE_TENANT='["成都"]'
# 查看质检报告环境
VITE_REPORT_URL = 'https://scptest.faway-hella.com'

1
.gitignore

@ -11,3 +11,4 @@ auto-*.d.ts
.idea .idea
.history .history
/sfms3.0 /sfms3.0
/sfms3.0-ui

3
README.md

@ -1,9 +1,10 @@
## dev发布2024-05-21-002 ## dev发布2024-05-23-001
**xxxx.data.ts 文件配置说明** **xxxx.data.ts 文件配置说明**
**form表单查询弹窗配置** **form表单查询弹窗配置**
form: { form: {
labelMessage: '信息提示说明!!!', labelMessage: '信息提示说明!!!',
componentProps: { componentProps: {
enterSearch: true, //可输入回车 对应绑定事件:@onEnter="onEnter"
isSearchList: true, // 开启查询弹窗 isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择物料代码', // 输入框占位文本 searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'itemCode', // 查询弹窗赋值字段 searchField: 'itemCode', // 查询弹窗赋值字段

2
index.html

@ -138,7 +138,7 @@
<div class="app-loading-wrap"> <div class="app-loading-wrap">
<div class="app-loading-title"> <div class="app-loading-title">
<img src="/src/assets/imgs/logo_white.png" class="app-loading-logo" alt="Logo" /> <img src="/src/assets/imgs/logo_white.png" class="app-loading-logo" alt="Logo" />
<div class="app-loading-title">%VITE_APP_TITLE%</div> <div class="app-loading-title" id="app-loading-title">%VITE_APP_TITLE%</div>
</div> </div>
<div class="app-loading-item"> <div class="app-loading-item">
<div class="app-loading-outter"></div> <div class="app-loading-outter"></div>

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

@ -0,0 +1,74 @@
import request from '@/config/axios'
export interface EquipmentMaintenanceMainVO {
id: number
number: string
describing: string
equipmentCode: string
type: string
classes: string
planNumber: string
faultType: string
cycle: string
times: string
verifyer: number
verifyContent: string
verifyTime: Date
maintenancer: number
maintenancePhone: string
completeResult: string
completionTime: Date
maintenanceTime: Date
status: string
factoryAreaCode: string
workshopCode: string
workshopSectionCode: string
departmentCode: string
remark: string
siteId: string
available: string
deletionTime: Date
deleterId: byte[]
concurrencyStamp: number
}
// 查询设备保养工单主列表
export const getEquipmentMaintenanceMainPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/eam/equipment-maintenance-main/senior', data })
} else {
return await request.get({ url: `/eam/equipment-maintenance-main/page`, params })
}
}
// 查询设备保养工单主详情
export const getEquipmentMaintenanceMain = async (id: number) => {
return await request.get({ url: `/eam/equipment-maintenance-main/get?id=` + id })
}
// 新增设备保养工单主
export const createEquipmentMaintenanceMain = async (data: EquipmentMaintenanceMainVO) => {
return await request.post({ url: `/eam/equipment-maintenance-main/create`, data })
}
// 修改设备保养工单主
export const updateEquipmentMaintenanceMain = async (data: EquipmentMaintenanceMainVO) => {
return await request.put({ url: `/eam/equipment-maintenance-main/update`, data })
}
// 删除设备保养工单主
export const deleteEquipmentMaintenanceMain = async (id: number) => {
return await request.delete({ url: `/eam/equipment-maintenance-main/delete?id=` + id })
}
// 导出设备保养工单主 Excel
export const exportEquipmentMaintenanceMain = async (params) => {
return await request.download({ url: `/eam/equipment-maintenance-main/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/eam/equipment-maintenance-main/get-import-template' })
}

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

@ -0,0 +1,77 @@
import request from '@/config/axios'
import {InspectionItemSelectSetVO} from "@/api/eam/inspectionItemSelectSet";
export interface MaintenanceVO {
id: number
number: string
name: string
equipmentCode: string
type: string
optionCode: string
cycle: string
startTime: Date
endTime: Date
status: string
approver: number
approveContent: string
approveTime: Date
autoExamine: string
autoAgree: string
directCreateRecord: string
factoryAreaCode: string
workshopCode: string
workshopSectionCode: string
departmentCode: string
remark: string
siteId: string
available: string
deletionTime: Date
deleterId: byte[]
concurrencyStamp: number
}
// 查询保养计划列表
export const getMaintenancePage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/eam/maintenance/senior', data })
} else {
return await request.get({ url: `/eam/maintenance/page`, params })
}
}
// 查询保养计划详情
export const getMaintenance = async (id: number) => {
return await request.get({ url: `/eam/maintenance/get?id=` + id })
}
// 新增保养计划
export const createMaintenance = async (data: MaintenanceVO) => {
return await request.post({ url: `/eam/maintenance/create`, data })
}
// 修改保养计划
export const updateMaintenance = async (data: MaintenanceVO) => {
return await request.put({ url: `/eam/maintenance/update`, data })
}
// 删除保养计划
export const deleteMaintenance = async (id: number) => {
return await request.delete({ url: `/eam/maintenance/delete?id=` + id })
}
// 导出保养计划 Excel
export const exportMaintenance = async (params) => {
return await request.download({ url: `/eam/maintenance/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/eam/maintenance/get-import-template' })
}
// 启用 / 禁用
export const updateEnableCode = async (data: MaintenanceVO) => {
return await request.post({ url: `/eam/maintenance/ables` , data })
}

38
src/api/eam/sparePart/index.ts

@ -7,23 +7,19 @@ export interface SparePartVO {
brand: string brand: string
specifications: string specifications: string
isOverall: string isOverall: string
isConstant: string
subject: string subject: string
subjectCode: string subjectCode: string
category: string type: string
images: string
region: string region: string
classification: string classification: string
uom: string uom: string
singlePrice: number singlePrice: number
stockAge: number manufacturer: string
reprocurement: number minInventory: number
safetyStock: number maxInventory: number
cost: string replacementCycle: number
purchaser: string storageLocation: string
financer: string
purchaseTime: Date
isFramework: string
isRadeIn: string
departmentCode: string departmentCode: string
remark: string remark: string
siteId: string siteId: string
@ -38,43 +34,43 @@ export const getSparePartPage = async (params) => {
if (params.isSearch) { if (params.isSearch) {
delete params.isSearch delete params.isSearch
const data = {...params} const data = {...params}
return await request.post({ url: '/eam/sparepart/spare-part/senior', data }) return await request.post({ url: '/eam/basic/spare-part/senior', data })
} else { } else {
return await request.get({ url: `/eam/sparepart/spare-part/page`, params }) return await request.get({ url: `/eam/basic/spare-part/page`, params })
} }
} }
// 查询备件基础详情 // 查询备件基础详情
export const getSparePart = async (id: number) => { export const getSparePart = async (id: number) => {
return await request.get({ url: `/eam/sparepart/spare-part/get?id=` + id }) return await request.get({ url: `/eam/basic/spare-part/get?id=` + id })
} }
// 新增备件基础 // 新增备件基础
export const createSparePart = async (data: SparePartVO) => { export const createSparePart = async (data: SparePartVO) => {
return await request.post({ url: `/eam/sparepart/spare-part/create`, data }) return await request.post({ url: `/eam/basic/spare-part/create`, data })
} }
// 修改备件基础 // 修改备件基础
export const updateSparePart = async (data: SparePartVO) => { export const updateSparePart = async (data: SparePartVO) => {
return await request.put({ url: `/eam/sparepart/spare-part/update`, data }) return await request.put({ url: `/eam/basic/spare-part/update`, data })
} }
// 删除备件基础 // 删除备件基础
export const deleteSparePart = async (id: number) => { export const deleteSparePart = async (id: number) => {
return await request.delete({ url: `/eam/sparepart/spare-part/delete?id=` + id }) return await request.delete({ url: `/eam/basic/spare-part/delete?id=` + id })
} }
// 导出备件基础 Excel // 导出备件基础 Excel
export const exportSparePart = async (params) => { export const exportSparePart = async (params) => {
return await request.download({ url: `/eam/sparepart/spare-part/export-excel`, params }) return await request.download({ url: `/eam/basic/spare-part/export-excel`, params })
} }
// 下载用户导入模板 // 下载用户导入模板
export const importTemplate = () => { export const importTemplate = () => {
return request.download({ url: '/eam/sparepart/spare-part/get-import-template' }) return request.download({ url: '/eam/basic/spare-part/get-import-template' })
} }
// 查询备件基础列表 // 查询备件基础列表
export const getSparePartNoPage = async (params) => { export const getSparePartNoPage = async (params) => {
return await request.get({ url: `/eam/sparepart/spare-part/noPage`, params }) return await request.get({ url: `/eam/basic/spare-part/noPage`, params })
} }

5
src/api/mes/processroute/index.ts

@ -87,6 +87,11 @@ export const getProcessBomList = async (params) => {
return await request.get({ url: `/mes/common/getBomListByProductAndProcess`,params}) return await request.get({ url: `/mes/common/getBomListByProductAndProcess`,params})
} }
// 查询产品bom的工序物料列表
export const getBomListByProductBomAndProcess = async (params) => {
return await request.get({ url: `/mes/common/getBomListByProductBomAndProcess`,params})
}
export const getWorkstationPage = async (code:String) => { export const getWorkstationPage = async (code:String) => {
return await request.get({ url: `/mes/workstation/page?pageSize=25&processCode=`+code}) return await request.get({ url: `/mes/workstation/page?pageSize=25&processCode=`+code})
} }

5
src/api/qms/inspectionScheme/index.ts

@ -30,3 +30,8 @@ export const enableInspectionScheme = async (id: number) => {
export const disableInspectionScheme = async (id: number) => { export const disableInspectionScheme = async (id: number) => {
return await request.disable({ url: `/qms/inspection-scheme/disable?id=` + id }) return await request.disable({ url: `/qms/inspection-scheme/disable?id=` + id })
} }
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/qms/inspection-scheme/get-import-template' })
}

10
src/api/system/tenant/index.ts

@ -33,7 +33,15 @@ export interface TenantExportReqVO {
// 查询租户列表 // 查询租户列表
export const getTenantPage = (params: TenantPageReqVO) => { export const getTenantPage = (params: TenantPageReqVO) => {
return request.get({ url: '/system/tenant/page', params }) console.log(params)
if (params.isSearch) {
delete params.isSearch
const data = { ...params }
return request.post({ url: '/system/tenant/senior', data })
} else {
return request.get({ url: '/system/tenant/page', params })
}
// return request.get({ url: '/system/tenant/page', params })
} }
// 查询租户详情 // 查询租户详情

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

@ -83,7 +83,7 @@ export const getBalancePageByBusinessType = async (params) => {
} }
// 查询库存余额列表根据业务类型 // 查询库存余额列表根据业务类型的物料类型
export const getBalancePageByBusinessTypeByItemType = async (params) => { export const getBalancePageByBusinessTypeByItemType = async (params) => {
if (params.isSearch) { if (params.isSearch) {
delete params.isSearch delete params.isSearch

10
src/api/wms/countJobMain/index.ts

@ -89,5 +89,13 @@ export const importTemplate = () => {
// 关闭盘点任务主 // 关闭盘点任务主
export const closeCountJobMain = (id: number) => { export const closeCountJobMain = (id: number) => {
return request.download({ url: '/wms/count-job-main/close?id=' + id }) return request.put({ url: '/wms/count-job-main/close?id=' + id })
} }
// 关闭盘点任务主
export const handleExportCountJob = async (id: number) => {
let params = {
masterId:id
}
return await request.download({ url: `/wms/count-job-main/export-excel-single`, params })
}

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

@ -61,4 +61,15 @@ export const exportCustomeritem = async (params) => {
// 下载用户导入模板 // 下载用户导入模板
export const importTemplate = () => { export const importTemplate = () => {
return request.download({ url: '/wms/customeritem/get-import-template' }) return request.download({ url: '/wms/customeritem/get-import-template' })
}
// 获得业务类型筛选出的物料分页
export const getPageBusinessTypeToItemCode = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return request.post({ url: '/wms/customeritem/pageBusinessTypeToLocationSenior', data })
} else {
return await request.get({ url: `/wms/customeritem/pageBusinessTypeToItemCode`, params })
}
} }

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

@ -24,6 +24,17 @@ export const selectDetailByMasterID = async (id: number) => {
// 查询发货计划子列表 // 查询发货计划子列表
export const getDeliverPlanDetailPage = async (params) => { export const getDeliverPlanDetailPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/deliver-plan-detail/senior', data })
} else {
return await request.get({ url: `/wms/deliver-plan-detail/page`, params })
}
}
// 查询发货计划子列表
export const getDeliverPlanDetailPage1 = async (params) => {
return await request.get({ url: `/wms/deliver-plan-detail/page`, params }) return await request.get({ url: `/wms/deliver-plan-detail/page`, params })
} }

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

@ -49,6 +49,19 @@ export const deleteDeliverPlanMain = async (id: number) => {
// 导出发货计划主 Excel // 导出发货计划主 Excel
export const exportDeliverPlanMain = async (params) => { export const exportDeliverPlanMain = async (params) => {
params.businessType = 'Deliver'
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/deliver-plan-main/export-excel-senior', data })
} else {
return await request.download({ url: `/wms/deliver-plan-main/export-excel`, params })
}
}
// 导出发货计划主 Excela
export const exportZZBJDeliverPlanMain = async (params) => {
params.businessType = 'ZZBJDeliver'
if (params.isSearch) { if (params.isSearch) {
delete params.isSearch delete params.isSearch
const data = {...params} const data = {...params}

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

@ -65,6 +65,19 @@ export const deleteDeliverRequestMain = async (id: number) => {
// 导出发货申请主 Excel // 导出发货申请主 Excel
export const exportDeliverRequestMain = async (params) => { export const exportDeliverRequestMain = async (params) => {
params.businessType = 'Deliver'
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/deliver-request-main/export-excel-senior', data })
} else {
return await request.download({ url: `/wms/deliver-request-main/export-excel`, params })
}
}
// 导出发货申请主 Excel
export const exportZZBJDeliverRequestMain = async (params) => {
params.businessType = 'ZZBJDeliver'
if (params.isSearch) { if (params.isSearch) {
delete params.isSearch delete params.isSearch
const data = {...params} const data = {...params}

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

@ -85,6 +85,16 @@ export const selectBusinessTypeToLocation = async (params) => {
} }
} }
export const selectBusinessTypeOutLocation = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/location/pageBusinessTypeOutLocationSenior', data })
} else {
return request.get({ url: `/wms/location/pageBusinessTypeOutLocation`, params })
}
}
export const selectPageItemAreaToLocation = async (params) => { export const selectPageItemAreaToLocation = async (params) => {
if (params.isSearch) { if (params.isSearch) {

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

@ -115,4 +115,9 @@ export const getLabelDetailPage = async (params) => {
// 根据库存余额获取包装信息进行打印标签 // 根据库存余额获取包装信息进行打印标签
export const getBalanceToPackage = async (packingNumber: String) => { export const getBalanceToPackage = async (packingNumber: String) => {
return await request.get({ url: `/wms/package/getBalanceToPackage?packingNumber=` + packingNumber}) return await request.get({ url: `/wms/package/getBalanceToPackage?packingNumber=` + packingNumber})
}
// 根据库存余额获取包装信息进行打印标签--批量打印
export const getBalanceToPackageSelection = async (data: any) => {
return await request.post({ url: `/wms/balance/batchPrintLabel` ,data})
} }

7
src/api/wms/purchasereceiptJobMain/index.ts

@ -123,4 +123,9 @@ export const abandonPurchasereceiptJobMainSpare = (id: number) => {
// 承接采购收货任务主 // 承接采购收货任务主
export const acceptPurchasereceiptJobMain = (id: number) => { export const acceptPurchasereceiptJobMain = (id: number) => {
return request.put({ url: '/wms/purchasereceipt-job-main/accept?id=' + id }) return request.put({ url: '/wms/purchasereceipt-job-main/accept?id=' + id })
} }
// 拒收采购收货任务主
export const refusalPurchasereceiptJobMain = (id: number) => {
return request.put({ url: '/wms/purchasereceipt-job-main/refusal?id=' + id })
}

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

@ -73,6 +73,17 @@ export const getPurchasereceiptRecordDetailPageSpare = async (params) => {
} }
// 查询采购收货记录--退货筛选列表
export const getPurchasereceiptRecordDetailPageReturn = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/purchasereceipt-record-detail/seniorReturn', data })
} else {
return await request.get({ url: `/wms/purchasereceipt-record-detail/pageReturn`, params })
}
}
export const getPurchasereceiptRecordDetailPageSCP = async (params) => { export const getPurchasereceiptRecordDetailPageSCP = async (params) => {
if (params.isSearch) { if (params.isSearch) {
delete params.isSearch delete params.isSearch
@ -152,4 +163,4 @@ export const queryPurchaseceiptChildPackingNumber = async (params) => {
// 查询采购收货缺货记录子包装数据 // 查询采购收货缺货记录子包装数据
export const queryPurchaseshortageChildPackingNumber = async (params) => { export const queryPurchaseshortageChildPackingNumber = async (params) => {
return await request.get({ url: `/wms/purchaseshortage-detail/pageChildPackingNumber`, params }) return await request.get({ url: `/wms/purchaseshortage-detail/pageChildPackingNumber`, params })
} }

60
src/api/wms/qadCostcentre/index.ts

@ -0,0 +1,60 @@
import request from '@/config/axios'
export interface QadCostcentreVO {
id: number
code: string
usageDescription: string
costcentreId: string
costcentreCode: string
costcentreDescription: string
costcentreActive: string
costcentreType: string
available: string
remark: string
deletionTime: Date
deleterId: string
extraProperties: string
concurrencyStamp: number
siteId: string
}
// 查询QAD成品中心列表
export const getQadCostcentrePage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/qad-costcentre/senior', data })
} else {
return await request.get({ url: `/wms/qad-costcentre/page`, params })
}
}
// 查询QAD成品中心详情
export const getQadCostcentre = async (id: number) => {
return await request.get({ url: `/wms/qad-costcentre/get?id=` + id })
}
// 新增QAD成品中心
export const createQadCostcentre = async (data: QadCostcentreVO) => {
return await request.post({ url: `/wms/qad-costcentre/create`, data })
}
// 修改QAD成品中心
export const updateQadCostcentre = async (data: QadCostcentreVO) => {
return await request.put({ url: `/wms/qad-costcentre/update`, data })
}
// 删除QAD成品中心
export const deleteQadCostcentre = async (id: number) => {
return await request.delete({ url: `/wms/qad-costcentre/delete?id=` + id })
}
// 导出QAD成品中心 Excel
export const exportQadCostcentre = async (params) => {
return await request.download({ url: `/wms/qad-costcentre/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/wms/qad-costcentre/get-import-template' })
}

59
src/api/wms/qadProject/index.ts

@ -0,0 +1,59 @@
import request from '@/config/axios'
export interface QadProjectVO {
id: number
projectId: string
projectCode: string
projectDescription: string
projectStartDate: string
projectEndDate: string
statusCode: string
available: string
remark: string
deletionTime: Date
deleterId: string
extraProperties: string
concurrencyStamp: number
siteId: string
}
// 查询QAD项目信息列表
export const getQadProjectPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/qad-project/senior', data })
} else {
return await request.get({ url: `/wms/qad-project/page`, params })
}
}
// 查询QAD项目信息详情
export const getQadProject = async (id: number) => {
return await request.get({ url: `/wms/qad-project/get?id=` + id })
}
// 新增QAD项目信息
export const createQadProject = async (data: QadProjectVO) => {
return await request.post({ url: `/wms/qad-project/create`, data })
}
// 修改QAD项目信息
export const updateQadProject = async (data: QadProjectVO) => {
return await request.put({ url: `/wms/qad-project/update`, data })
}
// 删除QAD项目信息
export const deleteQadProject = async (id: number) => {
return await request.delete({ url: `/wms/qad-project/delete?id=` + id })
}
// 导出QAD项目信息 Excel
export const exportQadProject = async (params) => {
return await request.download({ url: `/wms/qad-project/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/wms/qad-project/get-import-template' })
}

66
src/api/wms/subjectAccount/index.ts

@ -0,0 +1,66 @@
import request from '@/config/axios'
export interface SubjectAccountVO {
id: number
code: string
usageDescription: string
costecentreId: string
costecentreCode: string
costecentreType: string
projectId: string
projectCode: string
address: string
available: string
remark: string
deletionTime: Date
deleterId: string
extraProperties: string
concurrencyStamp: number
siteId: string
}
// 查询科目账户配置列表
export const getSubjectAccountPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/subject-account/senior', data })
} else {
return await request.get({ url: `/wms/subject-account/page`, params })
}
}
// 查询科目账户配置详情
export const getSubjectAccount = async (id: number) => {
return await request.get({ url: `/wms/subject-account/get?id=` + id })
}
// 新增科目账户配置
export const createSubjectAccount = async (data: SubjectAccountVO) => {
return await request.post({ url: `/wms/subject-account/create`, data })
}
// 修改科目账户配置
export const updateSubjectAccount = async (data: SubjectAccountVO) => {
return await request.put({ url: `/wms/subject-account/update`, data })
}
// 删除科目账户配置
export const deleteSubjectAccount = async (id: number) => {
return await request.delete({ url: `/wms/subject-account/delete?id=` + id })
}
// 导出科目账户配置 Excel
export const exportSubjectAccount = async (params) => {
if (params.isSearch) {
const data = {...params}
return await request.downloadPost({ url: `/wms/subject-account/export-excel-senior`, data })
}else{
return await request.download({ url: `/wms/subject-account/export-excel`, params })
}
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/wms/subject-account/get-import-template' })
}

20
src/components/Form/src/Form.vue

@ -175,10 +175,7 @@ export default defineComponent({
const Com = componentMap['Divider'] as ReturnType<typeof defineComponent> const Com = componentMap['Divider'] as ReturnType<typeof defineComponent>
let labelName = item?.label || '' let labelName = item?.label || ''
if(item?.label){ if(item?.label){
labelName = t(`ts.${item?.label}`) labelName = t(`ts.${item?.label}`).replace('ts.','')
if(labelName === 'ts.' + item?.label){
labelName = item?.label
}
} }
return isDivider ? ( return isDivider ? (
<Com {...{ contentPosition: 'left', ...item.componentProps }}>{labelName}</Com> <Com {...{ contentPosition: 'left', ...item.componentProps }}>{labelName}</Com>
@ -227,18 +224,12 @@ export default defineComponent({
if (item?.labelMessage) { if (item?.labelMessage) {
let labelName = item.label || '' let labelName = item.label || ''
if(item.label){ if(item.label){
labelName = t(`ts.${item.label}`) labelName = t(`ts.${item.label}`).replace('ts.','')
if(labelName === 'ts.' + item.label){
labelName = item.label
}
} }
let labelMessage = item.labelMessage || '' let labelMessage = item.labelMessage || ''
if(item.labelMessage){ if(item.labelMessage){
labelMessage = t(`ts.${item.labelMessage}`) labelMessage = t(`ts.${item.labelMessage}`).replace('ts.','')
if(labelMessage === 'ts.' + item.labelMessage){
labelMessage = item.labelMessage
}
} }
formItemSlots.label = () => { formItemSlots.label = () => {
return ( return (
@ -367,10 +358,7 @@ export default defineComponent({
} }
let labelName = item.label || '' let labelName = item.label || ''
if(item.label){ if(item.label){
labelName = t(`ts.${item.label}`) labelName = t(`ts.${item.label}`).replace('ts.','')
if(labelName === 'ts.' + item.label){
labelName = item.label
}
} }
return ( return (
<ElFormItem {...(item.formItemProps || {})} prop={item.field} label={labelName}> <ElFormItem {...(item.formItemProps || {})} prop={item.field} label={labelName}>

5
src/components/Form/src/components/useRenderSelect.tsx

@ -35,10 +35,7 @@ export const useRenderSelect = (slots: Slots) => {
const { label, value, ...other } = option const { label, value, ...other } = option
const zhName = labelAlias ? option[labelAlias] : label;//中文名称 const zhName = labelAlias ? option[labelAlias] : label;//中文名称
let labelName = t(`ts.${zhName}`) let labelName = t(`ts.${zhName}`).replace('ts.','')
if(labelName === 'ts.' + zhName){
labelName = zhName
}
return ( return (
<ElOption <ElOption

7
src/components/Form/src/helper.ts

@ -17,12 +17,7 @@ export const setTextPlaceholder = (schema: FormSchema): PlaceholderModel => {
let labelName = schema.label || '' let labelName = schema.label || ''
if(schema.label){ if(schema.label){
labelName = t(`ts.${schema.label}`) labelName = ' '+t(`ts.${schema.label}`).replace('ts.','')
if(labelName === 'ts.' + schema.label){
labelName = ' '+schema.label
}else{
labelName = ' ' + labelName
}
} }
if (textMap.includes(schema?.component as string)) { if (textMap.includes(schema?.component as string)) {

339
src/components/ImportForm/src/ImportDetailForm.vue

@ -0,0 +1,339 @@
<!-- 导入组件 -->
<template>
<Dialog v-model="dialogVisible" :title="t('ts.导入')" width="600" :close-on-click-modal="false">
<el-upload
ref="uploadRef"
v-model:file-list="fileList"
:action="
importUrl +
'?mode=' +
mode +
'&file=' +
file +
'&updatePart=' +
updatePart +
'&outFile=' +
outFile +
'&extend=' + extend +
'&fromInventoryStatus=' + fromInventoryStatus +
'&toInventoryStatus=' + toInventoryStatus
"
:auto-upload="false"
:disabled="formLoading"
:headers="uploadHeaders"
:limit="1"
:on-error="submitFormError"
:on-exceed="handleExceed"
:on-success="submitFormSuccess"
:accept="accept"
drag
style="width: 300px; margin: 0 auto"
v-loading="formLoading"
>
<Icon icon="ep:upload-filled" color="#c0c4cc" :size="60" />
<div class="el-upload__text">{{t('ts.将文件拖到此处,或')}}<em>{{t('ts.点击上传')}}</em></div>
<template #tip>
<div class="el-upload__tip ml--126px mr--80px">
<div class="flex">
<div
class="label h-32px mr-26px color-#acaeb3 font-size-14px w-100px text-right"
style="line-height: 32px"
>{{t('ts.导入模式')}}</div
>
<div class="">
<div class="radio">
<el-radio-group v-model="mode">
<el-radio :label="1" :disabled="updateIsDisable">{{ t('ts.更新')}}</el-radio>
<!-- <el-radio :label="2" :disabled="appendIsDisable">{{ t('ts.追加') }}</el-radio>
<el-radio :label="3" :disabled="coverIsDisable">{{ t('ts.覆盖') }}</el-radio> -->
</el-radio-group>
</div>
<div class="tips color-#acaeb3 font-size-14px">
<div class="mt-2">{{t('ts.更新:新增并修改')}}</div>
<!-- <div class="mt-2">{{ t('ts.追加:只新增,不修改') }}</div>
<div class="mt-2">{{ t('ts.覆盖:只修改不新增') }}</div> -->
</div>
</div>
</div>
<div class="flex mt-16px">
<!-- <div
class="label h-32px mr-26px color-#acaeb3 font-size-14px w-100px text-right"
style="line-height: 32px"
>{{ t('ts.部分保存') }}</div
>
<div class="">
<div class="switch">
<el-switch v-model="updatePart" />
</div>
<div class="tips color-#acaeb3 font-size-14px">
<div class="mt-2">{{ t('ts.部分保存:如存在错误数据,正确数据正常导入') }}</div>
<div class="mt-2">{{ t('ts.全部保存:全部数据正确,才能导入') }}</div>
</div>
</div> -->
</div>
<div class="flex mt-16px" v-if="isShowOut">
<div
class="label h-32px mr-26px color-#acaeb3 font-size-14px w-100px text-right"
style="line-height: 32px"
>是否外部资源</div
>
<div class="">
<div class="switch">
<el-switch v-model="outFile" />
</div>
</div>
</div>
</div>
</template>
</el-upload>
<template #footer>
<div class="flex items-center">
<div class="flex-1 text-left">
<!-- <el-button type="primary" plain @click="importTemplate">
<Icon icon="ep:download" />
{{ t('ts.下载模板') }}
</el-button> -->
</div>
<el-button :disabled="formLoading" type="primary" @click="submitForm">{{ t('ts.确 ') }}</el-button>
<el-button @click="dialogVisible = false">{{ t('ts.取 消') }}</el-button>
</div>
</template>
</Dialog>
</template>
<script lang="ts" setup>
import { getAccessToken, getTenantId } from '@/utils/auth'
import download from '@/utils/download'
defineOptions({ name: 'ImportDetailForm' })
const { t } = useI18n()
const message = useMessage() //
const dialogVisible = ref(false) //
const formLoading = ref(false) //
const uploadRef = ref()
const uploadHeaders = ref() // Header
const fileList = ref([]) //
const file = ref('')
const props = defineProps({
importTemplateData: {
type: Object,
required: true
},
//
accept: {
type: String,
required: false,
default: '.xlsx,.xls'
},
// .1
mode: {
type: Number,
required: false,
default: 1
},
// ,
updateIsDisable: {
type: Boolean,
required: false,
default: false
},
// ,
appendIsDisable: {
type: Boolean,
required: false,
default: false
},
// ,
coverIsDisable: {
type: Boolean,
required: false,
default: false
},
// ,
updatePart: {
type: Boolean,
required: false,
default: false
},
url: {
type: String,
required: false
},
//
isShowOut: {
type: Boolean,
required: false,
default: false
},
outFile: {
type: Boolean,
required: false,
default: false
},
//
extend: {
type: String,
required: false,
default: ''
},
// TODO: cxm
fromInventoryStatus: {
type: String,
required: false,
default: ''
},
// TODO: cxm
toInventoryStatus: {
type: String,
required: false,
default: ''
}
})
const importTemplateData = ref(props.importTemplateData)
const accept = ref(props.accept)
const mode = ref(props.mode) //.1
const updateIsDisable = ref(props.updateIsDisable) //,
const appendIsDisable = ref(props.appendIsDisable) //,
const coverIsDisable = ref(props.coverIsDisable) //,
const updatePart = ref(props.updatePart) //
const outFile = ref(props.outFile) //
const importUrl = import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + props.url
/** 打开弹窗 */
const open = () => {
dialogVisible.value = true
resetForm()
}
defineExpose({ open }) // open
/** 提交表单 */
const submitForm = async () => {
if (fileList.value.length == 0) {
message.error('请上传文件')
return
}
file.value = fileList.value[0].name
//
uploadHeaders.value = {
Authorization: 'Bearer ' + getAccessToken(),
'tenant-id': getTenantId()
}
formLoading.value = true
uploadRef.value!.submit()
}
/** 文件上传成功 */
const emits = defineEmits(['success'])
const submitFormSuccess = (response: any) => {
formLoading.value = true
console.log(response)
if (response) {
if (response.code == 500) {
uploadRef.value!.clearFiles()
message.error('导入失败')
formLoading.value = false
return
} else if (response.code == 0) {
if (response.data.errorCount > 0) {
message.confirm('文件中有部分数据导入失败,是否下载失败数据?').then(() => {
// download.excel(file, 'file_' + new Date().getTime())
// url
// const downloadElement = document.createElement('a')
// console.log(172, import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + '/' + response.data.errorFile)
// console.log(172, import.meta.env.VITE_BASE_URL + '/admin-api/opt/profile/' + response.data.errorFile)
window.open(
import.meta.env.VITE_BASE_URL + '/admin-api' + response.data.errorFile,
'222'
)
// downloadElement.setAttribute('href', import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + response.data.errorFile )
//
// downloadElement.click()
})
} else {
message.success('导入成功')
}
}else if(response.data == null){
message.error(response.msg)
}
}
// if (response.code !== 0) {
// message.error(response.msg)
// formLoading.value = false
// return
// }
// //
// const data = response.data
// const create = response.data.importResult[0]
// const update = response.data.importResult[1]
// const failure = response.data.importResult[2]
// let text = '' + data[create].length + ';'
// for (let name of data[create]) {
// text += '< ' + name + ' >'
// }
// text += '' + data[update].length + ';'
// for (const name of data[update]) {
// text += '< ' + name + ' >'
// }
// text += '' + Object.keys(data[failure]).length + ';'
// for (const name in data[failure]) {
// text += '< ' + name + ': ' + data[failure][name] + ' >'
// }
// message.alert(text)
//
formLoading.value = false
emits('success')
dialogVisible.value = false
}
/** 上传错误提示 */
const submitFormError = (): void => {
message.error('上传失败,请您重新上传!')
formLoading.value = false
}
/** 重置表单 */
const resetForm = () => {
//
formLoading.value = false
uploadRef.value?.clearFiles()
fileList.value = []
}
/** 文件数超出提示 */
const handleExceed = (): void => {
message.error('最多只能上传一个文件!')
}
/** 下载模板操作 */
const importTemplate = () => {
const res = importTemplateData.value.templateUrl
download.excel(res, importTemplateData.value.templateTitle)
}
</script>
<style scoped lang="scss">
.tips {
div {
position: relative;
padding-left: 22px;
&::before {
width: 4px;
height: 4px;
border-radius: 50%;
content: '';
background: #c2c2c2;
position: absolute;
top: 50%;
margin-top: -2px;
left: 4px;
}
}
}
</style>

5
src/components/Table/src/Table.vue

@ -289,10 +289,7 @@ export default defineComponent({
return [...[renderTableExpand()], ...[renderTableSelection()]].concat( return [...[renderTableExpand()], ...[renderTableSelection()]].concat(
(columnsChildren || columns).map((v) => { (columnsChildren || columns).map((v) => {
const zhName = v.label || '';// const zhName = v.label || '';//
let labelName = t(`ts.${v.label}`) let labelName = t(`ts.${v.label}`).replace('ts.','')
if(labelName === 'ts.' + zhName){
labelName = zhName
}
// //
if (v.type === 'index') { if (v.type === 'index') {
return ( return (

7
src/components/TableForm/src/TableForm.vue

@ -64,7 +64,7 @@
v-model="row[headerItem.field]" v-model="row[headerItem.field]"
clearable clearable
:type="headerItem?.tableForm?.inputType" :type="headerItem?.tableForm?.inputType"
:placeholder="headerItem?.tableForm?.placeholder || '请输入' + headerItem.label" :placeholder="t(`ts.${headerItem?.tableForm?.placeholder || '请输入' + headerItem.label}`).replace('ts.','')"
:disabled="headerItem?.tableForm?.disabled ? true: headerItem?.tableForm?.isInpuFocusShow ? true : false" :disabled="headerItem?.tableForm?.disabled ? true: headerItem?.tableForm?.isInpuFocusShow ? true : false"
style="flex:1" style="flex:1"
@blur="inputStringBlur(headerItem.field, row[headerItem.field], row)" @blur="inputStringBlur(headerItem.field, row[headerItem.field], row)"
@ -534,7 +534,10 @@ defineExpose({
padding: 2px 0px; padding: 2px 0px;
border: none; border: none;
} }
::v-deep(.el-form-item--default) {
margin-bottom: 5px;
margin-top: 5px;
}
::v-deep(.el-table td.el-table__cell .el-form-item__content) { ::v-deep(.el-table td.el-table__cell .el-form-item__content) {
display: flex !important; display: flex !important;
align-items: center !important; align-items: center !important;

4
src/components/UploadFile/src/UploadFile.vue

@ -23,10 +23,10 @@
<el-button type="primary"><Icon icon="ep:upload-filled" />{{ title }}</el-button> <el-button type="primary"><Icon icon="ep:upload-filled" />{{ title }}</el-button>
<template v-if="isShowTip" #tip> <template v-if="isShowTip" #tip>
<div style="font-size: 8px;margin-top: 10px;line-height: initial;"> <div style="font-size: 8px;margin-top: 10px;line-height: initial;">
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> {{t('ts.大小不超过')}} <b style="color: #f56c6c">{{ fileSize }}MB</b>
</div> </div>
<div style="font-size: 8px;line-height: initial;"> <div style="font-size: 8px;line-height: initial;">
格式为 <b style="color: #f56c6c">{{ fileType.join('/') }}</b> 的文件 {{ t('ts.格式为') }} <b style="color: #f56c6c">{{ fileType.join('/') }}</b> {{ t('ts.的文件') }}
</div> </div>
</template> </template>
<template v-if="!isShowFile" #file > <template v-if="!isShowFile" #file >

16
src/components/rowDrop/index.vue

@ -82,9 +82,13 @@ const closeRowDrop = () => {
const save = () => { const save = () => {
let saveDate:any[] = [] let saveDate:any[] = []
// //
saveDate.push(props.allSchemas.tableColumns[0]) let myTableColumns = props.allSchemas.tableColumns
if(props.detailAllSchemas){
myTableColumns = [...props.allSchemas?.tableColumns,...props.detailAllSchemas?.tableMainColumns]
}
saveDate.push(myTableColumns[0])
allData.value.forEach((item) => { allData.value.forEach((item) => {
const _item:any = props.allSchemas.tableColumns.find(itemColumns => (itemColumns.label == item )) const _item:any = myTableColumns.find(itemColumns => (itemColumns.label == item ))
if(_item){ if(_item){
_item.isTable = false _item.isTable = false
if (checkedDataList.value.indexOf(_item.label) > -1) { if (checkedDataList.value.indexOf(_item.label) > -1) {
@ -94,7 +98,7 @@ const save = () => {
} }
}) })
// //
saveDate.push(props.allSchemas.tableColumns[props.allSchemas.tableColumns.length-1]) saveDate.push(myTableColumns[myTableColumns.length-1])
updataTableColumns(saveDate) updataTableColumns(saveDate)
console.log(99, saveDate) console.log(99, saveDate)
RedisApi.addRedis({key: routeName.value,value: JSON.stringify(saveDate)}).then(() => { RedisApi.addRedis({key: routeName.value,value: JSON.stringify(saveDate)}).then(() => {
@ -149,7 +153,7 @@ const initSelectSta = () => {
if (item.field != 'action') { if (item.field != 'action') {
checkedDataList.value.push(item.label) checkedDataList.value.push(item.label)
_showTableColumns.push(_myTableColumns.find(myItem => (myItem.label == item.label))) _showTableColumns.push(_myTableColumns.find(myItem => (myItem.label == item.label)))
allData.value.push(t(`ts.${item.label}`)) allData.value.push(t(`ts.${item.label}`).replace('ts.',''))
} }
} }
}) })
@ -161,7 +165,7 @@ const initSelectSta = () => {
if (!myTableItem.fixed) { if (!myTableItem.fixed) {
if (myTableItem.field != 'action') { if (myTableItem.field != 'action') {
if (allData.value.indexOf(myTableItem.label) == -1) { if (allData.value.indexOf(myTableItem.label) == -1) {
allData.value.push(t(`ts.${myTableItem.label}`)) allData.value.push(t(`ts.${myTableItem.label}`).replace('ts.',''))
} }
} }
} }
@ -191,7 +195,7 @@ const initSelectSta = () => {
if (!item.fixed) { if (!item.fixed) {
if (item.field != 'action') { if (item.field != 'action') {
checkedDataList.value.push(item.label) checkedDataList.value.push(item.label)
allData.value.push(t(`ts.${item.label}`)) allData.value.push(t(`ts.${item.label}`).replace('ts.',''))
} }
} }
}) })

3
src/hooks/web/useTitle.ts

@ -1,6 +1,7 @@
import { watch, ref } from 'vue' import { watch, ref } from 'vue'
import { isString } from '@/utils/is' import { isString } from '@/utils/is'
import { useAppStoreWithOut } from '@/store/modules/app' import { useAppStoreWithOut } from '@/store/modules/app'
const { t } = useI18n() // 国际化
const appStore = useAppStoreWithOut() const appStore = useAppStoreWithOut()
@ -14,7 +15,7 @@ export const useTitle = (newTitle?: string) => {
title, title,
(n, o) => { (n, o) => {
if (isString(n) && n !== o && document) { if (isString(n) && n !== o && document) {
document.title = n document.title = n.replace(import.meta.env.VITE_APP_TITLE,t(`ts.${import.meta.env.VITE_APP_TITLE}`))
} }
}, },
{ immediate: true } { immediate: true }

3
src/layout/components/Footer/src/Footer.vue

@ -1,6 +1,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { useAppStore } from '@/store/modules/app' import { useAppStore } from '@/store/modules/app'
import { useDesign } from '@/hooks/web/useDesign' import { useDesign } from '@/hooks/web/useDesign'
const { t } = useI18n()
// eslint-disable-next-line vue/no-reserved-component-names // eslint-disable-next-line vue/no-reserved-component-names
defineOptions({ name: 'Footer' }) defineOptions({ name: 'Footer' })
@ -19,6 +20,6 @@ const title = computed(() => appStore.getTitle)
:class="prefixCls" :class="prefixCls"
class="h-[var(--app-footer-height)] bg-[var(--app-content-bg-color)] text-center leading-[var(--app-footer-height)] text-[var(--el-text-color-placeholder)] dark:bg-[var(--el-bg-color)]" class="h-[var(--app-footer-height)] bg-[var(--app-content-bg-color)] text-center leading-[var(--app-footer-height)] text-[var(--el-text-color-placeholder)] dark:bg-[var(--el-bg-color)]"
> >
<p style="font-size: 14px">Copyright ©2022-{{ title }}</p> <p style="font-size: 14px">Copyright ©2022-{{ t(`ts.${title}`) }}</p>
</div> </div>
</template> </template>

38
src/locales/en-US.ts

@ -56,6 +56,7 @@ export default {
copySuccess: 'Copy Success', copySuccess: 'Copy Success',
copyError: 'Copy Error', copyError: 'Copy Error',
closeSuccess: 'Close Success', closeSuccess: 'Close Success',
refusalSuccess: 'Refusal Success',
reAddSuccess: 'ReAdd Success', reAddSuccess: 'ReAdd Success',
submitSuccess: 'Submit Success', submitSuccess: 'Submit Success',
agreeSuccess: 'Agree Success', agreeSuccess: 'Agree Success',
@ -66,6 +67,7 @@ export default {
giveupSuccess: 'Giveup Success', giveupSuccess: 'Giveup Success',
dealwithSuccess: 'Dealwith Success', dealwithSuccess: 'Dealwith Success',
confirmColse: 'Confirm Close?', confirmColse: 'Confirm Close?',
confirmRefusal: 'Confirm Refusal?',
confirmReAdd: 'Confirm ReAdd?', confirmReAdd: 'Confirm ReAdd?',
confirmAgree: 'Confirm Agree?', confirmAgree: 'Confirm Agree?',
confirmRefused: 'Confirm Refused?', confirmRefused: 'Confirm Refused?',
@ -1063,7 +1065,6 @@ export default {
:'Purchasing price approver', :'Purchasing price approver',
:'Supplier\'s invoice number', :'Supplier\'s invoice number',
:'loading', :'loading',
:'Please enter remarks',
'正在上传文件,请稍候':'Please wait while uploading files', '正在上传文件,请稍候':'Please wait while uploading files',
:'upload successful', :'upload successful',
:'The number of uploaded files cannot exceed', :'The number of uploaded files cannot exceed',
@ -1084,12 +1085,35 @@ export default {
:'Invoicing calendar management', :'Invoicing calendar management',
:'description', :'description',
:'Batch delete', :'Batch delete',
:'Check the quality inspection report' :'Check the quality inspection report',
:'ChangChun',
:'ChengDu',
:'HELLA Smart Factory Management Platform',
:'Purchase unreceived record',
:'Please select the desired shipment tracking number',
:'Not more in size',
:'File in',
:'format',
:'Receive',
:'Please input batch',
:'Please input the supplier batch',
:'Option Date',
:'Please input comment',
1:'Please input package specification1',
1:'Please input package quantity1',
2:'Please input package specification2',
2:'Please input package quantity2',
:'submit for approval',
// 系统管理:'system management',
// 基础设施:'infrastructure',
// 报表管理:'report manager',
// 报表:'statement',
// 富维海拉供应商管理系统:'vendor management system',
:'Please enter your username',
:'Please enter email',
:'Forget Password',
:'User Name',
:'Mail',
}, },

35
src/locales/zh-CN.ts

@ -56,6 +56,7 @@ export default {
copySuccess: '复制成功', copySuccess: '复制成功',
copyError: '复制失败', copyError: '复制失败',
closeSuccess: '关闭成功', closeSuccess: '关闭成功',
refusalSuccess: '拒收成功',
reAddSuccess: '重新添加成功', reAddSuccess: '重新添加成功',
submitSuccess: '提交成功', submitSuccess: '提交成功',
agreeSuccess: '审批通过成功', agreeSuccess: '审批通过成功',
@ -66,6 +67,7 @@ export default {
acceptSuccess: '承接成功', acceptSuccess: '承接成功',
giveupSuccess: '放弃成功', giveupSuccess: '放弃成功',
confirmColse: '确认关闭吗?', confirmColse: '确认关闭吗?',
confirmRefusal: '确认拒收吗?',
confirmReAdd: '确认重新添加吗?', confirmReAdd: '确认重新添加吗?',
confirmAgree: '确认审批通过吗?', confirmAgree: '确认审批通过吗?',
confirmRefused: '确认审批驳回吗?', confirmRefused: '确认审批驳回吗?',
@ -1063,7 +1065,6 @@ export default {
:'采购价格审批人', :'采购价格审批人',
:'供应商发货单号', :'供应商发货单号',
:'加载中', :'加载中',
:'请输入备注',
'正在上传文件,请稍候':'正在上传文件,请稍候...', '正在上传文件,请稍候':'正在上传文件,请稍候...',
:'上传成功', :'上传成功',
:'上传文件数量不能超过', :'上传文件数量不能超过',
@ -1084,9 +1085,35 @@ export default {
:'开票日历管理', :'开票日历管理',
:'描述', :'描述',
:'批量删除', :'批量删除',
:'查看质检报告' :'查看质检报告',
:'长春',
:'成都',
:'富维海拉智慧工厂管理平台',
:'采购未收货记录',
:'请选择要货计划单号',
:'大小不超过',
:'格式为',
:'的文件',
:'接收',
:'请输入批次',
:'请输入供应商批次',
:'选择日期',
:'请输入备注',
1:'请输入包装规格1',
1:'请输入包装数量1',
2:'请输入包装规格2',
2:'请输入包装数量2',
:'提交审批',
:'系统管理',
:'基础设施',
:'报表管理',
:'报表',
:'富维海拉供应商管理系统',
:'请输入用户名',
:'请输入邮箱',
:'忘记密码',
:'用户名',
:'邮箱',

6
src/main.ts

@ -43,6 +43,7 @@ import Logger from '@/utils/Logger'
import VueDOMPurifyHTML from 'vue-dompurify-html' // 解决v-html 的安全隐患 import VueDOMPurifyHTML from 'vue-dompurify-html' // 解决v-html 的安全隐患
import DataVVue3 from '@kjgl77/datav-vue3' import DataVVue3 from '@kjgl77/datav-vue3'
import { useLocaleStore } from '@/store/modules/locale'
// 创建实例 // 创建实例
const setupAll = async () => { const setupAll = async () => {
@ -70,6 +71,11 @@ const setupAll = async () => {
app.mount('#app') app.mount('#app')
app.config.warnHandler = () => null; app.config.warnHandler = () => null;
} }
// 多语言相关
const localeStore = useLocaleStore()
if(localeStore&&localeStore.currentLocale&&localeStore.currentLocale.lang.indexOf('en')>-1&&document.querySelector('#app-loading-title')){
document.querySelector('#app-loading-title').innerHTML = 'HELLA Smart Factory Management Platform' // 富维海拉智慧工厂管理平台
}
setupAll() setupAll()

3
src/utils/dict.ts

@ -348,4 +348,5 @@ export enum DICT_TYPE {
SUBJECT = 'subject', //科目 SUBJECT = 'subject', //科目
REGION = 'region', //区域 REGION = 'region', //区域
PART_CLASS = 'part_class', //备件分类 PART_CLASS = 'part_class', //备件分类
} MAINTENANCE_CYCLE ='maintenance_cycle' // 保养周期
}

4
src/utils/disposition/defaultButtons.ts

@ -289,7 +289,7 @@ export function mainListDisableBtn(option:any) {
// 主列表-中止按钮1 // 主列表-中止按钮1
export function mainListSuspend1Btn(option:any) { export function mainListSuspend1Btn(option:any) {
return __defaultBtnOption(option,{ return __defaultBtnOption(option,{
label: t(`ts.中止`), label: t(`ts.中止`).replace('ts.',''),
name: 'suspend', name: 'suspend',
hide: false, hide: false,
type: 'danger', type: 'danger',
@ -624,7 +624,7 @@ export function mainListPurchasePlanModBtn(option:any) {
// 主列表-要货计划流程-下架按钮 // 主列表-要货计划流程-下架按钮
export function mainListPurchasePlanWitBtn(option:any) { export function mainListPurchasePlanWitBtn(option:any) {
return __defaultBtnOption(option,{ return __defaultBtnOption(option,{
label: t(`ts.下架`), label: t(`ts.下架`).replace('ts.',''),
name: 'mainPurPlanWit', name: 'mainPurPlanWit',
hide: false, hide: false,
type: 'danger', type: 'danger',

4
src/views/eam/basicMaintenanceOption/basicMaintenanceOption.data.ts

@ -36,7 +36,7 @@ export const BasicMaintenanceOption = useCrudSchemas(reactive<CrudSchema[]>([
isSearch: true, isSearch: true,
}, },
{ {
label: '选择集', label: '选择集ID',
field: 'selectId', field: 'selectId',
sort: 'custom', sort: 'custom',
isDetail: true, isDetail: true,
@ -45,7 +45,7 @@ export const BasicMaintenanceOption = useCrudSchemas(reactive<CrudSchema[]>([
isSearchList: true, // 开启查询弹窗 isSearchList: true, // 开启查询弹窗
searchTitle: '保养选择集信息', // 查询弹窗标题 searchTitle: '保养选择集信息', // 查询弹窗标题
searchAllSchemas: BasicMaintenanceItemSelectSet.allSchemas, // 查询弹窗所需类 searchAllSchemas: BasicMaintenanceItemSelectSet.allSchemas, // 查询弹窗所需类
searchField: 'name', // 查询弹窗赋值字段 searchField: 'id', // 查询弹窗赋值字段
searchPage: ItemApi.getBasicMaintenanceItemSelectSetPage, // 查询弹窗所需分页方法 searchPage: ItemApi.getBasicMaintenanceItemSelectSetPage, // 查询弹窗所需分页方法
multiple:true, multiple:true,
searchCondition: [{ searchCondition: [{

10
src/views/eam/documentType/documentType.data.ts

@ -23,7 +23,10 @@ export const DocumentType = useCrudSchemas(reactive<CrudSchema[]>([
label: '设备编码', label: '设备编码',
field: 'code', field: 'code',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
}, },
{ {
label: '名称', label: '名称',
@ -37,7 +40,10 @@ export const DocumentType = 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,
isTable: false,
isForm: false,
isDetail:false,
form: { form: {
component: 'Select' component: 'Select'
} }

6
src/views/eam/documentType/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 #name="{row}">
<el-button type="primary" link @click="openDetail(row, '代码', row.code)"> <el-button type="primary" link @click="openDetail(row, '代码', row.name)">
<span>{{ row.code }}</span> <span>{{ row.name }}</span>
</el-button> </el-button>
</template> </template>
<template #action="{ row }"> <template #action="{ row }">

12
src/views/eam/documentTypeSelectSet/documentTypeSelectSet.data.ts

@ -23,6 +23,18 @@ export const DocumentTypeSelectSet = useCrudSchemas(reactive<CrudSchema[]>([
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{
label: '选择集类型',
field: 'type',
sort: 'custom',
dictType: DICT_TYPE.DEVICE_TYPE,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: true,
isForm: true,
form: {
component: 'Select'
}
},
{ {
label: '项编号', label: '项编号',
field: 'itemCode', field: 'itemCode',

25
src/views/eam/documentTypeSelectSet/itemSelectSetForm.vue

@ -13,6 +13,14 @@
<el-input v-model="formData.name" placeholder="选择集名称" :disabled="isDisabled"/> <el-input v-model="formData.name" placeholder="选择集名称" :disabled="isDisabled"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="选择集类型" prop="type">
<el-select v-model="formData.type" style="width: 150px">
<el-option label="设备" value="DEVICE"></el-option>
<el-option label="工装" value="EQUIPMENT"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="描述" prop="describing"> <el-form-item label="描述" prop="describing">
<el-input v-model="formData.describing" placeholder="描述" :disabled="isDisabled"/> <el-input v-model="formData.describing" placeholder="描述" :disabled="isDisabled"/>
@ -29,8 +37,8 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="文档类型项" prop="items"> <el-form-item label="文档类型项" prop="items">
<div class="tag-container flex gap-2"> <div class="tag-container flex gap-2">
<el-tag v-for="ent in tags" :key="ent.code" closable :disable-transitions="false" @close="handleClose(ent.id)"> <el-tag v-for="ent in tags" :key="ent.name" closable :disable-transitions="false" @close="handleClose(ent.id)">
{{ ent.code}} {{ ent.name}}
</el-tag> </el-tag>
<el-input v-if="inputVisible" ref="InputRef" v-model="inputValue" class="w-20" size="small"/> <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 v-else class="button-new-tag" size="small" @click="addItem">
@ -58,10 +66,6 @@ import { SearchTable } from '@/components/SearchTable'
import { DocumentType} from "@/views/eam/documentType/documentType.data"; import { DocumentType} from "@/views/eam/documentType/documentType.data";
import * as documentTypeItemApi from "@/api/eam/documentType"; import * as documentTypeItemApi from "@/api/eam/documentType";
import {ElInput} from "element-plus"; import {ElInput} from "element-plus";
import {
createDocumentTypeSelectSet,
DocumentTypeSelectSetVO, updateDocumentTypeSelectSet
} from "@/api/eam/documentTypeSelectSet";
defineOptions({ name: 'TeamForm' }) defineOptions({ name: 'TeamForm' })
@ -79,6 +83,11 @@ const inputVisible = ref(false)
const isDisabled = ref(false) const isDisabled = ref(false)
const InputRef = ref<InstanceType<typeof ElInput>>() const InputRef = ref<InstanceType<typeof ElInput>>()
const options = [
{ value: 'DEVICE', text: '设备' },
{ value: 'EQUIPMENT', text: '工装' },
];
const itemData = ref({ const itemData = ref({
id: '', id: '',
code: '' code: ''
@ -156,10 +165,10 @@ const searchTableSuccess = (formField, searchField, val, formRef, type, row ) =>
if (formField === 'wenDangItem') { if (formField === 'wenDangItem') {
console.log(val) console.log(val)
val.forEach(item => { val.forEach(item => {
const isExist = tags.value.some(tag => tag.code === item.code); const isExist = tags.value.some(tag => tag.name === item.name);
if (!isExist){ if (!isExist){
const newItem = {}; const newItem = {};
newItem['code'] = item.code; newItem['name'] = item.name;
newItem['id'] = item.id; newItem['id'] = item.id;
tags.value.push(newItem); tags.value.push(newItem);
} }

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

@ -0,0 +1,318 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime'
// 表单校验
export const EquipmentMaintenanceMainRules = reactive({
number: [required],
equipmentCode: [required],
planNumber: [required],
status: [required],
factoryAreaCode: [required],
concurrencyStamp: [required],
})
export const EquipmentMaintenanceMain = useCrudSchemas(reactive<CrudSchema[]>([
{
label: 'id',
field: 'id',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '保养工单编号',
field: 'number',
sort: 'custom',
isSearch: true,
},
{
label: '描述',
field: 'describing',
sort: 'custom',
isSearch: true,
},
{
label: '设备编号',
field: 'equipmentCode',
sort: 'custom',
isSearch: true,
},
{
label: '设备分类',
field: 'type',
sort: 'custom',
isSearch: true,
},
{
label: '班次枚举',
field: 'classes',
sort: 'custom',
isSearch: true,
},
{
label: '保养计划工单号',
field: 'planNumber',
sort: 'custom',
isSearch: true,
},
{
label: '故障类型枚举',
field: 'faultType',
sort: 'custom',
isSearch: true,
},
{
label: '保养周期',
field: 'cycle',
sort: 'custom',
isSearch: true,
},
{
label: '保养次数',
field: 'times',
sort: 'custom',
isSearch: true,
},
{
label: '验证人',
field: 'verifyer',
sort: 'custom',
isSearch: true,
form: {
component: 'InputNumber',
value: 0
},
},
{
label: '验证内容',
field: 'verifyContent',
sort: 'custom',
isSearch: true,
form: {
component: 'Editor',
componentProps: {
valueHtml: '',
height: 200
}
},
},
{
label: '验证时间',
field: 'verifyTime',
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: '保养人id',
field: 'maintenancer',
sort: 'custom',
isSearch: true,
form: {
component: 'InputNumber',
value: 0
},
},
{
label: '保养人联系电话',
field: 'maintenancePhone',
sort: 'custom',
isSearch: true,
},
{
label: '结果枚举临时措施、完成',
field: 'completeResult',
sort: 'custom',
isSearch: true,
},
{
label: '完成时间',
field: 'completionTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
valueFormat: 'x'
}
},
},
{
label: '保养时间',
field: '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: '流程状态枚举',
field: 'status',
sort: 'custom',
isSearch: true,
form: {
component: 'Radio'
},
},
{
label: '所属厂区编号',
field: 'factoryAreaCode',
sort: 'custom',
isSearch: true,
},
{
label: '车间编号',
field: 'workshopCode',
sort: 'custom',
isSearch: true,
},
{
label: '工段编号',
field: 'workshopSectionCode',
sort: 'custom',
isSearch: true,
},
{
label: '创建时间',
field: 'createTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
isForm: false,
},
{
label: '部门id',
field: 'departmentCode',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '备注',
field: 'remark',
sort: 'custom',
isSearch: true,
},
{
label: '地点ID',
field: 'siteId',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '是否可用默认TRUE',
field: 'available',
sort: 'custom',
isSearch: true,
},
{
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',
isForm: false,
table: {
width: 150,
fixed: 'right'
}
}
]))

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

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

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

@ -0,0 +1,326 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<Search :schema="Maintenance.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
</ContentWrap>
<!-- 列表头部 -->
<TableHead
:HeadButttondata="HeadButttondata"
@button-base-click="buttonBaseClick"
:routeName="routeName"
@updataTableColumns="updataTableColumns"
@searchFormClick="searchFormClick"
:allSchemas="Maintenance.allSchemas"
/>
<!-- 列表 -->
<ContentWrap>
<Table
:columns="tableColumns"
:data="tableObject.tableList"
:loading="tableObject.loading"
:pagination="{
total: tableObject.total
}"
v-model:pageSize="tableObject.pageSize"
v-model:currentPage="tableObject.currentPage"
v-model:sort="tableObject.sort"
>
<template #number="{row}">
<el-button type="primary" link @click="openDetail(row, '代码', row.number)">
<span>{{ row.number }}</span>
</el-button>
</template>
<template #action="{ row }">
<ButtonBase :Butttondata="butttondata(row)" @button-base-click="buttonTableClick($event,row)" />
</template>
</Table>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<BasicForm
ref="basicFormRef"
@success="formsSuccess"
:rules="MaintenanceRules"
:formAllSchemas="Maintenance.allSchemas"
:apiUpdate="MaintenanceApi.updateMaintenance"
:apiCreate="MaintenanceApi.createMaintenance"
@searchTableSuccess="searchTableSuccess"
:isBusiness="false"
@onChange="onChange"
/>
<!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="Maintenance.allSchemas" />
<!-- 导入 -->
<ImportForm ref="importFormRef" url="/eam/maintenance/import" :importTemplateData="importTemplateData" @success="importSuccess" />
</template>
<script setup lang="ts">
import download from '@/utils/download'
import { Maintenance,MaintenanceRules } from './maintenance.data'
import * as MaintenanceApi from '@/api/eam/maintenance'
import * as defaultButtons from '@/utils/disposition/defaultButtons'
import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
import Detail from '@/components/Detail/src/Detail.vue'
import * as BasicInspectionOptionApi from "@/api/eam/basicInspectionOption";
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: 'Maintenance' })
const message = useMessage() //
const { t } = useI18n() //
const route = useRoute() //
const routeName = ref()
routeName.value = route.name
const tableColumns = ref(Maintenance.allSchemas.tableColumns)
//
const searchTableSuccess = (formField, searchField, val, formRef) => {
nextTick(() => {
const setV = {}
setV[formField] = val[0][searchField]
formRef.setValues(setV)
})
}
//
const updataTableColumns = (val) => {
tableColumns.value = val
}
const { tableObject, tableMethods } = useTable({
getListApi: MaintenanceApi.getMaintenancePage //
})
//
const { getList, setSearchParams } = tableMethods
//
const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'eam:maintenance:create'}), //
// defaultButtons.defaultImportBtn({hasPermi:'eam:maintenance:import'}), //
// defaultButtons.defaultExportBtn({hasPermi:'eam:maintenance:export'}), //
defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), //
// {
// label: '',
// name: 'zdy',
// hide: false,
// type: 'primary',
// icon: 'Select',
// color: ''
// },
]
//
const buttonBaseClick = (val, item) => {
if (val == 'add') { //
openForm('create')
} else if (val == 'import') { //
handleImport()
} else if (val == 'export') { //
handleExport()
} else if (val == 'refresh') { //
getList()
} else if (val == 'filtrate') { //
} else { //
console.log('其他按钮', item)
}
}
const isShowMainButton = (row,val) => {
if (val.indexOf(row.available) > -1) {
return false
} else {
return true
}
}
// -
const butttondata = (row) => {
return [
defaultButtons.mainListEditBtn({hasPermi:'eam:maintenance:update'}), //
//defaultButtons.mainListDeleteBtn({hasPermi:'eam:basicInspectionOption:delete'}), //
defaultButtons.mainListEnableBtn({hide:isShowMainButton(row,['FALSE']),hasPermi:'eam:maintenance:update'}),
defaultButtons.mainListDisableBtn({hide:isShowMainButton(row,['TRUE']),hasPermi:'eam:maintenance:update'}),
]
}
// -
const buttonTableClick = async (val, row) => {
if (val == 'edit') { //
openForm('update', row)
} else if (val == 'delete') { //
handleDelete(row.id)
} else if (val == 'enable') {
handleEnable(row.id)
} else if (val == 'disable') {
handleDisable(row.id)
}
}
/** 添加/修改操作 */
const basicFormRef = ref()
const openForm = (type: string, row?: any) => {
basicFormRef.value.open(type, row)
}
// form
const formsSuccess = async (formType,data) => {
var isHave =Maintenance.allSchemas.formSchema.some(function (item) {
return item.field === 'activeTime' || item.field === 'expireTime';
});
if(isHave){
if(data.activeTime && data.expireTime && data.activeTime >=data.expireTime){
message.error('失效时间要大于生效时间')
return;
}
}
if(data.activeTime==0)data.activeTime = null;
if(data.expireTime==0)data.expireTime = null;
if (formType === 'create') {
await MaintenanceApi.createMaintenance(data)
message.success(t('common.createSuccess'))
} else {
await MaintenanceApi.updateMaintenance(data)
message.success(t('common.updateSuccess'))
}
basicFormRef.value.dialogVisible = false
getList()
}
/** 详情操作 */
const detailRef = ref()
const openDetail = (row: any, titleName: any, titleValue: any) => {
detailRef.value.openDetail(row, titleName, titleValue, 'basicMaintenance')
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await MaintenanceApi.deleteMaintenance(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 启用 */
const handleEnable = async (id: number) => {
try {
const params = ref({
id: '',
available:'',
})
params.value.id = id
params.value.available = 'TRUE'
await MaintenanceApi.updateEnableCode(params.value)
message.success(t('common.updateSuccess'))
//
await getList()
} catch {}
}
/** 禁用 */
const handleDisable = async (id: number) => {
try {
const params = ref({
id: '',
available:'',
})
params.value.id = id
params.value.available = 'FALSE'
await MaintenanceApi.updateEnableCode(params.value)
message.success(t('common.updateSuccess'))
//
await getList()
} catch {}
}
const onChange = (field, item) => {
console.log(field)
console.log(item)
//
if(field == 'type' && item == 'DEVICE'){
Maintenance.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'){
Maintenance.allSchemas.formSchema.forEach((items) => {
if (items.field == 'equipmentCode') {
basicFormRef.value.formRef.setValues({
equipmentCode:''
})
items.componentProps.searchAllSchemas = ToolAccounts.allSchemas
items.componentProps.searchPage = ToolItemApi.getToolAccountsPage
}
})
}
}
/** 导出按钮操作 */
const exportLoading = ref(false) //
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await MaintenanceApi.exportMaintenance(tableObject.params)
download.excel(data, '保养计划.xlsx')
} catch {
} finally {
exportLoading.value = false
}
}
/** 导入 */
const importFormRef = ref()
const handleImport = () => {
importFormRef.value.open()
}
//
const importTemplateData = reactive({
templateUrl: '',
templateTitle: '保养计划导入模版.xlsx'
})
//
const importSuccess = () => {
getList()
}
//
const searchFormClick = (searchData) => {
tableObject.params = {
isSearch: true,
filters: searchData.filters
}
getList() //
}
/** 初始化 **/
onMounted(async () => {
getList()
})
</script>

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

@ -0,0 +1,322 @@
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";
// 表单校验
export const MaintenanceRules = reactive({
number: [required],
name: [required],
equipmentCode: [required],
optionCode: [required],
cycle: [required],
startTime: [required],
endTime: [required],
})
export const Maintenance = useCrudSchemas(reactive<CrudSchema[]>([
{
label: 'id',
field: 'id',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '计划编号',
field: 'number',
sort: 'custom',
isSearch: true,
},
{
label: '计划名称',
field: 'name',
sort: 'custom',
isSearch: true,
},
{
label: '设备类别',
field: 'type',
dictType: DICT_TYPE.DEVICE_TYPE,
dictClass: 'string',
sort: 'custom',
isSearch: true,
},
{
label: '设备工装编号',
field: 'equipmentCode',
sort: 'custom',
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: '方案编号',
field: 'optionCode',
sort: 'custom',
isSearch: true,
},
{
label: '周期',
field: 'cycle',
dictType: DICT_TYPE.MAINTENANCE_CYCLE,
dictClass: 'string',
sort: 'custom',
isSearch: true,
},
{
label: '计划开始时间',
field: 'startTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
valueFormat: 'x'
}
},
},
{
label: '计划结束时间',
field: 'endTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
valueFormat: 'x'
}
},
},
{
label: '状态',
field: 'status',
sort: 'custom',
isSearch: true,
},
{
label: '审核人',
field: 'approver',
sort: 'custom',
isSearch: true,
},
{
label: '审核内容',
field: 'approveContent',
sort: 'custom',
isSearch: true,
form: {
component: 'Editor',
componentProps: {
valueHtml: '',
height: 200
}
},
},
{
label: '审核时间',
field: 'approveTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
valueFormat: 'x'
}
},
},
{
label: '自动审核',
field: 'autoExamine',
sort: 'custom',
isSearch: true,
},
{
label: '自动通过',
field: 'autoAgree',
sort: 'custom',
isSearch: true,
},
{
label: '直接生成记录',
field: 'directCreateRecord',
sort: 'custom',
isSearch: true,
},
{
label: '所属厂区编号',
field: 'factoryAreaCode',
sort: 'custom',
isSearch: true,
},
{
label: '车间编号',
field: 'workshopCode',
sort: 'custom',
isSearch: true,
},
{
label: '工段编号',
field: 'workshopSectionCode',
sort: 'custom',
isSearch: true,
},
{
label: '创建时间',
field: 'createTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
isForm: false,
},
{
label: '部门id',
field: 'departmentCode',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '备注',
field: 'remark',
sort: 'custom',
isSearch: true,
},
{
label: '地点ID',
field: 'siteId',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '是否可用',
field: 'available',
sort: 'custom',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isTable: true,
isDetail: false,
isSearch: true,
isTableForm: false,
isForm: 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',
isForm: false,
table: {
width: 150,
fixed: 'right'
}
}
]))

9
src/views/eam/maintenanceItem/maintenanceItem.data.ts

@ -1,5 +1,4 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas' import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime'
import { handleTreeToComponentOptions } from '@/utils/tree' import { handleTreeToComponentOptions } from '@/utils/tree'
import * as DeptApi from '@/api/system/dept' import * as DeptApi from '@/api/system/dept'
const deptList = ref<Tree[]>([]) // 树形结构 const deptList = ref<Tree[]>([]) // 树形结构
@ -27,7 +26,13 @@ export const MaintenanceItem = useCrudSchemas(reactive<CrudSchema[]>([
}, },
}, },
{ {
label: '保养内容', label: '保养名称',
field: 'name',
sort: 'custom',
isSearch: true
},
{
label: '保养要求',
field: 'content', field: 'content',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,

4
src/views/eam/sparePart/index.vue

@ -54,7 +54,7 @@
<Detail ref="detailRef" :isBasic="true" :allSchemas="SparePart.allSchemas" /> <Detail ref="detailRef" :isBasic="true" :allSchemas="SparePart.allSchemas" />
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/eam/sparepart/spare-part/import" :importTemplateData="importTemplateData" @success="importSuccess" /> <ImportForm ref="importFormRef" url="/eam/basic/spare-part/import" :importTemplateData="importTemplateData" @success="importSuccess" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -134,7 +134,7 @@ const buttonBaseClick = (val, item) => {
// - // -
const butttondata = [ const butttondata = [
defaultButtons.mainListEditBtn({hasPermi:'eam:spare-part:update'}), // defaultButtons.mainListEditBtn({hasPermi:'eam:spare-part:update'}), //
// defaultButtons.mainListDeleteBtn({hasPermi:'eam:spare-part:delete'}), // //defaultButtons.mainListDeleteBtn({hasPermi:'eam:sparePart:delete'}), //
] ]
// - // -

215
src/views/eam/sparePart/sparePart.data.ts

@ -1,5 +1,6 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas' import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import * as ConfigApi from '@/api/infra/config' import * as ConfigApi from '@/api/infra/config'
const autoCodeSwitch = await ConfigApi.getConfigKey('sparePartCodeAutoSwitch') const autoCodeSwitch = await ConfigApi.getConfigKey('sparePartCodeAutoSwitch')
const autoSwitch = ref(false) const autoSwitch = ref(false)
@ -12,11 +13,20 @@ export const SparePartRules = reactive({
code: [required], code: [required],
name: [required], name: [required],
isOverall: [required], isOverall: [required],
images: [required],
uom: [required], uom: [required],
concurrencyStamp: [required]
}) })
export const SparePart = useCrudSchemas(reactive<CrudSchema[]>([ export const SparePart = useCrudSchemas(reactive<CrudSchema[]>([
{
label: 'id',
field: 'id',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{ {
label: '备件编号', label: '备件编号',
field: 'code', field: 'code',
@ -29,19 +39,19 @@ export const SparePart = useCrudSchemas(reactive<CrudSchema[]>([
label: '名称', label: '名称',
field: 'name', field: 'name',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: true,
}, },
{ {
label: '品牌', label: '品牌',
field: 'brand', field: 'brand',
sort: 'custom', sort: 'custom',
isSearch: false isSearch: true,
}, },
{ {
label: '规格型号', label: '规格型号',
field: 'specifications', field: 'specifications',
sort: 'custom', sort: 'custom',
isSearch: false isSearch: true,
}, },
{ {
label: '是否全局', label: '是否全局',
@ -59,22 +69,6 @@ export const SparePart = useCrudSchemas(reactive<CrudSchema[]>([
} }
} }
}, },
{
label: '是否存储',
field: 'isConstant',
sort: 'custom',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: true,
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
}
},
{ {
label: '科目', label: '科目',
field: 'subject', field: 'subject',
@ -90,13 +84,19 @@ export const SparePart = useCrudSchemas(reactive<CrudSchema[]>([
label: '科目代码', label: '科目代码',
field: 'subjectCode', field: 'subjectCode',
sort: 'custom', sort: 'custom',
isSearch: false isSearch: true,
}, },
{ {
label: '类别', label: '类别',
field: 'category', field: 'type',
sort: 'custom',
isSearch: true,
},
{
label: '图片',
field: 'images',
sort: 'custom', sort: 'custom',
isSearch: false isSearch: false,
}, },
{ {
label: '区域', label: '区域',
@ -104,7 +104,7 @@ export const SparePart = useCrudSchemas(reactive<CrudSchema[]>([
sort: 'custom', sort: 'custom',
dictType: DICT_TYPE.REGION, dictType: DICT_TYPE.REGION,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑 dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: false, isSearch: true,
form: { form: {
component: 'Select' component: 'Select'
} }
@ -121,71 +121,126 @@ export const SparePart = useCrudSchemas(reactive<CrudSchema[]>([
} }
}, },
{ {
label: '单位', label: '计量单位字典',
field: 'uom', field: 'uom',
sort: 'custom', sort: 'custom',
isSearch: false dictType: DICT_TYPE.UOM,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: true,
}, },
{ {
label: '单价', label: '单价',
field: 'singlePrice', field: 'singlePrice',
sort: 'custom', sort: 'custom',
isSearch: false isSearch: true,
form: {
component: 'InputNumber',
value: 0
},
}, },
{ {
label: '库龄', label: '生产厂家字符',
field: 'stockAge', field: 'manufacturer',
sort: 'custom', sort: 'custom',
isSearch: false, isSearch: true,
},
{
label: '库存下限',
field: 'minInventory',
sort: 'custom',
isSearch: true,
form: { form: {
component: 'InputNumber', component: 'InputNumber',
value: 0 value: 0
} },
}, },
{ {
label: '重采购点', label: '库存上限',
field: 'reprocurement', field: 'maxInventory',
sort: 'custom', sort: 'custom',
isSearch: false, isSearch: true,
form: { form: {
component: 'InputNumber', component: 'InputNumber',
value: 0 value: 0
} },
}, },
{ {
label: '安全库存', label: '更换周期',
field: 'safetyStock', field: 'replacementCycle',
sort: 'custom', sort: 'custom',
isSearch: false, isSearch: true,
form: { form: {
component: 'InputNumber', component: 'InputNumber',
value: 0 value: 0
} },
},
{
label: '存放位置描述',
field: 'storageLocation',
sort: 'custom',
isSearch: false,
},
{
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: '成本中心', label: '部门id',
field: 'cost', field: 'departmentCode',
sort: 'custom', sort: 'custom',
isSearch: false isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
}, },
{ {
label: '采购员', label: '备注',
field: 'purchaser', field: 'remark',
sort: 'custom', sort: 'custom',
isSearch: false isSearch: false,
}, },
{ {
label: '财务', label: '地点ID',
field: 'financer', field: 'siteId',
sort: 'custom', sort: 'custom',
isSearch: false isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
}, },
{ {
label: '采购时间', label: '是否可用默认TRUE',
field: 'purchaseTime', field: 'available',
sort: 'custom',
isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
},
{
label: '删除时间',
field: 'deletionTime',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter,
isSearch: false, isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -200,57 +255,29 @@ export const SparePart = useCrudSchemas(reactive<CrudSchema[]>([
type: 'datetime', type: 'datetime',
valueFormat: 'x' valueFormat: 'x'
} }
} },
},
{
label: '是否框架协议',
field: 'isFramework',
sort: 'custom',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: true,
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
}
},
{
label: '是否以旧换新',
field: 'isRadeIn',
sort: 'custom',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isSearch: true,
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
}
}, },
{ {
label: '备注', label: '删除人id',
field: 'remark', field: 'deleterId',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: false,
isTable: false,
isForm: false,
isDetail:false,
}, },
{ {
label: '是否可用', label: '并发乐观锁',
field: 'available', field: 'concurrencyStamp',
sort: 'custom', sort: 'custom',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', // 默认都是字符串类型其他暂不考虑
isTable: true,
isDetail: false,
isForm: false,
isSearch: false, isSearch: false,
isTableForm: false, isTable: false,
isForm: false,
isDetail:false,
form: {
component: 'InputNumber',
value: 0
},
}, },
{ {
label: '操作', label: '操作',

2
src/views/login/components/LoginForm.vue

@ -15,7 +15,7 @@
<el-option <el-option
v-for="item in tenantArray" v-for="item in tenantArray"
:key="item" :key="item"
:label="item" :label="t(`ts.${item}`).replace('ts.','')"
:value="item" :value="item"
/> />
</el-select> </el-select>

12
src/views/login/forgetPassword.vue

@ -1,22 +1,22 @@
<template> <template>
<div v-loading="loading" class="box"> <div v-loading="loading" class="box">
<el-form ref="formSmsLogin" :model="loginData" :rules="rules" label-width="130px" label-position="top" size="large"> <el-form ref="formSmsLogin" :model="loginData" :rules="rules" label-width="130px" label-position="top" size="large">
<div class="title">忘记密码</div> <div class="title">{{ t('ts.忘记密码') }}</div>
<el-row type="flex" justify="center" align="middle"> <el-row type="flex" justify="center" align="middle">
<el-col> <el-col>
<el-form-item label="用户名" prop="username" align="center"> <el-form-item :label="t('ts.用户名')" prop="username" align="center">
<el-input v-model="loginData.username" placeholder="请输入用户名" /> <el-input v-model="loginData.username" :placeholder="t('ts.请输入用户名')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col> <el-col>
<el-form-item label="邮箱" prop="email"> <el-form-item :label="t('ts.邮箱')" prop="email">
<el-input v-model="loginData.email" placeholder="请输入邮箱" /> <el-input v-model="loginData.email" :placeholder="t('ts.请输入邮箱')" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button type="primary" @click="submitForm" style="width: 100%;height: 40px;line-height: 40px;"> </el-button> <el-button type="primary" @click="submitForm" style="width: 100%;height: 40px;line-height: 40px;">{{t('ts.确 定')}}</el-button>
</div> </div>
</div> </div>
</template> </template>

4
src/views/login/login.vue

@ -10,7 +10,7 @@
<!-- 左上角的 logo + 系统标题 --> <!-- 左上角的 logo + 系统标题 -->
<div class="relative flex items-center "> <div class="relative flex items-center ">
<img alt="" class="mr-10px w-144px h-36px" src="@/assets/imgs/logo_white.png" /> <img alt="" class="mr-10px w-144px h-36px" src="@/assets/imgs/logo_white.png" />
<span class="text-20px font-bold">{{ underlineToHump(appStore.getTitle) }}</span> <span class="text-20px font-bold">{{ t(`ts.${underlineToHump(appStore.getTitle)}`) }}</span>
</div> </div>
<!-- 左边的背景图 + 欢迎语 --> <!-- 左边的背景图 + 欢迎语 -->
<div class="h-[calc(100%-60px)] flex items-center justify-center"> <div class="h-[calc(100%-60px)] flex items-center justify-center">
@ -34,7 +34,7 @@
> >
<div class="flex items-center at-2xl:hidden at-xl:hidden"> <div class="flex items-center at-2xl:hidden at-xl:hidden">
<img alt="" class="mr-10px w-144px h-36px" src="@/assets/imgs/logo_white.png" /> <img alt="" class="mr-10px w-144px h-36px" src="@/assets/imgs/logo_white.png" />
<span class="text-20px font-bold">{{ underlineToHump(appStore.getTitle) }}</span> <span class="text-20px font-bold">{{ t(`ts.${underlineToHump(appStore.getTitle)}`) }}</span>
</div> </div>
<div class="flex items-center justify-end space-x-10px"> <div class="flex items-center justify-end space-x-10px">
<!-- <ThemeSwitch /> --> <!-- <ThemeSwitch /> -->

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

@ -74,7 +74,6 @@ export const DismantlingMain = 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')]
} }
}, },
isForm: false,
}, },
{ {
label: '删除用户名', label: '删除用户名',

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

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

24
src/views/mes/holiday/holiday.data.ts

@ -1,8 +1,17 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas' import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter, dateFormatter2 } from '@/utils/formatTime'
// 表单校验 // 表单校验
export const HolidayRules = reactive({ export const HolidayRules = reactive({
holidayName: [
{ required: true, message: '请输入节日名称', trigger: 'blur' }
],
holidayType: [
{ required: true, message: '请输入节日类型', trigger: 'blur' }
],
holidayDate: [
{ required: true, message: '请输入节日日期', trigger: 'blur' }
],
}) })
export const Holiday = useCrudSchemas(reactive<CrudSchema[]>([ export const Holiday = useCrudSchemas(reactive<CrudSchema[]>([
@ -10,7 +19,9 @@ export const Holiday = useCrudSchemas(reactive<CrudSchema[]>([
label: '主键', label: '主键',
field: 'id', field: 'id',
sort: 'custom', sort: 'custom',
isForm: false, isSearch: false,
isTable:false,
isForm:false
}, },
@ -56,13 +67,13 @@ export const Holiday = useCrudSchemas(reactive<CrudSchema[]>([
label: '节日日期', label: '节日日期',
field: 'holidayDate', field: 'holidayDate',
sort: 'custom', sort: 'custom',
formatter: dateFormatter, formatter: dateFormatter2,
isSearch: true, isSearch: true,
search: { search: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
type: 'date', type: 'date',
valueFormat: 'YYYY-MM-DD', valueFormat: 'YYYY-MM-DD 00:00:00',
} }
}, },
form: { form: {
@ -72,12 +83,13 @@ export const Holiday = useCrudSchemas(reactive<CrudSchema[]>([
valueFormat: 'x' valueFormat: 'x'
} }
}, },
}, },
{ {
label: '状态', label: '状态',
field: 'status', field: 'status',
sort: 'custom', sort: 'custom',
dictType: DICT_TYPE.QUALIFY_STATUS, dictType: DICT_TYPE.COMMON_STATUS,
dictClass: 'string', dictClass: 'string',
isForm: true, isForm: true,
isSearch: false, isSearch: false,
@ -86,7 +98,7 @@ export const Holiday = useCrudSchemas(reactive<CrudSchema[]>([
component: 'Switch', component: 'Switch',
value: '1', value: '1',
componentProps: { componentProps: {
inactiveValue: '2', inactiveValue: '0',
activeValue: '1' activeValue: '1'
} }
}, },

6
src/views/mes/hrPersonAbility/hrPersonAbility.data.ts

@ -123,10 +123,11 @@ export const HrPersonAbility = useCrudSchemas(reactive<CrudSchema[]>([
searchTitle: '人员信息', // 查询弹窗标题 searchTitle: '人员信息', // 查询弹窗标题
searchAllSchemas: searchUser.allSchemas, // 查询弹窗所需类 searchAllSchemas: searchUser.allSchemas, // 查询弹窗所需类
searchField: 'username', // 查询弹窗赋值字段 searchField: 'username', // 查询弹窗赋值字段
searchListPlaceholder: '请选择 人员工号', // 输入框占位文本
searchPage: UserApi.getUserPage, // 查询弹窗所需分页方法 searchPage: UserApi.getUserPage, // 查询弹窗所需分页方法
searchCondition: [{ searchCondition: [{
action: "==", action: '==',
column: 'userType', key: 'userType',
value: 'WORKER' value: 'WORKER'
}] }]
} }
@ -141,6 +142,7 @@ export const HrPersonAbility = useCrudSchemas(reactive<CrudSchema[]>([
componentProps: { componentProps: {
isSearchList: true, // 开启查询弹窗 isSearchList: true, // 开启查询弹窗
searchTitle: '能力矩阵信息', // 查询弹窗标题 searchTitle: '能力矩阵信息', // 查询弹窗标题
searchListPlaceholder: '请选择 能力编号', // 输入框占位文本
searchAllSchemas: AbilityInfo.allSchemas, // 查询弹窗所需类 searchAllSchemas: AbilityInfo.allSchemas, // 查询弹窗所需类
searchField: 'ablityCode', // 查询弹窗赋值字段 searchField: 'ablityCode', // 查询弹窗赋值字段
searchPage: AbilityInfoApi.getAbilityInfoPage, // 查询弹窗所需分页方法 searchPage: AbilityInfoApi.getAbilityInfoPage, // 查询弹窗所需分页方法

39
src/views/mes/item/index.vue

@ -81,7 +81,11 @@ const tableColumns = ref(Item.allSchemas.tableColumns)
const searchTableSuccess = (formField, searchField, val, formRef) => { const searchTableSuccess = (formField, searchField, val, formRef) => {
nextTick(() => { nextTick(() => {
const setV = {} const setV = {}
//console.log("item-search-success-84-val",val)
//console.log("item-search-success-84-formField",formField)
setV[formField] = val[0][searchField] setV[formField] = val[0][searchField]
setV["itemType"] = val[0]["groupCode"]
//setV[] = val[0][searchField]
formRef.setValues(setV) formRef.setValues(setV)
}) })
} }
@ -152,7 +156,7 @@ const basicFormRef = ref()
const openForm = (type: string, row?: any) => { const openForm = (type: string, row?: any) => {
if(type == "update"){ if(type == "update"){
Item.allSchemas.formSchema.forEach((item) => { Item.allSchemas.formSchema.forEach((item) => {
if (item.field == 'itemCode') { if (item.field == 'itemCode') {
item.componentProps.disabled = true item.componentProps.disabled = true
} }
@ -168,7 +172,7 @@ const openForm = (type: string, row?: any) => {
item.componentProps.disabled = false item.componentProps.disabled = false
} }
} }
if(row.dataType == 'SWITCH'){ if(row.dataType == 'SWITCH'){
if (item.field == 'dataVerify') { if (item.field == 'dataVerify') {
item.componentProps.disabled = true item.componentProps.disabled = true
@ -177,7 +181,7 @@ const openForm = (type: string, row?: any) => {
item.componentProps.disabled = true item.componentProps.disabled = true
} }
} }
if(row.dataType == 'TEXT'){ if(row.dataType == 'TEXT'){
if (item.field == 'dataVerify') { if (item.field == 'dataVerify') {
item.componentProps.disabled = true item.componentProps.disabled = true
@ -186,8 +190,8 @@ const openForm = (type: string, row?: any) => {
item.componentProps.disabled = true item.componentProps.disabled = true
} }
} }
}) })
}else{ }else{
Item.allSchemas.formSchema.forEach((item) => { Item.allSchemas.formSchema.forEach((item) => {
if (item.field == 'itemCode') { if (item.field == 'itemCode') {
@ -202,9 +206,12 @@ const openForm = (type: string, row?: any) => {
if (item.field == 'dataStandvalue') { if (item.field == 'dataStandvalue') {
item.componentProps.disabled = false item.componentProps.disabled = false
} }
if (item.field == 'status') {
item.componentProps.disabled = true
}
}) })
} }
basicFormRef.value.open(type, row) basicFormRef.value.open(type, row)
} }
@ -293,9 +300,9 @@ const searchFormClick = (searchData) => {
// //
const onChangeQG = (field, cur, item) => { const onChangeQG = (field, cur, item) => {
console.log('cur'+cur) console.log('cur'+cur)
Item.allSchemas.formSchema.forEach((item) => { Item.allSchemas.formSchema.forEach((item) => {
if(cur == 'SWITCH'){ if(cur == 'SWITCH'){
if (item.field == 'dataVerify') { if (item.field == 'dataVerify') {
@ -306,8 +313,8 @@ const onChangeQG = (field, cur, item) => {
} }
if (item.field == 'status') { if (item.field == 'status') {
item.componentProps.disabled = false item.componentProps.disabled = false
} }
} }
if(cur == 'TEXT'){ if(cur == 'TEXT'){
if (item.field == 'dataVerify') { if (item.field == 'dataVerify') {
item.componentProps.disabled = true item.componentProps.disabled = true
@ -317,7 +324,7 @@ const onChangeQG = (field, cur, item) => {
} }
if (item.field == 'status') { if (item.field == 'status') {
item.componentProps.disabled = true item.componentProps.disabled = true
} }
} }
if(cur == 'NUMBER'){ if(cur == 'NUMBER'){
if (item.field == 'dataVerify') { if (item.field == 'dataVerify') {
@ -328,13 +335,13 @@ const onChangeQG = (field, cur, item) => {
} }
if (item.field == 'status') { if (item.field == 'status') {
item.componentProps.disabled = true item.componentProps.disabled = true
} }
} }
}) })
} }
/** 初始化 **/ /** 初始化 **/
onMounted(async () => { onMounted(async () => {

57
src/views/mes/item/item.data.ts

@ -1,14 +1,15 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas' import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import * as QualitygroupApi from '@/api/mes/qualitygroup' import * as QualityclassApi from '@/api/mes/qualityclass'
import { Qualitygroup } from '../qualitygroup/qualitygroup.data' import { Qualityclass } from '@/views/mes/qualityclass/qualityclass.data'
// import * as QualitygroupApi from '@/api/mes/qualitygroup'
// import { Qualitygroup } from '@/views/mes/qualitygroup/qualitygroup.data'
// 表单校验 // 表单校验
export const ItemRules = reactive({ export const ItemRules = reactive({
concurrencyStamp: [required], itemCode: [{ required: true, message: '请输入项目编码', trigger: 'blur' }],
itemCode: [{ required: true, message: '请输入编码', trigger: 'blur' }], itemName: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
itemType: [required], qmsClass: [{ required: true, message: '请选择一个质检类别', trigger: 'blur' }],
dataType: [required] dataType:[{ required: true, message: '请选择一个数据类型!', trigger: 'blur' }],
}) })
export const Item = useCrudSchemas(reactive<CrudSchema[]>([ export const Item = useCrudSchemas(reactive<CrudSchema[]>([
@ -111,19 +112,40 @@ export const Item = useCrudSchemas(reactive<CrudSchema[]>([
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
// {
// label: '分组编码',
// field: 'itemType',
// sort: 'custom',
// isSearch: true,
// // form: {
// // componentProps: {
// // isSearchList: true, // 开启查询弹窗
// // searchTitle: '质检分组', // 查询弹窗标题
// // searchListPlaceholder: '请选择质检分组', // 输入框占位文本
// // searchAllSchemas: Qualitygroup.allSchemas, // 查询弹窗所需类
// // searchField: 'code', // 查询弹窗赋值字段
// // searchPage: QualitygroupApi.getQualitygroupPage, // 查询弹窗所需分页方法
// // searchCondition: [{
// // key: 'status',
// // value: '1',
// // action: '=='
// // }]
// // }
// // }
// },
{ {
label: '类别编码', label: '质检科目编码',
field: 'itemType', field: 'qmsClass',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
form: { form: {
componentProps: { componentProps: {
isSearchList: true, // 开启查询弹窗 isSearchList: true, // 开启查询弹窗
searchTitle: '质检科目信息', // 查询弹窗标题 searchTitle: '质检分组', // 查询弹窗标题
searchListPlaceholder: '请选择 类别编码', // 输入框占位文本 searchListPlaceholder: '请选择质检分组', // 输入框占位文本
searchAllSchemas: Qualitygroup.allSchemas, // 查询弹窗所需类 searchAllSchemas: Qualityclass.allSchemas, // 查询弹窗所需类
searchField: 'code', // 查询弹窗赋值字段 searchField: 'code', // 查询弹窗赋值字段
searchPage: QualitygroupApi.getQualitygroupPage, // 查询弹窗所需分页方法 searchPage: QualityclassApi.getQualityclassPage, // 查询弹窗所需分页方法
searchCondition: [{ searchCondition: [{
key: 'status', key: 'status',
value: '1', value: '1',
@ -132,13 +154,6 @@ export const Item = useCrudSchemas(reactive<CrudSchema[]>([
} }
} }
}, },
{
label: '质检科目编码',
field: 'qmsClass',
sort: 'custom',
isSearch: true,
},
{ {
label: '数据类型', label: '数据类型',
field: 'dataType', field: 'dataType',
@ -187,7 +202,7 @@ export const Item = useCrudSchemas(reactive<CrudSchema[]>([
isForm: true, isForm: true,
form: { form: {
component: 'Switch', component: 'Switch',
value: '2', value: '1',
componentProps: { componentProps: {
inactiveValue: '2', inactiveValue: '2',
activeValue: '1' activeValue: '1'

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

@ -226,8 +226,6 @@ import { Graph } from '@antv/x6'
import * as TeamApi from '@/api/wms/team' import * as TeamApi from '@/api/wms/team'
import {searchUser} from "@/views/wms/basicDataManage/orderManage/team/team.data"; import {searchUser} from "@/views/wms/basicDataManage/orderManage/team/team.data";
import {getStrDictOptions} from "@/utils/dict"; import {getStrDictOptions} from "@/utils/dict";
import {Equipment} from "@/views/mes/workstation/workstation.data";
import * as WorkstationApi from "@/api/mes/workstation";
import {DeviceInfo, OrderDay} from "@/views/mes/orderDay/orderDay.data"; import {DeviceInfo, OrderDay} from "@/views/mes/orderDay/orderDay.data";
//import {TableForm} from '@/components/TableForm/src/TableForm.vue' // TableForm.vue //import {TableForm} from '@/components/TableForm/src/TableForm.vue' // TableForm.vue
const graphContainer = ref<HTMLElement | null>(null) const graphContainer = ref<HTMLElement | null>(null)
@ -651,6 +649,7 @@ const handleConfirm = (row)=>{
// //
_searchCondition.isSearch = true _searchCondition.isSearch = true
_searchCondition.filters = filters _searchCondition.filters = filters
searchTableRef.value.open( searchTableRef.value.open(
'添加人员',// '添加人员',//
searchUser.allSchemas, searchUser.allSchemas,
@ -662,6 +661,7 @@ const handleConfirm = (row)=>{
undefined, undefined,
_searchCondition _searchCondition
) )
searchTableRef.value.hiddenFilterButton()
} }

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

@ -200,7 +200,7 @@ const buttonBaseClick = (val, item) => {
} }
} }
const publishClosed=(val)=>{ const publishClosed=(val)=>{
console.log('orderday-publishClosed-200',val) //console.log('orderday-publishClosed-200',val)
nextTick?.(()=>{ nextTick?.(()=>{
getList() getList()
}) })

15
src/views/mes/ordermonthplan/mesOrderMonthMain.data.ts

@ -46,12 +46,13 @@ export const MesOrderMonthMain = useCrudSchemas(reactive<CrudSchema[]>([
searchAllSchemas: FactoryList.allSchemas, // 查询弹窗所需类 searchAllSchemas: FactoryList.allSchemas, // 查询弹窗所需类
searchPage: TenantApi.getTenantPage, // 查询弹窗所需分页方法 searchPage: TenantApi.getTenantPage, // 查询弹窗所需分页方法
isHideFilterButton: true, isHideFilterButton: true,
searchCondition: [{ // searchCondition: [{
key: 'available', // key: 'available',
value: 'TRUE', // value: 'TRUE',
isMainValue: false // action: '==',
} // // isMainValue: false
] // }
// ]
} }
} }
}, },
@ -79,7 +80,7 @@ export const MesOrderMonthMain = useCrudSchemas(reactive<CrudSchema[]>([
isTable: false isTable: false
}, },
{ {
label: '创建者用户名', label: '创建者ID',
field: 'creator', field: 'creator',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,

6
src/views/mes/processroute/components/configDialog.vue

@ -189,6 +189,7 @@ const tableProcess = ref()
const productData = ref({ name: '', code: '', desc1: '--' }) // const productData = ref({ name: '', code: '', desc1: '--' }) //
const materialData=ref() const materialData=ref()
const mouldData = ref() const mouldData = ref()
//const bomVersion=ref()
const page=ref({ const page=ref({
total:0, total:0,
current:1, current:1,
@ -327,6 +328,7 @@ const getProcessBomList = async (pcode,processCode) => {
processCode:processCode processCode:processCode
} }
return await ProcessrouteApi.getProcessBomList(params); return await ProcessrouteApi.getProcessBomList(params);
//return await ProcessrouteApi.getBomListByProductBomAndProcess(params);
} }
/** 查询模具基本信息列表 */ /** 查询模具基本信息列表 */
const getPatternPage = async (code) => { const getPatternPage = async (code) => {
@ -363,10 +365,10 @@ const nodeClick = (e, x, y, node, view) => {
currentNode.value.name=node.attrs.title.text currentNode.value.name=node.attrs.title.text
Promise.all([ Promise.all([
getProcessInfo(node.id), getProcessInfo(node.id),
getProcessBomList(productCode.value,node.id), getProcessBomList(productCode.value,node.id),// rowData.value
getPatternPage(node.id), getPatternPage(node.id),
getWorkstationPage(node.id) getWorkstationPage(node.id)
]).then(([processInfoList,basicBom, patternPage,workstationInfoList]) => { ]).then(([processInfo,basicBom, patternPage,workstationInfoList]) => {
// //
//message.info(JSON.stringify(processIndoList)) //message.info(JSON.stringify(processIndoList))
//console.log('basicBom',basicBom) //console.log('basicBom',basicBom)

7
src/views/mes/processroute/processroute.data.ts

@ -97,6 +97,13 @@ export const Processroute = useCrudSchemas(reactive<CrudSchema[]>([
} }
} }
}, },
// {
// label: 'BOM版本号',
// field: 'BOMVersion',
// sort: 'custom',
// value: '1',
// isSearch: false,
// },
// { // {
// label: '版本号', // label: '版本号',
// field: 'routeVersion', // field: 'routeVersion',

31
src/views/mes/qualityclass/qualityclass.data.ts

@ -1,11 +1,13 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas' import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import * as QualitygroupApi from '@/api/mes/qualitygroup'
import { Qualitygroup } from '@/views/mes/qualitygroup/qualitygroup.data'
// 表单校验 // 表单校验
export const QualityclassRules = reactive({ export const QualityclassRules = reactive({
concurrencyStamp: [required],
code: [{ required: true, message: '请输入代码', trigger: 'blur' }], code: [{ required: true, message: '请输入编码', trigger: 'blur' }],
name: [required], name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
groupCode: [{ required: true, message: '请选择一个分组', trigger: 'blur' }],
}) })
export const Qualityclass = useCrudSchemas(reactive<CrudSchema[]>([ export const Qualityclass = useCrudSchemas(reactive<CrudSchema[]>([
@ -108,10 +110,27 @@ export const Qualityclass = useCrudSchemas(reactive<CrudSchema[]>([
isSearch: true, isSearch: true,
}, },
{ {
label: '分组类别', label: '分组',
field: 'groupCode', field: 'groupCode',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择一个分组', // 输入框占位文本
multiple:false,
searchField: 'code', // 查询弹窗赋值字段
searchTitle: '分组编码', // 查询弹窗标题
searchAllSchemas: Qualitygroup.allSchemas, // 查询弹窗所需类
searchPage: QualitygroupApi.getQualitygroupPage, // 查询弹窗所需分页方法
searchCondition: [{
key: 'status',
value: '1',
isMainValue: false
}]
}
}
}, },
{ {
label: '状态', label: '状态',
@ -124,7 +143,7 @@ export const Qualityclass = useCrudSchemas(reactive<CrudSchema[]>([
isTable: true, isTable: true,
form: { form: {
component: 'Switch', component: 'Switch',
value: '2', value: '1',
componentProps: { componentProps: {
inactiveValue: '2', inactiveValue: '2',
activeValue: '1' activeValue: '1'

21
src/views/mes/qualitygroup/qualitygroup.data.ts

@ -3,9 +3,8 @@ import { dateFormatter } from '@/utils/formatTime'
// 表单校验 // 表单校验
export const QualitygroupRules = reactive({ export const QualitygroupRules = reactive({
concurrencyStamp: [required], code: [{ required: true, message: '请输入编码', trigger: 'blur' }],
code: [required], name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
name: [required],
}) })
export const Qualitygroup = useCrudSchemas(reactive<CrudSchema[]>([ export const Qualitygroup = useCrudSchemas(reactive<CrudSchema[]>([
@ -102,17 +101,17 @@ export const Qualitygroup = useCrudSchemas(reactive<CrudSchema[]>([
isSearch: true, isSearch: true,
}, },
{ {
label: '编码名称', label: '分组名称',
field: 'name', field: 'name',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{ // {
label: '分组类别', // label: '分组类别',
field: 'groupCode', // field: 'groupCode',
sort: 'custom', // sort: 'custom',
isSearch: true, // isSearch: true,
}, // },
{ {
label: '状态', label: '状态',
field: 'status', field: 'status',
@ -124,7 +123,7 @@ export const Qualitygroup = useCrudSchemas(reactive<CrudSchema[]>([
isTable: true, isTable: true,
form: { form: {
component: 'Switch', component: 'Switch',
value: '2', value: '1',
componentProps: { componentProps: {
inactiveValue: '2', inactiveValue: '2',
activeValue: '1' activeValue: '1'

4
src/views/mes/reworkBatch/index.vue

@ -279,7 +279,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await ReworkBatchApi.exportReworkBatch(tableObject.params) const data = await ReworkBatchApi.exportReworkBatch(tableObject.params)
download.excel(data, '返工登记批量.xlsx') download.excel(data, '返工返修登记批量.xlsx')
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false
@ -294,7 +294,7 @@ const handleImport = () => {
// //
const importTemplateData = reactive({ const importTemplateData = reactive({
templateUrl: '', templateUrl: '',
templateTitle: '返工登记批量导入模版.xlsx' templateTitle: '返工返修登记(批量)模版.xlsx'
}) })
// //
const importSuccess = () => { const importSuccess = () => {

4
src/views/mes/reworkSingle/index.vue

@ -279,7 +279,7 @@ const handleExport = async () => {
// //
exportLoading.value = true exportLoading.value = true
const data = await ReworkSingleApi.exportReworkSingle(tableObject.params) const data = await ReworkSingleApi.exportReworkSingle(tableObject.params)
download.excel(data, '返工登记单件.xlsx') download.excel(data, '返工返修登记单件)数据.xlsx')
} catch { } catch {
} finally { } finally {
exportLoading.value = false exportLoading.value = false
@ -294,7 +294,7 @@ const handleImport = () => {
// //
const importTemplateData = reactive({ const importTemplateData = reactive({
templateUrl: '', templateUrl: '',
templateTitle: '返工登记单件导入模版.xlsx' templateTitle: '返工返修登记单件导入模版.xlsx'
}) })
// //
const importSuccess = () => { const importSuccess = () => {

10
src/views/mes/workSchedulingQaform/index.vue

@ -99,8 +99,8 @@ const { getList, setSearchParams } = tableMethods
// //
const HeadButttondata = [ const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'mes:workSchedulingQaform:create'}), // //defaultButtons.defaultAddBtn({hasPermi:'mes:workSchedulingQaform:create'}), //
defaultButtons.defaultImportBtn({hasPermi:'mes:workSchedulingQaform:import'}), // // defaultButtons.defaultImportBtn({hasPermi:'mes:workSchedulingQaform:import'}), //
defaultButtons.defaultExportBtn({hasPermi:'mes:workSchedulingQaform:export'}), // defaultButtons.defaultExportBtn({hasPermi:'mes:workSchedulingQaform:export'}), //
defaultButtons.defaultFreshBtn(null), // defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
@ -118,7 +118,7 @@ const HeadButttondata = [
// //
const buttonBaseClick = (val, item) => { const buttonBaseClick = (val, item) => {
if (val == 'add') { // if (val == 'add') { //
openForm('create') //openForm('create')
} else if (val == 'import') { // } else if (val == 'import') { //
handleImport() handleImport()
} else if (val == 'export') { // } else if (val == 'export') { //
@ -133,14 +133,14 @@ const buttonBaseClick = (val, item) => {
// - // -
const butttondata = [ const butttondata = [
defaultButtons.mainListEditBtn({hasPermi:'mes:workSchedulingQaform:update'}), // //defaultButtons.mainListEditBtn({hasPermi:'mes:workSchedulingQaform:update'}), //
defaultButtons.mainListDeleteBtn({hasPermi:'mes:workSchedulingQaform:delete'}), // defaultButtons.mainListDeleteBtn({hasPermi:'mes:workSchedulingQaform:delete'}), //
] ]
// - // -
const buttonTableClick = async (val, row) => { const buttonTableClick = async (val, row) => {
if (val == 'edit') { // if (val == 'edit') { //
openForm('update', row) //openForm('update', row)
} else if (val == 'delete') { // } else if (val == 'delete') { //
handleDelete(row.id) handleDelete(row.id)
} }

43
src/views/mes/workSchedulingQaform/workSchedulingQaform.data.ts

@ -37,6 +37,7 @@ export const WorkSchedulingQaform = useCrudSchemas(reactive<CrudSchema[]>([
field: 'id', field: 'id',
sort: 'custom', sort: 'custom',
isForm: false, isForm: false,
isTable: false,
}, },
{ {
label: '状态', label: '状态',
@ -63,22 +64,7 @@ export const WorkSchedulingQaform = useCrudSchemas(reactive<CrudSchema[]>([
value: 0 value: 0
}, },
}, },
{
label: '创建时间',
field: 'createTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
isForm: false,
},
{ {
label: '删除用户名', label: '删除用户名',
field: 'deleter', field: 'deleter',
@ -131,6 +117,22 @@ export const WorkSchedulingQaform = useCrudSchemas(reactive<CrudSchema[]>([
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
}, },
{
label: '创建时间',
field: 'createTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: true,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
isForm: false,
},
{ {
label: '检验类型', label: '检验类型',
field: 'qaFormType', field: 'qaFormType',
@ -164,7 +166,7 @@ export const WorkSchedulingQaform = useCrudSchemas(reactive<CrudSchema[]>([
label: '检测数量', label: '检测数量',
field: 'qaCount', field: 'qaCount',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
form: { form: {
component: 'InputNumber', component: 'InputNumber',
value: 0 value: 0
@ -174,7 +176,7 @@ export const WorkSchedulingQaform = useCrudSchemas(reactive<CrudSchema[]>([
label: '检测合格数量', label: '检测合格数量',
field: 'qaCountPassed', field: 'qaCountPassed',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
form: { form: {
component: 'InputNumber', component: 'InputNumber',
value: 0 value: 0
@ -184,7 +186,7 @@ export const WorkSchedulingQaform = useCrudSchemas(reactive<CrudSchema[]>([
label: '检测不合格数量', label: '检测不合格数量',
field: 'qaCountNotpassed', field: 'qaCountNotpassed',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
form: { form: {
component: 'InputNumber', component: 'InputNumber',
value: 0 value: 0
@ -194,12 +196,13 @@ export const WorkSchedulingQaform = useCrudSchemas(reactive<CrudSchema[]>([
label: '合格率', label: '合格率',
field: 'qaPassRate', field: 'qaPassRate',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: false,
}, },
{ {
label: '操作', label: '操作',
field: 'action', field: 'action',
isForm: false, isForm: false,
isTable:false,
table: { table: {
width: 150, width: 150,
fixed: 'right' fixed: 'right'

48
src/views/mes/workcalendar/index.vue

@ -59,7 +59,7 @@
</el-aside> </el-aside>
<el-main> <el-main>
<div class="calender-class"> <div class="calender-class">
<el-calendar ref="calendarMain"> <el-calendar ref="calendarMain" :key="calendarCount">
<template #header="{ date }"> <template #header="{ date }">
<span>排班日历</span> <span>排班日历</span>
<span>{{ date }}</span> <span>{{ date }}</span>
@ -151,7 +151,7 @@
<el-drawer :title="batchTitle" v-model="batchAddDrawer" size="40%"> <el-drawer :title="batchTitle" v-model="batchAddDrawer" size="40%">
<div class="demo-drawer_content"> <div class="demo-drawer_content">
<el-form v-model="batchAddForm"> <el-form v-model="batchAddForm">
<el-form-item label="排班日期:" label-width="120px"> <el-form-item label="排班日期:" >
<el-date-picker <el-date-picker
v-model="batchAddForm.batchDate" v-model="batchAddForm.batchDate"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@ -162,7 +162,7 @@
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="规则类型:" label-width="120px"> <el-form-item label="规则类型:" >
<!-- <el-button type="primary" @click="addDomain" link> <Icon icon="ep:plus" /> </el-button> --> <!-- <el-button type="primary" @click="addDomain" link> <Icon icon="ep:plus" /> </el-button> -->
<el-radio-group v-model="ruleType" @change="handleRuleType"> <el-radio-group v-model="ruleType" @change="handleRuleType">
<el-radio label="一班倒">一班倒</el-radio> <el-radio label="一班倒">一班倒</el-radio>
@ -170,7 +170,7 @@
<el-radio label="三班倒">三班倒</el-radio> <el-radio label="三班倒">三班倒</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="排除非法定休息日:" label-width="120px"> <el-form-item label="排除非法定休息日:">
<el-switch v-model="batchAddForm.excludeRestDay" /> <el-switch v-model="batchAddForm.excludeRestDay" />
</el-form-item> </el-form-item>
@ -329,7 +329,7 @@ interface Team {
name: string name: string
class: string class: string
} }
const calendarCount=ref(0)
const currentRow = ref() // const currentRow = ref() //
const handleTableCurrentChange = (val: Team) => { const handleTableCurrentChange = (val: Team) => {
currentRow.value = val currentRow.value = val
@ -414,6 +414,12 @@ watch(
} }
} }
) )
// watch(
// () => viewDate.value,
// (newVal) => {
// console.log('🚀 ~ file: workcalendar:420 ~ watch ~ viewDate:', newVal)
// }
// )
onMounted( onMounted(
async function () { async function () {
let res=await workCalendarApi.getHolidays(dayjs(currentDate.value).year()) let res=await workCalendarApi.getHolidays(dayjs(currentDate.value).year())
@ -573,9 +579,15 @@ const addWork = () => {
saveList.push(info) saveList.push(info)
}) })
//console.log('🚀 ~ file: App.vue:571 ~ addWork ~ saveList:', saveList)
savePlan(saveList) savePlan(saveList,currentRow.value.code, hanleDay.value.day.slice(0, 8) + '01', dayjs(hanleDay.value.day).endOf('month').format('YYYY-MM-DD'))
getViewData(currentRow.value.code, hanleDay.value.day, hanleDay.value.day)
//nextTick(() => {
//getViewData(currentRow.value.code, hanleDay.value.day.slice(0, 8) + '01', dayjs(hanleDay.value.day).endOf('month').format('YYYY-MM-DD'))
///})
//getViewData(currentRow.value.code, hanleDay.value.day, hanleDay.value.day)
//console.log('🚀 ~ file: App.vue:571 ~ addWork ~ saveList:', dayjs(hanleDay.value.day).endOf('month').format('YYYY-MM-DD'))
drawer.value = false drawer.value = false
} }
@ -650,8 +662,8 @@ const batchAddWork = () => {
} }
}) })
savePlan(saveList) savePlan(saveList,currentRow.value.code, dateList[0], dateList[1])
getViewData(currentRow.value.code, dateList[0], dateList[1]) //getViewData(currentRow.value.code, dateList[0], dateList[1])
batchAddDrawer.value = false batchAddDrawer.value = false
batchAddForm.value = { batchAddForm.value = {
batchDate: [], batchDate: [],
@ -665,8 +677,11 @@ const handleAddClose = () => {
drawer.value = false drawer.value = false
} }
const savePlan = async (workList) => { const savePlan = async (workList, code,startTime,endTime) => {
await workCalendarApi.createBatch(workList) await workCalendarApi.createBatch(workList)
nextTick(() => {
getViewData( code,startTime,endTime)
})
//await workCalendarApi.createObj(workList); //await workCalendarApi.createObj(workList);
} }
const getViewData = async (teamCode: any, startDate: any, endDate: any) => { const getViewData = async (teamCode: any, startDate: any, endDate: any) => {
@ -676,8 +691,12 @@ const getViewData = async (teamCode: any, startDate: any, endDate: any) => {
endTime: endDate endTime: endDate
} }
let res = await workCalendarApi.getWorkPlan(params) let res = await workCalendarApi.getWorkPlan(params)
//onsole.log('🚀 ~ file: App.vue:689 ~ getViewData ~ getViewData:',res)
viewDate.value = res
calendarCount.value++
// })
//if(res) //if(res)
viewDate.value = res
//workInfoList.value =viewDate.value //workInfoList.value =viewDate.value
//console.log('🚀 ~ file: App.vue:672 ~ getViewData ~ getViewData:', viewDate.value) //console.log('🚀 ~ file: App.vue:672 ~ getViewData ~ getViewData:', viewDate.value)
} }
@ -726,7 +745,7 @@ const getTeamList = async () => {
// //
const handleDelete=(row:any)=>{ const handleDelete=(row:any)=>{
message.delConfirm('确认要删除['+row.name+']班组当月排班数据吗?', 'Warning').then(() => { message.delConfirm('确认要删除['+row.name+']班组当月排班数据吗?', '警告').then(() => {
//console.log('🚀 ~ file: App.vue:720 ~ handleDelete ~ :', dayjs(currentDate.value).endOf('month').format('YYYY-MM-DD')) //console.log('🚀 ~ file: App.vue:720 ~ handleDelete ~ :', dayjs(currentDate.value).endOf('month').format('YYYY-MM-DD'))
deleteWorkPlan(row.code,currentDate.value.slice(0, 8) + '01', dayjs(currentDate.value).endOf('month').format('YYYY-MM-DD')) deleteWorkPlan(row.code,currentDate.value.slice(0, 8) + '01', dayjs(currentDate.value).endOf('month').format('YYYY-MM-DD'))
@ -742,10 +761,11 @@ const deleteWorkPlan=async (code:any,startTime:any,endTime:any)=>{
startTime:startTime, startTime:startTime,
endTime: endTime endTime: endTime
} }
console.log('🚀 ~ file: App.vue:720 ~ deleteWorkPlan ~ :', data) //console.log('🚀 ~ file: App.vue:720 ~ deleteWorkPlan ~ :', data)
workCalendarApi.deleteWorkPlan(data) workCalendarApi.deleteWorkPlan(data)
getViewData(code, startTime,endTime) getViewData(code, startTime,endTime)
} }
</script> </script>
<style> <style>

4
src/views/mes/workstation/workstation.data.ts

@ -319,8 +319,8 @@ export const abilityPopList = useCrudSchemas(reactive<CrudSchema[]>([
searchAllSchemas: AbilityInfo.allSchemas, // 查询弹窗所需类 searchAllSchemas: AbilityInfo.allSchemas, // 查询弹窗所需类
searchPage: AbilityInfoApi.getAbilityInfoPage, // 查询弹窗所需分页方法 searchPage: AbilityInfoApi.getAbilityInfoPage, // 查询弹窗所需分页方法
searchCondition: [{ searchCondition: [{
key: 'available', key: 'status',
value: 'TRUE', value: '1',
isMainValue: false isMainValue: false
}] }]
} }

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

@ -73,10 +73,20 @@ import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
const routeName = ref() const routeName = ref()
routeName.value = route.name routeName.value = route.name
const tableColumns = ref(InspectionRecordMain.allSchemas.tableColumns) const tableColumns = ref(InspectionRecordMain.allSchemas.tableColumns)
if(routeName.value=='InspectRecordMain'){
tableColumns.value = tableColumns.value.filter(item=>{
return item.label!='操作'
})
}
// //
const updataTableColumns = (val) => { const updataTableColumns = (val) => {
tableColumns.value = val if(routeName.value=='InspectRecordMain'){
tableColumns.value = val.filter(item=>{
return item.label!='操作'
})
}else{
tableColumns.value = val
}
} }

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

@ -49,6 +49,8 @@
@submitForm="submitForm" @submitForm="submitForm"
/> />
<!-- 导入 -->
<ImportForm ref="importFormRef" url="/qms/inspection-scheme/import" :importTemplateData="importTemplateData" @success="importSuccess" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -60,6 +62,8 @@ import TableHead from '@/components/TableHead/src/TableHead.vue'
import Detail from '@/components/Detail/src/Detail.vue' import Detail from '@/components/Detail/src/Detail.vue'
import AddForm from './addForm.vue' import AddForm from './addForm.vue'
import * as InspectionSchemeApi from '@/api/qms/inspectionScheme' import * as InspectionSchemeApi from '@/api/qms/inspectionScheme'
import ImportForm from "../../../components/ImportForm/src/ImportForm.vue";
import * as SampleCodeApi from "@/api/qms/sampleCode";
defineOptions({ name: 'InspectionScheme' }) defineOptions({ name: 'InspectionScheme' })
@ -86,7 +90,7 @@ const { getList, setSearchParams } = tableMethods
// //
const HeadButttondata = [ const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi:'qms:type-template:create'}), // defaultButtons.defaultAddBtn({hasPermi:'qms:type-template:create'}), //
// defaultButtons.defaultImportBtn({hasPermi:'wms:agv-locationrelation:import'}), // defaultButtons.defaultImportBtn({hasPermi:'qms:inspection-scheme:import'}), //
// defaultButtons.defaultExportBtn({hasPermi:'wms:agv-locationrelation:export'}), // // defaultButtons.defaultExportBtn({hasPermi:'wms:agv-locationrelation:export'}), //
defaultButtons.defaultFreshBtn(null), // defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
@ -240,9 +244,25 @@ const searchFormClick = (searchData) => {
getList() // getList() //
} }
/** 导入 */
const importFormRef = ref()
const handleImport = () => {
importFormRef.value.open()
}
//
const importTemplateData = reactive({
templateUrl: '',
templateTitle: '检验方案导入模版.xlsx'
})
//
const importSuccess = () => {
getList()
}
/** 初始化 **/ /** 初始化 **/
onMounted(async () => { onMounted(async () => {
getList() getList()
importTemplateData.templateUrl = await InspectionSchemeApi.importTemplate()
}) })
</script> </script>

6
src/views/wms/basicDataManage/customerManage/saleprice/saleprice.data.ts

@ -215,10 +215,10 @@ export const Saleprice = useCrudSchemas(reactive<CrudSchema[]>([
//表单校验 //表单校验
export const SalepriceRules = reactive({ export const SalepriceRules = reactive({
customercode: [ customerCode: [
{ required: true, message: '请输入客户代码', trigger: 'blur' } { required: true, message: '请输入客户代码', trigger: 'blur' }
], ],
itemcode: [ itemCode: [
{ required: true, message: '请输入物料代码', trigger: 'blur' } { required: true, message: '请输入物料代码', trigger: 'blur' }
], ],
currency: [ currency: [
@ -233,4 +233,4 @@ export const SalepriceRules = reactive({
remark: [ remark: [
{ max: 50, message: '不得超过50个字符', trigger: 'blur' } { max: 50, message: '不得超过50个字符', trigger: 'blur' }
], ],
}) })

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

@ -396,6 +396,9 @@ export const LocationRules = reactive({
warehouseCode: [ warehouseCode: [
{ required: true, message: '请输入仓库代码', trigger: 'change' } { required: true, message: '请输入仓库代码', trigger: 'change' }
], ],
qadLocationCode: [
{ required: true, message: '请QAD库位代码', trigger: 'change' }
],
areaCode: [ areaCode: [
{ required: true, message: '请输入库区代码', trigger: 'change' } { required: true, message: '请输入库区代码', trigger: 'change' }
], ],

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

@ -16,7 +16,7 @@ import { t } from '@/hooks/web/useI18n'
export const Itemarea = useCrudSchemas(reactive<CrudSchema[]>([ export const Itemarea = useCrudSchemas(reactive<CrudSchema[]>([
{ {
label: '物代码', label: '物代码',
field: 'itemCode', field: 'itemCode',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,
@ -752,4 +752,4 @@ export const ItemareaDetail = useCrudSchemas(reactive<CrudSchema[]>([
// 表单校验 // 表单校验
export const ItemareaDetailRules = reactive({ export const ItemareaDetailRules = reactive({
}) })

19
src/views/wms/basicDataManage/itemManage/itembasic/itembasic.data.ts

@ -207,6 +207,25 @@ export const Itembasic = useCrudSchemas(reactive<CrudSchema[]>([
} }
}, },
}, },
{
label: '是否脱离ERP管理',
field: 'isOutErp',
sort: 'custom',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
table: {
width: 100
},
form: {
component: 'Switch',
value: 'FALSE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
},
},
{ {
label: 'ABC类', label: 'ABC类',
field: 'abcClass', field: 'abcClass',

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

@ -9,7 +9,7 @@ import { Itempackaging } from '../itempackage/itempackage.data'
export const Itemwarehouse = useCrudSchemas(reactive<CrudSchema[]>([ export const Itemwarehouse = useCrudSchemas(reactive<CrudSchema[]>([
{ {
label: '物代码', label: '物代码',
field: 'itemCode', field: 'itemCode',
sort: 'custom', sort: 'custom',
isSearch: true, isSearch: true,

45
src/views/wms/basicDataManage/labelManage/callmaterials/callmaterials.data.ts

@ -29,8 +29,13 @@ const confgiDataOne = await confgiApi.queryByKey("WorkStation-IN")
// 表单校验 // 表单校验
export const CallmaterialsRules = reactive({ export const CallmaterialsRules = reactive({
itemCode: [required], itemCode: [required],
itemName: [required], packUnit: [required],
barcodeString: [required] qty: [required],
productionLineCode: [required],
callmaterialQtySum: [required],
warehouseCode: [required],
workshopCode: [required],
workStationCode: [required],
}) })
export const Callmaterials = useCrudSchemas(reactive<CrudSchema[]>([ export const Callmaterials = useCrudSchemas(reactive<CrudSchema[]>([
@ -72,7 +77,7 @@ export const Callmaterials = useCrudSchemas(reactive<CrudSchema[]>([
componentProps: { componentProps: {
isSearch:true, isSearch:true,
isSearchList: true, // 开启查询弹窗 isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择物料代码', // 输入框占位文本 searchListPlaceholder: '请选择包装规格', // 输入框占位文本
searchField: 'itemCode', // 查询弹窗赋值字段 searchField: 'itemCode', // 查询弹窗赋值字段
searchTitle: '物料包装信息', // 查询弹窗标题 searchTitle: '物料包装信息', // 查询弹窗标题
searchAllSchemas: Itempackaging.allSchemas, // 查询弹窗所需类 searchAllSchemas: Itempackaging.allSchemas, // 查询弹窗所需类
@ -90,6 +95,23 @@ export const Callmaterials = useCrudSchemas(reactive<CrudSchema[]>([
} }
} }
}, },
{
label: '叫料包装数量',
field: 'callmaterialQty',
sort: 'custom',
table: {
width: 120
},
form: {
component: 'InputNumber',
componentProps: {
disabled: true,
style: {width:'100%'},
min: 0,
precision: 6
}
}
},
{ {
label: '包装数量', label: '包装数量',
field: 'qty', field: 'qty',
@ -106,6 +128,23 @@ export const Callmaterials = useCrudSchemas(reactive<CrudSchema[]>([
} }
} }
}, },
{
label: '叫料总数量',
field: 'callmaterialQtySum',
sort: 'custom',
table: {
width: 120
},
form: {
component: 'InputNumber',
componentProps: {
disabled: true,
style: {width:'100%'},
min: 0,
precision: 6
}
}
},
{ {
label: '计量单位', // 发料申请 与当前物料计量单位做匹配 : 原PACK_UNIT 修改:UOM label: '计量单位', // 发料申请 与当前物料计量单位做匹配 : 原PACK_UNIT 修改:UOM
field: 'uom', field: 'uom',

7
src/views/wms/basicDataManage/labelManage/callmaterials/index.vue

@ -49,6 +49,12 @@
:apiCreate="CallmaterialsApi.createCallmaterials" :apiCreate="CallmaterialsApi.createCallmaterials"
@searchTableSuccess="searchTableSuccess" @searchTableSuccess="searchTableSuccess"
:isBusiness="false" :isBusiness="false"
:sumFormDataByForm ="(formRef,formModel)=>{
const {qty=0,callmaterialQty=0} = formModel
formRef.value.setValues({
callmaterialQtySum:qty*callmaterialQty,
})
}"
/> />
<!-- 详情 --> <!-- 详情 -->
@ -90,6 +96,7 @@ const searchTableSuccess = (formField, searchField, val, formRef) => {
} else if (formField == 'packUnit') { } else if (formField == 'packUnit') {
setV['uom'] = val[0]['uom'] setV['uom'] = val[0]['uom']
setV['packUnit'] = val[0]['packUnit'] setV['packUnit'] = val[0]['packUnit']
setV['callmaterialQty'] = val[0]['packQty']
}else { }else {
setV[formField] = val[0][searchField] setV[formField] = val[0][searchField]
} }

48
src/views/wms/basicDataManage/labelManage/locationLabel/index.vue

@ -16,7 +16,7 @@
<!-- 列表 --> <!-- 列表 -->
<ContentWrap> <ContentWrap>
<Table v-clientTable <Table v-clientTable ref="tableRef" :selection="true"
:columns="tableColumns" :columns="tableColumns"
:data="tableObject.tableList" :data="tableObject.tableList"
:loading="tableObject.loading" :loading="tableObject.loading"
@ -26,6 +26,7 @@
v-model:pageSize="tableObject.pageSize" v-model:pageSize="tableObject.pageSize"
v-model:currentPage="tableObject.currentPage" v-model:currentPage="tableObject.currentPage"
v-model:sort="tableObject.sort" v-model:sort="tableObject.sort"
@getSelectionRows="getSelectionRows"
> >
<template #number="{row}"> <template #number="{row}">
<el-button type="primary" link @click="openDetail(row, '单据号', row.number)"> <el-button type="primary" link @click="openDetail(row, '单据号', row.number)">
@ -90,6 +91,7 @@ const { getList, setSearchParams } = tableMethods
const HeadButttondata = [ const HeadButttondata = [
// defaultButtons.defaultAddBtn({hasPermi:'wms:package:create'}), // // defaultButtons.defaultAddBtn({hasPermi:'wms:package:create'}), //
defaultButtons.defaultExportBtn({hasPermi:'wms:package:export'}), // defaultButtons.defaultExportBtn({hasPermi:'wms:package:export'}), //
defaultButtons.mainLisSelectiontPointBtn(null), //
defaultButtons.defaultFreshBtn(null), // defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), // defaultButtons.defaultSetBtn(null), //
@ -110,7 +112,9 @@ const buttonBaseClick = (val, item) => {
getList() getList()
} }
} else if (val == 'filtrate') { // } else if (val == 'filtrate') { //
} else { // } else if (val=='selection_point'){//
handleSelectionPoint()
}else { //
console.log('其他按钮', item) console.log('其他按钮', item)
} }
} }
@ -183,7 +187,17 @@ const BASE_URL = import.meta.env.VITE_JMREPORT_BASE_URL
const src = ref(BASE_URL + '/jmreport/view/929174607016689664?token=' + getAccessToken()) const src = ref(BASE_URL + '/jmreport/view/929174607016689664?token=' + getAccessToken())
// //
const handlePoint = async (row) => { const handlePoint = async (row) => {
window.open(src.value+'&id='+row.id) window.open(src.value+'&relateNumber='+row.id)
}
// const srcPoint = ref(BASE_URL + '/jmreport/view/929174607016689664?token=' + getAccessToken())
const handleSelectionPoint = async ()=>{
let rows:any = []
selectionRows.value.forEach(item=>{
rows = [...rows,...item.selectionRows.map(item1=>item1.id)]
})
console.log('批量打印',rows.join(','))
window.open(src.value+'&relateNumber='+rows.join(','))
} }
// //
@ -196,6 +210,34 @@ const searchFormClick = (searchData) => {
getList() // getList() //
} }
watch(
() => tableObject.tableList,
() => {
const currentRows = selectionRows.value.find(item=>item.currentPage==tableObject.currentPage)
if(currentRows){
nextTick(() => {
currentRows.selectionRows.forEach(item=>{
tableRef.value.toggleRowSelection(item,true)
})
})
}
}
)
const selectionRows = ref<any>([])
const tableRef = ref()
const getSelectionRows = (currentPage,currentPageSelectionRows) => {
console.log("getSelectionRows",currentPage,currentPageSelectionRows)
const currentRows = selectionRows.value.find(item=>item.currentPage==currentPage)
if(currentRows){
currentRows.selectionRows = currentPageSelectionRows
}else{
selectionRows.value.push({
currentPage,
selectionRows:currentPageSelectionRows
})
}
}
/** 初始化 **/ /** 初始化 **/
onMounted(async () => { onMounted(async () => {
getList() getList()

29
src/views/wms/basicDataManage/labelManage/purchasePackage/index.vue

@ -253,10 +253,31 @@ const handleExport = async () => {
} }
const BASE_URL = import.meta.env.VITE_JMREPORT_BASE_URL const BASE_URL = import.meta.env.VITE_JMREPORT_BASE_URL
const src = ref(BASE_URL + '/jmreport/view/922729953438072832?token=' + getAccessToken()) const labelType = ref('') //
//
const handlePoint = async (row) => { const handlePoint = async (row) => {
window.open(src.value+'&asn_number='+row.relateNumber) console.log(row.packingNumber,445555555555555);
PackageApi.getBalanceToPackage(row.relateNumber).then(res => {
console.log(777,res);
if (res.productionLineCode != null) {
labelType.value = 'zz'
} else {
labelType.value = 'cg'
}
PackageApi.batchPrintingLable((res.number)).then((resLable) =>{
console.log(159,resLable )
//
if (labelType.value == 'cg') {
const src = ref(BASE_URL + '/jmreport/view/922729953438072832?token=' + getAccessToken())
console.log(159,resLable )
window.open(src.value+'&asn_number='+resLable)
} else {
const src = ref(BASE_URL + '/jmreport/view/922734157577715712?token=' + getAccessToken())
window.open(src.value+'&asn_number='+resLable)
}
})
}).catch(err => {
console.log(err)
})
} }
// form // form
@ -304,4 +325,4 @@ onMounted(async () => {
getList() getList()
}) })
</script> </script>
@/api/wms/itempackage @/api/wms/itempackage

118
src/views/wms/basicDataManage/strategySetting/strategy/supplieDeliveryStrategy/AddForm.vue

@ -16,7 +16,7 @@
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="代码" prop="strategyCode"> <el-form-item label="代码" prop="strategyCode">
<el-input <el-input key="strategyCode"
v-model="formData.strategyCode" v-model="formData.strategyCode"
placeholder="请输入代码" placeholder="请输入代码"
clearable clearable
@ -26,38 +26,38 @@
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="名称" prop="name"> <el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" clearable /> <el-input key="name" v-model="formData.name" placeholder="请输入名称" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="描述" prop="description"> <el-form-item label="描述" prop="description">
<el-input v-model="formData.description" placeholder="请输入描述" clearable /> <el-input key="description" v-model="formData.description" placeholder="请输入描述" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="优先级" prop="priority"> <el-form-item label="优先级" prop="priority">
<el-input-number v-model="formData.priority" :min="0" /> <el-input-number key="priority" v-model="formData.priority" :min="0" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-switch v-model="formData.status" /> <el-switch key="status" v-model="formData.status" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
<!-- 规则条件 --> <!-- 规则条件 -->
<div class="item mt-20px"> <div key="规则条件" class="item mt-20px">
<div class="title">规则条件</div> <div key="规则条件title" class="title">规则条件</div>
<el-row> <el-row key="规则条件row">
<el-col :span="24" v-for="(item, index) in formData.condition" :key="index"> <el-col :span="24" v-for="(item, index) in formData.condition" :key="'规则条件row'+index">
<!-- 供应商类型 --> <!-- 供应商类型 -->
<el-form-item <el-form-item key="供应商类型formItem"
v-if="item.ParamCode == 'SupplierType'" v-if="item.ParamCode == 'SupplierType'"
label="供应商类型" label="供应商类型"
class="flex-top err-120" class="flex-top err-120"
> >
<el-select <el-select key="供应商类型Operator"
v-model="item.Operator" v-model="item.Operator"
placeholder="请选择范围" placeholder="请选择范围"
style="width: 110px; margin-right: 10px" style="width: 110px; margin-right: 10px"
@ -66,10 +66,10 @@
:label="cur.label" :label="cur.label"
:value="cur.value" :value="cur.value"
v-for="cur in options.supplierTypeRangeOptions" v-for="cur in options.supplierTypeRangeOptions"
:key="cur.value" :key="'供应商类型Operator'+cur.value"
/> />
</el-select> </el-select>
<el-select <el-select key="供应商类型Value"
v-model="item.Value" v-model="item.Value"
placeholder="请选择供应商类型" placeholder="请选择供应商类型"
style="flex: 1" style="flex: 1"
@ -78,19 +78,19 @@
> >
<el-option <el-option
v-for="dict in getStrDictOptions(DICT_TYPE.SUPPLIER_TYPE)" v-for="dict in getStrDictOptions(DICT_TYPE.SUPPLIER_TYPE)"
:key="dict.value" :key="'供应商类型Value'+dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 供应商 --> <!-- 供应商 -->
<el-form-item <el-form-item key="供应商formItem"
v-else-if="item.ParamCode == 'SupplierCode'" v-else-if="item.ParamCode == 'SupplierCode'"
label="供应商" label="供应商"
class="err-120" class="err-120"
> >
<el-select <el-select key="供应商Operator"
v-model="item.Operator" v-model="item.Operator"
placeholder="请选择范围" placeholder="请选择范围"
style="width: 110px; margin-right: 10px" style="width: 110px; margin-right: 10px"
@ -99,10 +99,10 @@
:label="cur.label" :label="cur.label"
:value="cur.value" :value="cur.value"
v-for="cur in options.supplierRangeOptions" v-for="cur in options.supplierRangeOptions"
:key="cur.value" :key="'供应商Operator'+cur.value"
/> />
</el-select> </el-select>
<el-select <el-select key="供应商Value"
v-model="item.Value" v-model="item.Value"
placeholder="请选择供应商" placeholder="请选择供应商"
style="flex: 1" style="flex: 1"
@ -112,19 +112,19 @@
> >
<el-option <el-option
v-for="cur in options.supplierList" v-for="cur in options.supplierList"
:key="cur.code" :key="'供应商Value'+cur.code"
:label="cur.name" :label="cur.name"
:value="cur.code" :value="cur.code"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 星期几 --> <!-- 星期几 -->
<el-form-item <el-form-item key="星期几formItem"
v-else-if="item.ParamCode == 'Weekday'" v-else-if="item.ParamCode == 'Weekday'"
label="星期几" label="星期几"
class="flex-top err-120" class="flex-top err-120"
> >
<el-select <el-select key="星期几Operator"
v-model="item.Operator" v-model="item.Operator"
placeholder="请选择范围" placeholder="请选择范围"
style="width: 110px; margin-right: 10px" style="width: 110px; margin-right: 10px"
@ -133,7 +133,7 @@
:label="cur.label" :label="cur.label"
:value="cur.value" :value="cur.value"
v-for="cur in options.weekRangeOptions" v-for="cur in options.weekRangeOptions"
:key="cur.value" :key="'星期几Operator'+cur.value"
/> />
</el-select> </el-select>
<div class="checkbox"> <div class="checkbox">
@ -141,7 +141,7 @@
<el-checkbox <el-checkbox
:label="cur.label" :label="cur.label"
v-for="cur in options.weekOptions" v-for="cur in options.weekOptions"
:key="cur.value" :key="'星期几Value'+cur.value"
/> />
</el-checkbox-group> </el-checkbox-group>
</div> </div>
@ -150,14 +150,14 @@
</el-row> </el-row>
</div> </div>
<!-- 规则配置 --> <!-- 规则配置 -->
<div class="item mt-20px"> <div class="item mt-20px" key="规则配置">
<div class="title">规则配置</div> <div class="title" key="规则配置title">规则配置</div>
<el-row> <el-row key="规则配置Row">
<!-- 开始时间 --> <!-- 开始时间 -->
<el-col :span="24"> <el-col :span="24" key="规则配置Col">
<!-- 开始时间 --> <!-- 开始时间 -->
<el-form-item label="开始时间" prop="BeginTime"> <el-form-item key="开始时间formItem" label="开始时间" prop="BeginTime">
<el-time-select <el-time-select key="开始时间time"
v-model="formData.configuration.BeginTime" v-model="formData.configuration.BeginTime"
start="00:00" start="00:00"
end="23:59" end="23:59"
@ -167,8 +167,8 @@
/> />
</el-form-item> </el-form-item>
<!-- 结束时间 --> <!-- 结束时间 -->
<el-form-item label="结束时间" prop="EndTime"> <el-form-item key="结束时间formItem" label="结束时间" prop="EndTime">
<el-time-select <el-time-select key="结束时间time"
v-model="formData.configuration.EndTime" v-model="formData.configuration.EndTime"
start="00:00" start="00:00"
end="23:59" end="23:59"
@ -178,8 +178,8 @@
/> />
</el-form-item> </el-form-item>
<!-- 仓库 --> <!-- 仓库 -->
<el-form-item label="仓库" prop="WarehouseCode"> <el-form-item key="仓库formItem" label="仓库" prop="WarehouseCode">
<el-select <el-select key="仓库"
v-model="formData.configuration.WarehouseCode" v-model="formData.configuration.WarehouseCode"
:placeholder="`请选择${ :placeholder="`请选择${
formData.configuration.WarehouseCode == 'WarehouseCode' formData.configuration.WarehouseCode == 'WarehouseCode'
@ -196,49 +196,51 @@
> >
<el-option <el-option
v-for="cur in options.warehouseList" v-for="cur in options.warehouseList"
:key="cur.code" :key="'仓库'+cur.code"
:label="cur.code" :label="cur.code"
:value="cur.code" :value="cur.code"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 月台 --> <!-- 月台 -->
<el-form-item label="月台" prop="DockCode"> <el-form-item key="月台formItem" label="月台" prop="DockCode">
<el-select <el-select key="月台"
v-model="formData.configuration.DockCode" v-model="formData.configuration.DockCode"
placeholder="请选择月台" placeholder="请选择月台"
clearable clearable
> >
<el-option <el-option
v-for="cur in options.dockList" v-for="cur in options.dockList"
:key="cur.code" :key="'月台'+cur.code"
:label="cur.code" :label="cur.code"
:value="cur.code" :value="cur.code"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 在途库位 --> <!-- 在途库位 -->
<el-form-item label="在途库位" prop="OnTheWayLocationCode"> <el-form-item key="在途库位formItem" label="在途库位" prop="OnTheWayLocationCode">
<el-select <el-select key="在途库位"
v-model="formData.configuration.OnTheWayLocationCode" v-model="formData.configuration.OnTheWayLocationCode"
placeholder="请选择在途库位" placeholder="请选择在途库位"
clearable clearable
filterable
:filter-method="filterMethodFromLocation"
> >
<el-option <el-option
v-for="cur in options.locationList" v-for="cur in options.locationList"
:key="cur.code" :key="'在途库位'+cur.code"
:label="cur.code" :label="cur.code"
:value="cur.code" :value="cur.code"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 收货人 --> <!-- 收货人 -->
<el-form-item label="收货人" prop="Receiver"> <el-form-item key="收货人formItem" label="收货人" prop="Receiver">
<el-input v-model="formData.configuration.Receiver" placeholder="请输入收货人名称" clearable /> <el-input key="收货人" v-model="formData.configuration.Receiver" placeholder="请输入收货人名称" clearable />
</el-form-item> </el-form-item>
<!-- 在途库位 --> <!-- 在途库位 -->
<el-form-item label="联系电话" prop="configuration.PhoneNumber"> <el-form-item key="联系电话formItem" label="联系电话" prop="configuration.PhoneNumber">
<el-input v-model="formData.configuration.PhoneNumber" placeholder="请输入联系电话" clearable /> <el-input key="联系电话" v-model="formData.configuration.PhoneNumber" placeholder="请输入联系电话" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -363,7 +365,8 @@ const options = reactive({
// //
dockList: [], dockList: [],
// //
locationList: [] locationList: [],
originLocationList: []
}) })
// //
const Butttondata = ref([ const Butttondata = ref([
@ -407,15 +410,35 @@ const getFormWarehouseList = async () => {
const getFormDockList = async () => { const getFormDockList = async () => {
options.dockList = await getDockList() options.dockList = await getDockList()
} }
const filterMethodFromLocation = (query: string) => {
if (query) {
options.locationList = options.originLocationList.filter((item) => {
return item?.code.includes(query)
})
} else {
options.locationList = [...options.originLocationList]
}
}
// //
const getFormLocationList = async () => { const getFormLocationList = async () => {
options.locationList = await getLocationList({ type: 'TRANSPORT' }) if(!options.locationList || options.locationList.length==0){
options.originLocationList = await getLocationList({ type: 'TRANSPORT' })
options.locationList = [...options.originLocationList]
}else{
options.locationList = []
let timer = setTimeout(()=>{
options.locationList = [...options.originLocationList]
if(timer){
clearTimeout(timer)
}
},2000)
}
} }
getFormSupplierList() getFormSupplierList()
getFormWarehouseList() getFormWarehouseList()
getFormDockList() getFormDockList()
getFormLocationList()
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type: string, strategyCode: string, id?: number) => { const open = async (type: string, strategyCode: string, id?: number) => {
@ -469,6 +492,7 @@ const open = async (type: string, strategyCode: string, id?: number) => {
defaultButtons.formCloseBtn(null) // defaultButtons.formCloseBtn(null) //
] ]
} }
getFormLocationList()
} }
defineExpose({ open }) // open defineExpose({ open }) // open

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

@ -628,7 +628,7 @@ const options = reactive({
], ],
// //
supplierList: [], supplierList: [],
orignSupplierList: [], originSupplierList: [],
// //
itemTypeOptions: [ itemTypeOptions: [
{ value: 'ItemType', label: '物料类型' }, { value: 'ItemType', label: '物料类型' },
@ -673,21 +673,23 @@ const buttonBaseClick = (val, item) => {
} }
// //
const getFormSupplierList = async () => { const getFormSupplierList = async () => {
options.orignSupplierList = await getSupplierList()
options.supplierList = [...options.orignSupplierList] options.originSupplierList = await getSupplierList()
options.supplierList = [...options.originSupplierList]
} }
// //
const getFormCustomerList = async () => { const getFormCustomerList = async () => {
options.supplierList = await getCustomerList()
options.supplierList = [...options.orignSupplierList] options.originSupplierList = await getCustomerList()
options.supplierList = [...options.originSupplierList]
} }
const filterMethod = (query: string) => { const filterMethod = (query: string) => {
if (query) { if (query) {
options.supplierList = options.orignSupplierList.filter((item) => { options.supplierList = options.originSupplierList.filter((item) => {
return item.name.includes(query) return item.name.includes(query)
}) })
} else { } else {
options.supplierList = [] options.supplierList = [...options.originSupplierList]
} }
} }
@ -744,7 +746,7 @@ const filterMethodWarehouseList = (query: string) => {
return item.code.includes(query) return item.code.includes(query)
}) })
} else { } else {
options.warehouseList = [] options.warehouseList = options.originWarehouseList
} }
} }
// /// // ///

244
src/views/wms/basicDataManage/subject/qadCostcentre/index.vue

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

167
src/views/wms/basicDataManage/subject/qadCostcentre/qadCostcentre.data.ts

@ -0,0 +1,167 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime'
// 表单校验
export const QadCostcentreRules = reactive({
code: [required],
usageDescription: [required],
available: [required],
concurrencyStamp: [required],
})
export const QadCostcentre = useCrudSchemas(reactive<CrudSchema[]>([
{
label: 'id',
field: 'id',
sort: 'custom',
isForm: false,
isTable:false,
},
{
label: '成本中心ID',
field: 'costcentreId',
sort: 'custom',
isSearch: false,
},
{
label: '成本中心代码',
field: 'costcentreCode',
sort: 'custom',
isSearch: true,
},
{
label: '成本中心描述',
field: 'costcentreDescription',
sort: 'custom',
isSearch: false,
form: {
component: 'Editor',
componentProps: {
valueHtml: '',
height: 200
}
},
},
{
label: '启用',
field: 'costcentreActive',
sort: 'custom',
isSearch: false,
},
{
label: '成本中心类型',
field: 'costcentreType',
sort: 'custom',
isSearch: false,
form: {
component: 'SelectV2'
},
},
{
label: '是否可用',
field: 'available',
sort: 'custom',
isSearch: false,
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
table: {
width: 120
},
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
},
},
{
label: '备注',
field: 'remark',
sort: 'custom',
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: '删除时间',
field: 'deletionTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: false,
isTable: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,
},
{
label: '扩展属性',
field: 'extraProperties',
sort: 'custom',
isSearch: false,
isTable:false,
},
{
label: '并发乐观锁',
field: 'concurrencyStamp',
sort: 'custom',
isSearch: false,
isTable:false,
form: {
component: 'InputNumber',
value: 0
},
},
{
label: '地点ID',
field: 'siteId',
sort: 'custom',
isSearch: false,
isTable:false,
},
{
label: '操作',
field: 'action',
isForm: false,
isTable:false,
table: {
width: 150,
fixed: 'right'
}
}
]))

244
src/views/wms/basicDataManage/subject/qadProject/index.vue

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

186
src/views/wms/basicDataManage/subject/qadProject/qadProject.data.ts

@ -0,0 +1,186 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime'
// 表单校验
export const QadProjectRules = reactive({
available: [required],
concurrencyStamp: [required],
})
export const QadProject = useCrudSchemas(reactive<CrudSchema[]>([
{
label: 'id',
field: 'id',
sort: 'custom',
isForm: false,
isTable:false,
},
{
label: '项目ID',
field: 'projectId',
sort: 'custom',
isSearch: false,
},
{
label: '项目代码',
field: 'projectCode',
sort: 'custom',
isSearch: true,
},
{
label: '项目描述',
field: 'projectDescription',
sort: 'custom',
isSearch: false,
form: {
component: 'Editor',
componentProps: {
valueHtml: '',
height: 200
}
},
},
{
label: '项目开始时间',
field: 'projectStartDate',
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')]
}
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
valueFormat: 'x'
}
},
},
{
label: '项目结束时间',
field: 'projectEndDate',
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')]
}
},
form: {
component: 'DatePicker',
componentProps: {
type: 'datetime',
valueFormat: 'x'
}
},
},
{
label: '状态代码',
field: 'statusCode',
sort: 'custom',
isSearch: false,
},
{
label: '是否可用',
field: 'available',
sort: 'custom',
isSearch: false,
},
{
label: '备注',
field: 'remark',
sort: 'custom',
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: '删除时间',
field: 'deletionTime',
sort: 'custom',
formatter: dateFormatter,
isSearch: false,
isTable: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,
},
{
label: '扩展属性',
field: 'extraProperties',
sort: 'custom',
isSearch: false,
isTable:false,
},
{
label: '并发乐观锁',
field: 'concurrencyStamp',
sort: 'custom',
isSearch: false,
isTable:false,
form: {
component: 'InputNumber',
value: 0
},
},
{
label: '地点ID',
field: 'siteId',
sort: 'custom',
isSearch: false,
isTable:false,
},
{
label: '操作',
field: 'action',
isForm: false,
isTable:false,
table: {
width: 150,
fixed: 'right'
}
}
]))

253
src/views/wms/basicDataManage/subject/subjectAccount/index.vue

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

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

@ -0,0 +1,166 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime'
import * as QadCostcentreApi from '@/api/wms/qadCostcentre'
import { QadCostcentre } from '../qadCostcentre/qadCostcentre.data'
import * as QadProjectApi from '@/api/wms/qadProject'
import { QadProject } from '../qadProject/qadProject.data'
// 表单校验
export const SubjectAccountRules = reactive({
code: [required],
usageDescription: [required],
costecentreCode: [required],
projectId: [required],
projectCode: [required],
available: [required],
})
export const SubjectAccount = useCrudSchemas(reactive<CrudSchema[]>([
{
label: 'id',
field: 'id',
sort: 'custom',
isForm: false,
isTable:false,
},
{
label: '代码',
field: 'code',
sort: 'custom',
isSearch: true,
},
{
label: '领用描述',
field: 'usageDescription',
sort: 'custom',
isSearch: true,
},
{
label: '成本中心ID',
field: 'costecentreId',
sort: 'custom',
isSearch: false,
isTable:false,
form:{
componentProps:{
disabled:true
}
}
},
{
label: '成本中心代码',
field: 'costecentreCode',
sort: 'custom',
isSearch: false,
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'costcentreCode', // 查询弹窗赋值字段
searchTitle: '成本中心信息', // 查询弹窗标题
searchAllSchemas: QadCostcentre.allSchemas, // 查询弹窗所需类
searchPage: QadCostcentreApi.getQadCostcentrePage, // 查询弹窗所需分页方法
searchCondition: [{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '成本中心类型',
field: 'costecentreType',
sort: 'custom',
isSearch: false,
form:{
componentProps:{
disabled:true
}
}
},
{
label: '项目ID',
field: 'projectId',
sort: 'custom',
isSearch: false,
isTable:false,
disabled:true,
form:{
componentProps:{
disabled:true
}
}
},
{
label: '项目代码',
field: 'projectCode',
sort: 'custom',
isSearch: false,
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择物料代码', // 输入框占位文本
searchField: 'projectCode', // 查询弹窗赋值字段
searchTitle: '物料基础信息', // 查询弹窗标题
searchAllSchemas: QadProject.allSchemas, // 查询弹窗所需类
searchPage: QadProjectApi.getQadProjectPage, // 查询弹窗所需分页方法
searchCondition: [{
key: 'available',
value: 'TRUE',
isMainValue: false
}]
}
}
},
{
label: '是否可用',
field: 'available',
sort: 'custom',
dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string',
isTable: true,
table: {
width: 120
},
form: {
component: 'Switch',
value: 'TRUE',
componentProps: {
inactiveValue: 'FALSE',
activeValue: 'TRUE'
}
},
},
{
label: '备注',
field: 'remark',
sort: 'custom',
},
{
label: '创建时间',
field: 'createTime',
sort: 'custom',
formatter: dateFormatter,
search: {
component: 'DatePicker',
componentProps: {
valueFormat: 'YYYY-MM-DD HH:mm:ss',
type: 'daterange',
defaultTime: [new Date('1 00:00:00'), new Date('1 23:59:59')]
}
},
isForm: false,
},
{
label: '操作',
field: 'action',
isForm: false,
table: {
width: 150,
fixed: 'right'
}
}
]))

84
src/views/wms/countManage/count/countJobMain/countJobMain.data.ts

@ -28,21 +28,21 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
}, },
}, },
{ {
label: '申请单号', label: '计划单号',
field: 'requestNumber', field: 'planNumber',
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 180
}, },
isSearch: true
}, },
{ {
label: '计划单号', label: '申请单号',
field: 'planNumber', field: 'requestNumber',
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 180
}, },
isSearch: true
}, },
{ {
label: '阶段', label: '阶段',
@ -123,6 +123,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 180 width: 180
}, },
isTable:false,
form: { form: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -139,13 +140,14 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isTable:false,
}, },
{ {
label: '从库区类型范围', label: '从库区类型范围',
field: 'fromAreaTypes', field: 'fromAreaTypes',
dictType: DICT_TYPE.AREA_TYPE, dictType: DICT_TYPE.AREA_TYPE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 150
@ -156,7 +158,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'toAreaTypes', field: 'toAreaTypes',
dictType: DICT_TYPE.AREA_TYPE, dictType: DICT_TYPE.AREA_TYPE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 150
@ -169,6 +171,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isTable: false,
form: { form: {
component: 'InputNumber', component: 'InputNumber',
} }
@ -177,6 +180,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
label: '优先级增量', label: '优先级增量',
field: 'priorityIncrement', field: 'priorityIncrement',
sort: 'custom', sort: 'custom',
isTable: false,
table: { table: {
width: 150 width: 150
}, },
@ -191,6 +195,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isTable:false
}, },
{ {
label: '部门', label: '部门',
@ -199,13 +204,14 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isTable:false,
}, },
{ {
label: '自动完成', label: '自动完成',
field: 'autoComplete', field: 'autoComplete',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'TRUE',
@ -224,7 +230,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'allowModifyLocation', field: 'allowModifyLocation',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'TRUE',
@ -243,7 +249,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'allowModifyQty', field: 'allowModifyQty',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'TRUE',
@ -262,7 +268,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'allowBiggerQty', field: 'allowBiggerQty',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'TRUE',
@ -281,7 +287,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'allowSmallerQty', field: 'allowSmallerQty',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'TRUE',
@ -300,7 +306,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'allowModifyInventoryStatus', field: 'allowModifyInventoryStatus',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'TRUE',
@ -319,7 +325,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'allowContinuousScanning', field: 'allowContinuousScanning',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'TRUE',
@ -338,7 +344,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'allowPartialComplete', field: 'allowPartialComplete',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'TRUE',
@ -357,7 +363,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'allowModifyBatch', field: 'allowModifyBatch',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'TRUE',
@ -376,7 +382,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
field: 'allowModifyPackingNumber', field: 'allowModifyPackingNumber',
dictType: DICT_TYPE.TRUE_FALSE, dictType: DICT_TYPE.TRUE_FALSE,
dictClass: 'string', dictClass: 'string',
isTable: true, isTable: false,
form: { form: {
component: 'Switch', component: 'Switch',
value: 'TRUE', value: 'TRUE',
@ -397,6 +403,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isTable:false,
}, },
{ {
label: '承接时间', label: '承接时间',
@ -409,6 +416,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 180 width: 180
}, },
isTable:false,
form: { form: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -425,6 +433,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isTable:false,
}, },
{ {
label: '完成时间', label: '完成时间',
@ -437,6 +446,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 180 width: 180
}, },
isTable:false,
form: { form: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -453,6 +463,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isTable:false,
}, },
{ {
label: '创建时间', label: '创建时间',
@ -465,6 +476,7 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 180 width: 180
}, },
isTable:false,
form: { form: {
component: 'DatePicker', component: 'DatePicker',
componentProps: { componentProps: {
@ -481,25 +493,18 @@ export const CountJobMain = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isTable:false,
}, },
// { {
// label: '状态', label: '操作',
// field: 'jobStageStatus', field: 'action',
// sort: 'custom', isDetail: false,
// table: { isForm: false,
// width: 150 table: {
// }, width: 180,
// }, fixed: 'right'
// { },
// label: '操作', }
// field: 'action',
// isDetail: false,
// isForm: false,
// table: {
// width: 120,
// fixed: 'right'
// },
// }
])) ]))
//表单校验 //表单校验
@ -565,6 +570,7 @@ export const CountJobDetail = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 180 width: 180
}, },
hiddenInMain:true,
}, },
{ {
label: '盘点明细号', label: '盘点明细号',
@ -587,7 +593,7 @@ export const CountJobDetail = useCrudSchemas(reactive<CrudSchema[]>([
field: 'itemName', field: 'itemName',
sort: 'custom', sort: 'custom',
table: { table: {
width: 150 width: 200
}, },
}, },
{ {
@ -629,6 +635,7 @@ export const CountJobDetail = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isTable:false,
}, },
{ {
label: '数量', label: '数量',
@ -670,6 +677,7 @@ export const CountJobDetail = useCrudSchemas(reactive<CrudSchema[]>([
table: { table: {
width: 150 width: 150
}, },
isTable:false,
}, },
{ {
label: '货主代码', label: '货主代码',

69
src/views/wms/countManage/count/countJobMain/index.vue

@ -64,6 +64,19 @@
:searchTableParams="searchTableParams" :searchTableParams="searchTableParams"
:apiPage="CountJobDetailApi.getCountJobDetailPage" :apiPage="CountJobDetailApi.getCountJobDetailPage"
/> />
<!-- 导入 -->
<ImportDetailForm
ref="importFormRef"
url="/wms/count-job-main/import"
:importTemplateData="importTemplateData"
@success="importSuccess"
:updateIsDisable="true"
:coverIsDisable="true"
:mode="1"
:extend="rowMasterIdRef"
/>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -186,7 +199,25 @@ const butttondata = (row,$index) => {
} }
return [ return [
// defaultButtons.mainListJobAccBtn({hide:isShowMainButton(row,['1'])}), // // defaultButtons.mainListJobAccBtn({hide:isShowMainButton(row,['1'])}), //
defaultButtons.mainListJobCloBtn({hide:isShowMainButton(row,['1']),hasPermi:'wms:count-job-main:close'}), // defaultButtons.mainListJobCloBtn({hide:isShowMainButton(row,['1','2']),hasPermi:'wms:count-job-main:close'}), //
{
label: '导出',
name: 'exportCountJob',
hide: isShowMainButton(row,['1','2']),
type: 'primary',
color: '',
link: true, //
hasPermi: '' // wms:count-job-main:exportCountJob
},
{
label: '导入',
name: 'importCountJob',
hide: isShowMainButton(row,['1','2']),
type: 'success',
color: '',
link: true, //
hasPermi: '' // wms:count-job-main:importCountJob
}
// defaultButtons.mainListJobAbaBtn({hide:isShowMainButton(row,['2'])}), // // defaultButtons.mainListJobAbaBtn({hide:isShowMainButton(row,['2'])}), //
// defaultButtons.mainListJobExeBtn({hide:isShowMainButton(row,['2'])}), // // defaultButtons.mainListJobExeBtn({hide:isShowMainButton(row,['2'])}), //
] ]
@ -202,6 +233,10 @@ const buttonTableClick = async (val, row) => {
handleClose(row.masterId) handleClose(row.masterId)
} else if (val == 'mainJobAcc') { // } else if (val == 'mainJobAcc') { //
console.log('列表-操作按钮事件-承接') console.log('列表-操作按钮事件-承接')
} else if (val == 'exportCountJob'){//
handleExportCountJob(row.masterId,row.number)
} else if( val == 'importCountJob'){ //
handleImport(row.masterId)
} }
} }
@ -240,6 +275,38 @@ const handleExport = async () => {
} }
} }
/** 单条任务导出 */
const handleExportCountJob = async (id: number,number: string) => {
try {
await message.exportConfirm()
exportLoading.value = true
const data = await CountJobMainApi.handleExportCountJob(id)
download.excel(data, '盘点任务主'+number+'.xlsx')
} catch {
}finally {
exportLoading.value = false
}
}
/** 导入 */
const importFormRef = ref()
const rowMasterIdRef = ref('')
const handleImport = (id: string) => {
rowMasterIdRef.value = id;
importFormRef.value.open()
}
//
const importTemplateData = reactive({
templateUrl: '',
templateTitle: '盘点任务导入模版.xlsx'
})
//
const importSuccess = () => {
getList()
}
// //
const searchFormClick = (searchData) => { const searchFormClick = (searchData) => {
tableObject.params = { tableObject.params = {

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

@ -5,7 +5,9 @@ import { dateFormatter, formatDate } from '@/utils/formatTime'
import * as getRequestsettingApi from '@/api/wms/requestsetting/index' import * as getRequestsettingApi from '@/api/wms/requestsetting/index'
import * as DeliverRecordMainApi from '@/api/wms/deliverRecordMain' import * as DeliverRecordMainApi from '@/api/wms/deliverRecordMain'
import { DeliverRecordMain } from '../../deliver/deliverRecordMain/deliverRecordMain.data' import * as DeliverRecordDetailApi from '@/api/wms/deliverRecordDetail'
import { DeliverRecordMain,DeliverRecordDetail } from '../../deliver/deliverRecordMain/deliverRecordMain.data'
import * as CustomerApi from '@/api/wms/customer' import * as CustomerApi from '@/api/wms/customer'
import { Customer } from '../../../basicDataManage/customerManage/customer/customer.data' import { Customer } from '../../../basicDataManage/customerManage/customer/customer.data'
@ -23,6 +25,8 @@ import { Itempackaging } from '@/views/wms/basicDataManage/itemManage/itempackag
import * as ItemPackageApi from '@/api/wms/itempackage/index' import * as ItemPackageApi from '@/api/wms/itempackage/index'
import * as CustomerreturnRequestApi from '@/api/wms/customerreturnRequestMain' import * as CustomerreturnRequestApi from '@/api/wms/customerreturnRequestMain'
import * as LocationApi from '@/api/wms/location'
import { Location } from '@/views/wms/basicDataManage/factoryModeling/location/location.data'
const { t } = useI18n() // 国际化 const { t } = useI18n() // 国际化
const dateTime = new Date().getTime() const dateTime = new Date().getTime()
@ -48,6 +52,7 @@ const userDeptArray:any = [userDept]
/** /**
* @returns {Array} 退 * @returns {Array} 退
*/ */
export const CustomerreturnRequestMain = useCrudSchemas(reactive<CrudSchema[]>([ export const CustomerreturnRequestMain = useCrudSchemas(reactive<CrudSchema[]>([
{ {
label: '单据号', label: '单据号',
@ -87,8 +92,10 @@ export const CustomerreturnRequestMain = useCrudSchemas(reactive<CrudSchema[]>([
searchListPlaceholder: '请选择发货记录单号', // 输入框占位文本 searchListPlaceholder: '请选择发货记录单号', // 输入框占位文本
searchField: 'number', // 查询弹窗赋值字段 searchField: 'number', // 查询弹窗赋值字段
searchTitle: '发货记录信息', // 查询弹窗标题 searchTitle: '发货记录信息', // 查询弹窗标题
isConcatDetailSchemas:true, // 是否主子表合并
searchAllSchemas: DeliverRecordMain.allSchemas, // 查询弹窗所需类 searchAllSchemas: DeliverRecordMain.allSchemas, // 查询弹窗所需类
searchPage: DeliverRecordMainApi.getDeliverRecordMainPage, // 查询弹窗所需分页方法 searchDetailSchemas: DeliverRecordDetail.allSchemas, // 查询弹窗所需类
searchPage: DeliverRecordDetailApi.getDeliverRecordDetailPage, // 查询弹窗所需分页方法
searchCondition: [{ searchCondition: [{
key: 'available', key: 'available',
value: 'TRUE', value: 'TRUE',
@ -886,22 +893,28 @@ export const CustomerreturnRequestDetail = useCrudSchemas(reactive<CrudSchema[]>
} }
} }
}, },
// { {
// label: '到库位代码', label: '到库位代码',
// field: 'toLocationCode', field: 'toLocationCode',
// sort: 'custom', sort: 'custom',
// table: { table: {
// width: 150 width: 150
// }, },
// tableForm: { isSearch: true,
// disabled: true tableForm:{
// }, isInpuFocusShow: true, // 开启查询弹窗
// form: { searchListPlaceholder: '请选择到库位代码',
// componentProps: { searchField: 'toLocationCode',
// disabled: true searchTitle: '到库位代码',
// } searchAllSchemas: Location.allSchemas,
// } searchPage: LocationApi.selectBusinessTypeOutLocation, // 查询弹窗所需分页方法
// }, searchCondition: [{
key: 'businessType',
value: 'CustomerReject',
isMainValue: false
}]
},
},
{ {
label: '库存状态', label: '库存状态',
field: 'inventoryStatus', field: 'inventoryStatus',
@ -1062,6 +1075,9 @@ export const CustomerreturnRequestDetailRules = reactive({
itemCode: [ itemCode: [
{ required: true, message: '请选择物料代码', trigger: 'change' } { required: true, message: '请选择物料代码', trigger: 'change' }
], ],
toLocationCode: [
{ required: true, message: '请选择到库位代码', trigger: 'blur' }
],
remark: [ remark: [
{ max: 50, message: '不得超过50个字符', trigger: 'blur' } { max: 50, message: '不得超过50个字符', trigger: 'blur' }
], ],

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

Loading…
Cancel
Save