Browse Source

Merge remote-tracking branch 'origin/master_hella' into master_hella

master_hella_20240701
gaojs 6 months ago
parent
commit
0fa18d9be0
  1. 2
      src/api/mes/ordermonthplan/index.ts
  2. 60
      src/api/qms/aql/index.ts
  3. 26
      src/api/qms/inspectionJob/inspectionJobDetail/index.ts
  4. 48
      src/api/qms/inspectionRecord/inspectionRecordDetail/index.ts
  5. 16
      src/api/qms/inspectionRecord/inspectionRecordMain/index.ts
  6. 75
      src/api/wms/supplierinvoiceInvoiced/index.ts
  7. 5
      src/api/wms/supplierinvoiceRequestMain/index.ts
  8. 2
      src/components/UploadFile/src/UploadFile.vue
  9. 28
      src/components/Verifition/src/Verify/VerifyPoints.vue
  10. 35
      src/components/Verifition/src/Verify/VerifySlide.vue
  11. 33
      src/components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue
  12. 8
      src/components/bpmnProcessDesigner/src/utils/directive/clickOutSide.js
  13. 25
      src/components/iFrame/src/IFrame.vue
  14. 13
      src/layout/components/Logo/src/Logo.vue
  15. 14
      src/layout/components/Message/src/Message.vue
  16. 13
      src/layout/components/TabMenu/src/TabMenu.vue
  17. 2
      src/utils/dict.ts
  18. 14
      src/views/bpm/model/editor/index.vue
  19. 2
      src/views/login/components/LoginForm.vue
  20. 23
      src/views/login/components/MobileForm.vue
  21. 52
      src/views/mes/ordermonthplan/index.vue
  22. 61
      src/views/mes/ordermonthplan/mesOrderMonthSub.data.ts
  23. 60
      src/views/qms/aql/aql.data.ts
  24. 79
      src/views/qms/inspection/inspectionJob/addForm.vue
  25. 310
      src/views/qms/inspection/inspectionJob/detail.vue
  26. 16
      src/views/qms/inspection/inspectionJob/index.vue
  27. 310
      src/views/qms/inspection/inspectionRecord/detail.vue
  28. 18
      src/views/qms/inspection/inspectionRecord/index.vue
  29. 42
      src/views/qms/inspectionMethod/index.vue
  30. 14
      src/views/qms/inspectionMethod/inspectionMethod.data.ts
  31. 4
      src/views/system/systemInstallPackage/systemInstallPackage.data.ts
  32. 6
      src/views/wms/inventoryjobManage/sparepartsrequisition/sparepartsrequisitionRequestMain/sparepartsrequisitionRequestMain.data.ts
  33. 6
      src/views/wms/inventoryjobManage/unplannedissue/unplannedissueRequestMain/unplannedissueRequestMain.data.ts
  34. 84
      src/views/wms/inventoryjobManage/unplannedreceipt/unplannedreceiptRequestMain/unplannedreceiptRequestMain.data.ts
  35. 3
      src/views/wms/purchasereceiptManage/supplierdeliver/demandforecastingMain/demandforecastingMain.data.ts
  36. 5
      src/views/wms/purchasereceiptManage/supplierdeliver/purchaseMain/purchaseMain.data.ts
  37. 3
      src/views/wms/purchasereceiptManage/supplierdeliver/purchasePlanMain/purchasePlanMain.data.ts
  38. 30
      src/views/wms/supplierManage/supplierinvoice/supplierinvoiceRequestMain/index.vue
  39. 310
      src/views/wms/supplierManage/supplierinvoiceInvoiced/index.vue
  40. 168
      src/views/wms/supplierManage/supplierinvoiceInvoiced/supplierinvoiceInvoiced.data.ts

2
src/api/mes/ordermonthplan/index.ts

@ -63,7 +63,9 @@ export interface MesOrderMonthSubVO {
status: string status: string
remark: string remark: string
productCode: string productCode: string
productName: string
bomCode: string bomCode: string
bomVersion: string
inStoreCode: string inStoreCode: string
planBegin: Date planBegin: Date
planEnd: Date planEnd: Date

60
src/api/qms/aql/index.ts

@ -6,36 +6,36 @@ export interface AqlVO {
inspectionQualification: string inspectionQualification: string
sampleCharacterCode: string sampleCharacterCode: string
sampleSize: number sampleSize: number
a0Separator010: number a0separator010: number
r0Separator010: number r0separator010: number
a0Separator015: number a0separator015: number
r0Separator015: number r0separator015: number
a0Separator025: number a0separator025: number
r0Separator025: number r0separator025: number
a0Separator040: number a0separator040: number
r0Separator040: number r0separator040: number
a0Separator065: number a0separator065: number
r0Separator065: number r0separator065: number
a0Separator10: number a0separator10: number
r0Separator10: number r0separator10: number
a0Separator15: number a0separator15: number
r0Separator15: number r0separator15: number
a0Separator25: number a0separator25: number
r0Separator25: number r0separator25: number
a0Separator40: number a0separator40: number
r0Separator40: number r0separator40: number
a0Separator65: number a0separator65: number
r0Separator65: number r0separator65: number
a1Separator0: number a1separator0: number
r1Separator0: number r1separator0: number
a1Separator5: number a1separator5: number
r1Separator5: number r1separator5: number
a2Separator5: number a2separator5: number
r2Separator5: number r2separator5: number
a4Separator0: number a4separator0: number
r4Separator0: number r4separator0: number
a6Separator5: number a6separator5: number
r6Separator5: number r6separator5: number
a10: number a10: number
r10: number r10: number
a15: number a15: number

26
src/api/qms/inspectionJob/inspectionJobDetail/index.ts

@ -1,27 +1,5 @@
import request from '@/config/axios' import request from '@/config/axios'
export interface InspectionJobDetailVO {
number: string
applicationDate: localdate
applicationTime: Date
requestStartTime: Date
requestEndTime: Date
finishTime: Date
supplierCode: string
materialCode: string
batch: string
requestInspectionNum: number
referenceOrderCode: string
referenceOrderRow: number
referenceCertificateCode: string
referenceCertificateRow: number
inspectionSchemeCode: string
inspectionStageCode: string
applicationPackageCode: string
inspectionLevel: string
aqlValue: number
available: string
}
// 查询检验申请列表 // 查询检验申请列表
export const getInspectionJobDetailPage = async (params) => { export const getInspectionJobDetailPage = async (params) => {
@ -44,12 +22,12 @@ export const getInspectionJobDetail = async (id: number) => {
} }
// 新增检验申请 // 新增检验申请
export const createInspectionJobDetail = async (data: InspectionJobDetailVO) => { export const createInspectionJobDetail = async (data) => {
return await request.post({ url: `/qms/inspection-job-detail/create`, data }) return await request.post({ url: `/qms/inspection-job-detail/create`, data })
} }
// 修改检验申请 // 修改检验申请
export const updateInspectionJobDetail = async (data: InspectionJobDetailVO) => { export const updateInspectionJobDetail = async (data) => {
return await request.put({ url: `/qms/inspection-job-detail/update`, data }) return await request.put({ url: `/qms/inspection-job-detail/update`, data })
} }

48
src/api/qms/inspectionRecord/inspectionRecordDetail/index.ts

@ -1,65 +1,47 @@
import request from '@/config/axios' import request from '@/config/axios'
export interface InspectionRecordDetailVO {
number: string
applicationDate: localdate
applicationTime: Date
requestStartTime: Date
requestEndTime: Date
finishTime: Date
supplierCode: string
materialCode: string
batch: string
requestInspectionNum: number
referenceOrderCode: string
referenceOrderRow: number
referenceCertificateCode: string
referenceCertificateRow: number
inspectionSchemeCode: string
inspectionStageCode: string
applicationPackageCode: string
inspectionLevel: string
aqlValue: number
available: string
}
// 查询检验申请列表 // 查询检验申请列表
export const getInspectionRecordDetailPage = async (params) => { export const getInspectionRecordDetailPage = 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: '/inspection/inspection-recordord-detail/senior', data }) return await request.post({ url: '/qms/inspection-record-detail/senior', data })
} else { } else {
return await request.get({ url: `/inspection/inspectirecordrecord-detail/page`, params }) return await request.get({ url: `/qms/inspection-record-detail/page`, params })
} }
} }
// 查询检验申请列表
export const getInspectionRecordDetailList = async (id: number) => {
return await request.get({ url: `/qms/inspection-record-detail/list?masterId=` + id })
}
// 查询检验申请详情 // 查询检验申请详情
export const getInspectionRecordDetail = async (id: number) => { export const getInspectionRecordDetail = async (id: number) => {
return await request.get({ url: `/inspection/insperecordon-record-detail/get?id=` + id }) return await request.get({ url: `/qms/inspection-record-detail/get?id=` + id })
} }
// 新增检验申请 // 新增检验申请
export const createInspectionRecordDetail = async (data: InspectionRecordDetailVO) => { export const createInspectionRecordDetail = async (data) => {
return await request.post({ url: `/inspection/inrecordction-record-detail/create`, data }) return await request.post({ url: `/qms/inspection-record-detail/create`, data })
} }
// 修改检验申请 // 修改检验申请
export const updateInspectionRecordDetail = async (data: InspectionRecordDetailVO) => { export const updateInspectionRecordDetail = async (data) => {
return await request.put({ url: `/inspectionrecordspection-record-detail/update`, data }) return await request.put({ url: `/qms/inspection-record-detail/update`, data })
} }
// 删除检验申请 // 删除检验申请
export const deleteInspectionRecordDetail = async (id: number) => { export const deleteInspectionRecordDetail = async (id: number) => {
return await request.delete({ url: `/inspectrecord/inspection-record-detail/delete?id=` + id }) return await request.delete({ url: `/qms/inspection-record-detail/delete?id=` + id })
} }
// 导出检验申请 Excel // 导出检验申请 Excel
export const exportInspectionRecordDetail = async (params) => { export const exportInspectionRecordDetail = async (params) => {
return await request.download({ url: `/insprecordion/inspection-record-detail/export-excel`, params }) return await request.download({ url: `/qms/inspection-record-detail/export-excel`, params })
} }
// 下载用户导入模板 // 下载用户导入模板
export const importTemplate = () => { export const importTemplate = () => {
return request.download({ url: '/irecordection/inspection-record-detail/get-import-template' }) return request.download({ url: '/qms/inspection-record-detail/get-import-template' })
} }

16
src/api/qms/inspectionRecord/inspectionRecordMain/index.ts

@ -28,38 +28,38 @@ export const getInspectionRecordMainPage = 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: '/inspection/inspection-record-main/senior', data }) return await request.post({ url: '/qms/inspection-record-main/senior', data })
} else { } else {
return await request.get({ url: `/inspection/inspection-record-main/page`, params }) return await request.get({ url: `/qms/inspection-record-main/page`, params })
} }
} }
// 查询检验申请详情 // 查询检验申请详情
export const getInspectionRecordMain = async (id: number) => { export const getInspectionRecordMain = async (id: number) => {
return await request.get({ url: `/inspection/inspection-record-main/get?id=` + id }) return await request.get({ url: `/qms/inspection-record-main/get?id=` + id })
} }
// 新增检验申请 // 新增检验申请
export const createInspectionRecordMain = async (data: InspectionRecordMainVO) => { export const createInspectionRecordMain = async (data: InspectionRecordMainVO) => {
return await request.post({ url: `/inspection/inspection-record-main/create`, data }) return await request.post({ url: `/qms/inspection-record-main/create`, data })
} }
// 修改检验申请 // 修改检验申请
export const updateInspectionRecordMain = async (data: InspectionRecordMainVO) => { export const updateInspectionRecordMain = async (data: InspectionRecordMainVO) => {
return await request.put({ url: `/inspection/inspection-record-main/update`, data }) return await request.put({ url: `/qms/inspection-record-main/update`, data })
} }
// 删除检验申请 // 删除检验申请
export const deleteInspectionRecordMain = async (id: number) => { export const deleteInspectionRecordMain = async (id: number) => {
return await request.delete({ url: `/inspection/inspection-record-main/delete?id=` + id }) return await request.delete({ url: `/qms/inspection-record-main/delete?id=` + id })
} }
// 导出检验申请 Excel // 导出检验申请 Excel
export const exportInspectionRecordMain = async (params) => { export const exportInspectionRecordMain = async (params) => {
return await request.download({ url: `/inspection/inspection-record-main/export-excel`, params }) return await request.download({ url: `/qms/inspection-record-main/export-excel`, params })
} }
// 下载用户导入模板 // 下载用户导入模板
export const importTemplate = () => { export const importTemplate = () => {
return request.download({ url: '/inspection/inspection-record-main/get-import-template' }) return request.download({ url: '/qms/inspection-record-main/get-import-template' })
} }

75
src/api/wms/supplierinvoiceInvoiced/index.ts

@ -0,0 +1,75 @@
import request from '@/config/axios'
export interface SupplierinvoiceInvoicedVO {
id: number
tax: number
projectCode: string
billType: string
recvBillNum: string
asnBillNum: string
supplierCode: string
poNumber: string
poLine: string
purchasePrice: number
invoicableQuantity: number
itemCode: string
uom: string
currency: string
remark: string
deletionTime: Date
deleterId: string
extraProperties: string
concurrencyStamp: number
siteId: string
}
// 查询待开票列表
export const getSupplierinvoiceInvoicedPage = async (params) => {
if (params.isSearch) {
delete params.isSearch
const data = {...params}
return await request.post({ url: '/wms/supplierinvoice-invoiced/senior', data })
} else {
return await request.get({ url: `/wms/supplierinvoice-invoiced/page`, params })
}
}
// 查询待开票详情
export const getSupplierinvoiceInvoiced = async (id: number) => {
return await request.get({ url: `/wms/supplierinvoice-invoiced/get?id=` + id })
}
// 新增待开票
export const createSupplierinvoiceInvoiced = async (data: SupplierinvoiceInvoicedVO) => {
return await request.post({ url: `/wms/supplierinvoice-invoiced/create`, data })
}
// 修改待开票
export const updateSupplierinvoiceInvoiced = async (data: SupplierinvoiceInvoicedVO) => {
return await request.put({ url: `/wms/supplierinvoice-invoiced/update`, data })
}
// 删除待开票
export const deleteSupplierinvoiceInvoiced = async (id: number) => {
return await request.delete({ url: `/wms/supplierinvoice-invoiced/delete?id=` + id })
}
// 导出待开票 Excel
export const exportSupplierinvoiceInvoiced = async (params) => {
return await request.download({ url: `/wms/supplierinvoice-invoiced/export-excel`, params })
}
// 下载用户导入模板
export const importTemplate = () => {
return request.download({ url: '/wms/supplierinvoice-invoiced/get-import-template' })
}
// 审批通过待开票
export const agreeSupplierinvoiceInvoiced = async (id: number) => {
return await request.post({ url: `/wms/supplierinvoice-invoiced/agree?id=` + id })
}
// 审批拒绝待开票
export const refuseSupplierinvoiceInvoiced = async (id: number) => {
return await request.post({ url: `/wms/supplierinvoice-invoiced/refuse?id=` + id })
}

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

@ -77,6 +77,11 @@ export const rejSupplierinvoiceRequestMain = async (id: number) => {
return await request.post({ url: `/wms/supplierinvoice-request-main/rej?id=` + id }) return await request.post({ url: `/wms/supplierinvoice-request-main/rej?id=` + id })
} }
// 供应商--发票寄出
export const invoiceSentOutSupplierinvoiceRequestMain = async (id: number) => {
return await request.post({ url: `/wms/supplierinvoice-request-main/invoiceSentOut?id=` + id })
}
// 财务--审批通过供应商发货申请主 // 财务--审批通过供应商发货申请主
export const financeappSupplierinvoiceRequestMain = async (id: number) => { export const financeappSupplierinvoiceRequestMain = async (id: number) => {
return await request.post({ url: `/wms/supplierinvoice-request-main/financeApp?id=` + id }) return await request.post({ url: `/wms/supplierinvoice-request-main/financeApp?id=` + id })

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

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

28
src/components/Verifition/src/Verify/VerifyPoints.vue

@ -148,6 +148,8 @@ onMounted(() => {
} }
}) })
const canvas = ref(null) const canvas = ref(null)
const timer1 = ref<NodeJS.Timeout | number>(0)
const timer2 = ref<NodeJS.Timeout | number>(0)
const canvasClick = (e) => { const canvasClick = (e) => {
checkPosArr.push(getMousePos(canvas, e)) checkPosArr.push(getMousePos(canvas, e))
if (num.value == checkNum.value) { if (num.value == checkNum.value) {
@ -157,7 +159,7 @@ const canvasClick = (e) => {
checkPosArr.length = 0 checkPosArr.length = 0
checkPosArr.push(...arr) checkPosArr.push(...arr)
// //
setTimeout(() => { timer1.value = setTimeout(() => {
// var flag = this.comparePos(this.fontPos, this.checkPosArr); // var flag = this.comparePos(this.fontPos, this.checkPosArr);
// //
var captchaVerification = secretKey.value var captchaVerification = secretKey.value
@ -177,9 +179,13 @@ const canvasClick = (e) => {
text.value = t('captcha.success') text.value = t('captcha.success')
bindingClick.value = false bindingClick.value = false
if (mode.value == 'pop') { if (mode.value == 'pop') {
setTimeout(() => { timer2.value = setTimeout(() => {
proxy.$parent.clickShow = false proxy.$parent.clickShow = false
refresh() refresh()
if(timer2.value){
clearTimeout(timer2.value)
timer2.value = 0
}
}, 1500) }, 1500)
} }
proxy.$parent.$emit('success', { captchaVerification }) proxy.$parent.$emit('success', { captchaVerification })
@ -188,17 +194,33 @@ const canvasClick = (e) => {
barAreaColor.value = '#d9534f' barAreaColor.value = '#d9534f'
barAreaBorderColor.value = '#d9534f' barAreaBorderColor.value = '#d9534f'
text.value = t('captcha.fail') text.value = t('captcha.fail')
setTimeout(() => { timer2.value = setTimeout(() => {
refresh() refresh()
if(timer2.value){
clearTimeout(timer2.value)
timer2.value = 0
}
}, 700) }, 700)
} }
}) })
if(timer1.value){
clearTimeout(timer1.value)
timer1.value = 0
}
}, 400) }, 400)
} }
if (num.value < checkNum.value) { if (num.value < checkNum.value) {
num.value = createPoint(getMousePos(canvas, e)) num.value = createPoint(getMousePos(canvas, e))
} }
} }
onBeforeUnmount(() => {
if(timer1.value){
clearTimeout(timer1.value)
}
if(timer2.value){
clearTimeout(timer2.value)
}
})
// //
const getMousePos = function (obj, e) { const getMousePos = function (obj, e) {
var x = e.offsetX var x = e.offsetX

35
src/components/Verifition/src/Verify/VerifySlide.vue

@ -295,9 +295,14 @@ const end = () => {
showRefresh.value = false showRefresh.value = false
isEnd.value = true isEnd.value = true
if (mode.value == 'pop') { if (mode.value == 'pop') {
setTimeout(() => { let timer
timer = setTimeout(() => {
proxy.$parent.clickShow = false proxy.$parent.clickShow = false
refresh() refresh()
if(timer){
clearTimeout(timer)
timer = null
}
}, 1500) }, 1500)
} }
passFlag.value = true passFlag.value = true
@ -309,10 +314,15 @@ const end = () => {
secretKey.value secretKey.value
) )
: backToken.value + '---' + JSON.stringify({ x: moveLeftDistance, y: 5.0 }) : backToken.value + '---' + JSON.stringify({ x: moveLeftDistance, y: 5.0 })
setTimeout(() => { let timer
timer = setTimeout(() => {
tipWords.value = '' tipWords.value = ''
proxy.$parent.closeBox() proxy.$parent.closeBox()
proxy.$parent.$emit('success', { captchaVerification }) proxy.$parent.$emit('success', { captchaVerification })
if(timer){
clearTimeout(timer)
timer = null
}
}, 1000) }, 1000)
} else { } else {
moveBlockBackgroundColor.value = '#d9534f' moveBlockBackgroundColor.value = '#d9534f'
@ -320,13 +330,23 @@ const end = () => {
iconColor.value = '#fff' iconColor.value = '#fff'
iconClass.value = 'icon-close' iconClass.value = 'icon-close'
passFlag.value = false passFlag.value = false
setTimeout(function () { let timer
timer = setTimeout(()=>{
refresh() refresh()
if(timer){
clearTimeout(timer)
timer = null
}
}, 1000) }, 1000)
proxy.$parent.$emit('error', proxy) proxy.$parent.$emit('error', proxy)
tipWords.value = t('captcha.fail') tipWords.value = t('captcha.fail')
setTimeout(() => { let timer1
timer1 = setTimeout(() => {
tipWords.value = '' tipWords.value = ''
if(timer1){
clearTimeout(timer1)
timer1 = null
}
}, 1000) }, 1000)
} }
}) })
@ -351,10 +371,15 @@ const refresh = async () => {
isEnd.value = false isEnd.value = false
await getPictrue() await getPictrue()
setTimeout(() => { let timer
timer = setTimeout(() => {
transitionWidth.value = '' transitionWidth.value = ''
transitionLeft.value = '' transitionLeft.value = ''
text.value = explain.value text.value = explain.value
if(timer){
clearTimeout(timer)
timer = null
}
}, 300) }, 300)
} }

33
src/components/bpmnProcessDesigner/package/penal/base/ElementBaseInfo.vue

@ -76,6 +76,9 @@ const resetBaseInfo = () => {
// elementBaseInfo.value = JSON.parse(JSON.stringify(bpmnElement.value.businessObject)) // elementBaseInfo.value = JSON.parse(JSON.stringify(bpmnElement.value.businessObject))
console.log(elementBaseInfo.value, 'elementBaseInfo22222222222') console.log(elementBaseInfo.value, 'elementBaseInfo22222222222')
} }
const timer1 = ref<NodeJS.Timeout | number>()
const timer2 = ref<NodeJS.Timeout | number>()
const timer3 = ref<NodeJS.Timeout | number>()
const handleKeyUpdate = (value) => { const handleKeyUpdate = (value) => {
// value XML NCName // value XML NCName
if (!value) { if (!value) {
@ -90,8 +93,12 @@ const handleKeyUpdate = (value) => {
// BPMN XML key id // BPMN XML key id
elementBaseInfo.value['id'] = value elementBaseInfo.value['id'] = value
setTimeout(() => { timer1.value = setTimeout(() => {
updateBaseInfo('id') updateBaseInfo('id')
if(timer1.value){
clearTimeout(timer1.value)
timer1.value = 0
}
}, 100) }, 100)
} }
const handleNameUpdate = (value) => { const handleNameUpdate = (value) => {
@ -101,8 +108,12 @@ const handleNameUpdate = (value) => {
} }
elementBaseInfo.value['name'] = value elementBaseInfo.value['name'] = value
setTimeout(() => { timer2.value = setTimeout(() => {
updateBaseInfo('name') updateBaseInfo('name')
if(timer2.value){
clearTimeout(timer2.value)
timer2.value = 0
}
}, 100) }, 100)
} }
// const handleDescriptionUpdate=(value)=> { // const handleDescriptionUpdate=(value)=> {
@ -140,10 +151,14 @@ const updateBaseInfo = (key) => {
} }
onMounted(() => { onMounted(() => {
// bpmn 1 key name // bpmn 1 key name
setTimeout(() => { timer3.value = setTimeout(() => {
console.log(props.model, 'props.model') console.log(props.model, 'props.model')
handleKeyUpdate(props.model.key) handleKeyUpdate(props.model.key)
handleNameUpdate(props.model.name) handleNameUpdate(props.model.name)
if(timer3.value){
clearTimeout(timer3.value)
timer3.value = 0
}
console.log(props, 'propsssssssssssssssssssss') console.log(props, 'propsssssssssssssssssssss')
}, 1000) }, 1000)
}) })
@ -180,5 +195,17 @@ watch(
// } // }
onBeforeUnmount(() => { onBeforeUnmount(() => {
bpmnElement.value = null bpmnElement.value = null
if(timer1.value){
clearTimeout(timer1.value)
timer1.value = 0
}
if(timer2.value){
clearTimeout(timer2.value)
timer2.value = 0
}
if(timer3.value){
clearTimeout(timer3.value)
timer3.value = 0
}
}) })
</script> </script>

8
src/components/bpmnProcessDesigner/src/utils/directive/clickOutSide.js

@ -22,9 +22,13 @@ export default {
methodName: binding.expression, methodName: binding.expression,
bindingFn: binding.value bindingFn: binding.value
} }
let timer
setTimeout(() => { timer = setTimeout(() => {
document.addEventListener('touchstart', documentHandler) // 为document绑定事件 document.addEventListener('touchstart', documentHandler) // 为document绑定事件
if(timer){
clearTimeout(timer)
timer = null
}
}) })
}, },
update(el, binding) { update(el, binding) {

25
src/components/iFrame/src/IFrame.vue

@ -14,6 +14,8 @@ const init = () => {
height.value = document.documentElement.clientHeight - 94.5 + 'px' height.value = document.documentElement.clientHeight - 94.5 + 'px'
loading.value = false loading.value = false
} }
const timer1 = ref<NodeJS.Timeout | number>()
const timer2 = ref<NodeJS.Timeout | number>()
console.log(props.src); console.log(props.src);
function populateIframe(iframe, headers) { function populateIframe(iframe, headers) {
@ -37,14 +39,33 @@ function populateIframe(iframe, headers) {
onMounted(() => { onMounted(() => {
setTimeout(() => { timer1.value = setTimeout(() => {
var iframe = document.querySelector("#iframe"); var iframe = document.querySelector("#iframe");
populateIframe(iframe, [["Authorization", 'Bearer ' + getAccessToken()], ["tenant-id", getTenantId()]]); populateIframe(iframe, [["Authorization", 'Bearer ' + getAccessToken()], ["tenant-id", getTenantId()]]);
if(timer1.value){
clearTimeout(timer1.value)
timer1.value = 0
}
}, 300); }, 300);
setTimeout(() => { timer2.value = setTimeout(() => {
init() init()
if(timer2.value){
clearTimeout(timer2.value)
timer2.value = 0
}
}, 300) }, 300)
}) })
onBeforeUnmount(() => {
if(timer1.value){
clearTimeout(timer1.value)
timer1.value = 0
}
if(timer2.value){
clearTimeout(timer2.value)
timer2.value = 0
}
})
</script> </script>
<template> <template>
<div v-loading="loading" :style="'height:' + height"> <div v-loading="loading" :style="'height:' + height">

13
src/layout/components/Logo/src/Logo.vue

@ -18,6 +18,7 @@ const title = computed(() => appStore.getTitle)
const layout = computed(() => appStore.getLayout) const layout = computed(() => appStore.getLayout)
const collapse = computed(() => appStore.getCollapse) const collapse = computed(() => appStore.getCollapse)
const timer = ref<NodeJS.Timeout | number>()
onMounted(() => { onMounted(() => {
if (unref(collapse)) show.value = false if (unref(collapse)) show.value = false
@ -31,14 +32,24 @@ watch(
return return
} }
if (!collapse) { if (!collapse) {
setTimeout(() => { timer.value = setTimeout(() => {
show.value = !collapse show.value = !collapse
if(timer.value){
clearTimeout(timer.value)
timer.value = 0
}
}, 400) }, 400)
} else { } else {
show.value = !collapse show.value = !collapse
} }
} }
) )
onBeforeUnmount(() => {
if(timer.value){
clearTimeout(timer.value)
timer.value = 0
}
})
watch( watch(
() => layout.value, () => layout.value,

14
src/layout/components/Message/src/Message.vue

@ -8,7 +8,7 @@ const { push } = useRouter()
const activeName = ref('notice') const activeName = ref('notice')
const unreadCount = ref(0) // const unreadCount = ref(0) //
const list = ref<any[]>([]) // const list = ref<any[]>([]) //
const interval = ref<NodeJS.Timeout | number>()
// //
const getList = async () => { const getList = async () => {
list.value = await NotifyMessageApi.getUnreadNotifyMessageList() list.value = await NotifyMessageApi.getUnreadNotifyMessageList()
@ -35,13 +35,23 @@ onMounted(() => {
// //
getUnreadCount() getUnreadCount()
// //
setInterval( interval.value = setInterval(
() => { () => {
getUnreadCount() getUnreadCount()
if(interval.value){
clearInterval(interval.value)
interval.value = 0
}
}, },
1000 * 60 * 2 1000 * 60 * 2
) )
}) })
onBeforeUnmount(() => {
if(interval.value){
clearInterval(interval.value)
interval.value = 0
}
})
</script> </script>
<template> <template>
<div class="message"> <div class="message">

13
src/layout/components/TabMenu/src/TabMenu.vue

@ -37,6 +37,7 @@ export default defineComponent({
const setCollapse = () => { const setCollapse = () => {
appStore.setCollapse(!unref(collapse)) appStore.setCollapse(!unref(collapse))
} }
const timer = ref<NodeJS.Timeout | number>()
onMounted(() => { onMounted(() => {
if (unref(fixedMenu)) { if (unref(fixedMenu)) {
@ -77,14 +78,24 @@ export default defineComponent({
() => collapse.value, () => collapse.value,
(collapse: boolean) => { (collapse: boolean) => {
if (!collapse) { if (!collapse) {
setTimeout(() => { timer.value = setTimeout(() => {
showTitle.value = !collapse showTitle.value = !collapse
if(timer.value){
clearTimeout(timer.value)
timer.value = 0
}
}, 200) }, 200)
} else { } else {
showTitle.value = !collapse showTitle.value = !collapse
} }
} }
) )
onBeforeUnmount(() => {
if(timer.value){
clearTimeout(timer.value)
timer.value = 0
}
})
// //
const showMenu = ref(unref(fixedMenu) ? true : false) const showMenu = ref(unref(fixedMenu) ? true : false)

2
src/utils/dict.ts

@ -313,5 +313,5 @@ export enum DICT_TYPE {
REWORK_STATUS='rework_status',//返工返修状态:待返修,返修中,返修完成 REWORK_STATUS='rework_status',//返工返修状态:待返修,返修中,返修完成
REWORK_REPLACE_FLAG = 'rework_replace_flag',//是否有替换件 REWORK_REPLACE_FLAG = 'rework_replace_flag',//是否有替换件
SUPPLIERINVOICE_REQUEST_STATUS = 'supplierinvoice_request_status', //发票申请状态 SUPPLIERINVOICE_REQUEST_STATUS = 'supplierinvoice_request_status', //发票申请状态
SUPPLIERINVOICE_STATUS = 'supplierinvoice_status', //待开票审核状态
} }

14
src/views/bpm/model/editor/index.vue

@ -49,14 +49,26 @@ const controlForm = ref({
additionalModel: [CustomContentPadProvider, CustomPaletteProvider] additionalModel: [CustomContentPadProvider, CustomPaletteProvider]
}) })
const model = ref<ModelApi.ModelVO>() // const model = ref<ModelApi.ModelVO>() //
const timer = ref<NodeJS.Timeout | number>()
/** 初始化 modeler */ /** 初始化 modeler */
const initModeler = (item) => { const initModeler = (item) => {
setTimeout(() => { timer.value = setTimeout(() => {
modeler.value = item modeler.value = item
if(timer.value){
clearTimeout(timer.value)
timer.value = 0
}
}, 10) }, 10)
} }
onBeforeUnmount(() => {
if(timer.value){
clearTimeout(timer.value)
timer.value = 0
}
})
/** 添加/修改模型 */ /** 添加/修改模型 */
const save = async (bpmnXml) => { const save = async (bpmnXml) => {
const data = { const data = {

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

@ -224,7 +224,7 @@ const handleLogin = async (params) => {
console.log('登录-224') console.log('登录-224')
getCode() getCode()
loginLoading.value = false loginLoading.value = false
loading.value.close() loading?.value?.close()
} }
} }

23
src/views/login/components/MobileForm.vue

@ -148,6 +148,8 @@ const smsVO = reactive({
} }
}) })
const mobileCodeTimer = ref(0) const mobileCodeTimer = ref(0)
const msgTimer = ref<NodeJS.Timeout | number>()
const timer = ref<NodeJS.Timeout | number>()
const redirect = ref<string>('') const redirect = ref<string>('')
const getSmsCode = async () => { const getSmsCode = async () => {
await getTenantId() await getTenantId()
@ -156,14 +158,25 @@ const getSmsCode = async () => {
message.success(t('login.SmsSendMsg')) message.success(t('login.SmsSendMsg'))
// //
mobileCodeTimer.value = 60 mobileCodeTimer.value = 60
let msgTimer = setInterval(() => { msgTimer.value = setInterval(() => {
mobileCodeTimer.value = mobileCodeTimer.value - 1 mobileCodeTimer.value = mobileCodeTimer.value - 1
if (mobileCodeTimer.value <= 0) { if (mobileCodeTimer.value <= 0) {
clearInterval(msgTimer) clearInterval(msgTimer.value)
msgTimer.value = 0
} }
}, 1000) }, 1000)
}) })
} }
onBeforeUnmount(() => {
if(msgTimer.value){
clearInterval(msgTimer.value)
msgTimer.value = 0
}
if(timer.value){
clearTimeout(timer.value)
timer.value = 0
}
})
watch( watch(
() => currentRoute.value, () => currentRoute.value,
(route: RouteLocationNormalizedLoaded) => { (route: RouteLocationNormalizedLoaded) => {
@ -204,9 +217,13 @@ const signIn = async () => {
.catch(() => {}) .catch(() => {})
.finally(() => { .finally(() => {
loginLoading.value = false loginLoading.value = false
setTimeout(() => { timer.value = setTimeout(() => {
const loadingInstance = ElLoading.service() const loadingInstance = ElLoading.service()
loadingInstance.close() loadingInstance.close()
if(timer.value){
clearTimeout(timer.value)
timer.value = 0
}
}, 400) }, 400)
}) })
} }

52
src/views/mes/ordermonthplan/index.vue

@ -57,13 +57,14 @@
:detailAllSchemas="detailAllSchemas" :detailAllSchemas="detailAllSchemas"
:detailAllSchemasRules="MesOrderMonthSubRules" :detailAllSchemasRules="MesOrderMonthSubRules"
:apiPage="MesOrderMonthApi.getMesOrderMonthSubPage" :apiPage="MesOrderMonthApi.getMesOrderMonthSubPage"
:apiCreate="MesOrderMonthApi.createMesOrderMonthSub" :apiCreate="createMesOrderMonthSub"
:apiUpdate="MesOrderMonthApi.updateMesOrderMonthSub" :apiUpdate="updateMesOrderMonthSub"
:apiDelete="MesOrderMonthApi.deleteMesOrderMonthSub" :apiDelete="MesOrderMonthApi.deleteMesOrderMonthSub"
:tabs="TabsList" :tabs="TabsList"
:detailButtonIsShowDelete="true" :detailButtonIsShowDelete="true"
:detailButtonIsShowEdit="true" :detailButtonIsShowEdit="true"
:detailButtonIsShowAdd="true" :detailButtonIsShowAdd="true"
@searchTableSuccessDetail="searchTableSuccess"
/> />
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/plan/mes-order-month-main/import" <ImportForm ref="importFormRef" url="/plan/mes-order-month-main/import"
@ -81,6 +82,8 @@ import {
MesOrderMonthSub, MesOrderMonthSub,
MesOrderMonthSubRules MesOrderMonthSubRules
} from "@/views/mes/ordermonthplan/mesOrderMonthSub.data"; } from "@/views/mes/ordermonthplan/mesOrderMonthSub.data";
import * as OrderDayApi from "@/api/mes/orderDay";
import {MesOrderMonthSubVO} from "@/api/mes/ordermonthplan";
defineOptions({ name: 'MesOrderMonthMain' }) defineOptions({ name: 'MesOrderMonthMain' })
@ -91,14 +94,6 @@ const routeName = ref()
routeName.value = route.name routeName.value = route.name
const tableColumns = ref(MesOrderMonthMain.allSchemas.tableColumns) const tableColumns = ref(MesOrderMonthMain.allSchemas.tableColumns)
//
const searchTableSuccess = (formField, searchField, val, formRef) => {
nextTick(() => {
const setV = {}
setV[formField] = val[0][searchField]
formRef.setValues(setV)
})
}
// //
const updataTableColumns = (val) => { const updataTableColumns = (val) => {
tableColumns.value = val tableColumns.value = val
@ -111,6 +106,7 @@ const { tableObject, tableMethods } = useTable({
// //
const { getList, setSearchParams } = tableMethods const { getList, setSearchParams } = tableMethods
// //
const HeadButttondata = [ const HeadButttondata = [
defaultButtons.defaultAddBtn({hasPermi: 'mes:ordermonthplan:create'}), // defaultButtons.defaultAddBtn({hasPermi: 'mes:ordermonthplan:create'}), //
@ -255,4 +251,40 @@ onMounted(async () => {
importTemplateData.templateUrl = await MesOrderMonthApi.importTemplate() importTemplateData.templateUrl = await MesOrderMonthApi.importTemplate()
}) })
const detailAllSchemas = ref(MesOrderMonthSub.allSchemas) const detailAllSchemas = ref(MesOrderMonthSub.allSchemas)
//
let productName
const searchTableSuccess = (formField, searchField, val, formRef) => {
nextTick(() => {
const setV = {}
setV[formField] = val[0][searchField]
formRef.setValues(setV)
if(formField=='productCode'){
//formRef.setValues({standardBom:'bomddd'})
// getProcessroutes(val[0][searchField])
productName = val[0].name
getBoms(val[0][searchField])
}
// if(formField=='workroomCode'){
// getProductlines(val[0][searchField])
// }
})
}
const bomOptions=ref([])
const getBoms = async (code: String) => {
bomOptions.value = await OrderDayApi.getBoms(code)
MesOrderMonthSub.allSchemas.formSchema.forEach(item => {
if (item.field == 'bomCode') {
item.componentProps.options = bomOptions.value
}
})
}
const createMesOrderMonthSub = async (data: MesOrderMonthSubVO) => {
data.productName = productName
return await MesOrderMonthApi.createMesOrderMonthSub(data)
}
const updateMesOrderMonthSub = async (data: MesOrderMonthSubVO) => {
data.productName = productName
return await MesOrderMonthApi.updateMesOrderMonthSub(data)
}
</script> </script>

61
src/views/mes/ordermonthplan/mesOrderMonthSub.data.ts

@ -1,6 +1,9 @@
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 {Itembasic} from "@/views/wms/basicDataManage/itemManage/itembasic/itembasic.data";
import * as ItembasicApi from "@/api/wms/itembasic";
import {Warehouse} from "@/views/wms/basicDataManage/factoryModeling/warehouse/warehouse.data";
import * as WorehouseApi from "@/api/wms/warehouse";
// 表单校验 // 表单校验
export const MesOrderMonthSubRules = reactive({ export const MesOrderMonthSubRules = reactive({
productCode: [required], productCode: [required],
@ -19,7 +22,33 @@ export const MesOrderMonthSub = useCrudSchemas(reactive<CrudSchema[]>([
field: 'productCode', field: 'productCode',
sort: 'custom', sort: 'custom',
isTable: false, isTable: false,
isSearch: true isSearch: true,
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '产品编码', // 输入框占位文本
searchField: 'code', // 查询弹窗赋值字段
searchTitle: '产品信息', // 查询弹窗标题
searchAllSchemas: Itembasic.allSchemas, // 查询弹窗所需类
searchPage: ItembasicApi.getItembasicPage, // 查询弹窗所需分页方法
isHideFilterButton:true,
searchCondition: [{
key: 'available',
value: 'TRUE',
isMainValue: false
},
{
key: 'type',
action: 'in', // 查询拼接条件
isSearch: true, // 使用自定义拼接条件
value: 'CCP,BCP',//,SEMI]
isMainValue: false
},
]
}
}
}, },
{ {
label: '产品名称', label: '产品名称',
@ -33,13 +62,37 @@ export const MesOrderMonthSub = useCrudSchemas(reactive<CrudSchema[]>([
field: 'bomCode', field: 'bomCode',
sort: 'custom', sort: 'custom',
isTable: false, isTable: false,
isSearch: true isSearch: true,
form: {
component:'Select',
componentProps: {
options: [{lablel:'bom',value:'bom'}]
}
}
}, },
{ {
label: '入库仓库编码', label: '入库仓库编码',
field: 'inStoreCode', field: 'inStoreCode',
sort: 'custom', sort: 'custom',
isSearch: true isSearch: true,
form: {
// labelMessage: '信息提示说明!!!',
componentProps: {
isSearchList: true, // 开启查询弹窗
searchListPlaceholder: '请选择', // 输入框占位文本
searchField: 'code', // 查询弹窗赋值字段
searchTitle: '仓库编码', // 查询弹窗标题
searchAllSchemas: Warehouse.allSchemas, // 查询弹窗所需类
searchPage: WorehouseApi.getWarehousePage, // 查询弹窗所需分页方法
isHideFilterButton:true,
searchCondition: [{
key: 'available',
value: 'TRUE',
isMainValue: false
}
]
}
}
}, },
{ {
label: '计划数量', label: '计划数量',

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

@ -48,152 +48,152 @@ export const Aql = useCrudSchemas(reactive<CrudSchema[]>([
}, },
{ {
label: 'A0_010', label: 'A0_010',
field: 'a0Separator010', field: 'a0separator010',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R0_010', label: 'R0_010',
field: 'r0Separator010', field: 'r0separator010',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A0_015', label: 'A0_015',
field: 'a0Separator015', field: 'a0separator015',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R0_015', label: 'R0_015',
field: 'r0Separator015', field: 'r0separator015',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A0_025', label: 'A0_025',
field: 'a0Separator025', field: 'a0separator025',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R0_025', label: 'R0_025',
field: 'r0Separator025', field: 'r0separator025',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A0_040', label: 'A0_040',
field: 'a0Separator040', field: 'a0separator040',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R0_040', label: 'R0_040',
field: 'r0Separator040', field: 'r0separator040',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A0_065', label: 'A0_065',
field: 'a0Separator065', field: 'a0separator065',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R0_065', label: 'R0_065',
field: 'r0Separator065', field: 'r0separator065',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A0_10', label: 'A0_10',
field: 'a0Separator10', field: 'a0separator10',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R0_10', label: 'R0_10',
field: 'r0Separator10', field: 'r0separator10',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A0_15', label: 'A0_15',
field: 'a0Separator15', field: 'a0separator15',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R0_15', label: 'R0_15',
field: 'r0Separator15', field: 'r0separator15',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A0_25', label: 'A0_25',
field: 'a0Separator25', field: 'a0separator25',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R0_25', label: 'R0_25',
field: 'r0Separator25', field: 'r0separator25',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A0_40', label: 'A0_40',
field: 'a0Separator40', field: 'a0separator40',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R0_40', label: 'R0_40',
field: 'r0Separator40', field: 'r0separator40',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A0_65', label: 'A0_65',
field: 'a0Separator65', field: 'a0separator65',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R0_65', label: 'R0_65',
field: 'r0Separator65', field: 'r0separator65',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A1_0', label: 'A1_0',
field: 'a1Separator0', field: 'a1separator0',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R1_0', label: 'R1_0',
field: 'r1Separator0', field: 'r1separator0',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A1_5', label: 'A1_5',
field: 'a1Separator5', field: 'a1separator5',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R1_5', label: 'R1_5',
field: 'r1Separator5', field: 'r1separator5',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A2_5', label: 'A2_5',
field: 'a2Separator5', field: 'a2separator5',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R2_5', label: 'R2_5',
field: 'r2Separator5', field: 'r2separator5',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A4_0', label: 'A4_0',
field: 'a4Separator0', field: 'a4separator0',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R4_0', label: 'R4_0',
field: 'r4Separator0', field: 'r4separator0',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'A6_5', label: 'A6_5',
field: 'a6Separator5', field: 'a6separator5',
sort: 'custom', sort: 'custom',
}, },
{ {
label: 'R6_5', label: 'R6_5',
field: 'r6Separator5', field: 'r6separator5',
sort: 'custom', sort: 'custom',
}, },
{ {

79
src/views/qms/inspection/inspectionJob/addForm.vue

@ -20,7 +20,6 @@
/> />
<el-tabs <el-tabs
v-model="editableTabsValue" v-model="editableTabsValue"
editable
class="demo-tabs" class="demo-tabs"
@edit="handleTabsEdit" @edit="handleTabsEdit"
type="border-card" type="border-card"
@ -207,7 +206,6 @@
<el-col :span="12" v-if="item.inspectionJobCharacteristicsUpdateReqVO.resultEntryMethod == 1"> <el-col :span="12" v-if="item.inspectionJobCharacteristicsUpdateReqVO.resultEntryMethod == 1">
<el-form-item label="合格数量"> <el-form-item label="合格数量">
<el-input v-model="cur.qualifiedQuantity" placeholder="请输入合格数量"/> <el-input v-model="cur.qualifiedQuantity" placeholder="请输入合格数量"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12" v-if="item.inspectionJobCharacteristicsUpdateReqVO.resultEntryMethod == 1"> <el-col :span="12" v-if="item.inspectionJobCharacteristicsUpdateReqVO.resultEntryMethod == 1">
@ -315,6 +313,9 @@ import { DynamicRule } from '@/views/qms/basicDataManage/dynamicRule/dynamicRule
import * as SelectedSetApi from '@/api/qms/selectedSet' // import * as SelectedSetApi from '@/api/qms/selectedSet' //
import { SelectedSet } from '@/views/qms/basicDataManage/selectedSet/selectedSet.data' // import { SelectedSet } from '@/views/qms/basicDataManage/selectedSet/selectedSet.data' //
const { proxy } = getCurrentInstance()
const message = useMessage() // const message = useMessage() //
const props = defineProps({ const props = defineProps({
@ -441,6 +442,9 @@ const rules = ref({
'inspectionJobCharacteristicsUpdateReqVO.inspectionEndTime': [ 'inspectionJobCharacteristicsUpdateReqVO.inspectionEndTime': [
{ required: true, message: '请输入选择结束时间', trigger: 'blur' } { required: true, message: '请输入选择结束时间', trigger: 'blur' }
], ],
qualifiedQuantity: [
{ required: true, message: '请输入选择结束时间', trigger: 'blur' }
],
}) })
@ -638,50 +642,45 @@ const submitForm = async () => {
const valid = await elForm.validate() const valid = await elForm.validate()
if (!valid) return if (!valid) return
// const bol1 = await validateForm(formProcessRef.value) // const bol1 = await validateForm(formProcessRef.value)
// const bol2 = await validateForm(formFeaturesRef.value) const bol2 = await validateForm(formFeaturesRef.value)
// console.log(bol2) if (!bol2) {
// if (!bol2) { message.error(`模板中有检验工序和检验特性未填写完全`)
// message.error(``) return
// return }
// }
// //
let arrBol = data.value.subList.map((item, index) => { let arrBol = data.value.subList.map((item, index) => {
let arr1 = []
if(item.inspectionJobCharacteristicsUpdateReqVO.resultEntryMethod == 1){ if(item.inspectionJobCharacteristicsUpdateReqVO.resultEntryMethod == 1){
return item.inspectionJobCharacteristicsUpdateReqVO.recordInspectionQuantifyList.some((cur,key) =>{ arr1.push(item.inspectionJobCharacteristicsUpdateReqVO.recordInspectionQuantifyList.some((cur,key) =>{
return !cur.qualifiedQuantity || !cur.unqualifiedQuantity return !cur.qualifiedQuantity || !cur.unqualifiedQuantity
}) }))
} }
}) if(item.samplingProcessRespVO.evaluationMode == 1){
console.log(arrBol) arr1.push(item.inspectionJobCharacteristicsUpdateReqVO.recordInspectionQuantifyList.some((cur,key) =>{
let isEmpty1 = arrBol.some(item=>item== true) return !cur.estimateCode ||!cur.defectLevel
if (isEmpty1) { }))
proxy.$modal.msgError("请填写完整信息");
return;
} }
return if(item.inspectionJobCharacteristicsUpdateReqVO.featureType == 0){
// if (!data.value.process || data.value.process.length == 0) { arr1.push( item.inspectionJobCharacteristicsUpdateReqVO.recordInspectionQuantifyList.some((cur,key) =>{
// message.error(``) return !cur.inspectionValue
// return }))
// } }
// const bol1 = await validateForm(formProcessRef.value) if(item.inspectionJobCharacteristicsUpdateReqVO.featureType == 1){
// const bol2 = await validateForm(formFeaturesRef.value) arr1.push(item.inspectionJobCharacteristicsUpdateReqVO.recordInspectionQuantifyList.some((cur,key) =>{
// if (!bol1 || !bol2) { return !cur.qualitativeCode
// message.error(``) }))
// return }
// } return arr1
// const arr = data.value.process.filter( })
// (item) => // console.log(arrBol)
// !item.inspectionJobCharacteristicsUpdateReqVO.quantifyIsCapping && // let isEmpty1 = arrBol.filter(item=>item == true)
// !item.inspectionJobCharacteristicsUpdateReqVO.quantifyIsLowlimit && // arrBol.forEach(item=>{
// !item.inspectionJobCharacteristicsUpdateReqVO.quantifyIsTarget && // console.log('1q1q')
// item.inspectionJobCharacteristicsUpdateReqVO.featureType == 0 // console.log(typeof item)
// ) // })
// console.log(arr) // setTimeout(()=>{
// if (arr && arr.length > 0) { // console.log(arrBol.includes(true))
// const str = arr.map((item) => item.description).join(',') // },2000)
// message.error(`${str}线,,`)
// return
// }
if (formType.value == 'create') { if (formType.value == 'create') {
// //
emit('submitForm', formType.value, data.value) emit('submitForm', formType.value, data.value)

310
src/views/qms/inspection/inspectionJob/detail.vue

@ -0,0 +1,310 @@
<template>
<div>
<el-drawer
v-model="isShowDrawer"
title="详情"
direction="rtl"
size="80%"
v-loading="detailLoading"
>
<template #header>
<div class="font-size-18px">
{{ titleValueRef }} <span class="ml-20px font-size-16px">{{ titleNameRef }}</span>
</div>
</template>
<ContentWrap v-if="!isBasic">
<Descriptions
:data="data"
labelClassName="label-class-name"
label-align="left"
direction="vertical"
:column="8"
:schema="allSchemas.detailSchema"
:columns="2"
width="200px"
/>
</ContentWrap>
<ContentWrap>
<el-tabs
v-model="editableTabsValue"
class="demo-tabs"
type="border-card"
tab-position="left"
:stretch="false"
>
<el-tab-pane
v-for="item in data.subList"
:key="item.name"
:label="item.processCode"
:name="item.name"
>
<div class="small-title">检验工序</div>
<el-form :model="item" label-width="auto" ref="formProcessRef">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="编码" prop="processCode">
<el-input v-model="item.processCode" placeholder="根据系统生成" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="检验方案模板编码">
<el-input
v-model="item.inspectionCode"
placeholder="根据系统生成"
:disabled="true"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="描述" prop="processDescribe">
<el-input v-model="item.processDescribe" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="顺序号" prop="sequenceCode">
<el-input v-model="item.sequenceCode" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="检验特性编码">
<el-input
v-model="item.inspectionCharCode"
placeholder="根据系统生成"
:disabled="true"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="small-title">检验特性</div>
<el-form :model="item" label-width="auto" ref="formFeaturesRef">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="编码">
<el-input
v-model="item.inspectionJobCharacteristicsRespVO.number"
placeholder="根据系统生成"
:disabled="true"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="描述" prop="inspectionJobCharacteristicsRespVO.description">
<el-input v-model="item.inspectionJobCharacteristicsRespVO.description" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="检验方法"
prop="inspectionJobCharacteristicsRespVO.inspectionMethodCode"
>
<div style="display: flex; width: 100%">
<el-input
v-model="item.inspectionJobCharacteristicsRespVO.inspectionMethodName"
disabled
placeholder="请选择检验方法"
/>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="采样过程编码"
prop="inspectionJobCharacteristicsRespVO.inspectionMethod"
>
<div style="display: flex; width: 100%">
<el-input
v-model="item.inspectionJobCharacteristicsRespVO.inspectionName"
disabled
placeholder="请选择采样过程编码"
/>
</div>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item
label="动态修改规则编码"
prop="inspectionJobCharacteristicsRespVO.dynamicUpdateCode"
>
<div style="display: flex; width: 100%">
<el-input
v-model="item.inspectionJobCharacteristicsRespVO.dynamicUpdateName"
disabled
placeholder="请选择动态修改规则编码"
/>
</div>
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item
label="是否允许修改特征值"
prop="inspectionJobCharacteristicsRespVO.isCanUpdate"
>
<el-switch
v-model="item.inspectionJobCharacteristicsRespVO.isCanUpdate"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="结果录入方式"
prop="inspectionJobCharacteristicsRespVO.resultEntryMethod"
>
<el-select
v-model="item.inspectionJobCharacteristicsRespVO.resultEntryMethod"
placeholder="请选择结果录入方式"
@change="resultEntryMethodChange($event,item)"
disabled
>
<el-option
v-for="dict in getStrDictOptions(
DICT_TYPE.INSPECTION_CHARACTERISTICS_RESULT_ENTRY
)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="特征类型" prop="inspectionJobCharacteristicsRespVO.featureType">
<el-select
v-model="item.inspectionJobCharacteristicsRespVO.featureType"
placeholder="请选择特征类型"
@change="changeFeatureType"
disabled
>
<el-option v-for="dict in getStrDictOptions( DICT_TYPE.INSPECTION_CHARACTERISTICS_FEATURE_TYPE )"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="开始时间" prop="inspectionJobCharacteristicsRespVO.inspectionStartTime">
<el-date-picker
v-model="item.inspectionJobCharacteristicsRespVO.inspectionStartTime"
type="datetime"
placeholder="请选择开始时间"
style="width: 100%"
value-format="x"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结束时间" prop="inspectionJobCharacteristicsRespVO.inspectionEndTime">
<el-date-picker
v-model="item.inspectionJobCharacteristicsRespVO.inspectionEndTime"
type="datetime"
placeholder="请选择结束时间"
style="width: 100%"
value-format="x"
disabled
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
</el-tabs>
</ContentWrap>
</el-drawer>
</div>
</template>
<script lang="ts" setup>
import * as InspectionJobDetailPageApi from '@/api/qms/inspectionJob/inspectionJobDetail'
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
defineOptions({ name: 'Detail' })
const editableTabsValue = ref('1')
const message = useMessage() //
const { t } = useI18n() //
const updateKey = ref(0)
const props = defineProps({
//
allSchemas: {
type: Object,
required: true,
default: null
},
//
detailAllSchemas: {
type: Object,
required: true,
default: null
},
//
buttondataTable: {
type: Array,
required: false,
default: ()=>{
return []
}
},
})
const isShowDrawer = ref(false)
const detailLoading = ref(false)
const data = ref({
code: '',
itemCode: '',
version: '',
testTypeCode: '',
programmeTemplateCode: '',
splitRule: '',
aql: '',
inspectionLevel: '',
effectiveDate: '',
expirationDate: '',
available: 'TRUE',
subList: []
})
/** 打开弹窗 */
const formRef = ref()
const titleNameRef = ref()
const titleValueRef = ref()
const openDetail = async (row: any, titleName: any, titleValue: any, tableName: any) => {
titleNameRef.value = titleName
titleValueRef.value = titleValue
isShowDrawer.value = true
if (row) {
detailLoading.value = true
try {
data.value = row
let list = []
list = await InspectionJobDetailPageApi.getInspectionJobDetailList(row.id)
list.forEach((item, index) => {
editableTabsValue.value = index + 1
item.name = index + 1
})
data.value.subList = list
} finally {
detailLoading.value = false
}
}
}
defineExpose({ openDetail }) // open
</script>
<style lang="scss">
.el-drawer__body {
background: #f5f5f5 !important;
}
::v-deep(.label-class-name) {
color: #dedede;
}
</style>
<style scoped lang="scss"></style>

16
src/views/qms/inspection/inspectionJob/index.vue

@ -43,14 +43,23 @@
:formAllSchemas="InspectionJobMain.allSchemas" :formAllSchemas="InspectionJobMain.allSchemas"
@submitForm="submitForm" @submitForm="submitForm"
/> />
<Detail
ref="detailRef" :isBasic="false" :allSchemas="InspectionJobMain.allSchemas"
:detailAllSchemas="InspectionJobDetail.allSchemas" :detailAllSchemasRules="InspectionJobDetailRules"
:apiCreate="InspectionJobDetailApi.createInspectionJobDetail"
:apiUpdate="InspectionJobDetailApi.updateInspectionJobDetail"
:apiPage="InspectionJobDetailApi.getInspectionJobDetailPage"
:apiDelete="InspectionJobDetailApi.deleteInspectionJobDetail" @searchTableSuccessDetail="searchTableSuccessDetail"
:isShowAddBtn="false" :detailButtonIsShow="true"
/>
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" :isBasic="false" :allSchemas="InspectionJobMain.allSchemas" <!-- <Detail ref="detailRef" :isBasic="false" :allSchemas="InspectionJobMain.allSchemas"
:detailAllSchemas="InspectionJobDetail.allSchemas" :detailAllSchemasRules="InspectionJobDetailRules" :detailAllSchemas="InspectionJobDetail.allSchemas" :detailAllSchemasRules="InspectionJobDetailRules"
:apiCreate="InspectionJobDetailApi.createInspectionJobDetail" :apiCreate="InspectionJobDetailApi.createInspectionJobDetail"
:apiUpdate="InspectionJobDetailApi.updateInspectionJobDetail" :apiUpdate="InspectionJobDetailApi.updateInspectionJobDetail"
:apiPage="InspectionJobDetailApi.getInspectionJobDetailPage" :apiPage="InspectionJobDetailApi.getInspectionJobDetailPage"
:apiDelete="InspectionJobDetailApi.deleteInspectionJobDetail" @searchTableSuccessDetail="searchTableSuccessDetail" :apiDelete="InspectionJobDetailApi.deleteInspectionJobDetail" @searchTableSuccessDetail="searchTableSuccessDetail"
:isShowAddBtn="false" :detailButtonIsShow="true"/> :isShowAddBtn="false" :detailButtonIsShow="true"/> -->
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/wms/purchase-main/import" :importTemplateData="importTemplateData" <ImportForm ref="importFormRef" url="/wms/purchase-main/import" :importTemplateData="importTemplateData"
@ -68,6 +77,7 @@
import TableHead from '@/components/TableHead/src/TableHead.vue' import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue' import ImportForm from '@/components/ImportForm/src/ImportForm.vue'
import AddForm from './addForm.vue' import AddForm from './addForm.vue'
import Detail from './detail.vue'
import * as InspectionPlanApi from '@/api/qms/inspectionPlan' import * as InspectionPlanApi from '@/api/qms/inspectionPlan'
// //
@ -131,7 +141,7 @@
// //
const HeadButttondata = [ const HeadButttondata = [
// defaultButtons.defaultAddBtn(null), // // defaultButtons.defaultAddBtn(null), //
defaultButtons.defaultExportBtn(null), // // defaultButtons.defaultExportBtn(null), //
defaultButtons.defaultFreshBtn(null), // defaultButtons.defaultFreshBtn(null), //
defaultButtons.defaultFilterBtn(null), // defaultButtons.defaultFilterBtn(null), //
defaultButtons.defaultSetBtn(null), // defaultButtons.defaultSetBtn(null), //

310
src/views/qms/inspection/inspectionRecord/detail.vue

@ -0,0 +1,310 @@
<template>
<div>
<el-drawer
v-model="isShowDrawer"
title="详情"
direction="rtl"
size="80%"
v-loading="detailLoading"
>
<template #header>
<div class="font-size-18px">
{{ titleValueRef }} <span class="ml-20px font-size-16px">{{ titleNameRef }}</span>
</div>
</template>
<ContentWrap v-if="!isBasic">
<Descriptions
:data="data"
labelClassName="label-class-name"
label-align="left"
direction="vertical"
:column="8"
:schema="allSchemas.detailSchema"
:columns="2"
width="200px"
/>
</ContentWrap>
<ContentWrap>
<el-tabs
v-model="editableTabsValue"
class="demo-tabs"
type="border-card"
tab-position="left"
:stretch="false"
>
<el-tab-pane
v-for="item in data.subList"
:key="item.name"
:label="item.processCode"
:name="item.name"
>
<div class="small-title">检验工序</div>
<el-form :model="item" label-width="auto" ref="formProcessRef">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="编码" prop="processCode">
<el-input v-model="item.processCode" placeholder="根据系统生成" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="检验方案模板编码">
<el-input
v-model="item.inspectionCode"
placeholder="根据系统生成"
:disabled="true"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="描述" prop="processDescribe">
<el-input v-model="item.processDescribe" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="顺序号" prop="sequenceCode">
<el-input v-model="item.sequenceCode" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="检验特性编码">
<el-input
v-model="item.inspectionCharCode"
placeholder="根据系统生成"
:disabled="true"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="small-title">检验特性</div>
<el-form :model="item" label-width="auto" ref="formFeaturesRef">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="编码">
<el-input
v-model="item.inspectionJobCharacteristicsRespVO.number"
placeholder="根据系统生成"
:disabled="true"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="描述" prop="inspectionJobCharacteristicsRespVO.description">
<el-input v-model="item.inspectionJobCharacteristicsRespVO.description" :disabled="true" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="检验方法"
prop="inspectionJobCharacteristicsRespVO.inspectionMethodCode"
>
<div style="display: flex; width: 100%">
<el-input
v-model="item.inspectionJobCharacteristicsRespVO.inspectionMethodName"
disabled
placeholder="请选择检验方法"
/>
</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="采样过程编码"
prop="inspectionJobCharacteristicsRespVO.inspectionMethod"
>
<div style="display: flex; width: 100%">
<el-input
v-model="item.inspectionJobCharacteristicsRespVO.inspectionName"
disabled
placeholder="请选择采样过程编码"
/>
</div>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item
label="动态修改规则编码"
prop="inspectionJobCharacteristicsRespVO.dynamicUpdateCode"
>
<div style="display: flex; width: 100%">
<el-input
v-model="item.inspectionJobCharacteristicsRespVO.dynamicUpdateName"
disabled
placeholder="请选择动态修改规则编码"
/>
</div>
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item
label="是否允许修改特征值"
prop="inspectionJobCharacteristicsRespVO.isCanUpdate"
>
<el-switch
v-model="item.inspectionJobCharacteristicsRespVO.isCanUpdate"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="结果录入方式"
prop="inspectionJobCharacteristicsRespVO.resultEntryMethod"
>
<el-select
v-model="item.inspectionJobCharacteristicsRespVO.resultEntryMethod"
placeholder="请选择结果录入方式"
@change="resultEntryMethodChange($event,item)"
disabled
>
<el-option
v-for="dict in getStrDictOptions(
DICT_TYPE.INSPECTION_CHARACTERISTICS_RESULT_ENTRY
)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="特征类型" prop="inspectionJobCharacteristicsRespVO.featureType">
<el-select
v-model="item.inspectionJobCharacteristicsRespVO.featureType"
placeholder="请选择特征类型"
@change="changeFeatureType"
disabled
>
<el-option v-for="dict in getStrDictOptions( DICT_TYPE.INSPECTION_CHARACTERISTICS_FEATURE_TYPE )"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="开始时间" prop="inspectionJobCharacteristicsRespVO.inspectionStartTime">
<el-date-picker
v-model="item.inspectionJobCharacteristicsRespVO.inspectionStartTime"
type="datetime"
placeholder="请选择开始时间"
style="width: 100%"
value-format="x"
disabled
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结束时间" prop="inspectionJobCharacteristicsRespVO.inspectionEndTime">
<el-date-picker
v-model="item.inspectionJobCharacteristicsRespVO.inspectionEndTime"
type="datetime"
placeholder="请选择结束时间"
style="width: 100%"
value-format="x"
disabled
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-tab-pane>
</el-tabs>
</ContentWrap>
</el-drawer>
</div>
</template>
<script lang="ts" setup>
import * as InspectionRecordDetailPageApi from '@/api/qms/inspectionRecord/inspectionRecordDetail'
import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
defineOptions({ name: 'InspectionRecordDetail' })
const editableTabsValue = ref('1')
const message = useMessage() //
const { t } = useI18n() //
const updateKey = ref(0)
const props = defineProps({
//
allSchemas: {
type: Object,
required: true,
default: null
},
//
detailAllSchemas: {
type: Object,
required: true,
default: null
},
//
buttondataTable: {
type: Array,
required: false,
default: ()=>{
return []
}
},
})
const isShowDrawer = ref(false)
const detailLoading = ref(false)
const data = ref({
code: '',
itemCode: '',
version: '',
testTypeCode: '',
programmeTemplateCode: '',
splitRule: '',
aql: '',
inspectionLevel: '',
effectiveDate: '',
expirationDate: '',
available: 'TRUE',
subList: []
})
/** 打开弹窗 */
const formRef = ref()
const titleNameRef = ref()
const titleValueRef = ref()
const openDetail = async (row: any, titleName: any, titleValue: any, tableName: any) => {
titleNameRef.value = titleName
titleValueRef.value = titleValue
isShowDrawer.value = true
if (row) {
detailLoading.value = true
try {
data.value = row
let list = []
list = await InspectionRecordDetailPageApi.getInspectionRecordDetailList(row.id)
list.forEach((item, index) => {
editableTabsValue.value = index + 1
item.name = index + 1
})
data.value.subList = list
} finally {
detailLoading.value = false
}
}
}
defineExpose({ openDetail }) // open
</script>
<style lang="scss">
.el-drawer__body {
background: #f5f5f5 !important;
}
::v-deep(.label-class-name) {
color: #dedede;
}
</style>
<style scoped lang="scss"></style>

18
src/views/qms/inspection/inspectionRecord/index.vue

@ -35,17 +35,23 @@
@handleDeleteTable="handleDeleteTable" @searchTableSuccess="searchTableSuccess" @submitForm="submitForm" /> @handleDeleteTable="handleDeleteTable" @searchTableSuccess="searchTableSuccess" @submitForm="submitForm" />
<!-- 详情 --> <!-- 详情 -->
<Detail ref="detailRef" :isBasic="false" :allSchemas="InspectionRecordMain.allSchemas" <!-- <Detail ref="detailRef" :isBasic="false" :allSchemas="InspectionRecordMain.allSchemas"
:detailAllSchemas="InspectionRecordDetail.allSchemas" :detailAllSchemasRules="InspectionRecordDetailRules" :detailAllSchemas="InspectionRecordDetail.allSchemas" :detailAllSchemasRules="InspectionRecordDetailRules"
:apiCreate="InspectionRecordDetailApi.createInspectionRecordDetail" :apiCreate="InspectionRecordDetailApi.createInspectionRecordDetail"
:apiUpdate="InspectionRecordDetailApi.updateInspectionRecordDetail" :apiUpdate="InspectionRecordDetailApi.updateInspectionRecordDetail"
:apiPage="InspectionRecordDetailApi.getInspectionRecordDetailPage" :apiPage="InspectionRecordDetailApi.getInspectionRecordDetailPage"
:apiDelete="InspectionRecordDetailApi.deleteInspectionRecordDetail" :apiDelete="InspectionRecordDetailApi.deleteInspectionRecordDetail"
@searchTableSuccessDetail="searchTableSuccessDetail" :isShowAddBtn="false" :detailButtonIsShow="true" /> @searchTableSuccessDetail="searchTableSuccessDetail" :isShowAddBtn="false" :detailButtonIsShow="true" /> -->
<Detail
ref="detailRef" :isBasic="false" :allSchemas="InspectionRecordMain.allSchemas"
:detailAllSchemas="InspectionRecordDetail.allSchemas" :detailAllSchemasRules="InspectionRecordDetailRules"
:apiCreate="InspectionRecordDetailApi.createInspectionRecordDetail"
:apiUpdate="InspectionRecordDetailApi.updateInspectionRecordDetail"
:apiPage="InspectionRecordDetailApi.getInspectionRecordDetailPage"
:apiDelete="InspectionRecordDetailApi.deleteInspectionRecordDetail" @searchTableSuccessDetail="searchTableSuccessDetail"
:isShowAddBtn="false" :detailButtonIsShow="true"
/>
<!-- 导入 --> <!-- 导入 -->
<ImportForm ref="importFormRef" url="/wms/purchase-main/import" :importTemplateData="importTemplateData"
@success="importSuccess" :isShowOut="true" :updateIsDisable="true" :coverIsDisable="true" :mode="2" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -55,7 +61,7 @@
import * as InspectionRecordDetailApi from '@/api/qms/inspectionRecord/inspectionRecordDetail' import * as InspectionRecordDetailApi from '@/api/qms/inspectionRecord/inspectionRecordDetail'
import * as defaultButtons from '@/utils/disposition/defaultButtons' import * as defaultButtons from '@/utils/disposition/defaultButtons'
import TableHead from '@/components/TableHead/src/TableHead.vue' import TableHead from '@/components/TableHead/src/TableHead.vue'
import ImportForm from '@/components/ImportForm/src/ImportForm.vue' import Detail from './detail.vue'
// //
defineOptions({ name: 'InspectionRecordMain' }) defineOptions({ name: 'InspectionRecordMain' })

42
src/views/qms/inspectionMethod/index.vue

@ -179,7 +179,11 @@ const openForm = (type: string, row?: any) => {
} }
if(uploadFile){ if(uploadFile){
uploadFile['componentProps']['upData']['tableId'] = currentTime uploadFile['componentProps']['upData']['tableId'] = currentTime
uploadFile['componentProps']['modelValue']= []
} }
}else if(type=='update'){
const uploadFile = InspectionMethod.allSchemas.formSchema.find(item=>item.field=='videoAddress')
uploadFile['componentProps']['modelValue']= row.filePathListView
} }
basicFormRef.value.open(type, row) basicFormRef.value.open(type, row)
@ -187,44 +191,6 @@ const openForm = (type: string, row?: any) => {
// form // form
const formsSuccess = async (formType,data) => { const formsSuccess = async (formType,data) => {
// data.filePathList = []
// data.tmp = []
console.log(data)
// for (let i = 0; i < data.filePathListView.length; i++) {
// data.filePathList.push(data.filePathListView[i].url)
// }
// data.filePathList = []
// for (let i = 0; i < data.filePathListView.length; i++) {
// data.filePathList.push(data.filePathListView[i].url)
// }
// if(data.filePathList.length>0){
// data.videoAddress = data.filePathList.join(',')
// }
// debugger
// if(data.filePathListView instanceof Array){
// for(let i=0; i<data.filePathListView.length; i++){
// data.tmp.push(data.filePathListView[i].url)
// }
// data.videoAddress = data.tmp.join(',')
// }else{
// data.videoAddress = data.filePathListView
// data.filePathListView = data.filePathListView.split(',').map(url=>{return {url}})
// }
// for (let i = 0; i < data.filePathListView.length; i++) {
// data.filePathList.push(data.filePathListView[i])
// }
// console.log(1111,data)
// var isHave =InspectionMethod.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') { if (formType === 'create') {
delete data['uploadFile'] delete data['uploadFile']

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

@ -5,6 +5,7 @@ import { dateFormatter } from '@/utils/formatTime'
export const InspectionMethodRules = reactive({ export const InspectionMethodRules = reactive({
code: [required], code: [required],
available: [required], available: [required],
description: [required],
}) })
export const InspectionMethod = useCrudSchemas(reactive<CrudSchema[]>([ export const InspectionMethod = useCrudSchemas(reactive<CrudSchema[]>([
@ -36,11 +37,6 @@ export const InspectionMethod = useCrudSchemas(reactive<CrudSchema[]>([
field: 'operationGuidance', field: 'operationGuidance',
sort: 'custom', sort: 'custom',
}, },
// {
// label: '视频地址',
// field: 'videoAddress',
// sort: 'custom',
// },
{ {
label: '是否可用', label: '是否可用',
field: 'available', field: 'available',
@ -64,9 +60,11 @@ export const InspectionMethod = useCrudSchemas(reactive<CrudSchema[]>([
upData:{ upData:{
tableName:'basicInspectionMethod', tableName:'basicInspectionMethod',
tableId:'', tableId:'',
// fileType:['doc', 'xls', 'ppt', 'txt'] },
} fileType:['doc', 'xls', 'ppt', 'txt'],
} modelValue:[]
},
} }
}, },
{ {

4
src/views/system/systemInstallPackage/systemInstallPackage.data.ts

@ -96,7 +96,9 @@ export const SystemInstallPackage = useCrudSchemas(reactive<CrudSchema[]>([
tableId: '', tableId: '',
tableName: '' tableName: ''
}, },
limit:1 limit:1,
fileType:['apk'],
fileSize:35
} }
}, },
}, },

6
src/views/wms/inventoryjobManage/sparepartsrequisition/sparepartsrequisitionRequestMain/sparepartsrequisitionRequestMain.data.ts

@ -341,6 +341,12 @@ export const UnplannedissueRequestMain = useCrudSchemas(reactive<CrudSchema[]>([
//表单校验 //表单校验
export const UnplannedissueRequestMainRules = reactive({ export const UnplannedissueRequestMainRules = reactive({
requestTime: [
{ required: true, message: '请输入申请时间', trigger: 'blur' }
],
dueTime: [
{ required: true, message: '请输入截止时间', trigger: 'blur' }
],
departmentCode: [ departmentCode: [
{ required: true, message: '请输入部门', trigger: 'blur' } { required: true, message: '请输入部门', trigger: 'blur' }
], ],

6
src/views/wms/inventoryjobManage/unplannedissue/unplannedissueRequestMain/unplannedissueRequestMain.data.ts

@ -341,6 +341,12 @@ export const UnplannedissueRequestMain = useCrudSchemas(reactive<CrudSchema[]>([
//表单校验 //表单校验
export const UnplannedissueRequestMainRules = reactive({ export const UnplannedissueRequestMainRules = reactive({
requestTime: [
{ required: true, message: '请输入申请时间', trigger: 'blur' }
],
dueTime: [
{ required: true, message: '请输入截止时间', trigger: 'blur' }
],
departmentCode: [ departmentCode: [
{ required: true, message: '请输入部门', trigger: 'blur' } { required: true, message: '请输入部门', trigger: 'blur' }
], ],

84
src/views/wms/inventoryjobManage/unplannedreceipt/unplannedreceiptRequestMain/unplannedreceiptRequestMain.data.ts

@ -1027,6 +1027,90 @@ export const UnplannedreceiptRequestDetailLabel = useCrudSchemas(reactive<CrudSc
} }
} }
}, },
{
label: '到货日期',
field: 'arriveDate',
formatter: dateFormatter2,
detail: {
dateFormat: 'YYYY-MM-DD'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'date',
dateFormat: 'YYYY-MM-DD',
valueFormat: 'x',
disabled:true
}
},
tableForm: {
type: 'FormDate',
dateFormat: 'YYYY-MM-DD',
valueFormat: 'x',
disabled:true
}
},
{
label: '生产日期',
field: 'produceDate',
formatter: dateFormatter2,
detail: {
dateFormat: 'YYYY-MM-DD'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'date',
dateFormat: 'YYYY-MM-DD',
valueFormat: 'x',
disabled:true
}
},
tableForm: {
type: 'FormDate',
dateFormat: 'YYYY-MM-DD',
valueFormat: 'x',
disabled:true
}
},
{
label: '过期日期',
field: 'expireDate',
formatter: dateFormatter2,
detail: {
dateFormat: 'YYYY-MM-DD'
},
sort: 'custom',
table: {
width: 180
},
form: {
component: 'DatePicker',
componentProps: {
style: {width: '100%'},
type: 'date',
dateFormat: 'YYYY-MM-DD',
valueFormat: 'x',
disabled:true
}
},
tableForm: {
type: 'FormDate',
dateFormat: 'YYYY-MM-DD',
valueFormat: 'x',
disabled:true
}
},
{ {
label: '来源生产线代码', label: '来源生产线代码',
field: 'productionLineCode', field: 'productionLineCode',

3
src/views/wms/purchasereceiptManage/supplierdeliver/demandforecastingMain/demandforecastingMain.data.ts

@ -430,7 +430,8 @@ export const DemandforecastingDetail = useCrudSchemas(reactive<CrudSchema[]>([
width: 150 width: 150
}, },
tableForm: { tableForm: {
type: 'Select' type: 'Select',
disabled: true
} }
}, },
{ {

5
src/views/wms/purchasereceiptManage/supplierdeliver/purchaseMain/purchaseMain.data.ts

@ -450,13 +450,10 @@ export const PurchaseDetail = useCrudSchemas(reactive<CrudSchema[]>([
dictClass: 'string', dictClass: 'string',
isSearch: true, isSearch: true,
isTable: true, isTable: true,
isTableForm:false,
table: { table: {
width: 150 width: 150
}, },
tableForm: {
disabled:true,
type: 'Select'
}
}, },
{ {
label: '订单数量', label: '订单数量',

3
src/views/wms/purchasereceiptManage/supplierdeliver/purchasePlanMain/purchasePlanMain.data.ts

@ -520,7 +520,8 @@ export const PurchasePlanDetail = useCrudSchemas(reactive<CrudSchema[]>([
width: 150 width: 150
}, },
tableForm: { tableForm: {
type: 'Select' type: 'Select',
disabled:false,
} }
}, },
{ {

30
src/views/wms/supplierManage/supplierinvoice/supplierinvoiceRequestMain/index.vue

@ -271,6 +271,15 @@
link: true, // link: true, //
hasPermi: '' hasPermi: ''
}, },
{
label: '发票寄出确认',
name: 'invoice_sent_out',
hide: isShowMainButton(row, ['8']),
type: 'danger',
color: '',
link: true, //
hasPermi: ''
},
{ {
label: '财务审批通过', label: '财务审批通过',
name: 'finance_mainPlanSub', name: 'finance_mainPlanSub',
@ -291,7 +300,7 @@
}, },
// defaultButtons.mainListPlanAppBtn({ hide: isShowMainButton(row, ['2']) }), // // defaultButtons.mainListPlanAppBtn({ hide: isShowMainButton(row, ['2']) }), //
//defaultButtons.mainListPlanTurBtn({ hide: isShowMainButton(row, ['2']) }), // //defaultButtons.mainListPlanTurBtn({ hide: isShowMainButton(row, ['2']) }), //
defaultButtons.mainListEditBtn({ hasPermi: 'wms:supplierinvoice-request-main:update' , hide: isShowMainButton(row, ['1','6'])}), // defaultButtons.mainListEditBtn({ hasPermi: 'wms:supplierinvoice-request-main:update' , hide: isShowMainButton(row, ['1','8'])}), //
defaultButtons.mainListPurchasePlanCloBtn({ hide: isShowMainButton(row, ['1', '2','4']) }), // defaultButtons.mainListPurchasePlanCloBtn({ hide: isShowMainButton(row, ['1', '2','4']) }), //
// //
// { // {
@ -326,6 +335,8 @@ const handleImport = () => {
handleApp(row.id) handleApp(row.id)
} else if (val == 'purchase_mainPlanTur') { // } else if (val == 'purchase_mainPlanTur') { //
handleTur(row.id) handleTur(row.id)
} else if (val == 'invoice_sent_out') { //
handleInvoiceSentOut(row.id)
} else if(val == 'finance_mainPlanSub'){ // } else if(val == 'finance_mainPlanSub'){ //
handleFinanceApp(row.id) handleFinanceApp(row.id)
} else if(val == 'finance_mainPlanTur'){ // } else if(val == 'finance_mainPlanTur'){ //
@ -478,6 +489,23 @@ const handleImport = () => {
} }
} }
/** 发票寄出确认按钮操作 */
const handleInvoiceSentOut = async (id : number) => {
try {
//
await message.confirm('是否确认发票寄出选中数据?')
tableObject.loading = true
//
await SupplierinvoiceRequestMainApi.invoiceSentOutSupplierinvoiceRequestMain(id)
message.success(t('发票寄出成功!'))
tableObject.loading = false
//
await getList()
} catch { }finally{
tableObject.loading = false
}
}
/** 驳回按钮操作 */ /** 驳回按钮操作 */
const handleFinaceTur = async (id : number) => { const handleFinaceTur = async (id : number) => {
try { try {

310
src/views/wms/supplierManage/supplierinvoiceInvoiced/index.vue

@ -0,0 +1,310 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<Search :schema="SupplierinvoiceInvoiced.allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
</ContentWrap>
<!-- 列表头部 -->
<TableHead
:HeadButttondata="HeadButttondata"
@button-base-click="buttonBaseClick"
:routeName="routeName"
@updataTableColumns="updataTableColumns"
@searchFormClick="searchFormClick"
:allSchemas="SupplierinvoiceInvoiced.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(row)" @button-base-click="buttonTableClick($event,row)" />
</template>
</Table>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<BasicForm
ref="basicFormRef"
@success="formsSuccess"
:rules="SupplierinvoiceInvoicedRules"
:formAllSchemas="SupplierinvoiceInvoiced.allSchemas"
:apiUpdate="SupplierinvoiceInvoicedApi.updateSupplierinvoiceInvoiced"
:apiCreate="SupplierinvoiceInvoicedApi.createSupplierinvoiceInvoiced"
@searchTableSuccess="searchTableSuccess"
:isBusiness="false"
/>
<!-- 详情 -->
<Detail ref="detailRef" :isBasic="true" :allSchemas="SupplierinvoiceInvoiced.allSchemas" />
<!-- 导入 -->
<!-- <ImportForm ref="importFormRef" url="/wms/supplierinvoice-invoiced/import" :importTemplateData="importTemplateData" @success="importSuccess" /> -->
</template>
<script setup lang="ts">
import download from '@/utils/download'
import { SupplierinvoiceInvoiced,SupplierinvoiceInvoicedRules } from './supplierinvoiceInvoiced.data'
import * as SupplierinvoiceInvoicedApi from '@/api/wms/supplierinvoiceInvoiced'
import * as defaultButtons from '@/utils/disposition/defaultButtons'
import TableHead from '@/components/TableHead/src/TableHead.vue'
import Detail from '@/components/Detail/src/Detail.vue'
defineOptions({ name: 'SupplierinvoiceInvoiced' })
const message = useMessage() //
const { t } = useI18n() //
const route = useRoute() //
const routeName = ref()
routeName.value = route.name
const tableColumns = ref(SupplierinvoiceInvoiced.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: SupplierinvoiceInvoicedApi.getSupplierinvoiceInvoicedPage //
})
//
const { getList, setSearchParams } = tableMethods
//
const isShowMainButton = (row, val) => {
if (val.indexOf(row.status) > -1) {
return false
} else {
return true
}
}
//
const HeadButttondata = [
// defaultButtons.defaultAddBtn({hasPermi:'wms:supplierinvoice-invoiced:create'}), //
// defaultButtons.defaultImportBtn({hasPermi:'wms:supplierinvoice-invoiced:import'}), //
// defaultButtons.defaultExportBtn({hasPermi:'wms:supplierinvoice-invoiced: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 = (row) =>{
return [
// defaultButtons.mainListEditBtn({hasPermi:'wms:supplierinvoice-invoiced:update'}), //
// defaultButtons.mainListDeleteBtn({hasPermi:'wms:supplierinvoice-invoiced:delete'}), //
// defaultButtons.mainListEditBtn({hasPermi:'wms:supplierinvoice-invoiced:update'}),
{
label: '审核通过',
name: 'agree',
hide: isShowMainButton(row, ['1']),
type: 'primary',
color: '',
link: true, //
hasPermi: ''
},
{
label: '审核拒绝',
name: 'refuse',
hide: isShowMainButton(row, ['1']),
type: 'danger',
color: '',
link: true, //
hasPermi: ''
}
]
}
// -
const buttonTableClick = async (val, row) => {
if (val == 'edit') { //
openForm('update', row)
} else if (val == 'delete') { //
handleDelete(row.id)
} else if(val == 'agree'){
handleAgree(row.id)
}
}
/** 添加/修改操作 */
const basicFormRef = ref()
const openForm = (type: string, row?: any) => {
basicFormRef.value.open(type, row)
}
// form
const formsSuccess = async (formType,data) => {
var isHave =SupplierinvoiceInvoiced.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 SupplierinvoiceInvoicedApi.createSupplierinvoiceInvoiced(data)
message.success(t('common.createSuccess'))
} else {
await SupplierinvoiceInvoicedApi.updateSupplierinvoiceInvoiced(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, 'basicSupplierinvoiceInvoiced')
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await SupplierinvoiceInvoicedApi.deleteSupplierinvoiceInvoiced(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 审批通过按钮操作 */
const handleAgree = async (id : number) => {
try {
//
await message.confirm('是否审批通过所选中数据?')
tableObject.loading = true
//
await SupplierinvoiceInvoicedApi.agreeSupplierinvoiceInvoiced(id)
message.success(t('审批通过成功!'))
tableObject.loading = false
//
await getList()
} catch { }finally{
tableObject.loading = false
}
}
/** 审批通过按钮操作 */
const handleRefuse = async (id : number) => {
try {
//
await message.confirm('是否审批拒绝所选中数据?')
tableObject.loading = true
//
await SupplierinvoiceInvoicedApi.refuseSupplierinvoiceInvoiced(id)
message.success(t('审批成功!'))
tableObject.loading = false
//
await getList()
} catch { }finally{
tableObject.loading = false
}
}
/** 导出按钮操作 */
const exportLoading = ref(false) //
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await SupplierinvoiceInvoicedApi.exportSupplierinvoiceInvoiced(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 SupplierinvoiceInvoicedApi.importTemplate()
})
</script>

168
src/views/wms/supplierManage/supplierinvoiceInvoiced/supplierinvoiceInvoiced.data.ts

@ -0,0 +1,168 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime'
// 表单校验
export const SupplierinvoiceInvoicedRules = reactive({
supplierCode: [required],
poNumber: [required],
currency: [required],
concurrencyStamp: [required],
})
export const SupplierinvoiceInvoiced = useCrudSchemas(reactive<CrudSchema[]>([
{
label: '项目编码',
field: 'projectCode',
sort: 'custom',
isSearch: true,
table: {
width: 150
},
},
{
label: '单据类型',
field: 'billType',
sort: 'custom',
form: {
component: 'SelectV2'
},
table: {
width: 150
},
},
{
label: '状态',
field: 'status',
dictType: DICT_TYPE.SUPPLIERINVOICE_STATUS,
dictClass: 'string',
isTable: true,
isForm:false,
sort: 'custom',
table: {
width: 150
},
isSearch: true,
form: {
value: '1',
componentProps: {
disabled: true
}
}
},
{
label: '单据号',
field: 'recvBillNum',
sort: 'custom',
isSearch: true,
table: {
width: 150
},
},
{
label: '发货单号',
field: 'asnBillNum',
sort: 'custom',
table: {
width: 150
},
},
{
label: '供应商代码',
field: 'supplierCode',
sort: 'custom',
table: {
width: 150
},
},
{
label: '订单号',
field: 'poNumber',
sort: 'custom',
table: {
width: 150
},
},
{
label: '订单行',
field: 'poLine',
sort: 'custom',
table: {
width: 150
},
},
{
label: '采购价格',
field: 'purchasePrice',
sort: 'custom',
table: {
width: 150
},
},
{
label: '可开票数量',
field: 'invoicableQuantity',
sort: 'custom',
table: {
width: 150
},
},
{
label: '零件号',
field: 'itemCode',
sort: 'custom',
table: {
width: 150
},
},
{
label: '计量单位',
field: 'uom',
sort: 'custom',
table: {
width: 150
},
},
{
label: '货币',
field: 'currency',
sort: 'custom',
table: {
width: 150
},
},
{
label: '备注',
field: 'remark',
sort: 'custom',
table: {
width: 150
},
},
{
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')]
}
},
table: {
width: 150
},
isForm: false,
},
{
label: '操作',
field: 'action',
isForm: false,
table: {
width: 200,
fixed: 'right'
}
}
]))
Loading…
Cancel
Save