main
kkk-ops 2 months ago
commit 6689e7b986

@ -1,22 +1,59 @@
import request from '@/config/axios'
export interface DashboardProductVO {
taskItems: ItemVO[]
planItems: ItemVO[]
taskItems: ItemVO[]
planItems: ItemVO[]
}
export interface ItemVO {
key: string
label: string
value: number
key: string
label: string
value: number
}
export interface DeviceStatusVO {
key: string
label: string
value: number
level: string
key: string
label: string
value: number
level: string
}
export interface TaskStatisticsData {
deviceInspection: number
deviceInspectionProportion: string
moldInspection: number
moldInspectionProportion: string
deviceMaintenance: number
deviceMaintenanceProportion: string
moldMaintenance: number
moldMaintenanceProportion: string
deviceRepair: number
deviceRepairProportion: string
moldRepair: number
moldRepairProportion: string
}
export interface TaskStatisticsResponse {
code: number
status: number
data: TaskStatisticsData
msg: string
}
export interface DashboardTaskItem {
code: string
name: string
type: string
finishStatus: string
resultStatus: number
}
export interface DashboardTaskListResponse {
code: number
status: number
data: DashboardTaskItem[]
msg: string
}
// 编码生成记录 API
export const DashboardApi = {
@ -48,5 +85,11 @@ getDeviceTypePieOptions: async () => {
getMoldTypeBarOptions: async () => {
return await request.get({ url: `/mes/dashboard/getMoldTypeBarOptions` })
},
getTaskStatistics: async () => {
return await request.get<TaskStatisticsResponse>({ url: `/mes/dashboard/getTaskStatistics` })
},
getAllTaskList: async () => {
return await request.get<DashboardTaskListResponse>({ url: `/mes/dashboard/getAllTaskList` })
}
}

@ -85,6 +85,10 @@ export const MoldBrandApi = {
getMoldPageWithoutPaging: async () => {
return await request.get({ url: `/erp/mold-brand/mold/list` })
},
// 导出模具 Excel
exportMold: async (params) => {
return await request.download({ url: `/erp/mold-brand/mold/export-excel`, params })
},
// 新增模具
createMold: async (data) => {
return await request.post({ url: `/erp/mold-brand/mold/create`, data })

@ -308,7 +308,8 @@ export default {
typeUpdate: 'Dict Type Eidt',
dataCreate: 'Dict Data Create',
dataUpdate: 'Dict Data Eidt',
fileUpload: 'File Upload'
fileUpload: 'File Upload',
select: 'Select'
},
dialog: {
dialog: 'Dialog',
@ -813,5 +814,774 @@ export default {
validatorComponentRequired: 'Key component can not be empty',
validatorIsEnableRequired: 'Enabled can not be empty'
}
},
SparePartsManagement: {
SpareInfo: {
name: 'Spare Part Name',
code: 'Spare Part Code',
standard: 'Specification',
expiryDay: 'Shelf Life (days)',
category: 'Category',
unit: 'Unit',
safetyNumber: 'Safety Stock',
status: 'Status',
createTime: 'Create Time',
operate: 'Operate',
remark: 'Remark',
exportFilename: 'SparePartsInfo.xls',
placeholderName: 'Please input name',
placeholderCode: 'Please input code',
placeholderUnit: 'Please select unit',
placeholderSafetyNumber: 'Please input safety stock',
placeholderRemark: 'Please input remark',
placeholderStandard: 'Please input specification',
placeholderExpiryDay: 'Please input shelf life (days)',
validatorNameRequired: 'Spare part name can not be empty',
validatorCodeRequired: 'Spare part code can not be empty',
validatorCategoryRequired: 'Category can not be empty',
validatorUnitRequired: 'Unit can not be empty',
validatorStatusRequired: 'Status can not be empty'
},
SpareStock: {
product: 'Spare Part',
warehouse: 'Warehouse',
category: 'Category',
count: 'Stock Quantity',
unit: 'Unit',
exportFilename: 'SparePartsStock.xls',
placeholderProduct: 'Please select spare part',
placeholderWarehouse: 'Please select warehouse'
},
SpareRecord: {
product: 'Spare Part',
warehouse: 'Warehouse',
unit: 'Unit',
bizType: 'Type',
bizNo: 'Stock In/Out No',
count: 'In/Out Quantity',
totalCount: 'Stock Quantity',
recordTime: 'In/Out Date',
createTime: 'Create Date',
creatorName: 'Operator',
exportFilename: 'SparePartsRecord.xls',
placeholderProduct: 'Please select spare part',
placeholderWarehouse: 'Please select warehouse',
placeholderBizNo: 'Please input business no',
placeholderCreateTimeStart: 'Start Date',
placeholderCreateTimeEnd: 'End Date'
},
SpareIn: {
product: 'Spare Part',
inTime: 'Stock In Time',
supplier: 'Supplier',
warehouse: 'Warehouse',
remark: 'Remark',
status: 'Status',
inType: 'Stock In Type',
no: 'Stock In No',
creatorName: 'Creator',
totalCount: 'Quantity',
totalPrice: 'Amount',
operate: 'Operate',
tabUnAudit: 'Unaudited',
tabAudited: 'Audited',
tabAll: 'All',
detail: 'Detail',
edit: 'Edit',
approve: 'Approve',
unapprove: 'Unapprove',
delete: 'Delete',
itemListTitle: 'Stock In Item List',
itemIndex: 'No.',
itemWarehouseName: 'Warehouse Name',
itemProductName: 'Spare Part Name',
itemStockCount: 'Stock',
itemProductCode: 'Spare Part Code',
itemUnitName: 'Unit',
itemCount: 'Quantity',
itemProductPrice: 'Spare Part Price',
itemTotalPrice: 'Total Amount',
itemRemark: 'Remark',
itemOperate: 'Operate',
itemAddButton: 'Add Stock In Spare Part',
sumLabel: 'Total',
exportFilename: 'SparePartsIn.xls',
placeholderProduct: 'Please select spare part',
placeholderInTimeStart: 'Start Date',
placeholderInTimeEnd: 'End Date',
placeholderSupplier: 'Please select supplier',
placeholderWarehouse: 'Please select warehouse',
placeholderRemark: 'Please input remark',
placeholderInType: 'Please select stock in type',
placeholderInTime: 'Select stock in time',
placeholderNoAuto: 'Auto generated when saved',
validatorInTimeRequired: 'Stock in time can not be empty',
validatorInTypeRequired: 'Stock in type can not be empty',
validatorItemInIdRequired: 'Stock in id can not be empty',
validatorItemWarehouseRequired: 'Warehouse can not be empty',
validatorItemProductRequired: 'Spare part can not be empty',
validatorItemCountRequired: 'Spare part quantity can not be empty',
confirmApprove: 'Confirm to approve this stock in order?',
confirmUnapprove: 'Confirm to unapprove this stock in order?',
approveSuccess: 'Approve successfully',
unapproveSuccess: 'Unapprove successfully'
},
SpareOut: {
no: 'Stock Out No',
product: 'Spare Part',
outTime: 'Stock Out Time',
warehouse: 'Warehouse',
remark: 'Remark',
customer: 'Customer',
status: 'Status',
totalCount: 'Quantity',
totalPrice: 'Amount',
creatorName: 'Creator',
operate: 'Operate',
tabUnAudit: 'Unaudited',
tabAudited: 'Audited',
tabAll: 'All',
detail: 'Detail',
edit: 'Edit',
approve: 'Approve',
unapprove: 'Unapprove',
delete: 'Delete',
itemListTitle: 'Stock Out Item List',
itemIndex: 'No.',
itemWarehouseName: 'Warehouse Name',
itemProductName: 'Spare Part Name',
itemStockCount: 'Stock',
itemProductCode: 'Spare Part Code',
itemUnitName: 'Unit',
itemCount: 'Quantity',
itemProductPrice: 'Price',
itemTotalPrice: 'Total Amount',
itemRemark: 'Remark',
itemOperate: 'Operate',
itemAddButton: 'Add Stock Out Spare Part',
sumLabel: 'Total',
exportFilename: 'SparePartsOut.xls',
placeholderNo: 'Please input stock out no',
placeholderProduct: 'Please select spare part',
placeholderOutTimeStart: 'Start Date',
placeholderOutTimeEnd: 'End Date',
placeholderWarehouse: 'Please select warehouse',
placeholderRemark: 'Please input remark',
placeholderOutType: 'Please select stock out type',
placeholderOutTime: 'Select stock out time',
placeholderNoAuto: 'Auto generated when saved',
validatorOutTimeRequired: 'Stock out time can not be empty',
validatorOutTypeRequired: 'Stock out type can not be empty',
validatorItemOutIdRequired: 'Stock out id can not be empty',
validatorItemWarehouseRequired: 'Warehouse can not be empty',
validatorItemProductRequired: 'Spare part can not be empty',
validatorItemCountRequired: 'Spare part quantity can not be empty'
}
},
MoldManagement: {
MoldBrand: {
code: 'Model Code',
name: 'Model Name',
moldType: 'Specification',
orgType: 'Process',
moldSize: 'Cavity Number',
useTime: 'Expected Life (Times)',
remark: 'Remark',
createTime: 'Create Time',
operate: 'Operate',
tabMold: 'Mold',
emptyTip: 'Please select a mold model in the above list first',
exportFilename: 'MoldBrand.xls',
placeholderCode: 'Please input model code',
placeholderName: 'Please input model name',
placeholderOrgType: 'Please select process',
placeholderMoldType: 'Please input specification',
placeholderMoldSize: 'Please input cavity number',
placeholderUseTime: 'Input expected life (times)',
placeholderRemark: 'Please input remark',
validatorCodeRequired: 'Model code can not be empty',
validatorNameRequired: 'Model name can not be empty',
validatorMoldTypeRequired: 'Specification can not be empty',
validatorProductRequired: 'Product id can not be empty',
validatorMoldSizeRequired: 'Cavity number can not be empty',
orgTypeTooltip: 'Source: Data dictionary - Process'
},
Mold: {
code: 'Mold Code',
name: 'Mold Name',
unit: 'Unit',
inTime: 'Stock In Time',
status: 'Status',
images: 'Mold Images',
remark: 'Remark',
isEnable: 'Is Enable',
fileUrl: 'File',
machineName: 'Machine',
useTime: 'Used Times',
moldSize: 'Cavity Number',
createTime: 'Create Time',
operate: 'Operate',
detail: 'Detail',
add: 'Add',
edit: 'Edit',
delete: 'Delete',
placeholderCode: 'Please input mold code',
placeholderName: 'Please input mold name',
placeholderUnit: 'Please select unit',
placeholderInTime: 'Select stock in time',
placeholderRemark: 'Please input remark',
validatorCodeRequired: 'Mold code can not be empty',
validatorNameRequired: 'Mold name can not be empty',
validatorUnitRequired: 'Unit can not be empty',
validatorInTimeRequired: 'Stock in time can not be empty',
validatorIsEnableRequired: 'Is enable can not be empty',
validatorBrandRequired: 'Model can not be empty',
selectBrandTip: 'Please select a mold model',
statusTooltip: 'Source: Data dictionary - Mold status'
},
MoldReturn: {
moduleName: 'Mold Stock In',
no: 'Stock In No',
mold: 'Mold',
moldInfo: 'Mold Info',
inTime: 'Stock In Time',
warehouse: 'Warehouse',
creator: 'Creator',
status: 'Status',
remark: 'Remark',
select: 'Select',
operate: 'Operate',
detail: 'Detail',
edit: 'Edit',
approve: 'Approve',
unapprove: 'Unapprove',
delete: 'Delete',
export: 'Export',
add: 'Add',
inType: 'Stock In Type',
inNo: 'Stock In No',
inTimeSingle: 'Stock In Time',
remarkSingle: 'Remark',
attachment: 'Attachment',
itemListTitle: 'Mold Stock In List',
itemIndex: 'No',
itemWarehouseName: 'Warehouse Name',
itemMoldName: 'Mold Name',
itemStockCount: 'Stock',
itemMoldCode: 'Mold Code',
itemUnitName: 'Unit',
itemCount: 'Quantity',
itemRemark: 'Remark',
itemOperate: 'Operate',
itemAddButton: 'Add Stock In Mold',
sumLabel: 'Total',
exportFilename: 'MoldStockIn.xls',
placeholderNo: 'Please input stock in no',
placeholderMold: 'Please select mold',
placeholderInTimeStart: 'Start Date',
placeholderInTimeEnd: 'End Date',
placeholderWarehouse: 'Please select warehouse',
placeholderCreator: 'Please select creator',
placeholderStatus: 'Please select status',
placeholderRemark: 'Please input remark',
placeholderInType: 'Please select stock in type',
placeholderInTime: 'Select stock in time',
placeholderInNoAuto: 'Auto generated when saved',
validatorInTimeRequired: 'Stock in time can not be empty',
validatorInTypeRequired: 'Stock in type can not be empty',
validatorItemInIdRequired: 'Stock in id can not be empty',
validatorItemWarehouseRequired: 'Warehouse can not be empty',
validatorItemMoldRequired: 'Mold can not be empty',
validatorItemCountRequired: 'Quantity can not be empty',
approveConfirm: 'Confirm approve this stock in order?',
unapproveConfirm: 'Confirm unapprove this stock in order?',
approveSuccess: 'Approve successful',
unapproveSuccess: 'Unapprove successful'
},
MoldGet: {
moduleName: 'Mold Stock Out',
no: 'Mold Order No',
mold: 'Mold',
outTime: 'Stock Out Time',
warehouse: 'Warehouse',
creator: 'Creator',
status: 'Status',
remark: 'Remark',
select: 'Select',
operate: 'Operate',
detail: 'Detail',
edit: 'Edit',
approve: 'Approve',
unapprove: 'Unapprove',
delete: 'Delete',
export: 'Export',
add: 'Add',
outType: 'Stock Out Type',
outNo: 'Stock Out No',
outTimeSingle: 'Stock Out Time',
remarkSingle: 'Remark',
attachment: 'Attachment',
itemListTitle: 'Mold Stock Out List',
itemIndex: 'No',
itemWarehouseName: 'Warehouse Name',
itemMoldName: 'Mold Name',
itemStockCount: 'Stock',
itemMoldCode: 'Mold Code',
itemUnitName: 'Unit',
itemCount: 'Quantity',
itemRemark: 'Remark',
itemOperate: 'Operate',
itemAddButton: 'Add Stock Out Mold',
sumLabel: 'Total',
exportFilename: 'MoldStockOut.xls',
placeholderNo: 'Please input mold order no',
placeholderMold: 'Please select mold',
placeholderOutTimeStart: 'Start Date',
placeholderOutTimeEnd: 'End Date',
placeholderWarehouse: 'Please select warehouse',
placeholderCreator: 'Please select creator',
placeholderStatus: 'Please select status',
placeholderRemark: 'Please input remark',
placeholderOutType: 'Please select stock out type',
placeholderOutTime: 'Select stock out time',
placeholderOutNoAuto: 'Auto generated when saved',
validatorOutTimeRequired: 'Stock out time can not be empty',
validatorOutTypeRequired: 'Stock out type can not be empty',
validatorItemOutIdRequired: 'Stock out id can not be empty',
validatorItemWarehouseRequired: 'Warehouse can not be empty',
validatorItemMoldRequired: 'Mold can not be empty',
validatorItemCountRequired: 'Quantity can not be empty'
},
MoldInspectionItems: {
moduleName: 'Inspection Items',
code: 'Code',
name: 'Name',
inspectionMethod: 'Inspection Method',
valueType: 'Value Type',
judgmentCriteria: 'Judgment Criteria',
isEnable: 'Is Enable',
creatorName: 'Creator',
createTime: 'Create Time',
operate: 'Operate',
index: 'Index',
add: 'Add',
batchDelete: 'Batch Delete',
export: 'Export',
edit: 'Edit',
delete: 'Delete',
exportFilename: 'InspectionItems.xls',
placeholderCode: 'Please input code',
placeholderName: 'Please input name',
placeholderJudgmentCriteria: 'Please input judgment criteria',
placeholderSubjectCode: 'Please input item code',
placeholderSubjectName: 'Please input item name',
placeholderInspectionMethod: 'Please select inspection method',
placeholderValueType: 'Please select value type',
placeholderIsEnable: 'Please select enable status',
placeholderJudgmentCriteriaForm: 'Please input judgment criteria',
validatorSubjectCodeRequired: 'Item code can not be empty',
validatorSubjectNameRequired: 'Item name can not be empty',
validatorInspectionMethodRequired: 'Inspection method can not be empty',
validatorValueTypeRequired: 'Value type can not be empty',
validatorJudgmentCriteriaRequired: 'Judgment criteria can not be empty',
validatorIsEnableRequired: 'Enable status can not be empty',
selectDeleteTip: 'Please select the data to delete'
},
MoldInspectionPlan: {
moduleName: 'Inspection Plan',
planName: 'Plan Name',
planType: 'Plan Type',
planTypeMaintain: 'Maintenance',
planTypeInspect: 'Inspection',
description: 'Description',
creatorName: 'Creator',
createTime: 'Create Time',
updateTime: 'Update Time',
operate: 'Operate',
index: 'Index',
subjectCode: 'Item Code',
subjectName: 'Related Items',
inspectionMethod: 'Inspection Method',
judgmentCriteria: 'Judgment Criteria',
add: 'Add',
edit: 'Edit',
delete: 'Delete',
batchDelete: 'Batch Delete',
export: 'Export',
placeholderPlanName: 'Please input plan name',
placeholderDescription: 'Please input description',
placeholderPlanType: 'Please select plan type',
placeholderSubjectName: 'Please input item name',
placeholderSubjectDescription: 'Please input description',
placeholderSubjectSelect: 'Please select related items',
selectDeleteTip: 'Please select data to delete',
exportFilename: 'MoldInspectionPlan.xls',
validatorPlanNameRequired: 'Plan name can not be empty',
validatorPlanTypeRequired: 'Plan type can not be empty'
},
MoldRepair: {
moduleName: 'Mold Repair',
repairCode: 'Repair Order No',
repairName: 'Repair Order',
mold: 'Mold',
moldCode: 'Mold Code',
moldName: 'Mold Name',
repairUser: 'Repair User',
confirmUser: 'Acceptance User',
requireDate: 'Request Date',
finishDate: 'Finish Date',
confirmDate: 'Acceptance Date',
repairResult: 'Repair Result',
status: 'Order Status',
statusPending: 'Pending',
statusDone: 'Completed',
acceptUser: 'Repair User',
confirmUserShort: 'Acceptance User',
creator: 'Creator',
createTime: 'Create Time',
updateTime: 'Update Time',
operate: 'Operate',
index: 'Index',
remark: 'Remark',
listTitle: 'Mold Repair Records',
add: 'Add',
edit: 'Edit',
delete: 'Delete',
batchDelete: 'Batch Delete',
export: 'Export',
exportFilename: 'MoldRepairRecords.xls',
repair: 'Repair',
placeholderRepairCode: 'Please input repair order no',
placeholderRepairName: 'Please input repair order name',
placeholderMoldCode: 'Please input mold code',
placeholderMoldName: 'Please input mold name',
placeholderRequireDateStart: 'Start Date',
placeholderRequireDateEnd: 'End Date',
placeholderFinishDateStart: 'Start Date',
placeholderFinishDateEnd: 'End Date',
placeholderConfirmDateStart: 'Start Date',
placeholderConfirmDateEnd: 'End Date',
placeholderRepairUser: 'Please input repair user',
placeholderStatus: 'Please select order status',
placeholderMold: 'Please select mold',
placeholderAcceptUser: 'Please select repair user',
placeholderConfirmUser: 'Please select acceptance user',
placeholderRequireDate: 'Select request date',
placeholderFinishDate: 'Select finish date',
placeholderConfirmDate: 'Select acceptance date',
placeholderMoldNameAuto: 'Auto filled',
placeholderMoldCodeAuto: 'Auto filled',
search: 'Search',
reset: 'Reset',
selectDeleteTip: 'Please select the data to delete',
validatorRepairCodeRequired: 'Repair order no can not be empty',
validatorRepairNameRequired: 'Repair order can not be empty',
validatorMoldRequired: 'Mold can not be empty',
tabMoldRepairLine: 'Mold Repair Line Items',
dialogTitleCreate: 'Create Repair Order',
dialogTitleUpdate: 'Edit Repair Order',
dialogTitleRepair: 'Repair'
},
MoldRepairLine: {
index: 'Index',
subjectCode: 'Repair Code',
subjectName: 'Repair Name',
subjectContent: 'Repair Content',
addLine: 'Add Repair Item',
placeholderSubjectCode: 'Please input repair code',
placeholderSubjectName: 'Please input repair name',
placeholderSubjectContent: 'Please input repair content',
validatorRepairIdRequired: 'Repair order id can not be empty',
validatorSubjectIdRequired: 'Item id can not be empty',
validatorSubjectCodeRequired: 'Item code can not be empty',
validatorSubjectContentRequired: 'Item content can not be empty'
},
MoldRepairItems: {
moduleName: 'Repair Items',
subjectCode: 'Repair Code',
subjectName: 'Repair Name',
moldName: 'Mold Name',
projectContent: 'Repair Content',
isEnable: 'Is Enable',
createTime: 'Create Time',
operate: 'Operate',
index: 'Index',
add: 'Add',
edit: 'Edit',
delete: 'Delete',
batchDelete: 'Batch Delete',
export: 'Export',
exportFilename: 'MoldRepairItems.xls',
placeholderSubjectCode: 'Please input repair code',
placeholderSubjectName: 'Please input repair name',
placeholderProjectContent: 'Please input repair content',
placeholderCreateTimeStart: 'Start Date',
placeholderCreateTimeEnd: 'End Date',
search: 'Search',
reset: 'Reset',
selectDeleteTip: 'Please select the data to delete',
dialogSubjectCode: 'Repair Code',
dialogSubjectName: 'Repair Name',
dialogMold: 'Mold',
dialogProjectContent: 'Repair Content',
dialogIsEnable: 'Is Enable',
placeholderDialogSubjectCode: 'Please input repair code',
placeholderDialogSubjectName: 'Please input repair name',
placeholderDialogMold: 'Please select mold',
placeholderDialogProjectContent: 'Please input repair content',
validatorSubjectCodeRequired: 'Item code can not be empty',
validatorSubjectNameRequired: 'Item name can not be empty',
validatorMoldRequired: 'Mold can not be empty',
validatorIsEnableRequired: 'Enable status can not be empty'
},
MoldOperate: {
moduleName: 'Mold Up/Down',
operateType: 'Operation Type',
operateTypeUp: 'Mold Up',
operateTypeDown: 'Mold Down',
mold: 'Mold',
moldName: 'Mold Name',
device: 'Device',
deviceName: 'Device Name',
remark: 'Remark',
creatorName: 'Operator',
createTime: 'Operation Time',
operate: 'Operate',
tabUp: 'Mold Up',
tabDown: 'Mold Down',
index: 'Index',
add: 'Add',
delete: 'Delete',
export: 'Export',
exportFilename: 'MoldOperate.xls',
placeholderMold: 'Please select mold',
placeholderRemark: 'Please input remark',
placeholderCreateTimeStart: 'Start Date',
placeholderCreateTimeEnd: 'End Date',
placeholderDevice: 'Please select device',
search: 'Search',
reset: 'Reset',
validatorOperateTypeRequired: 'Operation type can not be empty',
validatorDeviceRequired: 'Device can not be empty',
validatorMoldRequired: 'Mold can not be empty',
alertNeedRemoveMoldFirst: 'Please remove the mold from this device first!',
alertNoMoldOnDevice: 'No mold is installed on this device!'
},
MoldWorkOrderInquiry: {
moduleName: 'Work Order Inquiry',
planNo: 'Order No',
planType: 'Type',
planTypeInspect: 'Inspection',
planTypeMaintain: 'Maintenance',
jobStatus: 'Job Status',
jobResult: 'Result',
jobResultOk: 'OK',
jobResultNg: 'NG',
moldName: 'Mold Name',
configName: 'Plan Config Name',
operatorName: 'Operator',
taskTime: 'Job Time',
taskEndTime: 'Planned End Time',
createTime: 'Create Time',
index: 'Index',
remark: 'Remark',
select: 'Select',
cancelTask: 'Cancel Task',
placeholderPlanNo: 'Please input order no',
placeholderPlanType: 'Please select type',
placeholderJobStatus: 'Please select job status',
placeholderJobResult: 'Please select result',
query: 'Query',
reset: 'Reset',
cancelConfirm: 'Confirm cancel selected tasks?',
cancelSuccess: 'Cancel task successful',
inspectResultTitlePrefix: 'Inspection Result-',
inspectResultTitle: 'Inspection Result'
},
TicketResultDialog: {
moduleName: 'Inspection Result',
index: 'Index',
inspectionItemName: 'Inspection Item Name',
inspectionMethod: 'Inspection Method',
judgmentCriteria: 'Judgment Criteria',
inspectionResult: 'Inspection Result',
inspectionResultPending: 'Pending',
inspectionResultPass: 'Pass',
inspectionResultFail: 'Fail',
images: 'Images',
remark: 'Remark',
operate: 'Operate',
pass: 'Pass',
fail: 'Fail',
save: 'Save',
cancel: 'Cancel',
selectDecisionTip: 'Please select pass or fail for pending records first',
updateSuccess: 'Update successful',
updateFail: 'Update failed'
}
},
QualityManagement: {
ZjType: {
moduleName: 'Inspection Type',
code: 'Code',
name: 'Name',
remark: 'Remark',
createTime: 'Create Time',
operate: 'Operate',
exportFilename: 'Quality-InspectionType.xls',
placeholderCode: 'Please input code',
placeholderName: 'Please input name',
placeholderRemark: 'Please input remark',
placeholderCreateTimeStart: 'Start Date',
placeholderCreateTimeEnd: 'End Date',
validatorCodeRequired: 'Code can not be empty',
validatorNameRequired: 'Name can not be empty'
},
ZjItem: {
moduleName: 'Inspection Item',
zjType: 'Inspection Type',
name: 'Name',
tool: 'Operation Method',
standardVal: 'Standard Value',
upperVal: 'Upper Limit',
lowerVal: 'Lower Limit',
unit: 'Unit',
remark: 'Remark',
createTime: 'Create Time',
operate: 'Operate',
exportFilename: 'Quality-InspectionItem.xls',
placeholderZjType: 'Please select inspection type',
placeholderName: 'Please input name',
placeholderTool: 'Please input operation method',
placeholderStandardVal: 'Please input standard value',
placeholderUpperVal: 'Please input upper limit',
placeholderLowerVal: 'Please input lower limit',
placeholderUnit: 'Please select unit',
placeholderRemark: 'Please input remark',
placeholderCreateTimeStart: 'Start Date',
placeholderCreateTimeEnd: 'End Date',
validatorNameRequired: 'Name can not be empty',
validatorZjTypeRequired: 'Inspection type can not be empty'
},
ZjSchema: {
moduleName: 'Inspection Scheme',
name: 'Name',
type: 'Type',
sampleMethod: 'Sampling Method',
val: 'Value',
item: 'Related Items',
remark: 'Remark',
createTime: 'Create Time',
operate: 'Operate',
source: 'Source',
target: 'Target',
filterPlaceholder: 'Filter',
selectItemDialogTitle: 'Select Inspection Items',
exportFilename: 'Quality-InspectionScheme.xls',
placeholderName: 'Please input name',
placeholderType: 'Please select type',
placeholderSampleMethod: 'Please select sampling method',
placeholderVal: 'Please input value',
placeholderItem: 'Please select inspection items',
placeholderRemark: 'Please input remark',
placeholderCreateTimeStart: 'Start Date',
placeholderCreateTimeEnd: 'End Date',
validatorNameRequired: 'Name can not be empty',
validatorTypeRequired: 'Type can not be empty',
validatorSampleMethodRequired: 'Sampling method can not be empty',
validatorValRequired: 'Value can not be empty'
},
ZjTask: {
moduleName: 'Inspection Task',
index: 'Index',
code: 'Code',
type: 'Inspection Category',
status: 'Status',
ticketCode: 'Work Order',
orgType: 'Process',
schemaName: 'Inspection Scheme',
managerName: 'Manager',
executorName: 'Executor',
executeTime: 'Execute Time',
remark: 'Remark',
result: 'Result',
resultPass: 'Pass',
resultFail: 'Fail',
createTime: 'Create Time',
operate: 'Operate',
inspect: 'Inspect',
exportFilename: 'Quality-InspectionTask.xls',
placeholderCode: 'Please input code',
placeholderType: 'Please select inspection category',
placeholderOrgType: 'Please select process',
placeholderStatus: 'Please select status',
placeholderResult: 'Please input result',
placeholderCreateTimeStart: 'Start Date',
placeholderCreateTimeEnd: 'End Date',
formCode: 'Code',
formType: 'Inspection Category',
formSchema: 'Inspection Scheme',
formTicketType: 'Work Order Type',
formTicket: 'Production Plan',
formOrgType: 'Process',
formManager: 'Manager',
formRemark: 'Remark',
ticketTypeProcess: 'Production Process',
ticketTypeStorage: 'Product Storage',
placeholderFormCode: 'Please input code',
placeholderFormType: 'Please select inspection category',
placeholderFormSchema: 'Please select inspection scheme',
placeholderFormTicket: 'Please select production plan',
placeholderFormOrgType: 'Please select process',
placeholderFormManager: 'Please select manager',
placeholderFormRemark: 'Please input remark',
validatorCodeRequired: 'Code can not be empty',
validatorTypeRequired: 'Inspection category can not be empty',
validatorSchemaRequired: 'Inspection scheme can not be empty',
validatorTicketRequired: 'Work order can not be empty',
validatorOrgTypeRequired: 'Process can not be empty',
validatorTicketTypeRequired: 'Work order type can not be empty'
},
TicketResultDialog: {
moduleName: 'Inspection Result',
index: 'Index',
inspectionItemName: 'Inspection Item Name',
inspectionMethod: 'Inspection Method',
judgmentCriteria: 'Judgment Criteria',
unit: 'Unit',
upperVal: 'Upper Limit',
lowerVal: 'Lower Limit',
inspectionResult: 'Inspection Result',
inspectionResultPending: 'Pending',
inspectionResultPass: 'Pass',
inspectionResultFail: 'Fail',
images: 'Images',
remark: 'Remark',
operate: 'Operate',
pass: 'Pass',
fail: 'Fail',
save: 'Save',
cancel: 'Cancel',
selectDecisionTip: 'Please select pass or fail for pending records first',
updateSuccess: 'Update successful',
updateFail: 'Update failed'
}
}
}

@ -309,7 +309,8 @@ export default {
typeCreate: '字典类型新增',
typeUpdate: '字典类型编辑',
dataCreate: '字典数据新增',
dataUpdate: '字典数据编辑'
dataUpdate: '字典数据编辑',
select: '选择'
},
dialog: {
dialog: '弹窗',
@ -810,5 +811,773 @@ export default {
validatorComponentRequired: '关键件不能为空',
validatorIsEnableRequired: '是否启用不能为空'
}
},
// 备件管理
SparePartsManagement: {
SpareInfo: {
name: '备件名称',
code: '备件编码',
standard: '规格',
expiryDay: '保质期天数',
category: '分类',
unit: '单位',
safetyNumber: '预警库存',
status: '状态',
createTime: '创建时间',
operate: '操作',
remark: '备注',
exportFilename: '备件信息.xls',
placeholderName: '请输入名称',
placeholderCode: '请输入编码',
placeholderUnit: '请选择单位',
placeholderSafetyNumber: '请输入预警库存数量',
placeholderRemark: '请输入备注',
placeholderStandard: '请输入规格',
placeholderExpiryDay: '请输入保质期天数',
validatorNameRequired: '备件名称不能为空',
validatorCodeRequired: '备件编码不能为空',
validatorCategoryRequired: '分类不能为空',
validatorUnitRequired: '单位不能为空',
validatorStatusRequired: '状态不能为空'
},
SpareStock: {
product: '备件',
warehouse: '仓库',
category: '分类',
count: '库存量',
unit: '单位',
exportFilename: '备件库存.xls',
placeholderProduct: '请选择备件',
placeholderWarehouse: '请选择仓库'
},
SpareRecord: {
product: '备件',
warehouse: '仓库',
unit: '单位',
bizType: '类型',
bizNo: '出入库单号',
count: '出入库数量',
totalCount: '库存量',
recordTime: '出入库日期',
createTime: '创建日期',
creatorName: '操作人',
exportFilename: '备件库存明细.xls',
placeholderProduct: '请选择备件',
placeholderWarehouse: '请选择仓库',
placeholderBizNo: '请输入业务单号',
placeholderCreateTimeStart: '开始日期',
placeholderCreateTimeEnd: '结束日期'
},
SpareIn: {
product: '备件',
inTime: '入库时间',
supplier: '供应商',
warehouse: '仓库',
remark: '备注',
status: '状态',
inType: '入库类型',
no: '入库单号',
creatorName: '创建人',
totalCount: '数量',
totalPrice: '金额',
operate: '操作',
tabUnAudit: '未审核',
tabAudited: '已审核',
tabAll: '所有',
detail: '详情',
edit: '编辑',
approve: '审批',
unapprove: '反审批',
delete: '删除',
itemListTitle: '入库产品清单',
itemIndex: '序号',
itemWarehouseName: '仓库名称',
itemProductName: '备件名称',
itemStockCount: '库存',
itemProductCode: '备件编码',
itemUnitName: '单位',
itemCount: '数量',
itemProductPrice: '备件单价',
itemTotalPrice: '合计金额',
itemRemark: '备注',
itemOperate: '操作',
itemAddButton: '添加入库备件',
sumLabel: '合计',
exportFilename: '备件入库.xls',
placeholderProduct: '请选择备件',
placeholderInTimeStart: '开始日期',
placeholderInTimeEnd: '结束日期',
placeholderSupplier: '请选择供应商',
placeholderWarehouse: '请选择仓库',
placeholderRemark: '请输入备注',
placeholderInType: '请选择入库类型',
placeholderInTime: '选择入库时间',
placeholderNoAuto: '保存时自动生成',
validatorInTimeRequired: '入库时间不能为空',
validatorInTypeRequired: '入库类型不能为空',
validatorItemInIdRequired: '入库编号不能为空',
validatorItemWarehouseRequired: '仓库不能为空',
validatorItemProductRequired: '备件不能为空',
validatorItemCountRequired: '备件数量不能为空',
confirmApprove: '确定审批该入库单吗?',
confirmUnapprove: '确定反审批该入库单吗?',
approveSuccess: '审批成功',
unapproveSuccess: '反审批成功'
},
SpareOut: {
no: '出库单号',
product: '备件',
outTime: '出库时间',
warehouse: '仓库',
remark: '备注',
customer: '客户',
status: '状态',
totalCount: '数量',
totalPrice: '金额',
creatorName: '创建人',
operate: '操作',
tabUnAudit: '未审核',
tabAudited: '已审核',
tabAll: '所有',
detail: '详情',
edit: '编辑',
approve: '审批',
unapprove: '反审批',
delete: '删除',
itemListTitle: '出库备件清单',
itemIndex: '序号',
itemWarehouseName: '仓库名称',
itemProductName: '备件名称',
itemStockCount: '库存',
itemProductCode: '备件编码',
itemUnitName: '单位',
itemCount: '数量',
itemProductPrice: '单价',
itemTotalPrice: '合计金额',
itemRemark: '备注',
itemOperate: '操作',
itemAddButton: '添加出库备件',
sumLabel: '合计',
exportFilename: '备件出库.xls',
placeholderNo: '请输入出库单号',
placeholderProduct: '请选择备件',
placeholderOutTimeStart: '开始日期',
placeholderOutTimeEnd: '结束日期',
placeholderWarehouse: '请选择仓库',
placeholderRemark: '请输入备注',
placeholderOutType: '请选择出库类型',
placeholderOutTime: '选择出库时间',
placeholderNoAuto: '保存时自动生成',
validatorOutTimeRequired: '出库时间不能为空',
validatorOutTypeRequired: '出库类型不能为空',
validatorItemOutIdRequired: '出库编号不能为空',
validatorItemWarehouseRequired: '仓库不能为空',
validatorItemProductRequired: '备件不能为空',
validatorItemCountRequired: '备件数量不能为空'
}
},
MoldManagement: {
MoldBrand: {
code: '型号编码',
name: '型号名称',
moldType: '规格',
orgType: '工序',
moldSize: '模穴数',
useTime: '预期寿命/次',
remark: '备注',
createTime: '创建时间',
operate: '操作',
tabMold: '模具',
emptyTip: '请先点击上方列表选择一个模具型号',
exportFilename: '模具型号.xls',
placeholderCode: '请输入型号编码',
placeholderName: '请输入型号名称',
placeholderOrgType: '请选择工序',
placeholderMoldType: '请输入规格',
placeholderMoldSize: '请输入模穴数',
placeholderUseTime: '输入预期寿命(次)',
placeholderRemark: '请输入备注',
validatorCodeRequired: '型号编码不能为空',
validatorNameRequired: '型号名称不能为空',
validatorMoldTypeRequired: '规格不能为空',
validatorProductRequired: '产品ID不能为空',
validatorMoldSizeRequired: '出模数不能为空',
orgTypeTooltip: '来源:数据字典-工序'
},
Mold: {
code: '模具编码',
name: '模具名称',
unit: '单位',
inTime: '入库时间',
status: '状态',
images: '模具图片',
remark: '备注',
isEnable: '是否启用',
fileUrl: '资料',
machineName: '使用设备',
useTime: '使用次数/次',
moldSize: '模穴数',
createTime: '创建时间',
operate: '操作',
detail: '详情',
add: '新增',
edit: '编辑',
delete: '删除',
placeholderCode: '请输入模具编码',
placeholderName: '请输入模具名称',
placeholderUnit: '请选择单位',
placeholderInTime: '选择入库时间',
placeholderRemark: '请输入备注',
validatorCodeRequired: '模具编码不能为空',
validatorNameRequired: '模具名称不能为空',
validatorUnitRequired: '单位不能为空',
validatorInTimeRequired: '入库时间不能为空',
validatorIsEnableRequired: '是否启用不能为空',
validatorBrandRequired: '型号不能为空',
selectBrandTip: '请选择一个模具型号',
statusTooltip: '来源:数据字典-模具状态'
},
MoldReturn: {
moduleName: '模具入库',
no: '入库单号',
mold: '模具',
moldInfo: '模具信息',
inTime: '入库时间',
warehouse: '仓库',
creator: '创建人',
status: '状态',
remark: '备注',
select: '选择',
operate: '操作',
detail: '详情',
edit: '编辑',
approve: '审批',
unapprove: '反审批',
delete: '删除',
export: '导出',
add: '新增',
inType: '入库类型',
inNo: '入库单号',
inTimeSingle: '入库时间',
remarkSingle: '备注',
attachment: '附件',
itemListTitle: '入库模具清单',
itemIndex: '序号',
itemWarehouseName: '仓库名称',
itemMoldName: '模具名称',
itemStockCount: '库存',
itemMoldCode: '模具编码',
itemUnitName: '单位',
itemCount: '数量',
itemRemark: '备注',
itemOperate: '操作',
itemAddButton: '添加入库模具',
sumLabel: '合计',
exportFilename: '模具入库单.xls',
placeholderNo: '请输入入库单号',
placeholderMold: '请选择模具',
placeholderInTimeStart: '开始日期',
placeholderInTimeEnd: '结束日期',
placeholderWarehouse: '请选择仓库',
placeholderCreator: '请选择创建人',
placeholderStatus: '请选择状态',
placeholderRemark: '请输入备注',
placeholderInType: '请选择入库类型',
placeholderInTime: '选择入库时间',
placeholderInNoAuto: '保存时自动生成',
validatorInTimeRequired: '入库时间不能为空',
validatorInTypeRequired: '入库类型不能为空',
validatorItemInIdRequired: '入库编号不能为空',
validatorItemWarehouseRequired: '仓库不能为空',
validatorItemMoldRequired: '模具不能为空',
validatorItemCountRequired: '数量不能为空',
approveConfirm: '确定审批该入库单吗?',
unapproveConfirm: '确定反审批该入库单吗?',
approveSuccess: '审批成功',
unapproveSuccess: '反审批成功'
},
MoldGet: {
moduleName: '模具出库',
no: '领模单号',
mold: '模具',
outTime: '出库时间',
warehouse: '仓库',
creator: '创建人',
status: '状态',
remark: '备注',
select: '选择',
operate: '操作',
detail: '详情',
edit: '编辑',
approve: '审批',
unapprove: '反审批',
delete: '删除',
export: '导出',
add: '新增',
outType: '出库类型',
outNo: '出库单号',
outTimeSingle: '出库时间',
remarkSingle: '备注',
attachment: '附件',
itemListTitle: '出库模具清单',
itemIndex: '序号',
itemWarehouseName: '仓库名称',
itemMoldName: '模具名称',
itemStockCount: '库存',
itemMoldCode: '模具编码',
itemUnitName: '单位',
itemCount: '数量',
itemRemark: '备注',
itemOperate: '操作',
itemAddButton: '添加出库模具',
sumLabel: '合计',
exportFilename: '模具出库单.xls',
placeholderNo: '请输入领模单号',
placeholderMold: '请选择模具',
placeholderOutTimeStart: '开始日期',
placeholderOutTimeEnd: '结束日期',
placeholderWarehouse: '请选择仓库',
placeholderCreator: '请选择创建人',
placeholderStatus: '请选择状态',
placeholderRemark: '请输入备注',
placeholderOutType: '请选择出库类型',
placeholderOutTime: '选择出库时间',
placeholderOutNoAuto: '保存时自动生成',
validatorOutTimeRequired: '出库时间不能为空',
validatorOutTypeRequired: '出库类型不能为空',
validatorItemOutIdRequired: '出库编号不能为空',
validatorItemWarehouseRequired: '仓库不能为空',
validatorItemMoldRequired: '模具不能为空',
validatorItemCountRequired: '数量不能为空'
},
MoldInspectionItems: {
moduleName: '检验项目',
code: '编码',
name: '名称',
inspectionMethod: '检验方式',
valueType: '值类型',
judgmentCriteria: '判定基准',
isEnable: '是否启用',
creatorName: '创建人',
createTime: '创建时间',
operate: '操作',
index: '序号',
add: '新增',
batchDelete: '批量删除',
export: '导出',
edit: '编辑',
delete: '删除',
exportFilename: '检验项目.xls',
placeholderCode: '请输入编码',
placeholderName: '请输入名称',
placeholderJudgmentCriteria: '请输入判定基准',
placeholderSubjectCode: '请输入项目编码',
placeholderSubjectName: '请输入项目名称',
placeholderInspectionMethod: '请选择检验方式',
placeholderValueType: '请选择值类型',
placeholderIsEnable: '请选择是否启用',
placeholderJudgmentCriteriaForm: '请输入判定基准',
validatorSubjectCodeRequired: '项目编码不能为空',
validatorSubjectNameRequired: '项目名称不能为空',
validatorInspectionMethodRequired: '检验方式不能为空',
validatorValueTypeRequired: '值类型不能为空',
validatorJudgmentCriteriaRequired: '判定基准不能为空',
validatorIsEnableRequired: '是否启用不能为空',
selectDeleteTip: '请选择需要删除的数据'
},
MoldInspectionPlan: {
moduleName: '检验方案',
planName: '方案名称',
planType: '方案类型',
planTypeMaintain: '保养',
planTypeInspect: '点检',
description: '描述',
creatorName: '创建人',
createTime: '创建时间',
updateTime: '更新时间',
operate: '操作',
index: '序号',
subjectCode: '项目编码',
subjectName: '关联项目',
inspectionMethod: '检验方式',
judgmentCriteria: '判定基准',
add: '新增',
edit: '编辑',
delete: '删除',
batchDelete: '批量删除',
export: '导出',
placeholderPlanName: '请输入方案名称',
placeholderDescription: '请输入描述',
placeholderPlanType: '请选择方案类型',
placeholderSubjectName: '请输入项目名称',
placeholderSubjectDescription: '请输入描述',
placeholderSubjectSelect: '请选择关联项目',
selectDeleteTip: '请选择需要删除的数据',
exportFilename: '模具检验方案.xls',
validatorPlanNameRequired: '方案名称不能为空',
validatorPlanTypeRequired: '方案类型不能为空'
},
MoldRepair: {
moduleName: '维修单',
repairCode: '维修单号',
repairName: '维修单',
mold: '模具',
moldCode: '模具编码',
moldName: '模具名称',
repairUser: '维修人员',
confirmUser: '验收人员',
requireDate: '报修日期',
finishDate: '完成日期',
confirmDate: '验收日期',
repairResult: '维修结果',
status: '单据状态',
statusPending: '待完成',
statusDone: '已完成',
acceptUser: '维修人员',
confirmUserShort: '验收人员',
creator: '创建人',
createTime: '创建时间',
updateTime: '更新时间',
operate: '操作',
index: '序号',
remark: '备注',
listTitle: '模具维修记录',
add: '新增',
edit: '编辑',
delete: '删除',
batchDelete: '批量删除',
export: '导出',
exportFilename: '模具维修记录.xls',
repair: '维修',
placeholderRepairCode: '请输入维修单编号',
placeholderRepairName: '请输入维修单名称',
placeholderMoldCode: '请输入模具编码',
placeholderMoldName: '请输入模具名称',
placeholderRequireDateStart: '开始日期',
placeholderRequireDateEnd: '结束日期',
placeholderFinishDateStart: '开始日期',
placeholderFinishDateEnd: '结束日期',
placeholderConfirmDateStart: '开始日期',
placeholderConfirmDateEnd: '结束日期',
placeholderRepairUser: '请输入维修人员',
placeholderStatus: '请选择单据状态',
placeholderMold: '请选择模具',
placeholderAcceptUser: '请选择维修人员',
placeholderConfirmUser: '请选择验收人员',
placeholderRequireDate: '选择报修日期',
placeholderFinishDate: '选择完成日期',
placeholderConfirmDate: '选择验收日期',
placeholderMoldNameAuto: '自动带出',
placeholderMoldCodeAuto: '自动带出',
search: '搜索',
reset: '重置',
selectDeleteTip: '请选择需要删除的数据',
validatorRepairCodeRequired: '维修单编号不能为空',
validatorRepairNameRequired: '维修单不能为空',
validatorMoldRequired: '模具不能为空',
tabMoldRepairLine: '模具维修项目行',
dialogTitleCreate: '新增维修单',
dialogTitleUpdate: '编辑维修单',
dialogTitleRepair: '维修'
},
MoldRepairLine: {
index: '序号',
subjectCode: '维修编码',
subjectName: '维修名称',
subjectContent: '维修内容',
addLine: '添加维修项目',
placeholderSubjectCode: '请输入维修编码',
placeholderSubjectName: '请输入维修名称',
placeholderSubjectContent: '请输入维修内容',
validatorRepairIdRequired: '维修单ID不能为空',
validatorSubjectIdRequired: '项目ID不能为空',
validatorSubjectCodeRequired: '项目编码不能为空',
validatorSubjectContentRequired: '项目内容不能为空'
},
MoldRepairItems: {
moduleName: '维修项目',
subjectCode: '维修编码',
subjectName: '维修名称',
moldName: '模具名称',
projectContent: '维修内容',
isEnable: '是否启用',
createTime: '创建时间',
operate: '操作',
index: '序号',
add: '新增',
edit: '编辑',
delete: '删除',
batchDelete: '批量删除',
export: '导出',
exportFilename: '模具维修项目.xls',
placeholderSubjectCode: '请输入维修编码',
placeholderSubjectName: '请输入维修名称',
placeholderProjectContent: '请输入维修内容',
placeholderCreateTimeStart: '开始日期',
placeholderCreateTimeEnd: '结束日期',
search: '搜索',
reset: '重置',
selectDeleteTip: '请选择需要删除的数据',
dialogSubjectCode: '维修编码',
dialogSubjectName: '维修名称',
dialogMold: '模具',
dialogProjectContent: '维修内容',
dialogIsEnable: '是否启用',
placeholderDialogSubjectCode: '请输入维修编码',
placeholderDialogSubjectName: '请输入维修名称',
placeholderDialogMold: '请选择模具',
placeholderDialogProjectContent: '请输入维修内容',
validatorSubjectCodeRequired: '项目编码不能为空',
validatorSubjectNameRequired: '项目名称不能为空',
validatorMoldRequired: '模具不能为空',
validatorIsEnableRequired: '是否启用不能为空'
},
MoldOperate: {
moduleName: '模具上下模',
operateType: '操作类型',
operateTypeUp: '上模',
operateTypeDown: '下模',
mold: '模具',
moldName: '模具名称',
device: '设备',
deviceName: '设备名称',
remark: '备注',
creatorName: '操作人',
createTime: '操作时间',
operate: '操作',
tabUp: '上模',
tabDown: '下模',
index: '序号',
add: '新增',
delete: '删除',
export: '导出',
exportFilename: '模具上下模.xls',
placeholderMold: '请选择模具',
placeholderRemark: '请输入备注',
placeholderCreateTimeStart: '开始日期',
placeholderCreateTimeEnd: '结束日期',
placeholderDevice: '请选择设备',
search: '搜索',
reset: '重置',
validatorOperateTypeRequired: '操作类型不能为空',
validatorDeviceRequired: '关联设备不能为空',
validatorMoldRequired: '关联模具不能为空',
alertNeedRemoveMoldFirst: '请先将该设备上的模具换下!',
alertNoMoldOnDevice: '该设备没有安装模具!'
},
MoldWorkOrderInquiry: {
moduleName: '工单查询',
planNo: '单号',
planType: '类型',
planTypeInspect: '点检',
planTypeMaintain: '保养',
jobStatus: '作业状态',
jobResult: '结果',
jobResultOk: '通过',
jobResultNg: '不通过',
moldName: '模具名称',
configName: '计划配置名称',
operatorName: '作业人',
taskTime: '作业时间',
taskEndTime: '计划结束作业时间',
createTime: '创建时间',
index: '序号',
remark: '备注',
select: '选择',
cancelTask: '取消任务',
placeholderPlanNo: '请输入单号',
placeholderPlanType: '请选择类型',
placeholderJobStatus: '请选择作业状态',
placeholderJobResult: '请选择结果',
query: '查询',
reset: '重置',
cancelConfirm: '确认取消选中的任务吗?',
cancelSuccess: '取消任务成功',
inspectResultTitlePrefix: '检验结果-',
inspectResultTitle: '检验结果'
},
TicketResultDialog: {
moduleName: '检验结果',
index: '序号',
inspectionItemName: '检验项名称',
inspectionMethod: '检验方式',
judgmentCriteria: '判定基准',
inspectionResult: '检验结果',
inspectionResultPending: '待检测',
inspectionResultPass: '通过',
inspectionResultFail: '不通过',
images: '图片',
remark: '备注',
operate: '操作',
pass: '通过',
fail: '不通过',
save: '保 存',
cancel: '取 消',
selectDecisionTip: '请先为待检测记录选择通过或不通过',
updateSuccess: '更新成功',
updateFail: '更新失败'
}
},
QualityManagement: {
ZjType: {
moduleName: '检验类型',
code: '编码',
name: '名称',
remark: '备注',
createTime: '创建时间',
operate: '操作',
exportFilename: '质量管理-检验类型.xls',
placeholderCode: '请输入编码',
placeholderName: '请输入名称',
placeholderRemark: '请输入备注',
placeholderCreateTimeStart: '开始日期',
placeholderCreateTimeEnd: '结束日期',
validatorCodeRequired: '编码不能为空',
validatorNameRequired: '名称不能为空'
},
ZjItem: {
moduleName: '检验项目',
zjType: '检验类型',
name: '名称',
tool: '作业方式',
standardVal: '标准值',
upperVal: '上限值',
lowerVal: '下限值',
unit: '单位',
remark: '备注',
createTime: '创建时间',
operate: '操作',
exportFilename: '质量管理-检验项目.xls',
placeholderZjType: '请选择检验类型',
placeholderName: '请输入名称',
placeholderTool: '请输入作业方式',
placeholderStandardVal: '请输入标准值',
placeholderUpperVal: '请输入上限值',
placeholderLowerVal: '请输入下限值',
placeholderUnit: '请选择单位',
placeholderRemark: '请输入备注',
placeholderCreateTimeStart: '开始日期',
placeholderCreateTimeEnd: '结束日期',
validatorNameRequired: '名称不能为空',
validatorZjTypeRequired: '检验类型不能为空'
},
ZjSchema: {
moduleName: '检验方案',
name: '名称',
type: '类型',
sampleMethod: '抽检方式',
val: '值',
item: '关联项目',
remark: '备注',
createTime: '创建时间',
operate: '操作',
source: '来源',
target: '目标',
filterPlaceholder: '筛选',
selectItemDialogTitle: '选择检验项目',
exportFilename: '质量管理-检验方案.xls',
placeholderName: '请输入名称',
placeholderType: '请选择类型',
placeholderSampleMethod: '请选择抽检方式',
placeholderVal: '请输入值',
placeholderItem: '请选择检验项目',
placeholderRemark: '请输入备注',
placeholderCreateTimeStart: '开始日期',
placeholderCreateTimeEnd: '结束日期',
validatorNameRequired: '名称不能为空',
validatorTypeRequired: '类型不能为空',
validatorSampleMethodRequired: '抽检方式不能为空',
validatorValRequired: '值不能为空'
},
ZjTask: {
moduleName: '检验任务',
index: '序号',
code: '单号',
type: '质检分类',
status: '状态',
ticketCode: '工单',
orgType: '工序',
schemaName: '检验方案',
managerName: '负责人',
executorName: '执行人',
executeTime: '执行时间',
remark: '备注',
result: '结果',
resultPass: '通过',
resultFail: '不通过',
createTime: '创建时间',
operate: '操作',
inspect: '检验',
exportFilename: '质量管理-检验任务.xls',
placeholderCode: '请输入单号',
placeholderType: '请选择质检分类',
placeholderOrgType: '请选择工序',
placeholderStatus: '请选择状态',
placeholderResult: '请输入结果',
placeholderCreateTimeStart: '开始日期',
placeholderCreateTimeEnd: '结束日期',
formCode: '单号',
formType: '质检分类',
formSchema: '检验方案',
formTicketType: '工单类型',
formTicket: '生产计划',
formOrgType: '工序',
formManager: '负责人',
formRemark: '备注',
ticketTypeProcess: '生产过程',
ticketTypeStorage: '产品入库',
placeholderFormCode: '请输入单号',
placeholderFormType: '请选择质检分类',
placeholderFormSchema: '请选择检验方案',
placeholderFormTicket: '请选择生产计划',
placeholderFormOrgType: '请选择工序',
placeholderFormManager: '请选择负责人',
placeholderFormRemark: '请输入备注',
validatorCodeRequired: '单号不能为空',
validatorTypeRequired: '质检分类不能为空',
validatorSchemaRequired: '检验方案不能为空',
validatorTicketRequired: '工单不能为空',
validatorOrgTypeRequired: '工序不能为空',
validatorTicketTypeRequired: '工单类型不能为空'
},
TicketResultDialog: {
moduleName: '检验结果',
index: '序号',
inspectionItemName: '检验项名称',
inspectionMethod: '检验方式',
judgmentCriteria: '判定基准',
unit: '单位',
upperVal: '上限值',
lowerVal: '下限值',
inspectionResult: '检验结果',
inspectionResultPending: '待检测',
inspectionResultPass: '通过',
inspectionResultFail: '不通过',
images: '图片',
remark: '备注',
operate: '操作',
pass: '通过',
fail: '不通过',
save: '保 存',
cancel: '取 消',
selectDecisionTip: '请先为待检测记录选择通过或不通过',
updateSuccess: '更新成功',
updateFail: '更新失败'
}
}
}

@ -601,7 +601,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
{
path: '/iot/report/dashboardPage/Dashboard8',
component: () => import('@/views/report/dashboardPage/dashboard8/Dashboard8.vue'),
component: () => import('@/views/report/dashboardPage/dashboard8/index.vue'),
name: 'IotReportDashboard8',
meta: {
title: '智能制造产线任务总览',
@ -613,7 +613,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
{
path: '/iot/report/dashboardPage/Dashboard1',
component: () => import('@/views/report/dashboardPage/dashboard1/Dashboard8.vue'),
component: () => import('@/views/report/dashboardPage/dashboard1/index.vue'),
name: 'IotReportDashboard1',
meta: {
title: '智能制造产线任务总览',

@ -4,24 +4,24 @@
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
label-width="110px"
v-loading="formLoading"
:disabled="disabled"
>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="入库单号" prop="no">
<el-input disabled v-model="formData.no" placeholder="保存时自动生成" />
<el-form-item :label="t('SparePartsManagement.SpareIn.no')" prop="no">
<el-input disabled v-model="formData.no" :placeholder="t('SparePartsManagement.SpareIn.placeholderNoAuto')" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="入库类型" prop="inType">
<el-form-item :label="t('SparePartsManagement.SpareIn.inType')" prop="inType">
<el-select
disabled
v-model="formData.inType"
clearable
filterable
placeholder="请选择入库类型"
:placeholder="t('SparePartsManagement.SpareIn.placeholderInType')"
class="!w-1/1"
>
<el-option
@ -35,23 +35,23 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="入库时间" prop="inTime">
<el-form-item :label="t('SparePartsManagement.SpareIn.inTime')" prop="inTime">
<el-date-picker
v-model="formData.inTime"
type="date"
value-format="x"
placeholder="选择入库时间"
:placeholder="t('SparePartsManagement.SpareIn.placeholderInTime')"
class="!w-1/1"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="供应商" prop="supplierId">
<el-form-item :label="t('SparePartsManagement.SpareIn.supplier')" prop="supplierId">
<el-select
v-model="formData.supplierId"
clearable
filterable
placeholder="请选择供应商"
:placeholder="t('SparePartsManagement.SpareIn.placeholderSupplier')"
class="!w-1/1"
>
<el-option
@ -64,17 +64,17 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('SparePartsManagement.SpareIn.remark')" prop="remark">
<el-input
type="textarea"
v-model="formData.remark"
:rows="1"
placeholder="请输入备注"
:placeholder="t('SparePartsManagement.SpareIn.placeholderRemark')"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="fileUrl">
<el-form-item :label="t('common.file')" prop="fileUrl">
<UploadFile :is-show-tip="false" v-model="formData.fileUrl" :limit="1" />
</el-form-item>
</el-col>
@ -83,16 +83,16 @@
<!-- 子表的表单 -->
<ContentWrap>
<el-tabs v-model="subTabsName" class="-mt-15px -mb-10px">
<el-tab-pane label="入库产品清单" name="item">
<el-tab-pane :label="t('SparePartsManagement.SpareIn.itemListTitle')" name="item">
<StockInItemForm ref="itemFormRef" :items="formData.items" :disabled="disabled" />
</el-tab-pane>
</el-tabs>
</ContentWrap>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading" v-if="!disabled">
{{ t('common.ok') }}
</el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button>
</template>
</Dialog>
</template>
@ -121,8 +121,8 @@ const formData = ref({
items: []
})
const formRules = reactive({
inTime: [{ required: true, message: '入库时间不能为空', trigger: 'blur' }],
inType: [{ required: true, message: '入库类型不能为空', trigger: 'blur' }]
inTime: [{ required: true, message: t('SparePartsManagement.SpareIn.validatorInTimeRequired'), trigger: 'blur' }],
inType: [{ required: true, message: t('SparePartsManagement.SpareIn.validatorInTypeRequired'), trigger: 'blur' }]
})
const disabled = computed(() => formType.value === 'detail')
const formRef = ref() // Ref

@ -9,8 +9,8 @@
:disabled="disabled"
>
<el-table :data="formData" show-summary :summary-method="getSummaries" class="-mt-10px">
<el-table-column label="序号" type="index" align="center" width="60" />
<el-table-column label="仓库名称" min-width="125">
<el-table-column :label="t('SparePartsManagement.SpareIn.itemIndex')" type="index" align="center" width="60" />
<el-table-column :label="t('SparePartsManagement.SpareIn.itemWarehouseName')" min-width="125">
<template #default="{ row, $index }">
<el-form-item
:prop="`${$index}.warehouseId`"
@ -21,7 +21,7 @@
v-model="row.warehouseId"
clearable
filterable
placeholder="请选择仓库"
:placeholder="t('SparePartsManagement.SpareIn.placeholderWarehouse')"
@change="onChangeWarehouse($event, row)"
>
<el-option
@ -34,7 +34,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备件名称" min-width="180">
<el-table-column :label="t('SparePartsManagement.SpareIn.itemProductName')" min-width="180">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.productId`" :rules="formRules.productId" class="mb-0px!">
<el-select
@ -42,7 +42,7 @@
clearable
filterable
@change="onChangeProduct($event, row)"
placeholder="请选择备件"
:placeholder="t('SparePartsManagement.SpareIn.placeholderProduct')"
>
<el-option
v-for="item in productList"
@ -54,28 +54,28 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="库存" min-width="100">
<el-table-column :label="t('SparePartsManagement.SpareIn.itemStockCount')" min-width="100">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.stockCount" :formatter="erpCountInputFormatter" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备件编码" min-width="150">
<el-table-column :label="t('SparePartsManagement.SpareIn.itemProductCode')" min-width="150">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.productBarCode" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="80">
<el-table-column :label="t('SparePartsManagement.SpareIn.itemUnitName')" min-width="80">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.productUnitName" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="数量" prop="count" fixed="right" min-width="140">
<el-table-column :label="t('SparePartsManagement.SpareIn.itemCount')" prop="count" fixed="right" min-width="140">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.count`" :rules="formRules.count" class="mb-0px!">
<el-input-number
@ -88,7 +88,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备件单价" fixed="right" min-width="120">
<el-table-column :label="t('SparePartsManagement.SpareIn.itemProductPrice')" fixed="right" min-width="120">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.productPrice`" class="mb-0px!">
<el-input-number
@ -101,21 +101,24 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="合计金额" prop="totalPrice" fixed="right" min-width="100">
<el-table-column :label="t('SparePartsManagement.SpareIn.itemTotalPrice')" prop="totalPrice" fixed="right" min-width="100">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.totalPrice`" class="mb-0px!">
<el-input disabled v-model="row.totalPrice" :formatter="erpPriceInputFormatter" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备注" fixed="right" min-width="150">
<el-table-column :label="t('SparePartsManagement.SpareIn.itemRemark')" fixed="right" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
<el-input v-model="row.remark" placeholder="请输入备注" />
<el-input
v-model="row.remark"
:placeholder="t('SparePartsManagement.SpareIn.placeholderRemark')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="60">
<el-table-column align="center" fixed="right" :label="t('SparePartsManagement.SpareIn.itemOperate')" width="60">
<template #default="{ $index }">
<el-button type="danger" @click="handleDelete($index)" link>
<Icon icon="ep:delete" />
@ -125,10 +128,11 @@
</el-table>
</el-form>
<el-row justify="center" class="mt-3" v-if="!disabled">
<el-button @click="handleAdd" round>+ 添加入库备件</el-button>
<el-button @click="handleAdd" round>+ {{ t('SparePartsManagement.SpareIn.itemAddButton') }}</el-button>
</el-row>
</template>
<script setup lang="ts">
import { useI18n } from '@/hooks/web/useI18n'
import { ProductApi, ProductVO } from '@/api/erp/product/product'
import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
import { StockApi } from '@/api/erp/stock/stock'
@ -139,6 +143,8 @@ import {
getSumValue
} from '@/utils'
const { t } = useI18n()
const props = defineProps<{
items: undefined
disabled: false
@ -146,10 +152,30 @@ const props = defineProps<{
const formLoading = ref(false) //
const formData = ref([])
const formRules = reactive({
inId: [{ required: true, message: '入库编号不能为空', trigger: 'blur' }],
warehouseId: [{ required: true, message: '仓库不能为空', trigger: 'blur' }],
productId: [{ required: true, message: '备件不能为空', trigger: 'blur' }],
count: [{ required: true, message: '备件数量不能为空', trigger: 'blur' }]
inId: [
{ required: true, message: t('SparePartsManagement.SpareIn.validatorItemInIdRequired'), trigger: 'blur' }
],
warehouseId: [
{
required: true,
message: t('SparePartsManagement.SpareIn.validatorItemWarehouseRequired'),
trigger: 'blur'
}
],
productId: [
{
required: true,
message: t('SparePartsManagement.SpareIn.validatorItemProductRequired'),
trigger: 'blur'
}
],
count: [
{
required: true,
message: t('SparePartsManagement.SpareIn.validatorItemCountRequired'),
trigger: 'blur'
}
]
})
const formRef = ref([]) // Ref
const productList = ref<ProductVO[]>([]) //
@ -186,7 +212,7 @@ const getSummaries = (param: SummaryMethodProps) => {
const sums: string[] = []
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计'
sums[index] = t('SparePartsManagement.SpareIn.sumLabel')
return
}
if (['count', 'totalPrice'].includes(column.property)) {

@ -7,14 +7,14 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
label-width="110px"
>
<el-form-item label="备件" prop="productId">
<el-form-item :label="t('SparePartsManagement.SpareIn.product')" prop="productId">
<el-select
v-model="queryParams.productId"
clearable
filterable
placeholder="请选择备件"
:placeholder="t('SparePartsManagement.SpareIn.placeholderProduct')"
class="!w-240px"
>
<el-option
@ -25,23 +25,23 @@
/>
</el-select>
</el-form-item>
<el-form-item label="入库时间" prop="inTime">
<el-form-item :label="t('SparePartsManagement.SpareIn.inTime')" prop="inTime">
<el-date-picker
v-model="queryParams.inTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="t('SparePartsManagement.SpareIn.placeholderInTimeStart')"
:end-placeholder="t('SparePartsManagement.SpareIn.placeholderInTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item label="供应商" prop="supplierId">
<el-form-item :label="t('SparePartsManagement.SpareIn.supplier')" prop="supplierId">
<el-select
v-model="queryParams.supplierId"
clearable
filterable
placeholder="请选择供应商"
:placeholder="t('SparePartsManagement.SpareIn.placeholderSupplier')"
class="!w-240px"
>
<el-option
@ -52,12 +52,12 @@
/>
</el-select>
</el-form-item>
<el-form-item label="仓库" prop="warehouseId">
<el-form-item :label="t('SparePartsManagement.SpareIn.warehouse')" prop="warehouseId">
<el-select
v-model="queryParams.warehouseId"
clearable
filterable
placeholder="请选择仓库"
:placeholder="t('SparePartsManagement.SpareIn.placeholderWarehouse')"
class="!w-240px"
>
<el-option
@ -68,26 +68,25 @@
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('SparePartsManagement.SpareIn.remark')" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
:placeholder="t('SparePartsManagement.SpareIn.placeholderRemark')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['erp:stock-in:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.add') }}
</el-button>
<el-button
type="success"
@ -96,7 +95,7 @@
:loading="exportLoading"
v-hasPermi="['erp:stock-in:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
<el-button
type="danger"
@ -105,7 +104,7 @@
v-hasPermi="['erp:stock-in:delete']"
:disabled="selectionList.length === 0"
>
<Icon icon="ep:delete" class="mr-5px" /> 删除
<Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
</el-button>
</el-form-item>
</el-form>
@ -114,9 +113,9 @@
<!-- 列表 -->
<ContentWrap>
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane label="未审核" name="10" />
<el-tab-pane label="已审核" name="20" />
<el-tab-pane label="所有" name="" />
<el-tab-pane :label="t('SparePartsManagement.SpareIn.tabUnAudit')" name="10" />
<el-tab-pane :label="t('SparePartsManagement.SpareIn.tabAudited')" name="20" />
<el-tab-pane :label="t('SparePartsManagement.SpareIn.tabAll')" name="" />
</el-tabs>
<el-table
@ -126,45 +125,45 @@
:show-overflow-tooltip="true"
@selection-change="handleSelectionChange"
>
<el-table-column width="30" label="选择" type="selection" />
<el-table-column min-width="180" label="入库单号" align="left" prop="no" />
<el-table-column label="备件信息" align="left" sortable prop="productNames" min-width="200" />
<el-table-column label="供应商" align="left" prop="supplierName" />
<el-table-column width="30" :label="t('common.action')" type="selection" />
<el-table-column min-width="180" :label="t('SparePartsManagement.SpareIn.no')" align="left" prop="no" />
<el-table-column :label="t('SparePartsManagement.SpareIn.product')" align="left" sortable prop="productNames" min-width="200" />
<el-table-column :label="t('SparePartsManagement.SpareIn.supplier')" align="left" prop="supplierName" />
<el-table-column
label="入库时间"
:label="t('SparePartsManagement.SpareIn.inTime')"
align="center"
prop="inTime"
:formatter="dateFormatter2"
width="120px"
/>
<el-table-column label="创建人" align="center" prop="creatorName" />
<el-table-column :label="t('SparePartsManagement.SpareIn.creatorName')" align="center" prop="creatorName" />
<el-table-column
label="数量"
:label="t('SparePartsManagement.SpareIn.totalCount')"
align="right"
sortable
prop="totalCount"
:formatter="erpCountTableColumnFormatter"
/>
<el-table-column
label="金额"
:label="t('SparePartsManagement.SpareIn.totalPrice')"
align="right"
sortable
prop="totalPrice"
:formatter="erpPriceTableColumnFormatter"
/>
<el-table-column label="状态" align="center" fixed="right" width="90" prop="status">
<el-table-column :label="t('SparePartsManagement.SpareIn.status')" align="center" fixed="right" width="90" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="180">
<el-table-column :label="t('SparePartsManagement.SpareIn.operate')" align="center" fixed="right" width="220">
<template #default="scope">
<el-button
link
@click="openForm('detail', scope.row.id)"
v-hasPermi="['erp:stock-in:query']"
>
详情
{{ t('SparePartsManagement.SpareIn.detail') }}
</el-button>
<el-button
link
@ -173,7 +172,7 @@
v-hasPermi="['erp:stock-in:update']"
v-if="scope.row.status === 10"
>
编辑
{{ t('SparePartsManagement.SpareIn.edit') }}
</el-button>
<el-button
link
@ -182,7 +181,7 @@
v-hasPermi="['erp:stock-in:update-status']"
v-if="scope.row.status === 10"
>
审批
{{ t('SparePartsManagement.SpareIn.approve') }}
</el-button>
<el-button
link
@ -191,7 +190,7 @@
v-hasPermi="['erp:stock-in:update-status']"
v-else
>
反审批
{{ t('SparePartsManagement.SpareIn.unapprove') }}
</el-button>
<el-button
link
@ -200,7 +199,7 @@
v-hasPermi="['erp:stock-in:delete']"
v-if="scope.row.status === 10"
>
删除
{{ t('SparePartsManagement.SpareIn.delete') }}
</el-button>
</template>
</el-table-column>
@ -308,10 +307,10 @@ const handleDelete = async (ids: number[]) => {
const handleUpdateStatus = async (id: number, status: number) => {
try {
//
await message.confirm(`确定${status === 20 ? '审批' : '反审批'}该入库单吗?`)
await message.confirm(status === 20 ? t('SparePartsManagement.SpareIn.confirmApprove') : t('SparePartsManagement.SpareIn.confirmUnapprove'))
//
await StockInApi.updateStockInStatus(id, status)
message.success(`${status === 20 ? '审批' : '反审批'}成功`)
message.success(status === 20 ? t('SparePartsManagement.SpareIn.approveSuccess') : t('SparePartsManagement.SpareIn.unapproveSuccess'))
//
await getList()
} catch {}
@ -325,7 +324,7 @@ const handleExport = async () => {
//
exportLoading.value = true
const data = await StockInApi.exportStockIn(queryParams)
download.excel(data, '其它入库单.xls')
download.excel(data, t('SparePartsManagement.SpareIn.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -10,30 +10,34 @@
>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="出库单号" prop="no">
<el-input disabled v-model="formData.no" placeholder="保存时自动生成" />
<el-form-item :label="t('SparePartsManagement.SpareOut.no')" prop="no">
<el-input
disabled
v-model="formData.no"
:placeholder="t('SparePartsManagement.SpareOut.placeholderNoAuto')"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出库时间" prop="outTime">
<el-form-item :label="t('SparePartsManagement.SpareOut.outTime')" prop="outTime">
<el-date-picker
v-model="formData.outTime"
type="date"
value-format="x"
placeholder="选择出库时间"
:placeholder="t('SparePartsManagement.SpareOut.placeholderOutTime')"
class="!w-1/1"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出库类型" prop="outType">
<el-form-item :label="t('SparePartsManagement.SpareOut.outType')" prop="outType">
<el-select
disabled
v-model="formData.outType"
clearable
filterable
placeholder="请选择出库类型"
:placeholder="t('SparePartsManagement.SpareOut.placeholderOutType')"
class="!w-1/1"
>
<el-option
@ -49,12 +53,12 @@
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('SparePartsManagement.SpareOut.remark')" prop="remark">
<el-input
type="textarea"
v-model="formData.remark"
:rows="1"
placeholder="请输入备注"
:placeholder="t('SparePartsManagement.SpareOut.placeholderRemark')"
/>
</el-form-item>
</el-col>
@ -63,16 +67,16 @@
<!-- 子表的表单 -->
<ContentWrap>
<el-tabs v-model="subTabsName" class="-mt-15px -mb-10px">
<el-tab-pane label="出库备件清单" name="item">
<el-tab-pane :label="t('SparePartsManagement.SpareOut.itemListTitle')" name="item">
<StockOutItemForm ref="itemFormRef" :items="formData.items" :disabled="disabled" />
</el-tab-pane>
</el-tabs>
</ContentWrap>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading" v-if="!disabled">
{{ t('action.save') }}
</el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
</template>
</Dialog>
</template>
@ -102,8 +106,12 @@ const formData = ref({
items: []
})
const formRules = reactive({
outTime: [{ required: true, message: '出库时间不能为空', trigger: 'blur' }],
outType: [{ required: true, message: '出库类型不能为空', trigger: 'blur' }]
outTime: [
{ required: true, message: t('SparePartsManagement.SpareOut.validatorOutTimeRequired'), trigger: 'blur' }
],
outType: [
{ required: true, message: t('SparePartsManagement.SpareOut.validatorOutTypeRequired'), trigger: 'blur' }
]
})
const disabled = computed(() => formType.value === 'detail')
const formRef = ref() // Ref

@ -9,8 +9,8 @@
:disabled="disabled"
>
<el-table :data="formData" show-summary :summary-method="getSummaries" class="-mt-10px">
<el-table-column label="序号" type="index" align="center" width="60" />
<el-table-column label="仓库名称" min-width="125">
<el-table-column :label="t('SparePartsManagement.SpareOut.itemIndex')" type="index" align="center" width="60" />
<el-table-column :label="t('SparePartsManagement.SpareOut.itemWarehouseName')" min-width="125">
<template #default="{ row, $index }">
<el-form-item
:prop="`${$index}.warehouseId`"
@ -21,7 +21,7 @@
v-model="row.warehouseId"
clearable
filterable
placeholder="请选择仓库"
:placeholder="t('SparePartsManagement.SpareOut.placeholderWarehouse')"
@change="onChangeWarehouse($event, row)"
>
<el-option
@ -34,7 +34,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备件名称" min-width="180">
<el-table-column :label="t('SparePartsManagement.SpareOut.itemProductName')" min-width="180">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.productId`" :rules="formRules.productId" class="mb-0px!">
<el-select
@ -42,7 +42,7 @@
clearable
filterable
@change="onChangeProduct($event, row)"
placeholder="请选择备件"
:placeholder="t('SparePartsManagement.SpareOut.placeholderProduct')"
>
<el-option
v-for="item in productList"
@ -54,28 +54,28 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="库存" min-width="100">
<el-table-column :label="t('SparePartsManagement.SpareOut.itemStockCount')" min-width="100">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.stockCount" :formatter="erpCountInputFormatter" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备件编码" min-width="150">
<el-table-column :label="t('SparePartsManagement.SpareOut.itemProductCode')" min-width="150">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.productBarCode" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="80">
<el-table-column :label="t('SparePartsManagement.SpareOut.itemUnitName')" min-width="80">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.productUnitName" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="数量" prop="count" fixed="right" min-width="140">
<el-table-column :label="t('SparePartsManagement.SpareOut.itemCount')" prop="count" fixed="right" min-width="140">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.count`" :rules="formRules.count" class="mb-0px!">
<el-input-number
@ -88,7 +88,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单价" fixed="right" min-width="120">
<el-table-column :label="t('SparePartsManagement.SpareOut.itemProductPrice')" fixed="right" min-width="120">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.productPrice`" class="mb-0px!">
<el-input-number
@ -101,21 +101,24 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="合计金额" prop="totalPrice" fixed="right" min-width="100">
<el-table-column :label="t('SparePartsManagement.SpareOut.itemTotalPrice')" prop="totalPrice" fixed="right" min-width="100">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.totalPrice`" class="mb-0px!">
<el-input disabled v-model="row.totalPrice" :formatter="erpPriceInputFormatter" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="备注" fixed="right" min-width="150">
<el-table-column :label="t('SparePartsManagement.SpareOut.itemRemark')" fixed="right" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
<el-input v-model="row.remark" placeholder="请输入备注" />
<el-input
v-model="row.remark"
:placeholder="t('SparePartsManagement.SpareOut.placeholderRemark')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="60">
<el-table-column align="center" fixed="right" :label="t('SparePartsManagement.SpareOut.itemOperate')" width="60">
<template #default="{ $index }">
<el-button type="danger" @click="handleDelete($index)" link>
<Icon icon="ep:delete" />
@ -125,10 +128,11 @@
</el-table>
</el-form>
<el-row justify="center" class="mt-3" v-if="!disabled">
<el-button @click="handleAdd" round>+ 添加出库备件</el-button>
<el-button @click="handleAdd" round>+ {{ t('SparePartsManagement.SpareOut.itemAddButton') }}</el-button>
</el-row>
</template>
<script setup lang="ts">
import { useI18n } from '@/hooks/web/useI18n'
import { ProductApi, ProductVO } from '@/api/erp/product/product'
import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
import { StockApi } from '@/api/erp/stock/stock'
@ -139,6 +143,8 @@ import {
getSumValue
} from '@/utils'
const { t } = useI18n()
const props = defineProps<{
items: undefined
disabled: false
@ -146,10 +152,30 @@ const props = defineProps<{
const formLoading = ref(false) //
const formData = ref([])
const formRules = reactive({
inId: [{ required: true, message: '出库编号不能为空', trigger: 'blur' }],
warehouseId: [{ required: true, message: '仓库不能为空', trigger: 'blur' }],
productId: [{ required: true, message: '备件不能为空', trigger: 'blur' }],
count: [{ required: true, message: '备件数量不能为空', trigger: 'blur' }]
inId: [
{ required: true, message: t('SparePartsManagement.SpareOut.validatorItemOutIdRequired'), trigger: 'blur' }
],
warehouseId: [
{
required: true,
message: t('SparePartsManagement.SpareOut.validatorItemWarehouseRequired'),
trigger: 'blur'
}
],
productId: [
{
required: true,
message: t('SparePartsManagement.SpareOut.validatorItemProductRequired'),
trigger: 'blur'
}
],
count: [
{
required: true,
message: t('SparePartsManagement.SpareOut.validatorItemCountRequired'),
trigger: 'blur'
}
]
})
const formRef = ref([]) // Ref
const productList = ref<ProductVO[]>([]) //
@ -186,7 +212,7 @@ const getSummaries = (param: SummaryMethodProps) => {
const sums: string[] = []
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计'
sums[index] = t('SparePartsManagement.SpareOut.sumLabel')
return
}
if (['count', 'totalPrice'].includes(column.property)) {

@ -7,23 +7,23 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
min-label-width="90px"
>
<el-form-item label="出库单号" prop="no">
<el-form-item :label="t('SparePartsManagement.SpareOut.no')" prop="no">
<el-input
v-model="queryParams.no"
placeholder="请输入出库单号"
:placeholder="t('SparePartsManagement.SpareOut.placeholderNo')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备件" prop="productId">
<el-form-item :label="t('SparePartsManagement.SpareOut.product')" prop="productId">
<el-select
v-model="queryParams.productId"
clearable
filterable
placeholder="请选择备件"
:placeholder="t('SparePartsManagement.SpareOut.placeholderProduct')"
class="!w-240px"
>
<el-option
@ -34,23 +34,23 @@
/>
</el-select>
</el-form-item>
<el-form-item label="出库时间" prop="outTime">
<el-form-item :label="t('SparePartsManagement.SpareOut.outTime')" prop="outTime">
<el-date-picker
v-model="queryParams.outTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="t('SparePartsManagement.SpareOut.placeholderOutTimeStart')"
:end-placeholder="t('SparePartsManagement.SpareOut.placeholderOutTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="仓库" prop="warehouseId">
<el-form-item :label="t('SparePartsManagement.SpareOut.warehouse')" prop="warehouseId">
<el-select
v-model="queryParams.warehouseId"
clearable
filterable
placeholder="请选择仓库"
:placeholder="t('SparePartsManagement.SpareOut.placeholderWarehouse')"
class="!w-240px"
>
<el-option
@ -61,25 +61,25 @@
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('SparePartsManagement.SpareOut.remark')" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
:placeholder="t('SparePartsManagement.SpareOut.placeholderRemark')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['erp:stock-out:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.add') }}
</el-button>
<el-button
type="success"
@ -88,7 +88,7 @@
:loading="exportLoading"
v-hasPermi="['erp:stock-out:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
<el-button
type="danger"
@ -97,7 +97,7 @@
v-hasPermi="['erp:stock-out:delete']"
:disabled="selectionList.length === 0"
>
<Icon icon="ep:delete" class="mr-5px" /> 删除
<Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
</el-button>
</el-form-item>
</el-form>
@ -106,9 +106,9 @@
<!-- 列表 -->
<ContentWrap>
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane label="未审核" name="10" />
<el-tab-pane label="已审核" name="20" />
<el-tab-pane label="所有" name="" />
<el-tab-pane :label="t('SparePartsManagement.SpareOut.tabUnAudit')" name="10" />
<el-tab-pane :label="t('SparePartsManagement.SpareOut.tabAudited')" name="20" />
<el-tab-pane :label="t('SparePartsManagement.SpareOut.tabAll')" name="" />
</el-tabs>
<el-table
@ -118,46 +118,46 @@
:show-overflow-tooltip="true"
@selection-change="handleSelectionChange"
>
<el-table-column width="30" label="选择" type="selection" />
<el-table-column min-width="180" label="出库单号" align="center" prop="no" />
<el-table-column label="产品信息" align="left" sortable prop="productNames" min-width="210" />
<el-table-column label="客户" align="center" prop="customerName" />
<el-table-column width="30" :label="t('common.action')" type="selection" />
<el-table-column min-width="180" :label="t('SparePartsManagement.SpareOut.no')" align="center" prop="no" />
<el-table-column :label="t('SparePartsManagement.SpareOut.product')" align="left" sortable prop="productNames" min-width="210" />
<el-table-column :label="t('SparePartsManagement.SpareOut.customer')" align="center" prop="customerName" />
<el-table-column
label="出库时间"
:label="t('SparePartsManagement.SpareOut.outTime')"
align="center"
sortable
prop="outTime"
:formatter="dateFormatter2"
width="120px"
/>
<el-table-column label="创建人" align="center" prop="creatorName" />
<el-table-column :label="t('SparePartsManagement.SpareOut.creatorName')" align="center" prop="creatorName" />
<el-table-column
label="数量"
:label="t('SparePartsManagement.SpareOut.totalCount')"
align="right"
sortable
prop="totalCount"
:formatter="erpCountTableColumnFormatter"
/>
<el-table-column
label="金额"
:label="t('SparePartsManagement.SpareOut.totalPrice')"
align="right"
sortable
prop="totalPrice"
:formatter="erpPriceTableColumnFormatter"
/>
<el-table-column label="状态" align="center" fixed="right" width="90" prop="status">
<el-table-column :label="t('SparePartsManagement.SpareOut.status')" align="center" fixed="right" width="90" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="220">
<el-table-column :label="t('SparePartsManagement.SpareOut.operate')" align="center" fixed="right" width="220">
<template #default="scope">
<el-button
link
@click="openForm('detail', scope.row.id)"
v-hasPermi="['erp:stock-out:query']"
>
详情
{{ t('SparePartsManagement.SpareOut.detail') }}
</el-button>
<el-button
link
@ -166,7 +166,7 @@
v-hasPermi="['erp:stock-out:update']"
:disabled="scope.row.status === 20"
>
编辑
{{ t('SparePartsManagement.SpareOut.edit') }}
</el-button>
<el-button
link
@ -175,7 +175,7 @@
v-hasPermi="['erp:stock-out:update-status']"
v-if="scope.row.status === 10"
>
审批
{{ t('SparePartsManagement.SpareOut.approve') }}
</el-button>
<el-button
link
@ -184,7 +184,7 @@
v-hasPermi="['erp:stock-out:update-status']"
v-else
>
反审批
{{ t('SparePartsManagement.SpareOut.unapprove') }}
</el-button>
<el-button
link
@ -192,7 +192,7 @@
@click="handleDelete([scope.row.id])"
v-hasPermi="['erp:stock-out:delete']"
>
删除
{{ t('SparePartsManagement.SpareOut.delete') }}
</el-button>
</template>
</el-table-column>

@ -5,24 +5,24 @@
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
label-width="140px"
v-loading="formLoading"
>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="备件名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
<el-form-item :label="t('SparePartsManagement.SpareInfo.name')" prop="name">
<el-input v-model="formData.name" :placeholder="t('SparePartsManagement.SpareInfo.placeholderName')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备件编码" prop="barCode">
<el-input v-model="formData.barCode" placeholder="请输入编码" />
<el-form-item :label="t('SparePartsManagement.SpareInfo.code')" prop="barCode">
<el-input v-model="formData.barCode" :placeholder="t('SparePartsManagement.SpareInfo.placeholderCode')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="单位" prop="unitId">
<el-select v-model="formData.unitId" clearable placeholder="请选择单位" class="w-1/1">
<el-form-item :label="t('SparePartsManagement.SpareInfo.unit')" prop="unitId">
<el-select v-model="formData.unitId" clearable :placeholder="t('SparePartsManagement.SpareInfo.placeholderUnit')" class="w-1/1">
<el-option
v-for="unit in unitList"
:key="unit.id"
@ -33,7 +33,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-form-item :label="t('SparePartsManagement.SpareInfo.status')" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
@ -46,15 +46,15 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="规格" prop="standard">
<el-input v-model="formData.standard" placeholder="请输入规格" />
<el-form-item :label="t('SparePartsManagement.SpareInfo.standard')" prop="standard">
<el-input v-model="formData.standard" :placeholder="t('SparePartsManagement.SpareInfo.placeholderStandard')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="保质期天数" prop="expiryDay">
<el-form-item :label="t('SparePartsManagement.SpareInfo.expiryDay')" prop="expiryDay">
<el-input-number
v-model="formData.expiryDay"
placeholder="请输入保质期天数"
:placeholder="t('SparePartsManagement.SpareInfo.placeholderExpiryDay')"
:min="0"
:precision="0"
class="!w-1/1"
@ -73,10 +73,10 @@
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="预警库存" prop="safetyNumber">
<el-form-item :label="t('SparePartsManagement.SpareInfo.safetyNumber')" prop="safetyNumber">
<el-input-number
v-model="formData.safetyNumber"
placeholder="请输入预警库存数量"
:placeholder="t('SparePartsManagement.SpareInfo.placeholderSafetyNumber')"
:min="0"
:precision="2"
class="!w-1/1"
@ -84,15 +84,15 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注" />
<el-form-item :label="t('SparePartsManagement.SpareInfo.remark')" prop="remark">
<el-input type="textarea" v-model="formData.remark" :placeholder="t('SparePartsManagement.SpareInfo.placeholderRemark')" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">{{ t('common.ok') }}</el-button>
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button>
</template>
</Dialog>
</template>
@ -130,11 +130,11 @@ const formData = ref({
safetyNumber: undefined
})
const formRules = reactive({
name: [{ required: true, message: '产品名称不能为空', trigger: 'blur' }],
barCode: [{ required: true, message: '产品条码不能为空', trigger: 'blur' }],
categoryId: [{ required: true, message: '产品分类编号不能为空', trigger: 'blur' }],
unitId: [{ required: true, message: '单位编号不能为空', trigger: 'blur' }],
status: [{ required: true, message: '产品状态不能为空', trigger: 'blur' }]
name: [{ required: true, message: t('SparePartsManagement.SpareInfo.validatorNameRequired'), trigger: 'blur' }],
barCode: [{ required: true, message: t('SparePartsManagement.SpareInfo.validatorCodeRequired'), trigger: 'blur' }],
categoryId: [{ required: true, message: t('SparePartsManagement.SpareInfo.validatorCategoryRequired'), trigger: 'blur' }],
unitId: [{ required: true, message: t('SparePartsManagement.SpareInfo.validatorUnitRequired'), trigger: 'blur' }],
status: [{ required: true, message: t('SparePartsManagement.SpareInfo.validatorStatusRequired'), trigger: 'blur' }]
})
const formRef = ref() // Ref
const unitList = ref<ProductUnitVO[]>([]) //

@ -11,25 +11,25 @@
:inline="true"
label-width="68px"
>
<el-form-item label="备件名称" prop="name">
<el-form-item :label="t('SparePartsManagement.SpareInfo.name')" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入名称"
:placeholder="t('SparePartsManagement.SpareInfo.placeholderName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['erp:product:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.add') }}
</el-button>
<el-button
type="success"
@ -38,7 +38,7 @@
:loading="exportLoading"
v-hasPermi="['erp:product:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
</el-form-item>
</el-form>
@ -47,25 +47,25 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="备件编码" align="center" prop="barCode" />
<el-table-column label="备件名称" align="left" prop="name" width="220px"/>
<el-table-column v-if="checkPermi(['erp:component:standard'])" label="规格" align="center" prop="standard" />
<el-table-column label="分类" align="center" prop="categoryName" />
<el-table-column label="单位" align="center" prop="unitName" />
<el-table-column label="预警库存" align="center" prop="safetyNumber" />
<el-table-column label="状态" align="center" prop="status">
<el-table-column :label="t('SparePartsManagement.SpareInfo.code')" align="center" prop="barCode" />
<el-table-column :label="t('SparePartsManagement.SpareInfo.name')" align="left" prop="name" width="220px"/>
<el-table-column v-if="checkPermi(['erp:component:standard'])" :label="t('SparePartsManagement.SpareInfo.standard')" align="center" prop="standard" />
<el-table-column :label="t('SparePartsManagement.SpareInfo.category')" align="center" prop="categoryName" />
<el-table-column :label="t('SparePartsManagement.SpareInfo.unit')" align="center" prop="unitName" />
<el-table-column :label="t('SparePartsManagement.SpareInfo.safetyNumber')" align="center" prop="safetyNumber" />
<el-table-column :label="t('SparePartsManagement.SpareInfo.status')" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column
label="创建时间"
:label="t('SparePartsManagement.SpareInfo.createTime')"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" width="150px">
<el-table-column :label="t('SparePartsManagement.SpareInfo.operate')" align="center" width="150px">
<template #default="scope">
<el-button
link
@ -73,7 +73,7 @@
@click="openForm('update', scope.row.id)"
v-hasPermi="['erp:product:update']"
>
编辑
{{ t('action.edit') }}
</el-button>
<el-button
link
@ -81,7 +81,7 @@
@click="handleDelete(scope.row.id)"
v-hasPermi="['erp:product:delete']"
>
删除
{{ t('action.del') }}
</el-button>
</template>
</el-table-column>
@ -181,7 +181,7 @@ const handleExport = async () => {
//
exportLoading.value = true
const data = await ProductApi.exportProduct(queryParams)
download.excel(data, '备件信息.xls')
download.excel(data, t('SparePartsManagement.SpareInfo.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -8,14 +8,14 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
min-label-width="90px"
>
<el-form-item label="备件" prop="productId">
<el-form-item :label="t('SparePartsManagement.SpareRecord.product')" prop="productId">
<el-select
v-model="queryParams.productId"
clearable
filterable
placeholder="请选择备件"
:placeholder="t('SparePartsManagement.SpareRecord.placeholderProduct')"
class="!w-240px"
>
<el-option
@ -26,12 +26,12 @@
/>
</el-select>
</el-form-item>
<el-form-item label="仓库" prop="warehouseId">
<el-form-item :label="t('SparePartsManagement.SpareRecord.warehouse')" prop="warehouseId">
<el-select
v-model="queryParams.warehouseId"
clearable
filterable
placeholder="请选择仓库"
:placeholder="t('SparePartsManagement.SpareRecord.placeholderWarehouse')"
class="!w-240px"
>
<el-option
@ -43,36 +43,36 @@
</el-select>
</el-form-item>
<el-form-item label="业务单号" prop="bizNo">
<el-form-item :label="t('SparePartsManagement.SpareRecord.bizNo')" prop="bizNo">
<el-input
v-model="queryParams.bizNo"
placeholder="请输入业务单号"
:placeholder="t('SparePartsManagement.SpareRecord.placeholderBizNo')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-form-item :label="t('SparePartsManagement.SpareRecord.createTime')" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="t('SparePartsManagement.SpareRecord.placeholderCreateTimeStart')"
:end-placeholder="t('SparePartsManagement.SpareRecord.placeholderCreateTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['erp:stock-record:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.add') }}
</el-button>
<el-button
type="success"
@ -81,7 +81,7 @@
:loading="exportLoading"
v-hasPermi="['erp:stock-record:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
</el-form-item>
</el-form>
@ -91,17 +91,17 @@
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="备件名称" align="left" sortable prop="productName" width="210px"/>
<el-table-column label="单位" align="center" prop="unitName" />
<el-table-column label="仓库" align="center" prop="warehouseName" />
<el-table-column label="类型" align="center" prop="bizType" min-width="100">
<el-table-column :label="t('SparePartsManagement.SpareRecord.product')" align="left" sortable prop="productName" width="210px"/>
<el-table-column :label="t('SparePartsManagement.SpareRecord.unit')" align="center" prop="unitName" />
<el-table-column :label="t('SparePartsManagement.SpareRecord.warehouse')" align="center" prop="warehouseName" />
<el-table-column :label="t('SparePartsManagement.SpareRecord.bizType')" align="center" prop="bizType" min-width="120">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_STOCK_RECORD_BIZ_TYPE" :value="scope.row.bizType" />
</template>
</el-table-column>
<el-table-column label="出入库单号" align="center" prop="bizNo" width="200" />
<el-table-column :label="t('SparePartsManagement.SpareRecord.bizNo')" align="center" prop="bizNo" width="200" />
<el-table-column
label="出入库数量"
:label="t('SparePartsManagement.SpareRecord.count')"
align="right"
sortable
prop="count"
@ -109,7 +109,7 @@
:formatter="erpCountTableColumnFormatter"
/>
<el-table-column
label="库存量"
:label="t('SparePartsManagement.SpareRecord.totalCount')"
align="right"
sortable
prop="totalCount"
@ -117,7 +117,7 @@
:formatter="erpCountTableColumnFormatter"
/>
<el-table-column
label="出入库日期"
:label="t('SparePartsManagement.SpareRecord.recordTime')"
align="center"
sortable
prop="recordTime"
@ -125,13 +125,13 @@
width="120px"
/>
<el-table-column
label="创建日期"
:label="t('SparePartsManagement.SpareRecord.createTime')"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作人" align="center" prop="creatorName" />
<el-table-column :label="t('SparePartsManagement.SpareRecord.creatorName')" align="center" prop="creatorName" />
</el-table>
<!-- 分页 -->
<Pagination
@ -210,7 +210,7 @@ const handleExport = async () => {
//
exportLoading.value = true
const data = await StockRecordApi.exportStockRecord(queryParams)
download.excel(data, '备件库存明细.xls')
download.excel(data, t('SparePartsManagement.SpareRecord.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -10,12 +10,12 @@
:inline="true"
label-width="68px"
>
<el-form-item label="备件" prop="productId">
<el-form-item :label="t('SparePartsManagement.SpareStock.product')" prop="productId">
<el-select
v-model="queryParams.productId"
clearable
filterable
placeholder="请选择备件"
:placeholder="t('SparePartsManagement.SpareStock.placeholderProduct')"
class="!w-240px"
>
<el-option
@ -27,12 +27,12 @@
</el-select>
</el-form-item>
<el-form-item label="仓库" prop="warehouseId">
<el-form-item :label="t('SparePartsManagement.SpareStock.warehouse')" prop="warehouseId">
<el-select
v-model="queryParams.warehouseId"
clearable
filterable
placeholder="请选择仓库"
:placeholder="t('SparePartsManagement.SpareStock.placeholderWarehouse')"
class="!w-240px"
>
<el-option
@ -44,15 +44,15 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['erp:stock:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.add') }}
</el-button>
<el-button
type="success"
@ -61,7 +61,7 @@
:loading="exportLoading"
v-hasPermi="['erp:stock:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
</el-form-item>
</el-form>
@ -70,17 +70,17 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="备件" align="left" sortable prop="productName" />
<el-table-column label="分类" align="center" prop="categoryName" />
<el-table-column :label="t('SparePartsManagement.SpareStock.product')" align="left" sortable prop="productName" />
<el-table-column :label="t('SparePartsManagement.SpareStock.category')" align="center" prop="categoryName" />
<el-table-column
label="库存量"
:label="t('SparePartsManagement.SpareStock.count')"
align="right"
sortable
prop="count"
:formatter="erpCountTableColumnFormatter"
/>
<el-table-column label="单位" align="center" prop="unitName" />
<el-table-column label="仓库" align="center" prop="warehouseName" />
<el-table-column :label="t('SparePartsManagement.SpareStock.unit')" align="center" prop="unitName" />
<el-table-column :label="t('SparePartsManagement.SpareStock.warehouse')" align="center" prop="warehouseName" />
</el-table>
<!-- 分页 -->
<Pagination
@ -155,7 +155,7 @@ const handleExport = async () => {
//
exportLoading.value = true
const data = await StockApi.exportStock(queryParams)
download.excel(data, '产品库存.xls')
download.excel(data, t('SparePartsManagement.SpareStock.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -7,25 +7,38 @@
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="型号编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入型号编码" :disabled = "formType == 'update'"/>
<el-form-item :label="t('MoldManagement.MoldBrand.code')" prop="code">
<el-input
v-model="formData.code"
:placeholder="t('MoldManagement.MoldBrand.placeholderCode')"
:disabled="formType == 'update'"
/>
</el-form-item>
<el-form-item label="型号名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入型号名称" />
<el-form-item :label="t('MoldManagement.MoldBrand.name')" prop="name">
<el-input
v-model="formData.name"
:placeholder="t('MoldManagement.MoldBrand.placeholderName')"
/>
</el-form-item>
<el-form-item label="规格" prop="moldType">
<el-input v-model="formData.moldType" placeholder="请输入规格" />
<el-form-item :label="t('MoldManagement.MoldBrand.moldType')" prop="moldType">
<el-input
v-model="formData.moldType"
:placeholder="t('MoldManagement.MoldBrand.placeholderMoldType')"
/>
</el-form-item>
<el-form-item prop="orgType">
<template #label>
<span>
工序
<el-tooltip content="来源:数据字典-工序" placement="top">
<Icon icon="ep:question-filled" />
</el-tooltip>
</span>
<span>
{{ t('MoldManagement.MoldBrand.orgType') }}
<el-tooltip :content="t('MoldManagement.MoldBrand.orgTypeTooltip')" placement="top">
<Icon icon="ep:question-filled" />
</el-tooltip>
</span>
</template>
<el-select v-model="formData.orgType" placeholder="请选择工序">
<el-select
v-model="formData.orgType"
:placeholder="t('MoldManagement.MoldBrand.placeholderOrgType')"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.MES_ORG_TYPE)"
:key="dict.value"
@ -35,15 +48,18 @@
</el-select>
</el-form-item>
<el-form-item label="模穴数" prop="moldSize">
<el-input v-model="formData.moldSize" placeholder="请输入模穴数" />
<el-form-item :label="t('MoldManagement.MoldBrand.moldSize')" prop="moldSize">
<el-input
v-model="formData.moldSize"
:placeholder="t('MoldManagement.MoldBrand.placeholderMoldSize')"
/>
</el-form-item>
<el-form-item label="预期寿命" prop="useTime">
<el-form-item :label="t('MoldManagement.MoldBrand.useTime')" prop="useTime">
<el-input-number
v-model="formData.useTime"
:min="0"
class="!w-1/1"
placeholder="输入预期寿命(次)"
:placeholder="t('MoldManagement.MoldBrand.placeholderUseTime')"
/>
</el-form-item>
<!-- <el-form-item label="维保模式" prop="maintainType">
@ -66,13 +82,18 @@
/>
</el-form-item> -->
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
<el-form-item :label="t('MoldManagement.MoldBrand.remark')" prop="remark">
<el-input
v-model="formData.remark"
:placeholder="t('MoldManagement.MoldBrand.placeholderRemark')"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">
{{ t('action.save') }}
</el-button>
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
</template>
</Dialog>
</template>
@ -104,11 +125,21 @@ const formData = ref({
isEnable: undefined
})
const formRules = reactive({
code: [{ required: true, message: '型号编码不能为空', trigger: 'blur' }],
name: [{ required: true, message: '型号名称不能为空', trigger: 'blur' }],
moldType: [{ required: true, message: '规格不能为空', trigger: 'blur' }],
productId: [{ required: true, message: '产品ID不能为空', trigger: 'blur' }],
moldSize: [{ required: true, message: '出模数不能为空', trigger: 'blur' }]
code: [
{ required: true, message: t('MoldManagement.MoldBrand.validatorCodeRequired'), trigger: 'blur' }
],
name: [
{ required: true, message: t('MoldManagement.MoldBrand.validatorNameRequired'), trigger: 'blur' }
],
moldType: [
{ required: true, message: t('MoldManagement.MoldBrand.validatorMoldTypeRequired'), trigger: 'blur' }
],
productId: [
{ required: true, message: t('MoldManagement.MoldBrand.validatorProductRequired'), trigger: 'blur' }
],
moldSize: [
{ required: true, message: t('MoldManagement.MoldBrand.validatorMoldSizeRequired'), trigger: 'blur' }
]
})
const formRef = ref() // Ref

@ -7,14 +7,26 @@
label-width="100px"
v-loading="formLoading"
>
<el-form-item label="模具编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入模具编码" :disabled = "formType == 'update'"/>
<el-form-item :label="t('MoldManagement.Mold.code')" prop="code">
<el-input
v-model="formData.code"
:placeholder="t('MoldManagement.Mold.placeholderCode')"
:disabled="formType == 'update'"
/>
</el-form-item>
<el-form-item label="模具名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入模具名称" />
<el-form-item :label="t('MoldManagement.Mold.name')" prop="name">
<el-input
v-model="formData.name"
:placeholder="t('MoldManagement.Mold.placeholderName')"
/>
</el-form-item>
<el-form-item label="单位" prop="unitId">
<el-select v-model="formData.unitId" clearable placeholder="请选择单位" class="w-1/1">
<el-form-item :label="t('MoldManagement.Mold.unit')" prop="unitId">
<el-select
v-model="formData.unitId"
clearable
:placeholder="t('MoldManagement.Mold.placeholderUnit')"
class="w-1/1"
>
<el-option
v-for="unit in unitList"
:key="unit.id"
@ -32,19 +44,19 @@
placeholder="输入预期寿命(小时)"
/>
</el-form-item> -->
<el-form-item label="入库时间" prop="inTime">
<el-form-item :label="t('MoldManagement.Mold.inTime')" prop="inTime">
<el-date-picker
v-model="formData.inTime"
type="date"
value-format="x"
placeholder="选择入库时间"
:placeholder="t('MoldManagement.Mold.placeholderInTime')"
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-form-item prop="status">
<template #label>
<span>
状态
<el-tooltip content="来源:数据字典-模具状态" placement="top">
{{ t('MoldManagement.Mold.status') }}
<el-tooltip :content="t('MoldManagement.Mold.statusTooltip')" placement="top">
<Icon icon="ep:question-filled" />
</el-tooltip>
</span>
@ -59,13 +71,16 @@
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="模具图片" prop="images">
<el-form-item :label="t('MoldManagement.Mold.images')" prop="images">
<UploadImg v-model="formData.images" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
<el-form-item :label="t('MoldManagement.Mold.remark')" prop="remark">
<el-input
v-model="formData.remark"
:placeholder="t('MoldManagement.Mold.placeholderRemark')"
/>
</el-form-item>
<el-form-item label="是否启用" prop="isEnable">
<el-form-item :label="t('MoldManagement.Mold.isEnable')" prop="isEnable">
<el-radio-group v-model="formData.isEnable">
<el-radio
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
@ -76,13 +91,15 @@
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="资料" prop="fileUrl">
<el-form-item :label="t('MoldManagement.Mold.fileUrl')" prop="fileUrl">
<UploadFile v-model="formData.fileUrl" :limit="1" :isShowTip="false"/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">
{{ t('action.save') }}
</el-button>
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
</template>
</Dialog>
</template>
@ -115,12 +132,24 @@ const formData = ref({
brandId: undefined
})
const formRules = reactive({
code: [{ required: true, message: '模具编码不能为空', trigger: 'blur' }],
name: [{ required: true, message: '模具名称不能为空', trigger: 'blur' }],
unitId: [{ required: true, message: '单位不能为空', trigger: 'blur' }],
inTime: [{ required: true, message: '入库时间不能为空', trigger: 'blur' }],
isEnable: [{ required: true, message: '是否启用不能为空', trigger: 'blur' }],
brandId: [{ required: true, message: '型号不能为空', trigger: 'blur' }]
code: [
{ required: true, message: t('MoldManagement.Mold.validatorCodeRequired'), trigger: 'blur' }
],
name: [
{ required: true, message: t('MoldManagement.Mold.validatorNameRequired'), trigger: 'blur' }
],
unitId: [
{ required: true, message: t('MoldManagement.Mold.validatorUnitRequired'), trigger: 'blur' }
],
inTime: [
{ required: true, message: t('MoldManagement.Mold.validatorInTimeRequired'), trigger: 'blur' }
],
isEnable: [
{ required: true, message: t('MoldManagement.Mold.validatorIsEnableRequired'), trigger: 'blur' }
],
brandId: [
{ required: true, message: t('MoldManagement.Mold.validatorBrandRequired'), trigger: 'blur' }
]
})
const formRef = ref() // Ref

@ -2,34 +2,41 @@
<!-- 列表 -->
<ContentWrap>
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['erp:mold-brand:create']">
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.add') }}
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['erp:mold-brand:export']"
>
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="模具编码" align="center" prop="code" />
<el-table-column label="模具名称" align="left" prop="name" />
<el-table-column :label="t('MoldManagement.Mold.code')" align="center" prop="code" />
<el-table-column :label="t('MoldManagement.Mold.name')" align="left" prop="name" />
<!-- <el-table-column label="单位" align="center" prop="unitName" /> -->
<el-table-column label="使用次数/次" align="center" prop="useTime" />
<el-table-column label="入库时间" align="center" prop="inTime" :formatter="dateFormatter" />
<el-table-column label="状态" align="center" prop="status">
<el-table-column :label="t('MoldManagement.Mold.useTime')" align="center" prop="useTime" />
<el-table-column :label="t('MoldManagement.Mold.inTime')" align="center" prop="inTime" :formatter="dateFormatter" />
<el-table-column :label="t('MoldManagement.Mold.status')" align="center" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_MOLD_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="使用设备" align="center" prop="machineName" />
<el-table-column :label="t('MoldManagement.Mold.machineName')" align="center" prop="machineName" />
<!-- <el-table-column label="模具图片" align="center" prop="images" /> -->
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="是否启用" align="center" prop="isEnable">
<el-table-column :label="t('MoldManagement.Mold.remark')" align="center" prop="remark" />
<el-table-column :label="t('MoldManagement.Mold.isEnable')" align="center" prop="isEnable">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.isEnable" />
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="操作" align="center" fixed="right" width="200px">
<el-table-column :label="t('MoldManagement.Mold.createTime')" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column :label="t('MoldManagement.Mold.operate')" align="center" fixed="right" width="200px">
<template #default="scope">
<el-button link @click="openDetail(scope.row.id)">
详情
{{ t('MoldManagement.Mold.detail') }}
</el-button>
<!-- <el-button
link
@ -40,12 +47,20 @@
维保
</el-button> -->
<el-button
link type="primary" @click="openForm('update', scope.row.id)"
v-hasPermi="['erp:mold-brand:update']">
编辑
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['erp:mold-brand:update']"
>
{{ t('action.edit') }}
</el-button>
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['erp:mold-brand:delete']">
删除
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['erp:mold-brand:delete']"
>
{{ t('action.del') }}
</el-button>
</template>
</el-table-column>
@ -64,6 +79,7 @@ link type="primary" @click="openForm('update', scope.row.id)"
<script setup lang="ts">
import { DICT_TYPE } from '@/utils/dict'
import { dateFormatter, formatDate } from '@/utils/formatTime'
import download from '@/utils/download'
import { MoldBrandApi, type MoldVO } from '@/api/erp/mold'
import MoldForm from './MoldForm.vue'
import MoldRecordForm from "@/views/erp/mold/components/MoldRecordForm.vue";
@ -77,6 +93,7 @@ const props = defineProps<{
const loading = ref(false) //
const list = ref([]) //
const total = ref(0) //
const exportLoading = ref(false) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
@ -137,6 +154,26 @@ const handleDelete = async (id: number) => {
} catch { }
}
/** 导出按钮操作 */
const handleExport = async () => {
if (!props.brandId) {
message.error('请选择一个模具型号')
return
}
try {
await message.exportConfirm()
exportLoading.value = true
const data = await MoldBrandApi.exportMold({
...queryParams,
brandId: props.brandId
})
download.excel(data, '模具.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 添加/修改操作 */
const recordFormRef = ref()
const openRecordForm = (type: string, id?: number, brandId?: number) => {

@ -6,30 +6,30 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
label-width="110px"
>
<el-form-item label="型号编码" prop="code">
<el-form-item :label="t('MoldManagement.MoldBrand.code')" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入型号编码"
:placeholder="t('MoldManagement.MoldBrand.placeholderCode')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="型号名称" prop="name">
<el-form-item :label="t('MoldManagement.MoldBrand.name')" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入型号名称"
:placeholder="t('MoldManagement.MoldBrand.placeholderName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="工序" prop="orgType">
<el-form-item :label="t('MoldManagement.MoldBrand.orgType')" prop="orgType">
<el-select
v-model="queryParams.orgType"
placeholder="请选择工序"
:placeholder="t('MoldManagement.MoldBrand.placeholderOrgType')"
clearable
class="!w-240px"
>
@ -58,15 +58,15 @@
</el-form-item> -->
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['erp:mold-brand:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.add') }}
</el-button>
<el-button
type="success"
@ -75,7 +75,7 @@
:loading="exportLoading"
v-hasPermi="['erp:mold-brand:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
</el-form-item>
</el-form>
@ -95,32 +95,32 @@
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" fixed="left" reserve-selection />
<el-table-column label="型号编码" align="center" prop="code"/>
<el-table-column label="型号名称" align="left" prop="name"/>
<el-table-column label="规格" align="center" prop="moldType" />
<el-table-column label="工序" align="center" prop="orgType">
<el-table-column :label="t('MoldManagement.MoldBrand.code')" align="center" prop="code" />
<el-table-column :label="t('MoldManagement.MoldBrand.name')" align="left" prop="name" />
<el-table-column :label="t('MoldManagement.MoldBrand.moldType')" align="center" prop="moldType" />
<el-table-column :label="t('MoldManagement.MoldBrand.orgType')" align="center" prop="orgType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.MES_ORG_TYPE" :value="scope.row.orgType" />
</template>
</el-table-column>
<el-table-column label="预期寿命/次" align="center" prop="useTime" />
<el-table-column :label="t('MoldManagement.MoldBrand.useTime')" align="center" prop="useTime" />
<!-- <el-table-column label="维保模式" align="center" prop="maintainType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_MAINTAIN_TYPE" :value="scope.row.maintainType" />
</template>
</el-table-column>
<el-table-column label="维保周期" align="center" prop="maintainTime" /> -->
<el-table-column label="模穴数" align="center" prop="moldSize" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column :label="t('MoldManagement.MoldBrand.moldSize')" align="center" prop="moldSize" />
<el-table-column :label="t('MoldManagement.MoldBrand.remark')" align="center" prop="remark" />
<el-table-column
label="创建时间"
:label="t('MoldManagement.MoldBrand.createTime')"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" fixed="right" width="150px">
<el-table-column :label="t('MoldManagement.MoldBrand.operate')" align="center" fixed="right" width="150px">
<template #default="scope">
<el-button
link
@ -128,7 +128,7 @@
@click="openForm('update', scope.row.id)"
v-hasPermi="['erp:mold-brand:update']"
>
编辑
{{ t('action.edit') }}
</el-button>
<el-button
link
@ -136,7 +136,7 @@
@click="handleDelete(scope.row.id)"
v-hasPermi="['erp:mold-brand:delete']"
>
删除
{{ t('action.del') }}
</el-button>
</template>
</el-table-column>
@ -158,7 +158,7 @@
{{ currentBrandDisplay }}
</div>
<el-tabs model-value="mold">
<el-tab-pane label="模具" name="mold">
<el-tab-pane :label="t('MoldManagement.MoldBrand.tabMold')" name="mold">
<MoldList :brand-id="currentBrandId" />
</el-tab-pane>
<!-- <el-tab-pane label="产品" name="moldBrandProduct">
@ -167,7 +167,7 @@
</el-tabs>
</ContentWrap>
<ContentWrap v-else>
<el-empty description="请先点击上方列表选择一个模具型号" />
<el-empty :description="t('MoldManagement.MoldBrand.emptyTip')" />
</ContentWrap>
</template>

@ -1,6 +1,6 @@
<template>
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" min-label-width="68px">
<el-form-item :label="t('EquipmentManagement.EquipmentKeyItems.code')" prop="code">
<el-input
v-model="queryParams.code"

@ -6,7 +6,7 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
min-label-width="68px"
>
<el-form-item :label="t('EquipmentManagement.EquipmentClassification.code')" prop="code">
<el-input

@ -1,7 +1,7 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" min-label-width="68px">
<el-form-item :label="t('EquipmentManagement.DvRepair.repairCode')" prop="repairCode">
<el-input
v-model="queryParams.repairCode"

@ -1,6 +1,6 @@
<template>
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" min-label-width="68px">
<el-form-item :label="t('EquipmentManagement.DvSubject.code')" prop="subjectCode">
<el-input
v-model="queryParams.subjectCode"

@ -4,18 +4,18 @@
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
label-width="110px"
v-loading="formLoading"
:disabled="disabled"
>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="出库类型" prop="outType">
<el-form-item :label="t('MoldManagement.MoldGet.outType')" prop="outType">
<el-select
v-model="formData.outType"
clearable
filterable
placeholder="请选择出库类型"
:placeholder="t('MoldManagement.MoldGet.placeholderOutType')"
class="!w-1/1"
disabled
>
@ -29,8 +29,12 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出库单号" prop="no">
<el-input disabled v-model="formData.no" placeholder="保存时自动生成" />
<el-form-item :label="t('MoldManagement.MoldGet.outNo')" prop="no">
<el-input
disabled
v-model="formData.no"
:placeholder="t('MoldManagement.MoldGet.placeholderOutNoAuto')"
/>
</el-form-item>
</el-col>
<!-- <el-col :span="8">
@ -52,30 +56,30 @@
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="出库时间" prop="outTime">
<el-form-item :label="t('MoldManagement.MoldGet.outTimeSingle')" prop="outTime">
<el-date-picker
v-model="formData.outTime"
type="date"
value-format="x"
placeholder="选择出库时间"
:placeholder="t('MoldManagement.MoldGet.placeholderOutTime')"
class="!w-1/1"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('MoldManagement.MoldGet.remarkSingle')" prop="remark">
<el-input
type="textarea"
v-model="formData.remark"
:rows="1"
placeholder="请输入备注"
:placeholder="t('MoldManagement.MoldGet.placeholderRemark')"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="fileUrl">
<el-form-item :label="t('MoldManagement.MoldGet.attachment')" prop="fileUrl">
<UploadFile :is-show-tip="false" v-model="formData.fileUrl" :limit="1" />
</el-form-item>
</el-col>
@ -84,16 +88,16 @@
<!-- 子表的表单 -->
<ContentWrap>
<el-tabs v-model="subTabsName" class="-mt-15px -mb-10px">
<el-tab-pane label="出库模具清单" name="item">
<el-tab-pane :label="t('MoldManagement.MoldGet.itemListTitle')" name="item">
<StockOutItemForm ref="itemFormRef" :items="formData.items" :disabled="disabled" />
</el-tab-pane>
</el-tabs>
</ContentWrap>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading" v-if="!disabled">
{{ t('action.save') }}
</el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
</template>
</Dialog>
</template>
@ -123,8 +127,12 @@ const formData = ref({
items: []
})
const formRules = reactive({
outTime: [{ required: true, message: '出库时间不能为空', trigger: 'blur' }],
outType: [{ required: true, message: '出库类型不能为空', trigger: 'blur' }]
outTime: [
{ required: true, message: t('MoldManagement.MoldGet.validatorOutTimeRequired'), trigger: 'blur' }
],
outType: [
{ required: true, message: t('MoldManagement.MoldGet.validatorOutTypeRequired'), trigger: 'blur' }
]
})
const disabled = computed(() => formType.value === 'detail')
const formRef = ref() // Ref
@ -132,9 +140,8 @@ const customerList = ref<CustomerVO[]>([]) // 客户列表
const options = [
{
value: '模具出库',
label: '模具出库',
},
label: t('MoldManagement.MoldGet.moduleName')
}
]
/** 子表的表单 */
const subTabsName = ref('item')

@ -9,8 +9,8 @@
:disabled="disabled"
>
<el-table :data="formData" show-summary :summary-method="getSummaries" class="-mt-10px">
<el-table-column label="序号" type="index" align="center" width="60" />
<el-table-column label="仓库名称" min-width="125">
<el-table-column :label="t('MoldManagement.MoldGet.itemIndex')" type="index" align="center" width="60" />
<el-table-column :label="t('MoldManagement.MoldGet.itemWarehouseName')" min-width="125">
<template #default="{ row, $index }">
<el-form-item
:prop="`${$index}.warehouseId`"
@ -21,7 +21,7 @@
v-model="row.warehouseId"
clearable
filterable
placeholder="请选择仓库"
:placeholder="t('MoldManagement.MoldGet.placeholderWarehouse')"
@change="onChangeWarehouse($event, row)"
>
<el-option
@ -34,7 +34,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="模具名称" min-width="180">
<el-table-column :label="t('MoldManagement.MoldGet.itemMoldName')" min-width="180">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.productId`" :rules="formRules.productId" class="mb-0px!">
<el-select
@ -42,7 +42,7 @@
clearable
filterable
@change="onChangeProduct($event, row)"
placeholder="请选择模具"
:placeholder="t('MoldManagement.MoldGet.placeholderMold')"
>
<el-option
v-for="item in productList"
@ -54,28 +54,28 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="库存" min-width="100">
<el-table-column :label="t('MoldManagement.MoldGet.itemStockCount')" min-width="100">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.stockCount" :formatter="erpCountInputFormatter" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="模具编码" min-width="150">
<el-table-column :label="t('MoldManagement.MoldGet.itemMoldCode')" min-width="150">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.productBarCode" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="80">
<el-table-column :label="t('MoldManagement.MoldGet.itemUnitName')" min-width="80">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.productUnitName" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="数量" prop="count" fixed="right" min-width="140">
<el-table-column :label="t('MoldManagement.MoldGet.itemCount')" prop="count" fixed="right" min-width="140">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.count`" :rules="formRules.count" class="mb-0px!">
<el-input-number
@ -108,14 +108,14 @@
</el-form-item>
</template>
</el-table-column> -->
<el-table-column label="备注" fixed="right" min-width="150">
<el-table-column :label="t('MoldManagement.MoldGet.itemRemark')" fixed="right" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
<el-input v-model="row.remark" placeholder="请输入备注" />
</el-form-item>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="60">
<el-table-column align="center" fixed="right" :label="t('MoldManagement.MoldGet.itemOperate')" width="60">
<template #default="{ $index }">
<el-button type="danger" @click="handleDelete($index)" link>
<Icon icon="ep:delete" />
@ -125,7 +125,7 @@
</el-table>
</el-form>
<el-row justify="center" class="mt-3" v-if="!disabled">
<el-button @click="handleAdd" round>+ 添加出库模具</el-button>
<el-button @click="handleAdd" round>+ {{ t('MoldManagement.MoldGet.itemAddButton') }}</el-button>
</el-row>
</template>
<script setup lang="ts">
@ -146,11 +146,21 @@ const props = defineProps<{
}>()
const formLoading = ref(false) //
const formData = ref([])
const { t } = useI18n()
const formRules = reactive({
inId: [{ required: true, message: '出库编号不能为空', trigger: 'blur' }],
warehouseId: [{ required: true, message: '仓库不能为空', trigger: 'blur' }],
productId: [{ required: true, message: '模具不能为空', trigger: 'blur' }],
count: [{ required: true, message: '数量不能为空', trigger: 'blur' }]
inId: [
{ required: true, message: t('MoldManagement.MoldGet.validatorItemOutIdRequired'), trigger: 'blur' }
],
warehouseId: [
{ required: true, message: t('MoldManagement.MoldGet.validatorItemWarehouseRequired'), trigger: 'blur' }
],
productId: [
{ required: true, message: t('MoldManagement.MoldGet.validatorItemMoldRequired'), trigger: 'blur' }
],
count: [
{ required: true, message: t('MoldManagement.MoldGet.validatorItemCountRequired'), trigger: 'blur' }
]
})
const formRef = ref([]) // Ref
const productList = ref<MoldVO[]>([]) //
@ -187,7 +197,7 @@ const getSummaries = (param: SummaryMethodProps) => {
const sums: string[] = []
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计'
sums[index] = t('MoldManagement.MoldGet.sumLabel')
return
}
if (['count', 'totalPrice'].includes(column.property)) {

@ -7,23 +7,23 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
min-label-width="100px"
>
<el-form-item label="领模单号" prop="no">
<el-form-item :label="t('MoldManagement.MoldGet.no')" prop="no">
<el-input
v-model="queryParams.no"
placeholder="请选择领模单号"
:placeholder="t('MoldManagement.MoldGet.placeholderNo')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="模具" prop="productId">
<el-form-item :label="t('MoldManagement.MoldGet.mold')" prop="productId">
<el-select
v-model="queryParams.productId"
clearable
filterable
placeholder="请选择模具"
:placeholder="t('MoldManagement.MoldGet.placeholderMold')"
class="!w-240px"
>
<el-option
@ -34,13 +34,13 @@
/>
</el-select>
</el-form-item>
<el-form-item label="出库时间" prop="outTime">
<el-form-item :label="t('MoldManagement.MoldGet.outTime')" prop="outTime">
<el-date-picker
v-model="queryParams.outTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="t('MoldManagement.MoldGet.placeholderOutTimeStart')"
:end-placeholder="t('MoldManagement.MoldGet.placeholderOutTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
@ -61,12 +61,12 @@
/>
</el-select>
</el-form-item> -->
<el-form-item label="仓库" prop="warehouseId">
<el-form-item :label="t('MoldManagement.MoldGet.warehouse')" prop="warehouseId">
<el-select
v-model="queryParams.warehouseId"
clearable
filterable
placeholder="请选择仓库"
:placeholder="t('MoldManagement.MoldGet.placeholderWarehouse')"
class="!w-240px"
>
<el-option
@ -77,12 +77,12 @@
/>
</el-select>
</el-form-item>
<el-form-item label="创建人" prop="creator">
<el-form-item :label="t('MoldManagement.MoldGet.creator')" prop="creator">
<el-select
v-model="queryParams.creator"
clearable
filterable
placeholder="请选择创建人"
:placeholder="t('MoldManagement.MoldGet.placeholderCreator')"
class="!w-240px"
>
<el-option
@ -93,8 +93,13 @@
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
<el-form-item :label="t('MoldManagement.MoldGet.status')" prop="status">
<el-select
v-model="queryParams.status"
:placeholder="t('MoldManagement.MoldGet.placeholderStatus')"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.ERP_AUDIT_STATUS)"
:key="dict.value"
@ -103,25 +108,25 @@
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('MoldManagement.MoldGet.remark')" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
:placeholder="t('MoldManagement.MoldGet.placeholderRemark')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('action.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('action.reset') }}</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['erp:stock-out:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('MoldManagement.MoldGet.add') }}
</el-button>
<el-button
type="success"
@ -130,7 +135,7 @@
:loading="exportLoading"
v-hasPermi="['erp:stock-out:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('MoldManagement.MoldGet.export') }}
</el-button>
<el-button
type="danger"
@ -139,7 +144,7 @@
v-hasPermi="['erp:stock-out:delete']"
:disabled="selectionList.length === 0"
>
<Icon icon="ep:delete" class="mr-5px" /> 删除
<Icon icon="ep:delete" class="mr-5px" /> {{ t('MoldManagement.MoldGet.delete') }}
</el-button>
</el-form-item>
</el-form>
@ -161,19 +166,19 @@
:show-overflow-tooltip="true"
@selection-change="handleSelectionChange"
>
<el-table-column width="30" label="选择" type="selection" />
<el-table-column min-width="180" label="领模单号" align="center" prop="no" />
<el-table-column label="模具信息" align="left" sortable prop="productNames" min-width="150" />
<el-table-column width="30" :label="t('MoldManagement.MoldGet.select')" type="selection" />
<el-table-column min-width="180" :label="t('MoldManagement.MoldGet.no')" align="center" prop="no" />
<el-table-column :label="t('MoldManagement.MoldGet.mold')" align="left" sortable prop="productNames" min-width="150" />
<!-- <el-table-column label="客户" align="center" prop="customerName" /> -->
<el-table-column
label="出库时间"
:label="t('MoldManagement.MoldGet.outTime')"
align="center"
sortable
prop="outTime"
:formatter="dateFormatter2"
width="120px"
/>
<el-table-column label="创建人" align="center" prop="creatorName" />
<el-table-column :label="t('MoldManagement.MoldGet.creator')" align="center" prop="creatorName" />
<!-- <el-table-column
label="数量"
align="right"
@ -188,19 +193,19 @@
prop="totalPrice"
:formatter="erpPriceTableColumnFormatter"
/> -->
<el-table-column label="状态" align="center" fixed="right" width="90" prop="status">
<el-table-column :label="t('MoldManagement.MoldGet.status')" align="center" fixed="right" width="90" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="220">
<el-table-column :label="t('MoldManagement.MoldGet.operate')" align="center" fixed="right" width="220">
<template #default="scope">
<el-button
link
@click="openForm('detail', scope.row.id)"
v-hasPermi="['erp:stock-out:query']"
>
详情
{{ t('MoldManagement.MoldGet.detail') }}
</el-button>
<el-button
link
@ -209,7 +214,7 @@
v-hasPermi="['erp:stock-out:update']"
:disabled="scope.row.status === 20"
>
编辑
{{ t('MoldManagement.MoldGet.edit') }}
</el-button>
<el-button
link
@ -218,7 +223,7 @@
v-hasPermi="['erp:stock-out:update-status']"
v-if="scope.row.status === 10"
>
审批
{{ t('MoldManagement.MoldGet.approve') }}
</el-button>
<el-button
link
@ -227,7 +232,7 @@
v-hasPermi="['erp:stock-out:update-status']"
v-else
>
反审批
{{ t('MoldManagement.MoldGet.unapprove') }}
</el-button>
<el-button
link
@ -235,7 +240,7 @@
@click="handleDelete([scope.row.id])"
v-hasPermi="['erp:stock-out:delete']"
>
删除
{{ t('MoldManagement.MoldGet.delete') }}
</el-button>
</template>
</el-table-column>

@ -4,28 +4,28 @@
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
label-width="120px"
v-loading="formLoading"
>
<el-form-item label="操作类型" prop="operateType">
<el-form-item :label="t('MoldManagement.MoldOperate.operateType')" prop="operateType">
<el-radio-group v-model="formData.operateType">
<el-radio :label="1">上模</el-radio>
<el-radio :label="2">下模</el-radio>
<el-radio :label="1">{{ t('MoldManagement.MoldOperate.operateTypeUp') }}</el-radio>
<el-radio :label="2">{{ t('MoldManagement.MoldOperate.operateTypeDown') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="设备" prop="deviceId">
<el-form-item :label="t('MoldManagement.MoldOperate.device')" prop="deviceId">
<el-select
v-model="formData.deviceId" filterable clearable :loading="deviceLoading"
placeholder="请选择设备" class="!w-full" @change="deviceChange(formData.deviceId)">
:placeholder="t('MoldManagement.MoldOperate.placeholderDevice')" class="!w-full" @change="deviceChange(formData.deviceId)">
<el-option v-for="opt in deviceOptions" :key="String(opt.value)" :label="opt.label" :value="opt.value" />
</el-select>
</el-form-item>
<el-form-item label="模具" prop="moldId" v-if = "formData.operateType == '1'">
<el-form-item :label="t('MoldManagement.MoldOperate.mold')" prop="moldId" v-if = "formData.operateType == '1'">
<el-select
v-model="formData.moldId"
clearable
filterable
placeholder="请选择模具"
:placeholder="t('MoldManagement.MoldOperate.placeholderMold')"
>
<el-option
v-for="item in moldList"
@ -35,13 +35,13 @@ v-model="formData.deviceId" filterable clearable :loading="deviceLoading"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
<el-form-item :label="t('MoldManagement.MoldOperate.remark')" prop="remark">
<el-input v-model="formData.remark" :placeholder="t('MoldManagement.MoldOperate.placeholderRemark')" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">{{ t('common.ok') }}</el-button>
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button>
</template>
</Dialog>
</template>
@ -73,9 +73,9 @@ const formData = ref({
remark: undefined,
})
const formRules = reactive({
moldId: [{ required: true, message: '关联模具不能为空', trigger: 'blur' }],
operateType: [{ required: true, message: '操作类型不能为空', trigger: 'blur' }],
deviceId: [{ required: true, message: '关联设备不能为空', trigger: 'blur' }],
moldId: [{ required: true, message: t('MoldManagement.MoldOperate.validatorMoldRequired'), trigger: 'blur' }],
operateType: [{ required: true, message: t('MoldManagement.MoldOperate.validatorOperateTypeRequired'), trigger: 'blur' }],
deviceId: [{ required: true, message: t('MoldManagement.MoldOperate.validatorDeviceRequired'), trigger: 'blur' }],
})
const formRef = ref() // Ref
@ -143,13 +143,13 @@ const submitForm = async () => {
if (formData.value.operateType == '1') {
const data = await MoldOperateApi.getMoldOperateMold(formData.value.deviceId)
if (data === true) {
message.alert('请先将该设备上的模具换下!')
message.alert(t('MoldManagement.MoldOperate.alertNeedRemoveMoldFirst'))
return
}
} else {
const data = await MoldOperateApi.getMoldOperateMold(formData.value.deviceId)
if (data === false) {
message.alert('该设备没有安装模具!')
message.alert(t('MoldManagement.MoldOperate.alertNoMoldOnDevice'))
return
}
}
@ -195,11 +195,11 @@ const deviceChange = async (deviceId:number) => {
const data = await MoldOperateApi.getMoldOperateMold(deviceId)
if (formData.value.operateType == '1') {
if (data === true) {
message.alert('请先将该设备上的模具换下!')
message.alert(t('MoldManagement.MoldOperate.alertNeedRemoveMoldFirst'))
}
} else {
if (data === false) {
message.alert('该设备没有安装模具!')
message.alert(t('MoldManagement.MoldOperate.alertNoMoldOnDevice'))
}
}
}
@ -215,4 +215,4 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
</script>
</script>

@ -6,7 +6,7 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
label-width="120px"
>
<!-- <el-form-item label="操作类型" prop="operateType">
<el-select
@ -18,12 +18,12 @@
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item> -->
<el-form-item label="模具" prop="moldId">
<el-form-item :label="t('MoldManagement.MoldOperate.mold')" prop="moldId">
<el-select
v-model="queryParams.moldId"
clearable
filterable
placeholder="请选择模具"
:placeholder="t('MoldManagement.MoldOperate.placeholderMold')"
class="!w-240px"
>
<el-option
@ -34,36 +34,36 @@
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('MoldManagement.MoldOperate.remark')" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
:placeholder="t('MoldManagement.MoldOperate.placeholderRemark')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-form-item :label="t('MoldManagement.MoldOperate.createTime')" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="t('MoldManagement.MoldOperate.placeholderCreateTimeStart')"
:end-placeholder="t('MoldManagement.MoldOperate.placeholderCreateTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('MoldManagement.MoldOperate.search') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('MoldManagement.MoldOperate.reset') }}</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:mold-operate:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('MoldManagement.MoldOperate.add') }}
</el-button>
<el-button
type="success"
@ -72,7 +72,7 @@
:loading="exportLoading"
v-hasPermi="['mes:mold-operate:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('MoldManagement.MoldOperate.export') }}
</el-button>
</el-form-item>
</el-form>
@ -81,24 +81,24 @@
<!-- 列表 -->
<ContentWrap>
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane label="上模" name="1" />
<el-tab-pane label="下模" name="2" />
<el-tab-pane :label="t('MoldManagement.MoldOperate.tabUp')" name="1" />
<el-tab-pane :label="t('MoldManagement.MoldOperate.tabDown')" name="2" />
</el-tabs>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<!-- <el-table-column label="ID" align="center" prop="id" /> -->
<!-- <el-table-column label="操作类型" align="center" prop="operateType" /> -->
<el-table-column label="模具名称" align="center" prop="moldName" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="操作人" align="center" prop="creatorName" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column :label="t('MoldManagement.MoldOperate.moldName')" align="center" prop="moldName" />
<el-table-column :label="t('MoldManagement.MoldOperate.deviceName')" align="center" prop="deviceName" />
<el-table-column :label="t('MoldManagement.MoldOperate.creatorName')" align="center" prop="creatorName" />
<el-table-column :label="t('MoldManagement.MoldOperate.remark')" align="center" prop="remark" />
<el-table-column
label="操作时间"
:label="t('MoldManagement.MoldOperate.createTime')"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<el-table-column :label="t('MoldManagement.MoldOperate.operate')" align="center" min-width="140px">
<template #default="scope">
<!-- <el-button
link
@ -113,9 +113,7 @@
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:mold-operate:delete']"
>
删除
</el-button>
>{{ t('MoldManagement.MoldOperate.delete') }}</el-button>
</template>
</el-table-column>
</el-table>
@ -213,7 +211,7 @@ const handleExport = async () => {
//
exportLoading.value = true
const data = await MoldOperateApi.exportMoldOperate(queryParams)
download.excel(data, '模具上下模.xls')
download.excel(data, t('MoldManagement.MoldOperate.exportFilename'))
} catch {
} finally {
exportLoading.value = false
@ -231,4 +229,4 @@ const handleTabClick = (tab: TabsPaneContext) => {
onMounted(() => {
getList()
})
</script>
</script>

@ -4,18 +4,18 @@
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
label-width="110px"
v-loading="formLoading"
:disabled="disabled"
>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="入库类型" prop="inType">
<el-form-item :label="t('MoldManagement.MoldReturn.inType')" prop="inType">
<el-select
v-model="formData.inType"
clearable
filterable
placeholder="请选择入库类型"
:placeholder="t('MoldManagement.MoldReturn.placeholderInType')"
class="!w-1/1"
disabled
>
@ -29,8 +29,12 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="入库单号" prop="no">
<el-input disabled v-model="formData.no" placeholder="保存时自动生成" />
<el-form-item :label="t('MoldManagement.MoldReturn.inNo')" prop="no">
<el-input
disabled
v-model="formData.no"
:placeholder="t('MoldManagement.MoldReturn.placeholderInNoAuto')"
/>
</el-form-item>
</el-col>
<!-- <el-col :span="8">
@ -52,30 +56,30 @@
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="入库时间" prop="inTime">
<el-form-item :label="t('MoldManagement.MoldReturn.inTimeSingle')" prop="inTime">
<el-date-picker
v-model="formData.inTime"
type="date"
value-format="x"
placeholder="选择入库时间"
:placeholder="t('MoldManagement.MoldReturn.placeholderInTime')"
class="!w-1/1"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('MoldManagement.MoldReturn.remarkSingle')" prop="remark">
<el-input
type="textarea"
v-model="formData.remark"
:rows="1"
placeholder="请输入备注"
:placeholder="t('MoldManagement.MoldReturn.placeholderRemark')"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="附件" prop="fileUrl">
<el-form-item :label="t('MoldManagement.MoldReturn.attachment')" prop="fileUrl">
<UploadFile :is-show-tip="false" v-model="formData.fileUrl" :limit="1" />
</el-form-item>
</el-col>
@ -84,16 +88,16 @@
<!-- 子表的表单 -->
<ContentWrap>
<el-tabs v-model="subTabsName" class="-mt-15px -mb-10px">
<el-tab-pane label="入库模具清单" name="item">
<el-tab-pane :label="t('MoldManagement.MoldReturn.itemListTitle')" name="item">
<StockInItemForm ref="itemFormRef" :items="formData.items" :disabled="disabled" />
</el-tab-pane>
</el-tabs>
</ContentWrap>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading" v-if="!disabled">
{{ t('action.save') }}
</el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
</template>
</Dialog>
</template>
@ -123,8 +127,12 @@ const formData = ref({
items: []
})
const formRules = reactive({
inTime: [{ required: true, message: '入库时间不能为空', trigger: 'blur' }],
inType: [{ required: true, message: '入库类型不能为空', trigger: 'blur' }]
inTime: [
{ required: true, message: t('MoldManagement.MoldReturn.validatorInTimeRequired'), trigger: 'blur' }
],
inType: [
{ required: true, message: t('MoldManagement.MoldReturn.validatorInTypeRequired'), trigger: 'blur' }
]
})
const disabled = computed(() => formType.value === 'detail')
const formRef = ref() // Ref
@ -132,9 +140,8 @@ const customerList = ref<CustomerVO[]>([]) // 客户列表
const options = [
{
value: '模具入库',
label: '模具入库',
},
label: t('MoldManagement.MoldReturn.moduleName')
}
]
/** 子表的表单 */
const subTabsName = ref('item')

@ -9,8 +9,8 @@
:disabled="disabled"
>
<el-table :data="formData" show-summary :summary-method="getSummaries" class="-mt-10px">
<el-table-column label="序号" type="index" align="center" width="60" />
<el-table-column label="仓库名称" min-width="125">
<el-table-column :label="t('MoldManagement.MoldReturn.itemIndex')" type="index" align="center" width="60" />
<el-table-column :label="t('MoldManagement.MoldReturn.itemWarehouseName')" min-width="125">
<template #default="{ row, $index }">
<el-form-item
:prop="`${$index}.warehouseId`"
@ -21,7 +21,7 @@
v-model="row.warehouseId"
clearable
filterable
placeholder="请选择仓库"
:placeholder="t('MoldManagement.MoldReturn.placeholderWarehouse')"
@change="onChangeWarehouse($event, row)"
>
<el-option
@ -34,7 +34,7 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="模具名称" min-width="180">
<el-table-column :label="t('MoldManagement.MoldReturn.itemMoldName')" min-width="180">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.productId`" :rules="formRules.productId" class="mb-0px!">
<el-select
@ -42,7 +42,7 @@
clearable
filterable
@change="onChangeProduct($event, row)"
placeholder="请选择模具"
:placeholder="t('MoldManagement.MoldReturn.placeholderMold')"
>
<el-option
v-for="item in productList"
@ -54,28 +54,28 @@
</el-form-item>
</template>
</el-table-column>
<el-table-column label="库存" min-width="100">
<el-table-column :label="t('MoldManagement.MoldReturn.itemStockCount')" min-width="100">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.stockCount" :formatter="erpCountInputFormatter" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="模具编码" min-width="150">
<el-table-column :label="t('MoldManagement.MoldReturn.itemMoldCode')" min-width="150">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.productBarCode" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="单位" min-width="80">
<el-table-column :label="t('MoldManagement.MoldReturn.itemUnitName')" min-width="80">
<template #default="{ row }">
<el-form-item class="mb-0px!">
<el-input disabled v-model="row.productUnitName" />
</el-form-item>
</template>
</el-table-column>
<el-table-column label="数量" prop="count" fixed="right" min-width="140">
<el-table-column :label="t('MoldManagement.MoldReturn.itemCount')" prop="count" fixed="right" min-width="140">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.count`" :rules="formRules.count" class="mb-0px!">
<el-input-number
@ -108,14 +108,14 @@
</el-form-item>
</template>
</el-table-column> -->
<el-table-column label="备注" fixed="right" min-width="150">
<el-table-column :label="t('MoldManagement.MoldReturn.itemRemark')" fixed="right" min-width="150">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.remark`" class="mb-0px!">
<el-input v-model="row.remark" placeholder="请输入备注" />
<el-input v-model="row.remark" :placeholder="t('MoldManagement.MoldReturn.placeholderRemark')" />
</el-form-item>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="60">
<el-table-column align="center" fixed="right" :label="t('MoldManagement.MoldReturn.itemOperate')" width="60">
<template #default="{ $index }">
<el-button type="danger" @click="handleDelete($index)" link>
<Icon icon="ep:delete" />
@ -125,7 +125,7 @@
</el-table>
</el-form>
<el-row justify="center" class="mt-3" v-if="!disabled">
<el-button @click="handleAdd" round>+ 添加入库模具</el-button>
<el-button @click="handleAdd" round>+ {{ t('MoldManagement.MoldReturn.itemAddButton') }}</el-button>
</el-row>
</template>
<script setup lang="ts">
@ -146,11 +146,14 @@ const props = defineProps<{
}>()
const formLoading = ref(false) //
const formData = ref([])
const { t } = useI18n()
const formRules = reactive({
inId: [{ required: true, message: '入库编号不能为空', trigger: 'blur' }],
warehouseId: [{ required: true, message: '仓库不能为空', trigger: 'blur' }],
productId: [{ required: true, message: '模具不能为空', trigger: 'blur' }],
count: [{ required: true, message: '数量不能为空', trigger: 'blur' }]
inId: [{ required: true, message: t('MoldManagement.MoldReturn.validatorItemInIdRequired'), trigger: 'blur' }],
warehouseId: [
{ required: true, message: t('MoldManagement.MoldReturn.validatorItemWarehouseRequired'), trigger: 'blur' }
],
productId: [{ required: true, message: t('MoldManagement.MoldReturn.validatorItemMoldRequired'), trigger: 'blur' }],
count: [{ required: true, message: t('MoldManagement.MoldReturn.validatorItemCountRequired'), trigger: 'blur' }]
})
const formRef = ref([]) // Ref
const productList = ref<MoldVO[]>([]) //
@ -187,7 +190,7 @@ const getSummaries = (param: SummaryMethodProps) => {
const sums: string[] = []
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = '合计'
sums[index] = t('MoldManagement.MoldReturn.sumLabel')
return
}
if (['count', 'totalPrice'].includes(column.property)) {

@ -7,23 +7,23 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
label-width="110px"
>
<el-form-item label="入库单号" prop="no">
<el-form-item :label="t('MoldManagement.MoldReturn.no')" prop="no">
<el-input
v-model="queryParams.no"
placeholder="请选择入库单号"
:placeholder="t('MoldManagement.MoldReturn.placeholderNo')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="模具" prop="productId">
<el-form-item :label="t('MoldManagement.MoldReturn.mold')" prop="productId">
<el-select
v-model="queryParams.productId"
clearable
filterable
placeholder="请选择模具"
:placeholder="t('MoldManagement.MoldReturn.placeholderMold')"
class="!w-240px"
>
<el-option
@ -34,13 +34,13 @@
/>
</el-select>
</el-form-item>
<el-form-item label="入库时间" prop="outTime">
<el-form-item :label="t('MoldManagement.MoldReturn.inTime')" prop="outTime">
<el-date-picker
v-model="queryParams.outTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="t('MoldManagement.MoldReturn.placeholderInTimeStart')"
:end-placeholder="t('MoldManagement.MoldReturn.placeholderInTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px"
/>
@ -61,12 +61,12 @@
/>
</el-select>
</el-form-item> -->
<el-form-item label="仓库" prop="warehouseId">
<el-form-item :label="t('MoldManagement.MoldReturn.warehouse')" prop="warehouseId">
<el-select
v-model="queryParams.warehouseId"
clearable
filterable
placeholder="请选择仓库"
:placeholder="t('MoldManagement.MoldReturn.placeholderWarehouse')"
class="!w-240px"
>
<el-option
@ -77,12 +77,12 @@
/>
</el-select>
</el-form-item>
<el-form-item label="创建人" prop="creator">
<el-form-item :label="t('MoldManagement.MoldReturn.creator')" prop="creator">
<el-select
v-model="queryParams.creator"
clearable
filterable
placeholder="请选择创建人"
:placeholder="t('MoldManagement.MoldReturn.placeholderCreator')"
class="!w-240px"
>
<el-option
@ -93,8 +93,13 @@
/>
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
<el-form-item :label="t('MoldManagement.MoldReturn.status')" prop="status">
<el-select
v-model="queryParams.status"
:placeholder="t('MoldManagement.MoldReturn.placeholderStatus')"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.ERP_AUDIT_STATUS)"
:key="dict.value"
@ -103,25 +108,25 @@
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('MoldManagement.MoldReturn.remark')" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
:placeholder="t('MoldManagement.MoldReturn.placeholderRemark')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['erp:stock-out:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('MoldManagement.MoldReturn.add') }}
</el-button>
<el-button
type="success"
@ -130,7 +135,7 @@
:loading="exportLoading"
v-hasPermi="['erp:stock-out:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('MoldManagement.MoldReturn.export') }}
</el-button>
<el-button
type="danger"
@ -139,7 +144,7 @@
v-hasPermi="['erp:stock-out:delete']"
:disabled="selectionList.length === 0"
>
<Icon icon="ep:delete" class="mr-5px" /> 删除
<Icon icon="ep:delete" class="mr-5px" /> {{ t('MoldManagement.MoldReturn.delete') }}
</el-button>
</el-form-item>
</el-form>
@ -161,19 +166,19 @@
:show-overflow-tooltip="true"
@selection-change="handleSelectionChange"
>
<el-table-column width="30" label="选择" type="selection" />
<el-table-column min-width="180" label="入库单号" align="center" prop="no" />
<el-table-column label="模具信息" align="left" sortable prop="productNames" min-width="150" />
<el-table-column width="30" :label="t('MoldManagement.MoldReturn.select')" type="selection" />
<el-table-column min-width="180" :label="t('MoldManagement.MoldReturn.no')" align="center" prop="no" />
<el-table-column :label="t('MoldManagement.MoldReturn.moldInfo')" align="left" sortable prop="productNames" min-width="150" />
<!-- <el-table-column label="客户" align="center" prop="customerName" /> -->
<el-table-column
label="入库时间"
:label="t('MoldManagement.MoldReturn.inTime')"
align="center"
sortable
prop="outTime"
:formatter="dateFormatter2"
width="120px"
/>
<el-table-column label="创建人" align="center" prop="creatorName" />
<el-table-column :label="t('MoldManagement.MoldReturn.creator')" align="center" prop="creatorName" />
<!-- <el-table-column
label="数量"
align="right"
@ -188,19 +193,19 @@
prop="totalPrice"
:formatter="erpPriceTableColumnFormatter"
/> -->
<el-table-column label="状态" align="center" fixed="right" width="90" prop="status">
<el-table-column :label="t('MoldManagement.MoldReturn.status')" align="center" fixed="right" width="90" prop="status">
<template #default="scope">
<dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="220">
<el-table-column :label="t('MoldManagement.MoldReturn.operate')" align="center" fixed="right" width="220">
<template #default="scope">
<el-button
link
@click="openForm('detail', scope.row.id)"
v-hasPermi="['erp:stock-out:query']"
>
详情
{{ t('MoldManagement.MoldReturn.detail') }}
</el-button>
<el-button
link
@ -209,7 +214,7 @@
v-hasPermi="['erp:stock-out:update']"
:disabled="scope.row.status === 20"
>
编辑
{{ t('MoldManagement.MoldReturn.edit') }}
</el-button>
<el-button
link
@ -218,7 +223,7 @@
v-hasPermi="['erp:stock-out:update-status']"
v-if="scope.row.status === 10"
>
审批
{{ t('MoldManagement.MoldReturn.approve') }}
</el-button>
<el-button
link
@ -227,7 +232,7 @@
v-hasPermi="['erp:stock-out:update-status']"
v-else
>
反审批
{{ t('MoldManagement.MoldReturn.unapprove') }}
</el-button>
<el-button
link
@ -235,7 +240,7 @@
@click="handleDelete([scope.row.id])"
v-hasPermi="['erp:stock-out:delete']"
>
删除
{{ t('MoldManagement.MoldReturn.delete') }}
</el-button>
</template>
</el-table-column>
@ -343,11 +348,11 @@ const handleDelete = async (ids: number[]) => {
/** 审批/反审批操作 */
const handleUpdateStatus = async (id: number, status: number) => {
try {
//
await message.confirm(`确定${status === 20 ? '审批' : '反审批'}该入库单吗?`)
//
const confirmText = status === 20 ? t('MoldManagement.MoldReturn.approveConfirm') : t('MoldManagement.MoldReturn.unapproveConfirm')
await message.confirm(confirmText)
await StockInApi.updateStockInStatus(id, status)
message.success(`${status === 20 ? '审批' : '反审批'}成功`)
const successText = status === 20 ? t('MoldManagement.MoldReturn.approveSuccess') : t('MoldManagement.MoldReturn.unapproveSuccess')
message.success(successText)
//
await getList()
} catch {}
@ -361,7 +366,7 @@ const handleExport = async () => {
//
exportLoading.value = true
const data = await StockInApi.exportStockIn(queryParams)
download.excel(data, '模具入库单.xls')
download.excel(data, t('MoldManagement.MoldReturn.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -1,6 +1,6 @@
<template>
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" min-label-width="68px">
<el-form-item :label="t('EquipmentManagement.RepairItems.subjectCode')" prop="subjectCode">
<el-input
v-model="queryParams.subjectCode"

@ -5,7 +5,7 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
min-label-width="68px"
>
<el-form-item :label="t('EquipmentManagement.TaskManagement.name')" prop="name">
<el-input
@ -166,7 +166,7 @@
:label="t('EquipmentManagement.TaskManagement.operate')"
fixed="right"
align="center"
width="230"
min-width="230"
>
<template #default="scope">
<el-button

@ -1,6 +1,6 @@
<template>
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" min-label-width="68px">
<el-form-item :label="t('EquipmentManagement.WorkOrderManagement.planNo')" prop="planNo">
<el-input
v-model="queryParams.planNo"

@ -1,38 +1,58 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
<el-form-item label="单号" prop="code">
<el-input v-model="formData.code" placeholder="请输入单号" />
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="120px"
v-loading="formLoading"
>
<el-form-item :label="t('QualityManagement.ZjTask.formCode')" prop="code">
<el-input
v-model="formData.code"
:placeholder="t('QualityManagement.ZjTask.placeholderFormCode')"
/>
</el-form-item>
<el-form-item label="质检分类" prop="type">
<el-select v-model="formData.type" clearable filterable placeholder="请选择质检分类">
<el-form-item :label="t('QualityManagement.ZjTask.formType')" prop="type">
<el-select
v-model="formData.type"
clearable
filterable
:placeholder="t('QualityManagement.ZjTask.placeholderFormType')"
>
<el-option
v-for="dict in getStrDictOptions('mes_zj_task_type')" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="检验方案" prop="schemaId">
<el-form-item :label="t('QualityManagement.ZjTask.formSchema')" prop="schemaId">
<el-row :gutter="8" class="w-full">
<el-col :span="22">
<el-input v-model="formData.schemaName" placeholder="请选择检验方案" readonly />
<el-input
v-model="formData.schemaName"
:placeholder="t('QualityManagement.ZjTask.placeholderFormSchema')"
readonly
/>
</el-col>
<el-col :span="2" class="text-right">
<el-button type="primary" @click="openSchemaDialog"></el-button>
<el-button type="primary" @click="openSchemaDialog">
{{ t('action.select') }}
</el-button>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="工单类型" prop="ticketType">
<el-form-item :label="t('QualityManagement.ZjTask.formTicketType')" prop="ticketType">
<el-radio-group v-model="formData.ticketType" @change="ticketTypeChange">
<el-radio :label="1">生产过程</el-radio>
<el-radio :label="2">产品入库</el-radio>
<el-radio :label="1">{{ t('QualityManagement.ZjTask.ticketTypeProcess') }}</el-radio>
<el-radio :label="2">{{ t('QualityManagement.ZjTask.ticketTypeStorage') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="生产计划" prop="ticket">
<el-select
<el-form-item :label="t('QualityManagement.ZjTask.formTicket')" prop="ticket">
<el-select
v-model="formData.ticket"
clearable
filterable
placeholder="请选择生产计划"
:placeholder="t('QualityManagement.ZjTask.placeholderFormTicket')"
>
<el-option
v-for="item in planList"
@ -42,17 +62,21 @@ v-for="dict in getStrDictOptions('mes_zj_task_type')" :key="dict.value" :label="
/>
</el-select>
</el-form-item>
<el-form-item label="工序" prop="orgType" v-if="formData.ticketType === 1">
<el-select v-model="formData.orgType" clearable placeholder="请选择工序">
<el-form-item :label="t('QualityManagement.ZjTask.formOrgType')" prop="orgType" v-if="formData.ticketType === 1">
<el-select
v-model="formData.orgType"
clearable
:placeholder="t('QualityManagement.ZjTask.placeholderFormOrgType')"
>
<el-option v-for="item in orgTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="负责人" prop="managerId">
<el-form-item :label="t('QualityManagement.ZjTask.formManager')" prop="managerId">
<el-select
v-model="formData.managerId"
clearable
filterable
placeholder="请选择负责人"
:placeholder="t('QualityManagement.ZjTask.placeholderFormManager')"
@change="handleManagerChange"
>
<el-option
@ -63,16 +87,28 @@ v-for="dict in getStrDictOptions('mes_zj_task_type')" :key="dict.value" :label="
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
<el-form-item :label="t('QualityManagement.ZjTask.formRemark')" prop="remark">
<el-input
v-model="formData.remark"
:placeholder="t('QualityManagement.ZjTask.placeholderFormRemark')"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">
{{ t('common.ok') }}
</el-button>
<el-button @click="dialogVisible = false">
{{ t('common.cancel') }}
</el-button>
</template>
</Dialog>
<el-dialog v-model="schemaDialogVisible" title="选择检验方案" width="1200px" draggable>
<el-dialog
v-model="schemaDialogVisible"
:title="t('QualityManagement.ZjTask.formSchema')"
width="1200px"
draggable
>
<el-table :data="schemaList" v-loading="schemaLoading" height="400px" @row-click="handleSchemaRowClick">
<el-table-column width="60">
<template #default="scope">
@ -81,28 +117,32 @@ v-for="dict in getStrDictOptions('mes_zj_task_type')" :key="dict.value" :label="
</el-radio>
</template>
</el-table-column>
<el-table-column type="index" label="序号" width="80" />
<el-table-column label="名称" prop="name" />
<el-table-column label="类型" prop="type">
<el-table-column :label="t('QualityManagement.ZjSchema.name')" type="index" width="80" />
<el-table-column :label="t('QualityManagement.ZjSchema.name')" prop="name" />
<el-table-column :label="t('QualityManagement.ZjSchema.type')" prop="type">
<template #default="scope">
<dict-tag type="mes_zj_schema_type" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="抽检方式" prop="sampleMethod">
<el-table-column :label="t('QualityManagement.ZjSchema.sampleMethod')" prop="sampleMethod">
<template #default="scope">
<dict-tag type="mes_zj_schema_sample_method" :value="scope.row.sampleMethod" />
</template>
</el-table-column>
<el-table-column label="值" prop="val">
<el-table-column :label="t('QualityManagement.ZjSchema.val')" prop="val">
<template #default="scope">
{{ formatSchemaVal(scope.row.val) }}
</template>
</el-table-column>
<el-table-column label="备注" prop="remark" />
<el-table-column :label="t('QualityManagement.ZjSchema.remark')" prop="remark" />
</el-table>
<template #footer>
<el-button @click="schemaDialogVisible = false"> </el-button>
<el-button type="primary" @click="confirmSelectSchema"> </el-button>
<el-button @click="schemaDialogVisible = false">
{{ t('common.cancel') }}
</el-button>
<el-button type="primary" @click="confirmSelectSchema">
{{ t('common.ok') }}
</el-button>
</template>
</el-dialog>
</template>
@ -140,12 +180,12 @@ const formData = ref<{ [key: string]: any }>({
})
const formRules = reactive({
code: [{ required: true, message: '单号不能为空', trigger: 'blur' }],
type: [{ required: true, message: '质检分类不能为空', trigger: 'change' }],
schemaId: [{ required: true, message: '检验方案不能为空', trigger: 'change' }],
ticket: [{ required: true, message: '工单不能为空', trigger: 'blur' }],
orgType: [{ required: true, message: '工序不能为空', trigger: 'change' }],
ticketType: [{ required: true, message: '工单类型不能为空', trigger: 'change' }],
code: [{ required: true, message: t('QualityManagement.ZjTask.validatorCodeRequired'), trigger: 'blur' }],
type: [{ required: true, message: t('QualityManagement.ZjTask.validatorTypeRequired'), trigger: 'change' }],
schemaId: [{ required: true, message: t('QualityManagement.ZjTask.validatorSchemaRequired'), trigger: 'change' }],
ticket: [{ required: true, message: t('QualityManagement.ZjTask.validatorTicketRequired'), trigger: 'blur' }],
orgType: [{ required: true, message: t('QualityManagement.ZjTask.validatorOrgTypeRequired'), trigger: 'change' }],
ticketType: [{ required: true, message: t('QualityManagement.ZjTask.validatorTicketTypeRequired'), trigger: 'change' }],
})
const formRef = ref()

@ -7,14 +7,54 @@
:show-overflow-tooltip="true"
:row-key="getRowKey"
>
<el-table-column type="index" label="序号" align="center" width="60" />
<el-table-column label="名称" align="center" prop="name" min-width="160" />
<el-table-column label="作业方式" align="center" prop="tool" min-width="120" />
<el-table-column label="标准值" align="center" prop="standardVal" min-width="100" />
<el-table-column label="单位" align="center" prop="unitName" min-width="80" />
<el-table-column label="上限值" align="center" prop="upperVal" min-width="100" />
<el-table-column label="下限值" align="center" prop="lowerVal" min-width="100" />
<el-table-column label="图片" align="center" prop="images" width="160">
<el-table-column
:label="t('QualityManagement.TicketResultDialog.index')"
type="index"
align="center"
width="60"
/>
<el-table-column
:label="t('QualityManagement.TicketResultDialog.inspectionItemName')"
align="center"
prop="name"
min-width="160"
/>
<el-table-column
:label="t('QualityManagement.TicketResultDialog.inspectionMethod')"
align="center"
prop="tool"
min-width="120"
/>
<el-table-column
:label="t('QualityManagement.TicketResultDialog.judgmentCriteria')"
align="center"
prop="standardVal"
min-width="100"
/>
<el-table-column
:label="t('QualityManagement.TicketResultDialog.unit')"
align="center"
prop="unitName"
min-width="80"
/>
<el-table-column
:label="t('QualityManagement.TicketResultDialog.upperVal')"
align="center"
prop="upperVal"
min-width="100"
/>
<el-table-column
:label="t('QualityManagement.TicketResultDialog.lowerVal')"
align="center"
prop="lowerVal"
min-width="100"
/>
<el-table-column
:label="t('QualityManagement.TicketResultDialog.images')"
align="center"
prop="images"
width="160"
>
<template #default="scope">
<UploadImg
v-if="String(scope.row.zjResult) === '0'"
@ -35,23 +75,44 @@
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" min-width="160" />
<el-table-column label="检验结果" align="center" prop="zjResult" width="120">
<el-table-column
:label="t('QualityManagement.TicketResultDialog.remark')"
align="center"
prop="remark"
min-width="160"
/>
<el-table-column
:label="t('QualityManagement.TicketResultDialog.inspectionResult')"
align="center"
prop="zjResult"
width="120"
>
<template #default="scope">
<el-tag v-if="String(scope.row.zjResult) === '0'" type="info"></el-tag>
<el-tag v-else-if="String(scope.row.zjResult) === '1'" type="success">通过</el-tag>
<el-tag v-else-if="String(scope.row.zjResult) === '2'" type="danger">不通过</el-tag>
<el-tag v-if="String(scope.row.zjResult) === '0'" type="info">
{{ t('QualityManagement.TicketResultDialog.inspectionResultPending') }}
</el-tag>
<el-tag v-else-if="String(scope.row.zjResult) === '1'" type="success">
{{ t('QualityManagement.TicketResultDialog.inspectionResultPass') }}
</el-tag>
<el-tag v-else-if="String(scope.row.zjResult) === '2'" type="danger">
{{ t('QualityManagement.TicketResultDialog.inspectionResultFail') }}
</el-tag>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="200" fixed="right">
<el-table-column
:label="t('QualityManagement.TicketResultDialog.operate')"
align="center"
width="200"
fixed="right"
>
<template #default="scope">
<el-radio-group
v-if="String(scope.row.zjResult) === '0'"
v-model="decisionMap[String(scope.row.id)]"
>
<el-radio :label="1">通过</el-radio>
<el-radio :label="2">不通过</el-radio>
<el-radio :label="1">{{ t('QualityManagement.TicketResultDialog.pass') }}</el-radio>
<el-radio :label="2">{{ t('QualityManagement.TicketResultDialog.fail') }}</el-radio>
</el-radio-group>
<span v-else>-</span>
</template>
@ -73,14 +134,16 @@
/>
<template #footer>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="dialogVisible = false">
{{ t('QualityManagement.TicketResultDialog.cancel') }}
</el-button>
<el-button
type="primary"
@click="handleSave"
:loading="submitLoading"
:disabled="submitLoading || !isAllSelected()"
>
{{ t('QualityManagement.TicketResultDialog.save') }}
</el-button>
</template>
</Dialog>
@ -92,8 +155,9 @@ import { ZjTaskApi } from '@/api/mes/zjtask'
defineOptions({ name: 'ZjTaskResultDialog' })
const { t } = useI18n()
const dialogVisible = ref(false)
const dialogTitle = ref('检验结果')
const dialogTitle = ref(t('QualityManagement.TicketResultDialog.moduleName'))
const loading = ref(false)
const submitLoading = ref(false)
@ -113,7 +177,7 @@ const queryParams = reactive({
const open = async (id: number) => {
dialogVisible.value = true
dialogTitle.value = '检验结果'
dialogTitle.value = t('QualityManagement.TicketResultDialog.moduleName')
taskId.value = id
for (const key of Object.keys(decisionMap)) delete decisionMap[key]
for (const key of Object.keys(imageMap)) delete imageMap[key]

@ -1,13 +1,23 @@
<template>
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="80px">
<el-form-item label="单号" prop="code">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item :label="t('QualityManagement.ZjTask.code')" prop="code">
<el-input
v-model="queryParams.code" placeholder="请输入单号" clearable @keyup.enter="handleQuery"
class="!w-240px" />
v-model="queryParams.code"
:placeholder="t('QualityManagement.ZjTask.placeholderCode')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="质检分类" prop="type">
<el-select v-model="queryParams.type" clearable filterable placeholder="请选择质检分类" class="!w-240px">
<el-form-item :label="t('QualityManagement.ZjTask.type')" prop="type">
<el-select
v-model="queryParams.type"
clearable
filterable
:placeholder="t('QualityManagement.ZjTask.placeholderType')"
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions('mes_zj_task_type')" :key="dict.value" :label="dict.label"
:value="dict.value" />
@ -18,43 +28,62 @@ v-for="dict in getStrDictOptions('mes_zj_task_type')" :key="dict.value" :label="
v-model="queryParams.ticket" placeholder="请输入工单" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item> -->
<el-form-item label="工序" prop="orgType">
<el-select v-model="queryParams.orgType" clearable placeholder="请选择工序" class="!w-240px">
<el-form-item :label="t('QualityManagement.ZjTask.orgType')" prop="orgType">
<el-select
v-model="queryParams.orgType"
clearable
:placeholder="t('QualityManagement.ZjTask.placeholderOrgType')"
class="!w-240px"
>
<el-option v-for="item in orgTypeOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" clearable placeholder="请选择状态" class="!w-240px">
<el-form-item :label="t('QualityManagement.ZjTask.status')" prop="status">
<el-select
v-model="queryParams.status"
clearable
:placeholder="t('QualityManagement.ZjTask.placeholderStatus')"
class="!w-240px"
>
<el-option
v-for="opt in getStrDictOptions('job_status')" :key="String(opt.value)" :label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
<el-form-item label="结果" prop="result">
<el-form-item :label="t('QualityManagement.ZjTask.result')" prop="result">
<el-input
v-model="queryParams.result" placeholder="请输入结果" clearable @keyup.enter="handleQuery"
class="!w-240px" />
v-model="queryParams.result"
:placeholder="t('QualityManagement.ZjTask.placeholderResult')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-form-item :label="t('QualityManagement.ZjTask.createTime')" prop="createTime">
<el-date-picker
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
start-placeholder="开始日期" end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-260px" />
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
:start-placeholder="t('QualityManagement.ZjTask.placeholderCreateTimeStart')"
:end-placeholder="t('QualityManagement.ZjTask.placeholderCreateTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-260px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
<Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
<Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}
</el-button>
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['mes:zj-task:create']">
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.create') }}
</el-button>
<el-button
type="success" plain @click="handleExport" :loading="exportLoading"
v-hasPermi="['mes:zj-task:export']">
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
</el-form-item>
</el-form>
@ -70,44 +99,54 @@ type="success" plain @click="handleExport" :loading="exportLoading"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" fixed="left" reserve-selection />
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="单号" align="center" prop="code" />
<el-table-column label="质检分类" align="center">
<el-table-column :label="t('QualityManagement.ZjTask.index')" type="index" width="80" />
<el-table-column :label="t('QualityManagement.ZjTask.code')" align="center" prop="code" />
<el-table-column :label="t('QualityManagement.ZjTask.type')" align="center">
<template #default="scope">
<DictTag type="mes_zj_task_type" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<el-table-column :label="t('QualityManagement.ZjTask.status')" align="center" prop="status">
<template #default="scope">
<DictTag :type="'job_status'" :value="scope.row.status" />
</template>
</el-table-column>
<el-table-column label="工单" align="center" prop="ticketCode" />
<el-table-column label="工序" align="center" prop="orgType">
<el-table-column :label="t('QualityManagement.ZjTask.ticketCode')" align="center" prop="ticketCode" />
<el-table-column :label="t('QualityManagement.ZjTask.orgType')" align="center" prop="orgType">
<template #default="scope">
<DictTag :type="DICT_TYPE.MES_ORG_TYPE" :value="scope.row.orgType" />
</template>
</el-table-column>
<el-table-column label="检验方案" align="center" prop="schemaName" />
<el-table-column label="负责人" align="center" prop="managerName" />
<el-table-column label="执行人" align="center" prop="executorName" />
<el-table-column label="执行时间" align="center" prop="executeTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="结果" align="center" prop="result">
<el-table-column :label="t('QualityManagement.ZjTask.schemaName')" align="center" prop="schemaName" />
<el-table-column :label="t('QualityManagement.ZjTask.managerName')" align="center" prop="managerName" />
<el-table-column :label="t('QualityManagement.ZjTask.executorName')" align="center" prop="executorName" />
<el-table-column
:label="t('QualityManagement.ZjTask.executeTime')"
align="center"
prop="executeTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column :label="t('QualityManagement.ZjTask.remark')" align="center" prop="remark" />
<el-table-column :label="t('QualityManagement.ZjTask.result')" align="center" prop="result">
<template #default="scope">
<el-tag v-if="scope.row.result === '1' || scope.row.result === 1" type="success"></el-tag>
<el-tag v-else-if="scope.row.result === '2' || scope.row.result === 2" type="danger">不通过</el-tag>
<el-tag v-if="scope.row.result === '1' || scope.row.result === 1" type="success">
{{ t('QualityManagement.ZjTask.resultPass') }}
</el-tag>
<el-tag v-else-if="scope.row.result === '2' || scope.row.result === 2" type="danger">
{{ t('QualityManagement.ZjTask.resultFail') }}
</el-tag>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" min-width="160px">
<el-table-column :label="t('QualityManagement.ZjTask.operate')" align="center" min-width="160px">
<template #default="scope">
<el-button
link
type="warning"
@click.stop="handleRowClick(scope.row)"
>
检验
{{ t('QualityManagement.ZjTask.inspect') }}
</el-button>
<el-button
link
@ -115,7 +154,7 @@ type="success" plain @click="handleExport" :loading="exportLoading"
@click.stop="openForm('update', scope.row)"
v-hasPermi="['mes:zj-task:update']"
>
编辑
{{ t('action.update') }}
</el-button>
<el-button
link
@ -123,7 +162,7 @@ type="success" plain @click="handleExport" :loading="exportLoading"
@click.stop="handleDelete(scope.row.id)"
v-hasPermi="['mes:zj-task:delete']"
>
删除
{{ t('action.delete') }}
</el-button>
</template>
</el-table-column>
@ -233,7 +272,7 @@ const handleExport = async () => {
ids: selectedIds.value.length ? selectedIds.value.join(',') : undefined,
}
const data = await ZjTaskApi.exportZjTask(params)
download.excel(data, '检验任务.xls')
download.excel(data, t('QualityManagement.ZjTask.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -4,56 +4,83 @@
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
label-width="120px"
v-loading="formLoading"
>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
<el-form-item :label="t('QualityManagement.ZjItem.name')" prop="name">
<el-input
v-model="formData.name"
:placeholder="t('QualityManagement.ZjItem.placeholderName')"
/>
</el-form-item>
<el-form-item label="检验类型" prop="zjType">
<el-select
v-model="formData.zjType"
clearable
filterable
placeholder="请选择检验类型"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
<el-form-item :label="t('QualityManagement.ZjItem.zjType')" prop="zjType">
<el-select
v-model="formData.zjType"
clearable
filterable
:placeholder="t('QualityManagement.ZjItem.placeholderZjType')"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="作业方式" prop="tool">
<el-input v-model="formData.tool" placeholder="请输入作业方式" />
<el-form-item :label="t('QualityManagement.ZjItem.tool')" prop="tool">
<el-input
v-model="formData.tool"
:placeholder="t('QualityManagement.ZjItem.placeholderTool')"
/>
</el-form-item>
<el-form-item label="标准值" prop="standardVal">
<el-input v-model="formData.standardVal" placeholder="请输入标准值" />
<el-form-item :label="t('QualityManagement.ZjItem.standardVal')" prop="standardVal">
<el-input
v-model="formData.standardVal"
:placeholder="t('QualityManagement.ZjItem.placeholderStandardVal')"
/>
</el-form-item>
<el-form-item label="上限值" prop="upperVal">
<el-input v-model="formData.upperVal" placeholder="请输入上限值" />
<el-form-item :label="t('QualityManagement.ZjItem.upperVal')" prop="upperVal">
<el-input
v-model="formData.upperVal"
:placeholder="t('QualityManagement.ZjItem.placeholderUpperVal')"
/>
</el-form-item>
<el-form-item label="下限值" prop="lowerVal">
<el-input v-model="formData.lowerVal" placeholder="请输入下限值" />
<el-form-item :label="t('QualityManagement.ZjItem.lowerVal')" prop="lowerVal">
<el-input
v-model="formData.lowerVal"
:placeholder="t('QualityManagement.ZjItem.placeholderLowerVal')"
/>
</el-form-item>
<el-form-item label="单位" prop="unitId">
<el-select v-model="formData.unit" clearable placeholder="请选择单位" class="w-1/1">
<el-option
v-for="unit in unitList"
:key="unit.id"
:label="unit.name"
:value="unit.id"
/>
</el-select>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
<el-form-item :label="t('QualityManagement.ZjItem.unit')" prop="unitId">
<el-select
v-model="formData.unit"
clearable
:placeholder="t('QualityManagement.ZjItem.placeholderUnit')"
class="w-1/1"
>
<el-option
v-for="unit in unitList"
:key="unit.id"
:label="unit.name"
:value="unit.id"
/>
</el-select>
</el-form-item>
<el-form-item :label="t('QualityManagement.ZjItem.remark')" prop="remark">
<el-input
v-model="formData.remark"
:placeholder="t('QualityManagement.ZjItem.placeholderRemark')"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">
{{ t('common.ok') }}
</el-button>
<el-button @click="dialogVisible = false">
{{ t('common.cancel') }}
</el-button>
</template>
</Dialog>
</template>
@ -86,8 +113,8 @@ const formData = ref({
lowerVal: undefined,
})
const formRules = reactive({
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
zjType: [{ required: true, message: '检验类型不能为空', trigger: 'blur' }]
name: [{ required: true, message: t('QualityManagement.ZjItem.validatorNameRequired'), trigger: 'blur' }],
zjType: [{ required: true, message: t('QualityManagement.ZjItem.validatorZjTypeRequired'), trigger: 'blur' }]
})
const formRef = ref() // Ref
@ -153,4 +180,4 @@ const resetForm = () => {
}
</script>
</script>

@ -1,42 +1,57 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="检验类型" prop="zjType">
<el-select v-model="queryParams.zjType" clearable filterable placeholder="请选择检验类型" class="!w-240px">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" min-label-width="110px">
<el-form-item :label="t('QualityManagement.ZjItem.zjType')" prop="zjType">
<el-select
v-model="queryParams.zjType"
clearable
filterable
:placeholder="t('QualityManagement.ZjItem.placeholderZjType')"
class="!w-240px"
>
<el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-form-item :label="t('QualityManagement.ZjItem.name')" prop="name">
<el-input
v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery"
v-model="queryParams.name"
:placeholder="t('QualityManagement.ZjItem.placeholderName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('QualityManagement.ZjItem.remark')" prop="remark">
<el-input
v-model="queryParams.remark" placeholder="请输入备注" clearable @keyup.enter="handleQuery"
v-model="queryParams.remark"
:placeholder="t('QualityManagement.ZjItem.placeholderRemark')"
clearable
@keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-form-item :label="t('QualityManagement.ZjItem.createTime')" prop="createTime">
<el-date-picker
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
start-placeholder="开始日期" end-placeholder="结束日期"
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
:start-placeholder="t('QualityManagement.ZjItem.placeholderCreateTimeStart')"
:end-placeholder="t('QualityManagement.ZjItem.placeholderCreateTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-220px" />
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
<Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
<Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}
</el-button>
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['mes:zj-item:create']">
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.create') }}
</el-button>
<el-button
type="success" plain @click="handleExport" :loading="exportLoading"
v-hasPermi="['mes:zj-item:export']">
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
</el-form-item>
</el-form>
@ -54,26 +69,32 @@ type="success" plain @click="handleExport" :loading="exportLoading"
>
<el-table-column type="selection" width="55" fixed="left" reserve-selection />
<!-- <el-table-column label="ID" align="center" prop="id" /> -->
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="作业方式" align="center" prop="tool" />
<el-table-column label="检验类型" align="center" prop="zjTypeName">
<el-table-column :label="t('QualityManagement.ZjItem.name')" align="center" prop="name" />
<el-table-column :label="t('QualityManagement.ZjItem.tool')" align="center" prop="tool" />
<el-table-column :label="t('QualityManagement.ZjItem.zjType')" align="center" prop="zjTypeName">
<template #default="scope">
<el-tag>{{ scope.row.zjTypeName }}</el-tag>
</template>
</el-table-column>
<el-table-column label="标准值" align="center" prop="standardVal" />
<el-table-column label="上限值" align="center" prop="upperVal" />
<el-table-column label="下限值" align="center" prop="lowerVal" />
<el-table-column label="单位" align="center" prop="unitName" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="操作" align="center" min-width="120px">
<el-table-column :label="t('QualityManagement.ZjItem.standardVal')" align="center" prop="standardVal" />
<el-table-column :label="t('QualityManagement.ZjItem.upperVal')" align="center" prop="upperVal" />
<el-table-column :label="t('QualityManagement.ZjItem.lowerVal')" align="center" prop="lowerVal" />
<el-table-column :label="t('QualityManagement.ZjItem.unit')" align="center" prop="unitName" />
<el-table-column :label="t('QualityManagement.ZjItem.remark')" align="center" prop="remark" />
<el-table-column
:label="t('QualityManagement.ZjItem.createTime')"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column :label="t('QualityManagement.ZjItem.operate')" align="center" min-width="120px">
<template #default="scope">
<el-button link type="primary" @click="openForm('update', scope.row.id)" v-hasPermi="['mes:zj-item:update']">
编辑
{{ t('action.update') }}
</el-button>
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['mes:zj-item:delete']">
删除
{{ t('action.delete') }}
</el-button>
</template>
</el-table-column>
@ -182,7 +203,7 @@ const handleExport = async () => {
ids: selectedIds.value.length ? selectedIds.value.join(',') : undefined,
}
const data = await ZjItemApi.exportZjItem(params)
download.excel(data, '质量管理-检验项目.xls')
download.excel(data, t('QualityManagement.ZjItem.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -129,4 +129,4 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
</script>
</script>

@ -244,4 +244,4 @@ const handleExport = async () => {
// onMounted(() => {
// getList()
// })
</script>
</script>

@ -76,4 +76,4 @@ const getList = async () => {
onMounted(() => {
getList()
})
</script>
</script>

@ -1,67 +1,101 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="120px"
v-loading="formLoading"
>
<el-form-item :label="t('QualityManagement.ZjSchema.name')" prop="name">
<el-input
v-model="formData.name"
:placeholder="t('QualityManagement.ZjSchema.placeholderName')"
/>
</el-form-item>
<el-form-item label="类型" prop="type">
<el-form-item :label="t('QualityManagement.ZjSchema.type')" prop="type">
<el-radio-group v-model="formData.type">
<el-radio v-for="dict in getDictOptions('mes_zj_schema_type')" :key="dict.value" :label="dict.value">
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="isSampleType" label="抽检方式" prop="sampleMethod">
<el-form-item v-if="isSampleType" :label="t('QualityManagement.ZjSchema.sampleMethod')" prop="sampleMethod">
<el-radio-group v-model="formData.sampleMethod">
<el-radio v-for="dict in getDictOptions('mes_zj_schema_sample_method')" :key="dict.value" :label="dict.value">
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="isSampleType" label="值" prop="val">
<el-form-item v-if="isSampleType" :label="t('QualityManagement.ZjSchema.val')" prop="val">
<template v-if="isRateMethod">
<el-input-number v-model="rateVal" :min="0" class="!w-160px" />
<span class="ml-8px">%</span>
</template>
<template v-else-if="isGapMethod">
<span>每间隔</span>
<span>{{ t('QualityManagement.ZjSchema.val') }}</span>
<el-input-number v-model="gapInterval" :min="1" class="!w-120px mx-8px" :controls="false" />
<span>抽取</span>
<span>{{ t('QualityManagement.ZjSchema.val') }}</span>
<el-input-number v-model="gapCount" :min="1" class="!w-120px ml-8px" :controls="false" />
</template>
<template v-else>
<el-input v-model="formData.val" placeholder="请输入值" />
<el-input
v-model="formData.val"
:placeholder="t('QualityManagement.ZjSchema.placeholderVal')"
/>
</template>
</el-form-item>
<el-form-item label="关联项目" prop="item">
<el-form-item :label="t('QualityManagement.ZjSchema.item')" prop="item">
<el-row :gutter="8" class="w-full">
<el-col :span="22">
<el-input :model-value="displayItemNames" placeholder="请选择检验项目" readonly />
<el-input
:model-value="displayItemNames"
:placeholder="t('QualityManagement.ZjSchema.placeholderItem')"
readonly
/>
</el-col>
<el-col :span="2" class="text-right">
<el-button type="primary" @click="openItemDialog"></el-button>
<el-button type="primary" @click="openItemDialog">
{{ t('action.select') }}
</el-button>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
<el-form-item :label="t('QualityManagement.ZjSchema.remark')" prop="remark">
<el-input
v-model="formData.remark"
:placeholder="t('QualityManagement.ZjSchema.placeholderRemark')"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">
{{ t('common.ok') }}
</el-button>
<el-button @click="dialogVisible = false">
{{ t('common.cancel') }}
</el-button>
</template>
</Dialog>
<el-dialog v-model="itemDialogVisible" title="选择检验项目" width="920px" draggable>
<el-dialog
v-model="itemDialogVisible"
:title="t('QualityManagement.ZjSchema.selectItemDialogTitle')"
width="920px"
draggable
>
<div v-loading="itemLoading">
<div class="formula-config-picklist">
<div class="formula-config-panel">
<div class="formula-config-panel__header">
<div>来源</div>
<div>{{ t('QualityManagement.ZjSchema.source') }}</div>
<div class="formula-config-panel__meta">{{ filteredSourceItems.length }}</div>
</div>
<div class="formula-config-panel__filter">
<el-input v-model="sourceKeyword" placeholder="筛选" clearable />
<el-input
v-model="sourceKeyword"
:placeholder="t('QualityManagement.ZjSchema.filterPlaceholder')"
clearable
/>
</div>
<el-table
class="formula-config-panel__table"
@ -71,8 +105,8 @@
@selection-change="handleSourceSelectionChange"
>
<el-table-column type="selection" width="44" />
<el-table-column label="名称" prop="name" />
<el-table-column label="检验类型">
<el-table-column :label="t('QualityManagement.ZjItem.name')" prop="name" />
<el-table-column :label="t('QualityManagement.ZjItem.zjType')">
<template #default="scope">
{{ scope.row.zjTypeName }}
</template>
@ -91,11 +125,15 @@
<div class="formula-config-panel">
<div class="formula-config-panel__header">
<div>目标</div>
<div>{{ t('QualityManagement.ZjSchema.target') }}</div>
<div class="formula-config-panel__meta">{{ filteredTargetItems.length }}</div>
</div>
<div class="formula-config-panel__filter">
<el-input v-model="targetKeyword" placeholder="筛选" clearable />
<el-input
v-model="targetKeyword"
:placeholder="t('QualityManagement.ZjSchema.filterPlaceholder')"
clearable
/>
</div>
<el-table
class="formula-config-panel__table"
@ -105,8 +143,8 @@
@selection-change="handleTargetSelectionChange"
>
<el-table-column type="selection" width="44" />
<el-table-column label="名称" prop="name" />
<el-table-column label="检验类型">
<el-table-column :label="t('QualityManagement.ZjItem.name')" prop="name" />
<el-table-column :label="t('QualityManagement.ZjItem.zjType')">
<template #default="scope">
{{ scope.row.zjTypeName }}
</template>
@ -116,8 +154,12 @@
</div>
</div>
<template #footer>
<el-button @click="itemDialogVisible = false"> </el-button>
<el-button type="primary" @click="confirmSelectItems"> </el-button>
<el-button @click="itemDialogVisible = false">
{{ t('common.cancel') }}
</el-button>
<el-button type="primary" @click="confirmSelectItems">
{{ t('common.ok') }}
</el-button>
</template>
</el-dialog>
</template>
@ -156,9 +198,11 @@ const targetKeyword = ref('')
const sourceCheckedKeys = ref<number[]>([])
const targetCheckedKeys = ref<number[]>([])
const formRules = reactive({
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
type: [{ required: true, message: '类型不能为空', trigger: 'change' }],
sampleMethod: [{ required: true, message: '抽检方式不能为空', trigger: 'change' }],
name: [{ required: true, message: t('QualityManagement.ZjSchema.validatorNameRequired'), trigger: 'blur' }],
type: [{ required: true, message: t('QualityManagement.ZjSchema.validatorTypeRequired'), trigger: 'change' }],
sampleMethod: [
{ required: true, message: t('QualityManagement.ZjSchema.validatorSampleMethodRequired'), trigger: 'change' },
],
val: [{ validator: (_: any, __: any, callback: any) => validateVal(callback), trigger: 'blur' }],
})
const formRef = ref() // Ref
@ -221,20 +265,20 @@ const validateVal = (callback: any) => {
callback()
return
}
if (isRateMethod.value) {
if (rateVal.value === undefined || rateVal.value === null) {
callback(new Error('值不能为空'))
return
}
} else if (isGapMethod.value) {
if (!gapInterval.value || !gapCount.value) {
callback(new Error('值不能为空'))
if (isRateMethod.value) {
if (rateVal.value === undefined || rateVal.value === null) {
callback(new Error(t('QualityManagement.ZjSchema.validatorValRequired')))
return
}
} else if (isGapMethod.value) {
if (!gapInterval.value || !gapCount.value) {
callback(new Error(t('QualityManagement.ZjSchema.validatorValRequired')))
return
}
} else if (!formData.value.val) {
callback(new Error(t('QualityManagement.ZjSchema.validatorValRequired')))
return
}
} else if (!formData.value.val) {
callback(new Error('值不能为空'))
return
}
callback()
}

@ -1,59 +1,92 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="名称" prop="name">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item :label="t('QualityManagement.ZjSchema.name')" prop="name">
<el-input
v-model="queryParams.name" placeholder="请输入名称" clearable @keyup.enter="handleQuery"
class="!w-240px" />
v-model="queryParams.name"
:placeholder="t('QualityManagement.ZjSchema.placeholderName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择类型" clearable class="!w-240px">
<el-form-item :label="t('QualityManagement.ZjSchema.type')" prop="type">
<el-select
v-model="queryParams.type"
:placeholder="t('QualityManagement.ZjSchema.placeholderType')"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getDictOptions('mes_zj_schema_type')" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="抽检方式" prop="sampleMethod">
<el-select v-model="queryParams.sampleMethod" placeholder="请选择抽检方式" clearable class="!w-240px">
<el-form-item :label="t('QualityManagement.ZjSchema.sampleMethod')" prop="sampleMethod">
<el-select
v-model="queryParams.sampleMethod"
:placeholder="t('QualityManagement.ZjSchema.placeholderSampleMethod')"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getDictOptions('mes_zj_schema_sample_method')" :key="dict.value" :label="dict.label"
:value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="值" prop="val">
<el-input v-model="queryParams.val" placeholder="请输入值" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item :label="t('QualityManagement.ZjSchema.val')" prop="val">
<el-input
v-model="queryParams.val"
:placeholder="t('QualityManagement.ZjSchema.placeholderVal')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('QualityManagement.ZjSchema.remark')" prop="remark">
<el-input
v-model="queryParams.remark" placeholder="请输入备注" clearable @keyup.enter="handleQuery"
class="!w-240px" />
v-model="queryParams.remark"
:placeholder="t('QualityManagement.ZjSchema.placeholderRemark')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="关联项目" prop="item">
<el-form-item :label="t('QualityManagement.ZjSchema.item')" prop="item">
<el-input
v-model="queryParams.item" placeholder="请输入关联项目" clearable @keyup.enter="handleQuery"
class="!w-240px" />
v-model="queryParams.item"
:placeholder="t('QualityManagement.ZjSchema.placeholderItem')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-form-item :label="t('QualityManagement.ZjSchema.createTime')" prop="createTime">
<el-date-picker
v-model="queryParams.createTime" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
start-placeholder="开始日期" end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-220px" />
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
:start-placeholder="t('QualityManagement.ZjSchema.placeholderCreateTimeStart')"
:end-placeholder="t('QualityManagement.ZjSchema.placeholderCreateTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
<Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
<Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}
</el-button>
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['mes:zj-schema:create']">
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.create') }}
</el-button>
<el-button
type="success" plain @click="handleExport" :loading="exportLoading"
v-hasPermi="['mes:zj-schema:export']">
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
</el-form-item>
</el-form>
@ -73,45 +106,54 @@ type="success" plain @click="handleExport" :loading="exportLoading"
<el-table-column type="expand">
<template #default="scope">
<el-table
v-loading="scope.row._itemLoading" :data="scope.row._items || []" size="small"
:show-overflow-tooltip="true">
<el-table-column label="名称" prop="name" align="center" />
<el-table-column label="作业方式" prop="tool" align="center" />
<el-table-column label="标准值" prop="standardVal" align="center" />
<el-table-column label="单位" prop="unitName" align="center" />
<el-table-column label="上限值" prop="upperVal" align="center" />
<el-table-column label="下限值" prop="lowerVal" align="center" />
<el-table-column label="备注" prop="remark" align="center" />
v-loading="scope.row._itemLoading"
:data="scope.row._items || []"
size="small"
:show-overflow-tooltip="true"
>
<el-table-column :label="t('QualityManagement.ZjItem.name')" prop="name" align="center" />
<el-table-column :label="t('QualityManagement.ZjItem.tool')" prop="tool" align="center" />
<el-table-column :label="t('QualityManagement.ZjItem.standardVal')" prop="standardVal" align="center" />
<el-table-column :label="t('QualityManagement.ZjItem.unit')" prop="unitName" align="center" />
<el-table-column :label="t('QualityManagement.ZjItem.upperVal')" prop="upperVal" align="center" />
<el-table-column :label="t('QualityManagement.ZjItem.lowerVal')" prop="lowerVal" align="center" />
<el-table-column :label="t('QualityManagement.ZjItem.remark')" prop="remark" align="center" />
</el-table>
</template>
</el-table-column>
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="类型" align="center" prop="type">
<el-table-column :label="t('QualityManagement.ZjSchema.name')" align="center" prop="name" />
<el-table-column :label="t('QualityManagement.ZjSchema.type')" align="center" prop="type">
<template #default="scope">
<dict-tag type="mes_zj_schema_type" :value="scope.row.type" />
</template>
</el-table-column>
<el-table-column label="抽检方式" align="center" prop="sampleMethod">
<el-table-column :label="t('QualityManagement.ZjSchema.sampleMethod')" align="center" prop="sampleMethod">
<template #default="scope">
<dict-tag type="mes_zj_schema_sample_method" :value="scope.row.sampleMethod" />
</template>
</el-table-column>
<el-table-column label="值" align="center" prop="val">
<el-table-column :label="t('QualityManagement.ZjSchema.val')" align="center" prop="val">
<template #default="scope">
{{ formatValDisplay(scope.row.val) }}
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="操作" align="center" min-width="120px">
<el-table-column :label="t('QualityManagement.ZjSchema.remark')" align="center" prop="remark" />
<el-table-column
:label="t('QualityManagement.ZjSchema.createTime')"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column :label="t('QualityManagement.ZjSchema.operate')" align="center" min-width="120px">
<template #default="scope">
<el-button
link type="primary" @click="openForm('update', scope.row.id)"
v-hasPermi="['mes:zj-schema:update']">
编辑
{{ t('action.update') }}
</el-button>
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['mes:zj-schema:delete']">
删除
{{ t('action.delete') }}
</el-button>
</template>
</el-table-column>
@ -230,7 +272,7 @@ const handleExport = async () => {
ids: selectedIds.value.length ? selectedIds.value.join(',') : undefined,
}
const data = await ZjSchemaApi.exportZjSchema(params)
download.excel(data, '检验方案.xls')
download.excel(data, t('QualityManagement.ZjSchema.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -4,22 +4,36 @@
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
label-width="120px"
v-loading="formLoading"
>
<el-form-item label="编码" prop="code">
<el-input v-model="formData.code" placeholder="请输入编码" :disabled = "formType == 'update'"/>
<el-form-item :label="t('QualityManagement.ZjType.code')" prop="code">
<el-input
v-model="formData.code"
:placeholder="t('QualityManagement.ZjType.placeholderCode')"
:disabled="formType == 'update'"
/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
<el-form-item :label="t('QualityManagement.ZjType.name')" prop="name">
<el-input
v-model="formData.name"
:placeholder="t('QualityManagement.ZjType.placeholderName')"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" placeholder="请输入备注" />
<el-form-item :label="t('QualityManagement.ZjType.remark')" prop="remark">
<el-input
v-model="formData.remark"
:placeholder="t('QualityManagement.ZjType.placeholderRemark')"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">
{{ t('common.ok') }}
</el-button>
<el-button @click="dialogVisible = false">
{{ t('common.cancel') }}
</el-button>
</template>
</Dialog>
</template>
@ -43,8 +57,8 @@ const formData = ref({
remark: undefined,
})
const formRules = reactive({
code: [{ required: true, message: '编码不能为空', trigger: 'blur' }],
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
code: [{ required: true, message: t('QualityManagement.ZjType.validatorCodeRequired'), trigger: 'blur' }],
name: [{ required: true, message: t('QualityManagement.ZjType.validatorNameRequired'), trigger: 'blur' }],
})
const formRef = ref() // Ref
@ -100,4 +114,4 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
</script>
</script>

@ -6,56 +6,56 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
label-width="110px"
>
<el-form-item label="编码" prop="code">
<el-form-item :label="t('QualityManagement.ZjType.code')" prop="code">
<el-input
v-model="queryParams.code"
placeholder="请输入编码"
:placeholder="t('QualityManagement.ZjType.placeholderCode')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="名称" prop="name">
<el-form-item :label="t('QualityManagement.ZjType.name')" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入名称"
:placeholder="t('QualityManagement.ZjType.placeholderName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-form-item :label="t('QualityManagement.ZjType.remark')" prop="remark">
<el-input
v-model="queryParams.remark"
placeholder="请输入备注"
:placeholder="t('QualityManagement.ZjType.placeholderRemark')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-form-item :label="t('QualityManagement.ZjType.createTime')" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="t('QualityManagement.ZjType.placeholderCreateTimeStart')"
:end-placeholder="t('QualityManagement.ZjType.placeholderCreateTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}</el-button>
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['mes:zj-type:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('action.add') }}
</el-button>
<el-button
type="success"
@ -64,7 +64,7 @@
:loading="exportLoading"
v-hasPermi="['mes:zj-type:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
</el-button>
</el-form-item>
</el-form>
@ -82,17 +82,17 @@
>
<el-table-column type="selection" width="55" fixed="left" reserve-selection />
<!-- <el-table-column label="ID" align="center" prop="id" /> -->
<el-table-column label="编码" align="center" prop="code" />
<el-table-column label="名称" align="center" prop="name" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column :label="t('QualityManagement.ZjType.code')" align="center" prop="code" />
<el-table-column :label="t('QualityManagement.ZjType.name')" align="center" prop="name" />
<el-table-column :label="t('QualityManagement.ZjType.remark')" align="center" prop="remark" />
<el-table-column
label="创建时间"
:label="t('QualityManagement.ZjType.createTime')"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px">
<el-table-column :label="t('QualityManagement.ZjType.operate')" align="center" min-width="120px">
<template #default="scope">
<el-button
link
@ -100,7 +100,7 @@
@click="openForm('update', scope.row.id)"
v-hasPermi="['mes:zj-type:update']"
>
编辑
{{ t('action.edit') }}
</el-button>
<el-button
link
@ -108,7 +108,7 @@
@click="handleDelete(scope.row.id)"
v-hasPermi="['mes:zj-type:delete']"
>
删除
{{ t('action.del') }}
</el-button>
</template>
</el-table-column>
@ -212,7 +212,7 @@ const handleExport = async () => {
ids: selectedIds.value.length ? selectedIds.value.join(',') : undefined,
}
const data = await ZjTypeApi.exportZjType(params)
download.excel(data, '质量管理-检验类型.xls')
download.excel(data, t('QualityManagement.ZjType.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -4,29 +4,51 @@
ref="formRef"
:model="formData"
:rules="formRules"
label-width="100px"
label-width="110px"
v-loading="formLoading"
>
<el-form-item label="项目编码" prop="subjectCode">
<el-input v-model="formData.subjectCode" placeholder="请输入项目编码" />
<el-form-item :label="t('MoldManagement.MoldInspectionItems.code')" prop="subjectCode">
<el-input
v-model="formData.subjectCode"
:placeholder="t('MoldManagement.MoldInspectionItems.placeholderSubjectCode')"
/>
</el-form-item>
<el-form-item label="项目名称" prop="subjectName">
<el-input v-model="formData.subjectName" placeholder="请输入项目名称" />
<el-form-item :label="t('MoldManagement.MoldInspectionItems.name')" prop="subjectName">
<el-input
v-model="formData.subjectName"
:placeholder="t('MoldManagement.MoldInspectionItems.placeholderSubjectName')"
/>
</el-form-item>
<el-form-item label="检验方式" prop="inspectionMethod">
<el-select v-model="formData.inspectionMethod" placeholder="请选择检验方式" clearable filterable class="!w-full">
<el-form-item :label="t('MoldManagement.MoldInspectionItems.inspectionMethod')" prop="inspectionMethod">
<el-select
v-model="formData.inspectionMethod"
:placeholder="t('MoldManagement.MoldInspectionItems.placeholderInspectionMethod')"
clearable
filterable
class="!w-full"
>
<el-option v-for="dict in inspectionMethodOptions" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="值类型" prop="valueType">
<el-select v-model="formData.valueType" placeholder="请选择值类型" clearable filterable class="!w-full">
<el-form-item :label="t('MoldManagement.MoldInspectionItems.valueType')" prop="valueType">
<el-select
v-model="formData.valueType"
:placeholder="t('MoldManagement.MoldInspectionItems.placeholderValueType')"
clearable
filterable
class="!w-full"
>
<el-option v-for="dict in valueTypeOptions" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
<el-form-item label="判定基准" prop="judgmentCriteria">
<el-input v-model="formData.judgmentCriteria" placeholder="请输入判定基准" type="textarea" />
<el-form-item :label="t('MoldManagement.MoldInspectionItems.judgmentCriteria')" prop="judgmentCriteria">
<el-input
v-model="formData.judgmentCriteria"
:placeholder="t('MoldManagement.MoldInspectionItems.placeholderJudgmentCriteriaForm')"
type="textarea"
/>
</el-form-item>
<el-form-item label="是否启用" prop="isEnable">
<el-form-item :label="t('MoldManagement.MoldInspectionItems.isEnable')" prop="isEnable">
<el-radio-group v-model="formData.isEnable">
<el-radio v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)" :key="dict.value" :label="dict.value">
{{ dict.label }}
@ -35,8 +57,8 @@
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">{{ t('action.save') }}</el-button>
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
</template>
</Dialog>
</template>
@ -71,12 +93,24 @@ const formData = ref({
judgmentCriteria: undefined,
})
const formRules = reactive({
subjectCode: [{ required: true, message: '项目编码不能为空', trigger: 'blur' }],
subjectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
inspectionMethod: [{ required: true, message: '检验方式不能为空', trigger: 'change' }],
valueType: [{ required: true, message: '值类型不能为空', trigger: 'change' }],
judgmentCriteria: [{ required: true, message: '判定基准不能为空', trigger: 'blur' }],
isEnable: [{ required: true, message: '是否启用不能为空', trigger: 'change' }],
subjectCode: [
{ required: true, message: t('MoldManagement.MoldInspectionItems.validatorSubjectCodeRequired'), trigger: 'blur' }
],
subjectName: [
{ required: true, message: t('MoldManagement.MoldInspectionItems.validatorSubjectNameRequired'), trigger: 'blur' }
],
inspectionMethod: [
{ required: true, message: t('MoldManagement.MoldInspectionItems.validatorInspectionMethodRequired'), trigger: 'change' }
],
valueType: [
{ required: true, message: t('MoldManagement.MoldInspectionItems.validatorValueTypeRequired'), trigger: 'change' }
],
judgmentCriteria: [
{ required: true, message: t('MoldManagement.MoldInspectionItems.validatorJudgmentCriteriaRequired'), trigger: 'blur' }
],
isEnable: [
{ required: true, message: t('MoldManagement.MoldInspectionItems.validatorIsEnableRequired'), trigger: 'change' }
],
})
const formRef = ref() // Ref
@ -148,4 +182,3 @@ const resetForm = () => {
formRef.value?.resetFields()
}
</script>

@ -1,39 +1,39 @@
<template>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="编码" prop="subjectCode">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" min-label-width="110px">
<el-form-item :label="t('MoldManagement.MoldInspectionItems.code')" prop="subjectCode">
<el-input
v-model="queryParams.subjectCode" placeholder="请输入编码" clearable @keyup.enter="handleQuery"
v-model="queryParams.subjectCode" :placeholder="t('MoldManagement.MoldInspectionItems.placeholderCode')" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="名称" prop="subjectName">
<el-form-item :label="t('MoldManagement.MoldInspectionItems.name')" prop="subjectName">
<el-input
v-model="queryParams.subjectName" placeholder="请输入名称" clearable @keyup.enter="handleQuery"
v-model="queryParams.subjectName" :placeholder="t('MoldManagement.MoldInspectionItems.placeholderName')" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="判定基准" prop="judgmentCriteria">
<el-form-item :label="t('MoldManagement.MoldInspectionItems.judgmentCriteria')" prop="judgmentCriteria">
<el-input
v-model="queryParams.judgmentCriteria" placeholder="请输入判定基准" clearable @keyup.enter="handleQuery"
v-model="queryParams.judgmentCriteria" :placeholder="t('MoldManagement.MoldInspectionItems.placeholderJudgmentCriteria')" clearable @keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
<Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
<Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}
</el-button>
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['mes:dv-subject:create']">
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('MoldManagement.MoldInspectionItems.add') }}
</el-button>
<el-button type="danger" plain @click="handleBatchDelete" v-hasPermi="['mes:dv-subject:delete']">
<Icon icon="ep:delete" class="mr-5px" /> 批量删除
<Icon icon="ep:delete" class="mr-5px" /> {{ t('MoldManagement.MoldInspectionItems.batchDelete') }}
</el-button>
<el-button
type="success" plain @click="handleExport" :loading="exportLoading"
v-hasPermi="['mes:dv-subject:export']">
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('MoldManagement.MoldInspectionItems.export') }}
</el-button>
</el-form-item>
</el-form>
@ -45,14 +45,14 @@ type="success" plain @click="handleExport" :loading="exportLoading"
ref="tableRef" v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" row-key="id"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" fixed="left" reserve-selection />
<el-table-column label="序号" align="center" width="80" fixed="left">
<el-table-column :label="t('MoldManagement.MoldInspectionItems.index')" align="center" width="80" fixed="left">
<template #default="scope">
{{ (queryParams.pageNo - 1) * queryParams.pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="编码" align="center" prop="subjectCode" />
<el-table-column label="名称" align="center" prop="subjectName" />
<el-table-column label="检验方式" align="center" prop="inspectionMethod" width="120px">
<el-table-column :label="t('MoldManagement.MoldInspectionItems.code')" align="center" prop="subjectCode" />
<el-table-column :label="t('MoldManagement.MoldInspectionItems.name')" align="center" prop="subjectName" />
<el-table-column :label="t('MoldManagement.MoldInspectionItems.inspectionMethod')" align="center" prop="inspectionMethod" width="120px">
<template #default="scope">
<el-tag
effect="light" :type="getTagType('Inspection_method', scope.row.inspectionMethod)"
@ -62,7 +62,7 @@ effect="light" :type="getTagType('Inspection_method', scope.row.inspectionMethod
</el-tag>
</template>
</el-table-column>
<el-table-column label="值类型" align="center" prop="valueType" width="120px">
<el-table-column :label="t('MoldManagement.MoldInspectionItems.valueType')" align="center" prop="valueType" width="120px">
<template #default="scope">
<el-tag
effect="light" :type="getTagType('value_types', scope.row.valueType)"
@ -72,18 +72,18 @@ effect="light" :type="getTagType('value_types', scope.row.valueType)"
</el-tag>
</template>
</el-table-column>
<el-table-column label="判定基准" align="center" prop="judgmentCriteria" />
<el-table-column label="创建人" align="center" prop="creatorName" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column label="操作" align="center" fixed="right" width="160px">
<el-table-column :label="t('MoldManagement.MoldInspectionItems.judgmentCriteria')" align="center" prop="judgmentCriteria" />
<el-table-column :label="t('MoldManagement.MoldInspectionItems.creatorName')" align="center" prop="creatorName" />
<el-table-column :label="t('MoldManagement.MoldInspectionItems.createTime')" align="center" prop="createTime" :formatter="dateFormatter" width="180px" />
<el-table-column :label="t('MoldManagement.MoldInspectionItems.operate')" align="center" fixed="right" width="160px">
<template #default="scope">
<el-button
link type="primary" @click="openForm('update', scope.row.id)"
v-hasPermi="['mes:dv-subject:update']">
编辑
{{ t('MoldManagement.MoldInspectionItems.edit') }}
</el-button>
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['mes:dv-subject:delete']">
删除
{{ t('MoldManagement.MoldInspectionItems.delete') }}
</el-button>
</template>
</el-table-column>
@ -218,7 +218,7 @@ const handleDelete = async (ids: number | number[]) => {
const handleBatchDelete = async () => {
if (!selectedIds.value.length) {
message.error('请选择需要删除的数据')
message.error(t('MoldManagement.MoldInspectionItems.selectDeleteTip'))
return
}
await handleDelete(selectedIds.value)
@ -234,7 +234,7 @@ const handleExport = async () => {
ids: selectedIds.value.length ? selectedIds.value.join(',') : undefined,
}
const data = await DvSubjectApi.exportDvSubject(params)
download.excel(data, '维保项目.xls')
download.excel(data, t('MoldManagement.MoldInspectionItems.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -1,28 +1,45 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="720px">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
<el-form-item label="方案名称" prop="planName" required>
<el-input v-model="formData.planName" placeholder="请输入方案名称" />
<el-form
ref="formRef"
:model="formData"
:rules="formRules"
label-width="110px"
v-loading="formLoading"
>
<el-form-item :label="t('MoldManagement.MoldInspectionPlan.planName')" prop="planName" required>
<el-input
v-model="formData.planName"
:placeholder="t('MoldManagement.MoldInspectionPlan.placeholderPlanName')"
/>
</el-form-item>
<el-form-item label="方案类型" prop="planType" required>
<el-select v-model="formData.planType" placeholder="请选择方案类型" class="!w-full">
<el-option :value="1" label="保养" />
<el-option :value="2" label="维护" />
<el-form-item :label="t('MoldManagement.MoldInspectionPlan.planType')" prop="planType" required>
<el-select
v-model="formData.planType"
:placeholder="t('MoldManagement.MoldInspectionPlan.placeholderPlanType')"
class="!w-full"
>
<el-option :value="1" :label="t('MoldManagement.MoldInspectionPlan.planTypeMaintain')" />
<el-option :value="2" :label="t('MoldManagement.MoldInspectionPlan.planTypeInspect')" />
</el-select>
</el-form-item>
<el-form-item label="描述" prop="description">
<el-input v-model="formData.description" placeholder="请输入描述" type="textarea" />
<el-form-item :label="t('MoldManagement.MoldInspectionPlan.description')" prop="description">
<el-input
v-model="formData.description"
:placeholder="t('MoldManagement.MoldInspectionPlan.placeholderDescription')"
type="textarea"
/>
</el-form-item>
<el-form-item label="关联项目" prop="subjectIds">
<el-form-item :label="t('MoldManagement.MoldInspectionPlan.subjectName')" prop="subjectIds">
<el-select
v-model="formData.subjectIds"
multiple
filterable
clearable
placeholder="请选择关联项目"
:placeholder="t('MoldManagement.MoldInspectionPlan.placeholderSubjectSelect')"
class="!w-full"
>
<el-option v-for="item in subjectOptions" :key="item.id" :label="item.subjectName" :value="item.id" />
@ -31,8 +48,8 @@
</el-form>
<template #footer>
<el-button type="primary" @click="submitForm" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="submitForm" :disabled="formLoading">{{ t('common.ok') }}</el-button>
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button>
</template>
</Dialog>
</template>
@ -91,8 +108,20 @@ const initFormData = () => ({
const formData = ref(initFormData())
const formRules = reactive<FormRules>({
planName: [{ required: true, message: '方案名称不能为空', trigger: 'blur' }],
planType: [{ required: true, message: '方案类型不能为空', trigger: 'change' }]
planName: [
{
required: true,
message: t('MoldManagement.MoldInspectionPlan.validatorPlanNameRequired'),
trigger: 'blur'
}
],
planType: [
{
required: true,
message: t('MoldManagement.MoldInspectionPlan.validatorPlanTypeRequired'),
trigger: 'change'
}
]
})
const formRef = ref()
@ -148,4 +177,3 @@ const resetForm = () => {
formRef.value?.resetFields()
}
</script>

@ -1,38 +1,45 @@
<template>
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="60px">
<el-form-item label="名称" prop="planName">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="110px">
<el-form-item :label="t('MoldManagement.MoldInspectionPlan.planName')" prop="planName">
<el-input
v-model="queryParams.planName"
placeholder="请输入名称"
:placeholder="t('MoldManagement.MoldInspectionPlan.placeholderPlanName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="类型" prop="planType">
<el-select v-model="queryParams.planType" placeholder="请选择类型" clearable class="!w-240px">
<el-option :value="1" label="保养" />
<el-option :value="2" label="维护" />
<el-form-item :label="t('MoldManagement.MoldInspectionPlan.planType')" prop="planType">
<el-select
v-model="queryParams.planType"
:placeholder="t('MoldManagement.MoldInspectionPlan.placeholderPlanType')"
clearable
class="!w-240px"
>
<el-option :value="1" :label="t('MoldManagement.MoldInspectionPlan.planTypeMaintain')" />
<el-option :value="2" :label="t('MoldManagement.MoldInspectionPlan.planTypeInspect')" />
</el-select>
</el-form-item>
<el-form-item label="描述" prop="description">
<el-form-item :label="t('MoldManagement.MoldInspectionPlan.description')" prop="description">
<el-input
v-model="queryParams.description"
placeholder="请输入描述"
:placeholder="t('MoldManagement.MoldInspectionPlan.placeholderDescription')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}</el-button>
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['mes:plan-maintenance:create']">
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" />
{{ t('MoldManagement.MoldInspectionPlan.add') }}
</el-button>
<el-button type="danger" plain @click="handleBatchDelete" v-hasPermi="['mes:plan-maintenance:delete']">
<Icon icon="ep:delete" class="mr-5px" /> 批量删除
<Icon icon="ep:delete" class="mr-5px" />
{{ t('MoldManagement.MoldInspectionPlan.batchDelete') }}
</el-button>
<el-button
type="success"
@ -41,7 +48,8 @@
:loading="exportLoading"
v-hasPermi="['mes:plan-maintenance:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" />
{{ t('MoldManagement.MoldInspectionPlan.export') }}
</el-button>
</el-form-item>
</el-form>
@ -67,14 +75,19 @@
:show-overflow-tooltip="true"
size="small"
>
<el-table-column label="序号" align="center" width="80">
<el-table-column :label="t('MoldManagement.MoldInspectionPlan.index')" align="center" width="80">
<template #default="s2">
{{ s2.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="编码" align="center" prop="subjectCode" />
<el-table-column label="名称" align="center" prop="subjectName" />
<el-table-column label="检验方式" align="center" prop="inspectionMethod" width="120">
<el-table-column :label="t('MoldManagement.MoldInspectionPlan.subjectCode')" align="center" prop="subjectCode" />
<el-table-column :label="t('MoldManagement.MoldInspectionPlan.subjectName')" align="center" prop="subjectName" />
<el-table-column
:label="t('MoldManagement.MoldInspectionPlan.inspectionMethod')"
align="center"
prop="inspectionMethod"
width="120"
>
<template #default="s2">
<span v-if="s2.row.inspectionMethod === undefined || s2.row.inspectionMethod === null || s2.row.inspectionMethod === ''">-</span>
<el-tag
@ -89,36 +102,77 @@
</el-tag>
</template>
</el-table-column>
<el-table-column label="判定基准" align="center" prop="judgmentCriteria" />
<el-table-column
:label="t('MoldManagement.MoldInspectionPlan.judgmentCriteria')"
align="center"
prop="judgmentCriteria"
/>
</el-table>
</div>
</template>
</el-table-column>
<el-table-column label="序号" align="center" width="80">
<el-table-column :label="t('MoldManagement.MoldInspectionPlan.index')" align="center" width="80">
<template #default="scope">
{{ (queryParams.pageNo - 1) * queryParams.pageSize + scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="名称" align="center" prop="planName" min-width="160" />
<el-table-column label="类型" align="center" prop="planType" width="110">
<el-table-column
:label="t('MoldManagement.MoldInspectionPlan.planName')"
align="center"
prop="planName"
min-width="160"
/>
<el-table-column
:label="t('MoldManagement.MoldInspectionPlan.planType')"
align="center"
prop="planType"
width="110"
>
<template #default="scope">
<el-tag effect="light" :type="getPlanTypeTagType(scope.row.planType)">
{{ getPlanTypeLabel(scope.row.planType) }}
</el-tag>
</template>
</el-table-column>
<el-table-column label="描述" align="center" prop="description" min-width="220" />
<el-table-column label="创建人" align="center" prop="creatorName" width="140" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180" />
<el-table-column label="更新时间" align="center" prop="updateTime" :formatter="dateFormatter" width="180" />
<el-table-column label="操作" align="center" fixed="right" width="160">
<el-table-column
:label="t('MoldManagement.MoldInspectionPlan.description')"
align="center"
prop="description"
min-width="220"
/>
<el-table-column
:label="t('MoldManagement.MoldInspectionPlan.creatorName')"
align="center"
prop="creatorName"
width="140"
/>
<el-table-column
:label="t('MoldManagement.MoldInspectionPlan.createTime')"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180"
/>
<el-table-column
:label="t('MoldManagement.MoldInspectionPlan.updateTime')"
align="center"
prop="updateTime"
:formatter="dateFormatter"
width="180"
/>
<el-table-column
:label="t('MoldManagement.MoldInspectionPlan.operate')"
align="center"
fixed="right"
width="160"
>
<template #default="scope">
<el-button link type="primary" @click="openForm('update', scope.row)" v-hasPermi="['mes:plan-maintenance:update']">
编辑
{{ t('MoldManagement.MoldInspectionPlan.edit') }}
</el-button>
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['mes:plan-maintenance:delete']">
删除
{{ t('MoldManagement.MoldInspectionPlan.delete') }}
</el-button>
</template>
</el-table-column>
@ -263,8 +317,8 @@ const handleExpandChange = async (row: PlanMaintenanceVO, expandedRows: PlanMain
const getPlanTypeLabel = (value: any) => {
const v = value === '' || value === null || value === undefined ? undefined : Number(value)
if (v === 1) return '保养'
if (v === 2) return '维护'
if (v === 1) return t('MoldManagement.MoldInspectionPlan.planTypeMaintain')
if (v === 2) return t('MoldManagement.MoldInspectionPlan.planTypeInspect')
return value ?? ''
}
@ -297,7 +351,7 @@ const handleDelete = async (ids: number | string | Array<number | string>) => {
const handleBatchDelete = async () => {
if (!selectedIds.value.length) {
message.error('请选择需要删除的数据')
message.error(t('MoldManagement.MoldInspectionPlan.selectDeleteTip'))
return
}
await handleDelete(selectedIds.value)
@ -312,7 +366,7 @@ const handleExport = async () => {
ids: selectedIds.value.length ? selectedIds.value.join(',') : undefined
}
const data = await PlanMaintenanceApi.exportPlanMaintenance(params)
download.excel(data, '方案维护.xls')
download.excel(data, t('MoldManagement.MoldInspectionPlan.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -1,36 +1,47 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="1200px" @closed="handleDialogClosed">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" v-loading="formLoading">
<el-row>
<el-col :span="8">
<el-form-item label="维修单编号" prop="repairCode">
<el-input v-model="formData.repairCode" placeholder="请输入维修单编号" :disabled="isRepairMode" />
<el-form-item :label="t('MoldManagement.MoldRepair.repairCode')" prop="repairCode">
<el-input
v-model="formData.repairCode"
:placeholder="t('MoldManagement.MoldRepair.placeholderRepairCode')"
:disabled="isRepairMode"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维修单" prop="repairName">
<el-input v-model="formData.repairName" placeholder="请输入维修单名称" :disabled="isRepairMode" />
<el-form-item :label="t('MoldManagement.MoldRepair.repairName')" prop="repairName">
<el-input
v-model="formData.repairName"
:placeholder="t('MoldManagement.MoldRepair.placeholderRepairName')"
:disabled="isRepairMode"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="模具" prop="moldId">
<el-form-item :label="t('MoldManagement.MoldRepair.mold')" prop="moldId">
<el-select
v-model="formData.moldId" filterable clearable :loading="moldLoading"
:disabled="isRepairMode" placeholder="请选择模具" class="!w-full">
:disabled="isRepairMode"
:placeholder="t('MoldManagement.MoldRepair.placeholderMold')"
class="!w-full"
>
<el-option v-for="opt in moldOptions" :key="String(opt.value)" :label="opt.label" :value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="模具名称" prop="moldName" :required="false">
<el-input v-model="formData.moldName" placeholder="自动带出" disabled />
<el-form-item :label="t('MoldManagement.MoldRepair.moldName')" prop="moldName" :required="false">
<el-input v-model="formData.moldName" :placeholder="t('MoldManagement.MoldRepair.placeholderMoldNameAuto')" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="模具编码" prop="moldCode" :required="false">
<el-input v-model="formData.moldCode" placeholder="自动带出" disabled />
<el-form-item :label="t('MoldManagement.MoldRepair.moldCode')" prop="moldCode" :required="false">
<el-input v-model="formData.moldCode" :placeholder="t('MoldManagement.MoldRepair.placeholderMoldCodeAuto')" disabled />
</el-form-item>
</el-col>
<!-- <el-col :span="8">
@ -44,18 +55,22 @@
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="维修人员" prop="acceptedBy">
<el-form-item :label="t('MoldManagement.MoldRepair.repairUser')" prop="acceptedBy">
<el-select
v-model="formData.acceptedBy" filterable clearable placeholder="请选择维修人员" class="!w-full"
v-model="formData.acceptedBy" filterable clearable
:placeholder="t('MoldManagement.MoldRepair.placeholderAcceptUser')"
class="!w-full"
:disabled="isRepairMode">
<el-option v-for="item in users" :key="String(item.id)" :label="item.nickname" :value="String(item.id)" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="验收人员" prop="confirmBy">
<el-form-item :label="t('MoldManagement.MoldRepair.confirmUser')" prop="confirmBy">
<el-select
v-model="formData.confirmBy" filterable clearable placeholder="请选择验收人员" class="!w-full"
v-model="formData.confirmBy" filterable clearable
:placeholder="t('MoldManagement.MoldRepair.placeholderConfirmUser')"
class="!w-full"
:disabled="isRepairMode">
<el-option v-for="item in users" :key="String(item.id)" :label="item.nickname" :value="String(item.id)" />
</el-select>
@ -66,34 +81,46 @@
<template v-if="showRepairFields">
<el-row>
<el-col :span="8">
<el-form-item label="报修日期" prop="requireDate">
<el-date-picker v-model="formData.requireDate" type="date" value-format="x" placeholder="选择报修日期" class="!w-full" :disabled="repairFieldsDisabled" />
<el-form-item :label="t('MoldManagement.MoldRepair.requireDate')" prop="requireDate">
<el-date-picker
v-model="formData.requireDate" type="date" value-format="x"
:placeholder="t('MoldManagement.MoldRepair.placeholderRequireDate')"
class="!w-full" :disabled="repairFieldsDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="完成日期" prop="finishDate">
<el-date-picker v-model="formData.finishDate" type="date" value-format="x" placeholder="选择完成日期" class="!w-full" :disabled="repairFieldsDisabled" />
<el-form-item :label="t('MoldManagement.MoldRepair.finishDate')" prop="finishDate">
<el-date-picker
v-model="formData.finishDate" type="date" value-format="x"
:placeholder="t('MoldManagement.MoldRepair.placeholderFinishDate')"
class="!w-full" :disabled="repairFieldsDisabled"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="验收日期" prop="confirmDate">
<el-date-picker v-model="formData.confirmDate" type="date" value-format="x" placeholder="选择验收日期" class="!w-full" :disabled="repairFieldsDisabled" />
<el-form-item :label="t('MoldManagement.MoldRepair.confirmDate')" prop="confirmDate">
<el-date-picker
v-model="formData.confirmDate" type="date" value-format="x"
:placeholder="t('MoldManagement.MoldRepair.placeholderConfirmDate')"
class="!w-full" :disabled="repairFieldsDisabled"
/>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="维修结果" prop="repairResult">
<el-form-item :label="t('MoldManagement.MoldRepair.repairResult')" prop="repairResult">
<Editor v-model="formData.repairResult" height="150px" :readonly="repairFieldsDisabled" />
</el-form-item>
</template>
</el-form>
<el-tabs v-model="subTabsName">
<el-tab-pane label="模具维修项目行" name="moldRepairLine">
<el-tab-pane :label="t('MoldManagement.MoldRepair.tabMoldRepairLine')" name="moldRepairLine">
<MoldRepairLineForm ref="moldRepairLineFormRef" :repair-id="formData.id" />
</el-tab-pane>
</el-tabs>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">{{ t('common.ok') }}</el-button>
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button>
</template>
</Dialog>
</template>
@ -214,9 +241,9 @@ watch(
}
)
const formRules = reactive({
repairCode: [{ required: true, message: '维修单编号不能为空', trigger: 'blur' }],
repairName: [{ required: true, message: '维修单不能为空', trigger: 'blur' }],
moldId: [{ required: true, message: '模具不能为空', trigger: 'change' }],
repairCode: [{ required: true, message: t('MoldManagement.MoldRepair.validatorRepairCodeRequired'), trigger: 'blur' }],
repairName: [{ required: true, message: t('MoldManagement.MoldRepair.validatorRepairNameRequired'), trigger: 'blur' }],
moldId: [{ required: true, message: t('MoldManagement.MoldRepair.validatorMoldRequired'), trigger: 'change' }],
})
const formRef = ref()
@ -266,7 +293,12 @@ let openRequestId = 0
const open = async (type: string, id?: number) => {
const currentOpenId = ++openRequestId
dialogVisible.value = true
dialogTitle.value = type === 'repair' ? '维修' : t('action.' + type)
dialogTitle.value =
type === 'repair'
? t('MoldManagement.MoldRepair.dialogTitleRepair')
: type === 'create'
? t('MoldManagement.MoldRepair.dialogTitleCreate')
: t('MoldManagement.MoldRepair.dialogTitleUpdate')
formType.value = type
resetForm()
await ensureUsersLoaded()

@ -8,47 +8,59 @@
:inline-message="true"
>
<el-table :data="formData" class="-mt-10px">
<el-table-column label="序号" type="index" width="100" />
<el-table-column label="维修编码" min-width="150">
<el-table-column :label="t('MoldManagement.MoldRepairLine.index')" type="index" width="100" />
<el-table-column :label="t('MoldManagement.MoldRepairLine.subjectCode')" min-width="180">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subjectCode`" :rules="formRules.subjectCode" class="mb-0px!">
<el-input v-model="row.subjectCode" placeholder="请输入维修编码" />
<el-input
v-model="row.subjectCode"
:placeholder="t('MoldManagement.MoldRepairLine.placeholderSubjectCode')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="维修名称" min-width="150">
<el-table-column :label="t('MoldManagement.MoldRepairLine.subjectName')" min-width="180">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subjectName`" :rules="formRules.subjectName" class="mb-0px!">
<el-input v-model="row.subjectName" placeholder="请输入维修名称" />
<el-input
v-model="row.subjectName"
:placeholder="t('MoldManagement.MoldRepairLine.placeholderSubjectName')"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="维修内容" min-width="300">
<el-table-column :label="t('MoldManagement.MoldRepairLine.subjectContent')" min-width="320">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.subjectContent`" :rules="formRules.subjectContent" class="mb-0px!">
<el-input type="textarea" v-model="row.subjectContent" placeholder="请输入维修内容" />
<el-input
type="textarea"
v-model="row.subjectContent"
:placeholder="t('MoldManagement.MoldRepairLine.placeholderSubjectContent')"
/>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
<el-row justify="center" class="mt-3">
<el-button @click="handleAdd" round>+ 添加维修项目</el-button>
<el-button @click="handleAdd" round>+ {{ t('MoldManagement.MoldRepairLine.addLine') }}</el-button>
</el-row>
</template>
<script setup lang="ts">
import { MoldRepairApi } from '@/api/mold/moldrepair'
const { t } = useI18n()
const props = defineProps<{
repairId: undefined
}>()
const formLoading = ref(false)
const formData = ref([])
const formRules = reactive({
repairId: [{ required: true, message: '维修单ID不能为空', trigger: 'blur' }],
subjectId: [{ required: true, message: '项目ID不能为空', trigger: 'blur' }],
subjectCode: [{ required: true, message: '项目编码不能为空', trigger: 'blur' }],
subjectContent: [{ required: true, message: '项目内容不能为空', trigger: 'blur' }],
repairId: [{ required: true, message: t('MoldManagement.MoldRepairLine.validatorRepairIdRequired'), trigger: 'blur' }],
subjectId: [{ required: true, message: t('MoldManagement.MoldRepairLine.validatorSubjectIdRequired'), trigger: 'blur' }],
subjectCode: [{ required: true, message: t('MoldManagement.MoldRepairLine.validatorSubjectCodeRequired'), trigger: 'blur' }],
subjectContent: [{ required: true, message: t('MoldManagement.MoldRepairLine.validatorSubjectContentRequired'), trigger: 'blur' }],
})
const formRef = ref()
@ -106,4 +118,3 @@ const setData = (rows: any[]) => {
defineExpose({ validate, getData, setData })
</script>

@ -1,71 +1,100 @@
<template>
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="维修单号" prop="repairCode">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item :label="t('MoldManagement.MoldRepair.repairCode')" prop="repairCode">
<el-input
v-model="queryParams.repairCode" placeholder="请输入维修单编号" clearable @keyup.enter="handleQuery"
v-model="queryParams.repairCode"
:placeholder="t('MoldManagement.MoldRepair.placeholderRepairCode')"
clearable
@keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="维修单" prop="repairName">
<el-form-item :label="t('MoldManagement.MoldRepair.repairName')" prop="repairName">
<el-input
v-model="queryParams.repairName" placeholder="请输入维修单名称" clearable @keyup.enter="handleQuery"
v-model="queryParams.repairName"
:placeholder="t('MoldManagement.MoldRepair.placeholderRepairName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="模具编码" prop="moldCode">
<el-input v-model="queryParams.moldCode" placeholder="请输入模具编码" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item :label="t('MoldManagement.MoldRepair.moldCode')" prop="moldCode">
<el-input
v-model="queryParams.moldCode"
:placeholder="t('MoldManagement.MoldRepair.placeholderMoldCode')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="模具名称" prop="moldName">
<el-input v-model="queryParams.moldName" placeholder="请输入模具名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item :label="t('MoldManagement.MoldRepair.moldName')" prop="moldName">
<el-input
v-model="queryParams.moldName"
:placeholder="t('MoldManagement.MoldRepair.placeholderMoldName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="报修日期" prop="requireDate">
<el-form-item :label="t('MoldManagement.MoldRepair.requireDate')" prop="requireDate">
<el-date-picker
v-model="queryParams.requireDate" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
start-placeholder="开始日期" end-placeholder="结束日期"
:start-placeholder="t('MoldManagement.MoldRepair.placeholderRequireDateStart')"
:end-placeholder="t('MoldManagement.MoldRepair.placeholderRequireDateEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" />
</el-form-item>
<el-form-item label="完成日期" prop="finishDate">
<el-form-item :label="t('MoldManagement.MoldRepair.finishDate')" prop="finishDate">
<el-date-picker
v-model="queryParams.finishDate" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
start-placeholder="开始日期" end-placeholder="结束日期"
:start-placeholder="t('MoldManagement.MoldRepair.placeholderFinishDateStart')"
:end-placeholder="t('MoldManagement.MoldRepair.placeholderFinishDateEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" />
</el-form-item>
<el-form-item label="验收日期" prop="confirmDate">
<el-form-item :label="t('MoldManagement.MoldRepair.confirmDate')" prop="confirmDate">
<el-date-picker
v-model="queryParams.confirmDate" value-format="YYYY-MM-DD HH:mm:ss" type="daterange"
start-placeholder="开始日期" end-placeholder="结束日期"
:start-placeholder="t('MoldManagement.MoldRepair.placeholderConfirmDateStart')"
:end-placeholder="t('MoldManagement.MoldRepair.placeholderConfirmDateEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" class="!w-240px" />
</el-form-item>
<el-form-item label="维修人员" prop="acceptedBy">
<el-form-item :label="t('MoldManagement.MoldRepair.repairUser')" prop="acceptedBy">
<el-input
v-model="queryParams.acceptedBy" placeholder="请输入维修人员" clearable @keyup.enter="handleQuery"
v-model="queryParams.acceptedBy"
:placeholder="t('MoldManagement.MoldRepair.placeholderRepairUser')"
clearable
@keyup.enter="handleQuery"
class="!w-240px" />
</el-form-item>
<el-form-item label="单据状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择单据状态" clearable class="!w-240px">
<el-form-item :label="t('MoldManagement.MoldRepair.status')" prop="status">
<el-select
v-model="queryParams.status"
:placeholder="t('MoldManagement.MoldRepair.placeholderStatus')"
clearable
class="!w-240px"
>
<el-option v-for="opt in statusOptions" :key="opt.value" :label="opt.label" :value="opt.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
<Icon icon="ep:search" class="mr-5px" /> {{ t('MoldManagement.MoldRepair.search') }}
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
<Icon icon="ep:refresh" class="mr-5px" /> {{ t('MoldManagement.MoldRepair.reset') }}
</el-button>
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['mes:dv-repair:create']">
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('MoldManagement.MoldRepair.add') }}
</el-button>
<el-button type="danger" plain @click="handleBatchDelete" v-hasPermi="['mes:dv-repair:delete']">
<Icon icon="ep:delete" class="mr-5px" /> 批量删除
<Icon icon="ep:delete" class="mr-5px" /> {{ t('MoldManagement.MoldRepair.batchDelete') }}
</el-button>
<el-button
type="success" plain @click="handleExport" :loading="exportLoading"
v-hasPermi="['mes:dv-repair:export']">
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('MoldManagement.MoldRepair.export') }}
</el-button>
</el-form-item>
</el-form>
@ -76,14 +105,14 @@
ref="tableRef" v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" row-key="id"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" fixed="left" reserve-selection />
<el-table-column label="维修单号" align="center" prop="repairCode" />
<el-table-column label="维修单" align="center" prop="repairName" />
<el-table-column label="模具名称" align="center" prop="moldName">
<el-table-column :label="t('MoldManagement.MoldRepair.repairCode')" align="center" prop="repairCode" min-width="150" />
<el-table-column :label="t('MoldManagement.MoldRepair.repairName')" align="center" prop="repairName" min-width="150" />
<el-table-column :label="t('MoldManagement.MoldRepair.moldName')" align="center" prop="moldName" min-width="160">
<template #default="scope">
{{ scope.row.moldName ?? scope.row.machineryName ?? '-' }}
</template>
</el-table-column>
<el-table-column label="模具编码" align="center" prop="moldCode">
<el-table-column :label="t('MoldManagement.MoldRepair.moldCode')" align="center" prop="moldCode" min-width="160">
<template #default="scope">
{{ scope.row.moldCode ?? scope.row.machineryCode ?? '-' }}
</template>
@ -95,13 +124,22 @@
<dict-tag :type="DICT_TYPE.MES_MACHINE_TYPE" :value="scope.row.machineryTypeId" />
</template>
</el-table-column> -->
<el-table-column label="报修日期" align="center" prop="requireDate" :formatter="dateFormatter2" width="110px" />
<el-table-column label="完成日期" align="center" prop="finishDate" :formatter="dateFormatter2" width="110px" />
<el-table-column label="验收日期" align="center" prop="confirmDate" :formatter="dateFormatter2" width="110px" />
<el-table-column label="维修结果" align="center" prop="repairResult" />
<el-table-column label="维修人员" align="center" prop="acceptedBy" />
<el-table-column label="验收人员" align="center" prop="confirmBy" />
<el-table-column label="单据状态" align="center" prop="status" width="110px">
<el-table-column
:label="t('MoldManagement.MoldRepair.requireDate')" align="center" prop="requireDate"
:formatter="dateFormatter2" min-width="130"
/>
<el-table-column
:label="t('MoldManagement.MoldRepair.finishDate')" align="center" prop="finishDate"
:formatter="dateFormatter2" min-width="130"
/>
<el-table-column
:label="t('MoldManagement.MoldRepair.confirmDate')" align="center" prop="confirmDate"
:formatter="dateFormatter2" min-width="130"
/>
<el-table-column :label="t('MoldManagement.MoldRepair.repairResult')" align="center" prop="repairResult" min-width="160" />
<el-table-column :label="t('MoldManagement.MoldRepair.acceptUser')" align="center" prop="acceptedBy" min-width="140" />
<el-table-column :label="t('MoldManagement.MoldRepair.confirmUserShort')" align="center" prop="confirmBy" min-width="140" />
<el-table-column :label="t('MoldManagement.MoldRepair.status')" align="center" prop="status" min-width="130">
<template #default="scope">
<el-tag :type="getStatusTagType(scope.row.status)" effect="light">
{{ getStatusLabel(scope.row.status) }}
@ -109,20 +147,21 @@
</template>
</el-table-column>
<el-table-column
label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="170px"
fixed="right" />
<el-table-column label="操作" align="center" fixed="right" width="200px">
:label="t('MoldManagement.MoldRepair.createTime')" align="center" prop="createTime"
:formatter="dateFormatter" min-width="170" />
<el-table-column :label="t('MoldManagement.MoldRepair.operate')" align="center" fixed="right" min-width="220">
<template #default="scope">
<el-button
link type="primary" @click="openForm('repair', scope.row.id)"
v-if="String(scope.row.status) !== '1'" v-hasPermi="['mes:dv-repair:update']">维修</el-button>
v-if="String(scope.row.status) !== '1'" v-hasPermi="['mes:dv-repair:update']"
>{{ t('MoldManagement.MoldRepair.repair') }}</el-button>
<el-button
link type="primary" @click="openForm('update', scope.row.id)"
v-hasPermi="['mes:dv-repair:update']">
编辑
{{ t('MoldManagement.MoldRepair.edit') }}
</el-button>
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['mes:dv-repair:delete']">
删除
{{ t('MoldManagement.MoldRepair.delete') }}
</el-button>
</template>
</el-table-column>
@ -177,14 +216,14 @@ const queryFormRef = ref()
const exportLoading = ref(false)
const statusOptions = [
{ label: '待完成', value: '0' },
{ label: '已完成', value: '1' }
{ label: t('MoldManagement.MoldRepair.statusPending'), value: '0' },
{ label: t('MoldManagement.MoldRepair.statusDone'), value: '1' }
]
const getStatusLabel = (value: any) => {
const v = value === '' || value === null || value === undefined ? undefined : String(value)
if (v === '0') return '待完成'
if (v === '1') return '已完成'
if (v === '0') return t('MoldManagement.MoldRepair.statusPending')
if (v === '1') return t('MoldManagement.MoldRepair.statusDone')
return '-'
}

@ -1,13 +1,19 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible" width="900px">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px" v-loading="formLoading">
<el-form-item label="维修编码" prop="subjectCode">
<el-input v-model="formData.subjectCode" placeholder="请输入维修编码" />
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px" v-loading="formLoading">
<el-form-item :label="t('MoldManagement.MoldRepairItems.dialogSubjectCode')" prop="subjectCode">
<el-input
v-model="formData.subjectCode"
:placeholder="t('MoldManagement.MoldRepairItems.placeholderDialogSubjectCode')"
/>
</el-form-item>
<el-form-item label="维修名称" prop="subjectName">
<el-input v-model="formData.subjectName" placeholder="请输入维修名称" />
<el-form-item :label="t('MoldManagement.MoldRepairItems.dialogSubjectName')" prop="subjectName">
<el-input
v-model="formData.subjectName"
:placeholder="t('MoldManagement.MoldRepairItems.placeholderDialogSubjectName')"
/>
</el-form-item>
<el-form-item label="模具" prop="moldId">
<el-form-item :label="t('MoldManagement.MoldRepairItems.dialogMold')" prop="moldId">
<el-select
v-model="formData.moldId"
filterable
@ -16,16 +22,20 @@
clearable
:remote-method="handleDeviceSearch"
:loading="deviceLoading"
placeholder="请选择模具"
:placeholder="t('MoldManagement.MoldRepairItems.placeholderDialogMold')"
class="!w-full"
>
<el-option v-for="opt in deviceOptions" :key="String(opt.value)" :label="opt.label" :value="opt.value" />
</el-select>
</el-form-item>
<el-form-item label="维修内容" prop="projectContent">
<el-input v-model="formData.projectContent" placeholder="请输入维修内容" type="textarea" />
<el-form-item :label="t('MoldManagement.MoldRepairItems.dialogProjectContent')" prop="projectContent">
<el-input
v-model="formData.projectContent"
:placeholder="t('MoldManagement.MoldRepairItems.placeholderDialogProjectContent')"
type="textarea"
/>
</el-form-item>
<el-form-item label="是否启用" prop="isEnable">
<el-form-item :label="t('MoldManagement.MoldRepairItems.dialogIsEnable')" prop="isEnable">
<el-radio-group v-model="formData.isEnable">
<el-radio v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)" :key="dict.value" :label="dict.value">
{{ dict.label }}
@ -34,8 +44,8 @@
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">{{ t('common.ok') }}</el-button>
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button>
</template>
</Dialog>
</template>
@ -89,17 +99,17 @@ const handleDeviceSearch = async (keyword: string) => {
}
const validateDeviceId = (_: any, value: any, callback: any) => {
if (value === undefined || value === null || value === '') {
callback(new Error('模具不能为空'))
callback(new Error(t('MoldManagement.MoldRepairItems.validatorMoldRequired')))
return
}
callback()
}
const formRules = reactive({
subjectCode: [{ required: true, message: '项目编码不能为空', trigger: 'blur' }],
subjectName: [{ required: true, message: '项目名称不能为空', trigger: 'blur' }],
subjectCode: [{ required: true, message: t('MoldManagement.MoldRepairItems.validatorSubjectCodeRequired'), trigger: 'blur' }],
subjectName: [{ required: true, message: t('MoldManagement.MoldRepairItems.validatorSubjectNameRequired'), trigger: 'blur' }],
moldId: [{ required: true, validator: validateDeviceId, trigger: 'change' }],
isEnable: [{ required: true, message: '是否启用不能为空', trigger: 'change' }]
isEnable: [{ required: true, message: t('MoldManagement.MoldRepairItems.validatorIsEnableRequired'), trigger: 'change' }]
})
const open = async (type: string, row?: any) => {

@ -1,43 +1,55 @@
<template>
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="维修编码" prop="subjectCode">
<el-input v-model="queryParams.subjectCode" placeholder="请输入维修编码" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="120px">
<el-form-item :label="t('MoldManagement.MoldRepairItems.subjectCode')" prop="subjectCode">
<el-input
v-model="queryParams.subjectCode"
:placeholder="t('MoldManagement.MoldRepairItems.placeholderSubjectCode')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="维修名称" prop="subjectName">
<el-input v-model="queryParams.subjectName" placeholder="请输入维修名称" clearable @keyup.enter="handleQuery" class="!w-240px" />
<el-form-item :label="t('MoldManagement.MoldRepairItems.subjectName')" prop="subjectName">
<el-input
v-model="queryParams.subjectName"
:placeholder="t('MoldManagement.MoldRepairItems.placeholderSubjectName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="维修内容" prop="projectContent">
<el-form-item :label="t('MoldManagement.MoldRepairItems.projectContent')" prop="projectContent">
<el-input
v-model="queryParams.projectContent"
placeholder="请输入维修内容"
:placeholder="t('MoldManagement.MoldRepairItems.placeholderProjectContent')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-form-item :label="t('MoldManagement.MoldRepairItems.createTime')" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:start-placeholder="t('MoldManagement.MoldRepairItems.placeholderCreateTimeStart')"
:end-placeholder="t('MoldManagement.MoldRepairItems.placeholderCreateTimeEnd')"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('MoldManagement.MoldRepairItems.search') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('MoldManagement.MoldRepairItems.reset') }}</el-button>
<el-button type="primary" plain @click="openForm('create')">
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" /> {{ t('MoldManagement.MoldRepairItems.add') }}
</el-button>
<el-button type="danger" plain @click="handleBatchDelete" :disabled="!selectedIds.length">
<Icon icon="ep:delete" class="mr-5px" /> 批量删除
<Icon icon="ep:delete" class="mr-5px" /> {{ t('MoldManagement.MoldRepairItems.batchDelete') }}
</el-button>
<el-button type="success" plain @click="handleExport" :loading="exportLoading">
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" /> {{ t('MoldManagement.MoldRepairItems.export') }}
</el-button>
</el-form-item>
</el-form>
@ -54,15 +66,34 @@
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" fixed="left" reserve-selection />
<el-table-column label="维修编码" align="center" prop="subjectCode" min-width="130" :formatter="cellOrDash" />
<el-table-column label="维修名称" align="center" prop="subjectName" min-width="160" :formatter="cellOrDash" />
<el-table-column label="模具名称" align="center" prop="moldName" min-width="160" :formatter="cellOrDash" />
<el-table-column label="维修内容" align="center" prop="projectContent" min-width="200" :formatter="cellOrDash" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateOrDash" width="180" />
<el-table-column label="操作" align="center" width="140" fixed="right">
<el-table-column
:label="t('MoldManagement.MoldRepairItems.subjectCode')" align="center" prop="subjectCode" min-width="150"
:formatter="cellOrDash"
/>
<el-table-column
:label="t('MoldManagement.MoldRepairItems.subjectName')" align="center" prop="subjectName" min-width="170"
:formatter="cellOrDash"
/>
<el-table-column
:label="t('MoldManagement.MoldRepairItems.moldName')" align="center" prop="moldName" min-width="170"
:formatter="cellOrDash"
/>
<el-table-column
:label="t('MoldManagement.MoldRepairItems.projectContent')" align="center" prop="projectContent" min-width="220"
:formatter="cellOrDash"
/>
<el-table-column
:label="t('MoldManagement.MoldRepairItems.createTime')" align="center" prop="createTime"
:formatter="dateOrDash" min-width="190"
/>
<el-table-column :label="t('MoldManagement.MoldRepairItems.operate')" align="center" min-width="160" fixed="right">
<template #default="scope">
<el-button link type="primary" @click="openForm('update', scope.row)">编辑</el-button>
<el-button link type="danger" @click="handleDelete(scope.row.id)"></el-button>
<el-button link type="primary" @click="openForm('update', scope.row)">
{{ t('MoldManagement.MoldRepairItems.edit') }}
</el-button>
<el-button link type="danger" @click="handleDelete(scope.row.id)">
{{ t('MoldManagement.MoldRepairItems.delete') }}
</el-button>
</template>
</el-table-column>
</el-table>
@ -160,7 +191,7 @@ const handleDelete = async (ids: number | number[]) => {
const handleBatchDelete = async () => {
if (!selectedIds.value.length) {
message.error('请选择需要删除的数据')
message.error(t('MoldManagement.MoldRepairItems.selectDeleteTip'))
return
}
await handleDelete(selectedIds.value)
@ -175,7 +206,7 @@ const handleExport = async () => {
ids: selectedIds.value.length ? selectedIds.value.join(',') : undefined
}
const data = await MoldRepairItemsApi.exportRepairItems(params)
download.excel(data, '模具维修项目.xls')
download.excel(data, t('MoldManagement.MoldRepairItems.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -1,39 +1,65 @@
<template>
<Dialog :title="dialogTitle" v-model="dialogVisible">
<el-form ref="formRef" :model="formData" :rules="formRules" label-width="110px" v-loading="formLoading">
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入名称" />
<el-form-item :label="t('EquipmentManagement.TaskManagement.name')" prop="name">
<el-input v-model="formData.name" :placeholder="t('EquipmentManagement.TaskManagement.placeholderName')" />
</el-form-item>
<el-form-item label="类型" prop="taskType">
<el-form-item :label="t('EquipmentManagement.TaskManagement.taskType')" prop="taskType">
<el-radio-group v-model="formData.taskType">
<el-radio :label="1">点检</el-radio>
<el-radio :label="2">保养</el-radio>
<el-radio :label="1">{{ t('EquipmentManagement.TaskManagement.taskTypeInspect') }}</el-radio>
<el-radio :label="2">{{ t('EquipmentManagement.TaskManagement.taskTypeMaintain') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="模具列表" prop="moldList">
<el-select v-model="formData.moldList" multiple filterable clearable placeholder="请选择设备列表" class="!w-full">
<el-form-item :label="t('EquipmentManagement.TaskManagement.deviceList')" prop="moldList">
<el-select
v-model="formData.moldList"
multiple
filterable
clearable
:placeholder="t('EquipmentManagement.TaskManagement.placeholderDeviceList')"
class="!w-full"
>
<el-option v-for="item in deviceOptions" :key="String(item.id)" :label="item.name" :value="String(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="项目表单" prop="projectForm">
<el-select v-model="formData.projectForm" multiple filterable clearable placeholder="请选择项目表单" class="!w-full">
<el-form-item :label="t('EquipmentManagement.TaskManagement.projectForm')" prop="projectForm">
<el-select
v-model="formData.projectForm"
multiple
filterable
clearable
:placeholder="t('EquipmentManagement.TaskManagement.placeholderProjectForm')"
class="!w-full"
>
<el-option v-for="item in planOptions" :key="String(item.id)" :label="item.planName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="起止日期" prop="dateRange">
<el-form-item :label="t('EquipmentManagement.TaskManagement.dateRange')" prop="dateRange">
<el-date-picker
v-model="formData.dateRange" value-format="YYYY-MM-DD" type="daterange" start-placeholder="开始日期"
end-placeholder="结束日期" class="!w-320px" />
v-model="formData.dateRange"
value-format="YYYY-MM-DD"
type="daterange"
:start-placeholder="t('EquipmentManagement.TaskManagement.placeholderStartDate')"
:end-placeholder="t('EquipmentManagement.TaskManagement.placeholderEndDate')"
class="!w-320px"
/>
</el-form-item>
<el-form-item label="cron 表达式" prop="cronExpression">
<el-form-item :label="t('EquipmentManagement.TaskManagement.cronExpression')" prop="cronExpression">
<crontab v-model="formData.cronExpression" />
</el-form-item>
<el-form-item label="可操作人" prop="operableUsers">
<el-select v-model="formData.operableUsers" multiple filterable clearable placeholder="请选择可操作人" class="!w-full">
<el-form-item :label="t('EquipmentManagement.TaskManagement.operableUsers')" prop="operableUsers">
<el-select
v-model="formData.operableUsers"
multiple
filterable
clearable
:placeholder="t('EquipmentManagement.TaskManagement.placeholderOperableUsers')"
class="!w-full"
>
<el-option v-for="item in users" :key="String(item.id)" :label="item.nickname" :value="String(item.id)" />
</el-select>
</el-form-item>
<el-form-item label="是否启用" prop="enabled">
<el-form-item :label="t('EquipmentManagement.TaskManagement.enabled')" prop="enabled">
<el-radio-group v-model="formData.enabled">
<el-radio
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)" :key="String(dict.value)"
@ -44,8 +70,8 @@ v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)" :key="String(
</el-form-item>
</el-form>
<template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button>
<el-button @click="submitForm" type="primary" :disabled="formLoading">{{ t('common.ok') }}</el-button>
<el-button @click="dialogVisible = false">{{ t('common.cancel') }}</el-button>
</template>
</Dialog>
</template>
@ -120,12 +146,12 @@ const formData = ref({
})
const formRules = reactive({
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
taskType: [{ required: true, message: '类型不能为空', trigger: 'change' }],
enabled: [{ required: true, message: '是否启用不能为空', trigger: 'change' }],
moldList: [{ required: true, message: '设备列表不能为空', trigger: 'change' }],
projectForm: [{ required: true, message: '项目表单不能为空', trigger: 'change' }],
dateRange: [{ required: true, message: '起止日期不能为空', trigger: 'change' }]
name: [{ required: true, message: t('EquipmentManagement.TaskManagement.placeholderName'), trigger: 'blur' }],
taskType: [{ required: true, message: t('EquipmentManagement.TaskManagement.placeholderTaskType'), trigger: 'change' }],
enabled: [{ required: true, message: t('EquipmentManagement.TaskManagement.placeholderEnabled'), trigger: 'change' }],
moldList: [{ required: true, message: t('EquipmentManagement.TaskManagement.placeholderDeviceList'), trigger: 'change' }],
projectForm: [{ required: true, message: t('EquipmentManagement.TaskManagement.placeholderProjectForm'), trigger: 'change' }],
dateRange: [{ required: true, message: t('EquipmentManagement.TaskManagement.placeholderDateRange'), trigger: 'change' }]
})
const resetForm = () => {

@ -5,43 +5,45 @@
:model="queryParams"
ref="queryFormRef"
:inline="true"
label-width="68px"
label-width="110px"
>
<el-form-item label="名称" prop="name">
<el-form-item :label="t('EquipmentManagement.TaskManagement.name')" prop="name">
<el-input
v-model="queryParams.name"
placeholder="请输入名称"
:placeholder="t('EquipmentManagement.TaskManagement.placeholderName')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="类型" prop="taskType">
<el-select v-model="queryParams.taskType" placeholder="请选择类型" clearable class="!w-240px">
<el-form-item :label="t('EquipmentManagement.TaskManagement.taskType')" prop="taskType">
<el-select
v-model="queryParams.taskType"
:placeholder="t('EquipmentManagement.TaskManagement.placeholderTaskType')"
clearable
class="!w-240px"
>
<el-option v-for="opt in taskTypeOptions" :key="opt.value" :label="opt.label" :value="opt.value" />
</el-select>
</el-form-item>
<el-form-item label="项目表单" prop="projectForm">
<el-form-item :label="t('EquipmentManagement.TaskManagement.projectForm')" prop="projectForm">
<el-select
v-model="queryParams.projectForm"
multiple
filterable
clearable
placeholder="请选择项目表单"
:placeholder="t('EquipmentManagement.TaskManagement.placeholderProjectForm')"
class="!w-240px"
>
<el-option v-for="item in planOptions" :key="String(item.id)" :label="item.planName" :value="String(item.id)" />
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 搜索
</el-button>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
</el-button>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> {{ t('common.query') }}</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> {{ t('common.reset') }}</el-button>
<el-button type="primary" plain @click="openForm('create')" v-hasPermi="['mes:task-management:create']">
<Icon icon="ep:plus" class="mr-5px" /> 新增
<Icon icon="ep:plus" class="mr-5px" />
{{ t('action.add') }}
</el-button>
<el-button
type="success"
@ -50,7 +52,8 @@
:loading="exportLoading"
v-hasPermi="['mes:task-management:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
<Icon icon="ep:download" class="mr-5px" />
{{ t('action.export') }}
</el-button>
</el-form-item>
</el-form>
@ -65,28 +68,33 @@
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column type="index" label="序号" align="center" width="70" />
<el-table-column label="名称" align="center" prop="name" min-width="140" />
<el-table-column label="类型" align="center" prop="taskType" width="90">
<el-table-column :label="t('EquipmentManagement.TaskManagement.index')" type="index" align="center" width="70" />
<el-table-column :label="t('EquipmentManagement.TaskManagement.name')" align="center" prop="name" min-width="140" />
<el-table-column :label="t('EquipmentManagement.TaskManagement.taskType')" align="center" prop="taskType" width="90">
<template #default="scope">
<el-tag v-if="scope.row.taskType === 1" type="primary"></el-tag>
<el-tag v-else-if="scope.row.taskType === 2" type="success">保养</el-tag>
<el-tag v-if="scope.row.taskType === 1" type="primary">{{ t('EquipmentManagement.TaskManagement.taskTypeInspect') }}</el-tag>
<el-tag v-else-if="scope.row.taskType === 2" type="success">{{ t('EquipmentManagement.TaskManagement.taskTypeMaintain') }}</el-tag>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="项目表单" align="center" prop="projectFormName" min-width="140" />
<el-table-column label="开始日期" align="center" prop="startDate" :formatter="dateFormatter2" width="120" />
<el-table-column label="结束日期" align="center" prop="endDate" :formatter="dateFormatter2" width="120" />
<el-table-column label="cron 表达式" align="center" prop="cronExpression" min-width="180" />
<el-table-column label="启用" align="center" prop="enabled" width="90">
<el-table-column :label="t('EquipmentManagement.TaskManagement.projectForm')" align="center" prop="projectFormName" min-width="140" />
<el-table-column :label="t('EquipmentManagement.TaskManagement.startDate')" align="center" prop="startDate" :formatter="dateFormatter2" width="120" />
<el-table-column :label="t('EquipmentManagement.TaskManagement.endDate')" align="center" prop="endDate" :formatter="dateFormatter2" width="120" />
<el-table-column :label="t('EquipmentManagement.TaskManagement.cronExpression')" align="center" prop="cronExpression" min-width="180" />
<el-table-column :label="t('EquipmentManagement.TaskManagement.enabled')" align="center" prop="enabled" width="90">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.enabled" />
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="creatorName" width="120" />
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180" />
<el-table-column label="更新时间" align="center" prop="updateTime" :formatter="dateFormatter" width="180" />
<el-table-column label="操作" fixed="right" align="center" width="230">
<el-table-column :label="t('EquipmentManagement.TaskManagement.creatorName')" align="center" prop="creatorName" width="120" />
<el-table-column :label="t('EquipmentManagement.TaskManagement.createTime')" align="center" prop="createTime" :formatter="dateFormatter" width="180" />
<el-table-column :label="t('EquipmentManagement.TaskManagement.updateTime')" align="center" prop="updateTime" :formatter="dateFormatter" width="180" />
<el-table-column
:label="t('EquipmentManagement.TaskManagement.operate')"
fixed="right"
align="center"
min-width="230"
>
<template #default="scope">
<el-button
link
@ -94,18 +102,16 @@
@click="handleCreateTicket(scope.row.id)"
:loading="ticketLoadingId === scope.row.id"
>
新增工单管理
{{ t('EquipmentManagement.TaskManagement.createWorkOrder') }}
</el-button>
<el-button
link
type="primary"
@click="openForm('update', scope.row)"
v-hasPermi="['mes:task-management:update']"
>
编辑
</el-button>
>{{ t('action.update') }}</el-button>
<el-button link type="danger" @click="handleDelete(scope.row.id)" v-hasPermi="['mes:task-management:delete']">
删除
{{ t('action.delete') }}
</el-button>
</template>
</el-table-column>
@ -136,8 +142,8 @@ const message = useMessage()
const { t } = useI18n()
const taskTypeOptions = [
{ label: '点检', value: 1 },
{ label: '保养', value: 2 }
{ label: t('EquipmentManagement.TaskManagement.taskTypeInspect'), value: 1 },
{ label: t('EquipmentManagement.TaskManagement.taskTypeMaintain'), value: 2 }
]
const loading = ref(true)
@ -236,9 +242,9 @@ const handleCreateTicket = async (id?: number) => {
ticketLoadingId.value = id
try {
await TaskManagementApi.createTaskManagementTicket(id)
message.success('创建工单成功')
message.success(t('EquipmentManagement.TaskManagement.createTicketSuccess'))
} catch {
message.error('创建工单失败')
message.error(t('EquipmentManagement.TaskManagement.createTicketFail'))
} finally {
ticketLoadingId.value = undefined
}
@ -253,7 +259,7 @@ const handleExport = async () => {
params.ids = selectedIds.value.join(',')
}
const data = await TaskManagementApi.exportTaskManagement(params)
download.excel(data, '任务配置.xls')
download.excel(data, t('EquipmentManagement.TaskManagement.exportFilename'))
} catch {
} finally {
exportLoading.value = false

@ -1,23 +1,23 @@
<template>
<Dialog v-model="dialogVisible" :title="dialogTitle" width="1100px">
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true" :row-key="getRowKey">
<el-table-column type="index" label="序号" align="center" width="70" />
<el-table-column label="检验项名称" align="center" prop="inspectionItemName" min-width="180" />
<el-table-column label="检验方式" align="center" prop="inspectionMethod" min-width="140">
<el-table-column type="index" :label="t('MoldManagement.TicketResultDialog.index')" align="center" width="70" />
<el-table-column :label="t('MoldManagement.TicketResultDialog.inspectionItemName')" align="center" prop="inspectionItemName" min-width="200" />
<el-table-column :label="t('MoldManagement.TicketResultDialog.inspectionMethod')" align="center" prop="inspectionMethod" min-width="160">
<template #default="scope">
<dict-tag type="Inspection_method" :value="scope.row.inspectionMethod" />
</template>
</el-table-column>
<el-table-column label="判定基准" align="center" prop="judgmentCriteria" min-width="160" />
<el-table-column label="检验结果" align="center" prop="inspectionResult" width="120">
<el-table-column :label="t('MoldManagement.TicketResultDialog.judgmentCriteria')" align="center" prop="judgmentCriteria" min-width="180" />
<el-table-column :label="t('MoldManagement.TicketResultDialog.inspectionResult')" align="center" prop="inspectionResult" min-width="140">
<template #default="scope">
<el-tag v-if="String(scope.row.inspectionResult) === '0'" type="info"></el-tag>
<el-tag v-else-if="String(scope.row.inspectionResult) === '1'" type="success">通过</el-tag>
<el-tag v-else-if="String(scope.row.inspectionResult) === '2'" type="danger">不通过</el-tag>
<el-tag v-if="String(scope.row.inspectionResult) === '0'" type="info">{{ t('MoldManagement.TicketResultDialog.inspectionResultPending') }}</el-tag>
<el-tag v-else-if="String(scope.row.inspectionResult) === '1'" type="success">{{ t('MoldManagement.TicketResultDialog.inspectionResultPass') }}</el-tag>
<el-tag v-else-if="String(scope.row.inspectionResult) === '2'" type="danger">{{ t('MoldManagement.TicketResultDialog.inspectionResultFail') }}</el-tag>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="图片" align="center" prop="images" width="160">
<el-table-column :label="t('MoldManagement.TicketResultDialog.images')" align="center" prop="images" min-width="180">
<template #default="scope">
<UploadImg
v-if="String(scope.row.inspectionResult) === '0'" v-model="imageMap[String(scope.row.id)]"
@ -29,12 +29,12 @@ v-else-if="scope.row.images" :src="parseFirstImage(scope.row.images)"
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" min-width="160" />
<el-table-column label="操作" align="center" width="200" fixed="right">
<el-table-column :label="t('MoldManagement.TicketResultDialog.remark')" align="center" prop="remark" min-width="180" />
<el-table-column :label="t('MoldManagement.TicketResultDialog.operate')" align="center" min-width="220" fixed="right">
<template #default="scope">
<el-radio-group v-if="String(scope.row.inspectionResult) === '0'" v-model="decisionMap[String(scope.row.id)]">
<el-radio :label="'1'">通过</el-radio>
<el-radio :label="'2'">不通过</el-radio>
<el-radio :label="'1'">{{ t('MoldManagement.TicketResultDialog.pass') }}</el-radio>
<el-radio :label="'2'">{{ t('MoldManagement.TicketResultDialog.fail') }}</el-radio>
</el-radio-group>
<span v-else>-</span>
</template>
@ -48,8 +48,8 @@ v-show="total > 0" v-model:current-page="queryParams.pageNo" v-model:page-size="
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
<template #footer>
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="handleSave" :loading="submitLoading"> </el-button>
<el-button @click="dialogVisible = false">{{ t('MoldManagement.TicketResultDialog.cancel') }}</el-button>
<el-button type="primary" @click="handleSave" :loading="submitLoading">{{ t('MoldManagement.TicketResultDialog.save') }}</el-button>
</template>
</Dialog>
</template>
@ -59,6 +59,7 @@ import { TicketManagementApi, TicketResultVO } from '@/api/mold/ticketManagement
defineOptions({ name: 'TicketResultDialog' })
const { t } = useI18n()
const message = useMessage()
const dialogVisible = ref(false)
@ -79,7 +80,7 @@ const queryParams = reactive({
const open = async (options: { managementId: number; title?: string }) => {
dialogVisible.value = true
dialogTitle.value = options.title || '检验结果'
dialogTitle.value = options.title || t('MoldManagement.TicketResultDialog.moduleName')
managementId.value = options.managementId
for (const key of Object.keys(decisionMap)) delete decisionMap[key]
for (const key of Object.keys(imageMap)) delete imageMap[key]
@ -133,16 +134,16 @@ const handleSave = async () => {
payload.push({ ...(row as any), inspectionResult: decision, images: img || row.images })
}
if (!payload.length) {
message.error('请先为待检测记录选择通过或不通过')
message.error(t('MoldManagement.TicketResultDialog.selectDecisionTip'))
return
}
submitLoading.value = true
try {
await TicketManagementApi.batchUpdateTicketResults(payload)
message.success('更新成功')
message.success(t('MoldManagement.TicketResultDialog.updateSuccess'))
dialogVisible.value = false
} catch {
message.error('更新失败')
message.error(t('MoldManagement.TicketResultDialog.updateFail'))
} finally {
submitLoading.value = false
}

@ -1,36 +1,51 @@
<template>
<ContentWrap>
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
<el-form-item label="单号" prop="planNo">
<el-form class="-mb-15px" :model="queryParams" ref="queryFormRef" :inline="true" label-width="100px">
<el-form-item :label="t('MoldManagement.MoldWorkOrderInquiry.planNo')" prop="planNo">
<el-input
v-model="queryParams.planNo"
placeholder="请输入单号"
:placeholder="t('MoldManagement.MoldWorkOrderInquiry.placeholderPlanNo')"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="类型" prop="planType">
<el-select v-model="queryParams.planType" placeholder="请选择类型" clearable class="!w-240px">
<el-form-item :label="t('MoldManagement.MoldWorkOrderInquiry.planType')" prop="planType">
<el-select
v-model="queryParams.planType"
:placeholder="t('MoldManagement.MoldWorkOrderInquiry.placeholderPlanType')"
clearable
class="!w-240px"
>
<el-option v-for="opt in planTypeOptions" :key="String(opt.value)" :label="opt.label" :value="opt.value" />
</el-select>
</el-form-item>
<el-form-item label="作业状态" prop="jobStatus">
<el-select v-model="queryParams.jobStatus" placeholder="请选择作业状态" clearable class="!w-240px">
<el-form-item :label="t('MoldManagement.MoldWorkOrderInquiry.jobStatus')" prop="jobStatus">
<el-select
v-model="queryParams.jobStatus"
:placeholder="t('MoldManagement.MoldWorkOrderInquiry.placeholderJobStatus')"
clearable
class="!w-240px"
>
<el-option v-for="opt in getStrDictOptions('job_status')" :key="String(opt.value)" :label="opt.label" :value="opt.value" />
</el-select>
</el-form-item>
<el-form-item label="结果" prop="jobResult">
<el-select v-model="queryParams.jobResult" placeholder="请选择结果" clearable class="!w-240px">
<el-form-item :label="t('MoldManagement.MoldWorkOrderInquiry.jobResult')" prop="jobResult">
<el-select
v-model="queryParams.jobResult"
:placeholder="t('MoldManagement.MoldWorkOrderInquiry.placeholderJobResult')"
clearable
class="!w-240px"
>
<el-option v-for="opt in jobResultOptions" :key="opt.value" :label="opt.label" :value="opt.value" />
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="resetQuery">
<Icon icon="ep:refresh" class="mr-5px" /> 重置
<Icon icon="ep:refresh" class="mr-5px" /> {{ t('MoldManagement.MoldWorkOrderInquiry.reset') }}
</el-button>
<el-button type="primary" @click="handleQuery">
<Icon icon="ep:search" class="mr-5px" /> 查询
<Icon icon="ep:search" class="mr-5px" /> {{ t('MoldManagement.MoldWorkOrderInquiry.query') }}
</el-button>
</el-form-item>
</el-form>
@ -39,7 +54,7 @@
<ContentWrap>
<div class="mb-10px">
<el-button type="warning" plain @click="handleBatchCancel" :disabled="!selectedIds.length" :loading="cancelLoading">
取消任务
{{ t('MoldManagement.MoldWorkOrderInquiry.cancelTask') }}
</el-button>
</div>
@ -52,34 +67,34 @@
@row-click="handleRowClick"
>
<el-table-column type="selection" width="55" />
<el-table-column type="index" label="序号" align="center" width="70" />
<el-table-column label="单号" align="center" prop="planNo" min-width="160" />
<el-table-column label="模具名称" align="center" prop="moldName" min-width="160" />
<el-table-column label="类型" align="center" prop="planType" width="90">
<el-table-column type="index" :label="t('MoldManagement.MoldWorkOrderInquiry.index')" align="center" width="70" />
<el-table-column :label="t('MoldManagement.MoldWorkOrderInquiry.planNo')" align="center" prop="planNo" min-width="160" />
<el-table-column :label="t('MoldManagement.MoldWorkOrderInquiry.moldName')" align="center" prop="moldName" min-width="160" />
<el-table-column :label="t('MoldManagement.MoldWorkOrderInquiry.planType')" align="center" prop="planType" min-width="110">
<template #default="scope">
<el-tag v-if="String(scope.row.planType) === '1'" type="primary"></el-tag>
<el-tag v-else-if="String(scope.row.planType) === '2'" type="success">保养</el-tag>
<el-tag v-if="String(scope.row.planType) === '1'" type="primary">{{ t('MoldManagement.MoldWorkOrderInquiry.planTypeInspect') }}</el-tag>
<el-tag v-else-if="String(scope.row.planType) === '2'" type="success">{{ t('MoldManagement.MoldWorkOrderInquiry.planTypeMaintain') }}</el-tag>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="计划配置名称" align="center" prop="configName" min-width="160" />
<el-table-column label="作业状态" align="center" prop="jobStatus" width="120">
<el-table-column :label="t('MoldManagement.MoldWorkOrderInquiry.configName')" align="center" prop="configName" min-width="180" />
<el-table-column :label="t('MoldManagement.MoldWorkOrderInquiry.jobStatus')" align="center" prop="jobStatus" min-width="140">
<template #default="scope">
<dict-tag :type="'job_status'" :value="scope.row.jobStatus" />
</template>
</el-table-column>
<el-table-column label="作业人" align="center" prop="operatorName" width="140" />
<el-table-column label="作业时间" align="center" prop="taskTime" :formatter="dateFormatter" width="180" />
<el-table-column label="计划结束作业时间" align="center" prop="taskEndTime" :formatter="dateFormatter" width="180" />
<el-table-column label="结果" align="center" prop="jobResult" width="90">
<el-table-column :label="t('MoldManagement.MoldWorkOrderInquiry.operatorName')" align="center" prop="operatorName" min-width="160" />
<el-table-column :label="t('MoldManagement.MoldWorkOrderInquiry.taskTime')" align="center" prop="taskTime" :formatter="dateFormatter" min-width="190" />
<el-table-column :label="t('MoldManagement.MoldWorkOrderInquiry.taskEndTime')" align="center" prop="taskEndTime" :formatter="dateFormatter" min-width="200" />
<el-table-column :label="t('MoldManagement.MoldWorkOrderInquiry.jobResult')" align="center" prop="jobResult" min-width="110">
<template #default="scope">
<el-tag v-if="scope.row.jobResult == '1'" type="success"></el-tag>
<el-tag v-else-if="scope.row.jobResult == '2'" type="danger">不通过</el-tag>
<el-tag v-if="scope.row.jobResult == '1'" type="success">{{ t('MoldManagement.MoldWorkOrderInquiry.jobResultOk') }}</el-tag>
<el-tag v-else-if="scope.row.jobResult == '2'" type="danger">{{ t('MoldManagement.MoldWorkOrderInquiry.jobResultNg') }}</el-tag>
<span v-else>-</span>
</template>
</el-table-column>
<!-- <el-table-column label="备注" align="center" prop="remark" min-width="160" /> -->
<el-table-column label="创建时间" align="center" prop="createTime" :formatter="dateFormatter" width="180" />
<el-table-column :label="t('MoldManagement.MoldWorkOrderInquiry.createTime')" align="center" prop="createTime" :formatter="dateFormatter" min-width="190" />
</el-table>
<Pagination :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
@ -95,18 +110,20 @@ import { useDictStoreWithOut } from '@/store/modules/dict'
import { TicketManagementApi, TicketManagementVO } from '@/api/mold/ticketManagement'
import TicketResultDialog from '@/views/mold/workOrderInquiry/components/TicketResultDialog.vue'
const { t } = useI18n()
defineOptions({ name: 'MoldWorkOrderInquiry' })
const message = useMessage()
const dictStore = useDictStoreWithOut()
const planTypeOptions = [
{ label: '点检', value: '1' },
{ label: '保养', value: '2' }
{ label: t('MoldManagement.MoldWorkOrderInquiry.planTypeInspect'), value: '1' },
{ label: t('MoldManagement.MoldWorkOrderInquiry.planTypeMaintain'), value: '2' }
]
const jobResultOptions = [
{ label: '通过', value: 'OK' },
{ label: '不通过', value: 'NG' }
{ label: t('MoldManagement.MoldWorkOrderInquiry.jobResultOk'), value: 'OK' },
{ label: t('MoldManagement.MoldWorkOrderInquiry.jobResultNg'), value: 'NG' }
]
const loading = ref(true)
@ -156,10 +173,10 @@ const handleSelectionChange = (rows: TicketManagementVO[]) => {
const handleBatchCancel = async () => {
if (!selectedIds.value.length) return
try {
await message.confirm('确认取消选中的任务吗?')
await message.confirm(t('MoldManagement.MoldWorkOrderInquiry.cancelConfirm'))
cancelLoading.value = true
await TicketManagementApi.batchUpdateTicketStatus({ ids: selectedIds.value.join(','), jobStatus: '2' })
message.success('取消任务成功')
message.success(t('MoldManagement.MoldWorkOrderInquiry.cancelSuccess'))
selectedIds.value = []
await getList()
} catch {
@ -175,7 +192,9 @@ const handleRowClick = async (row: TicketManagementVO, column: any) => {
if (!row?.id) return
await resultDialogRef.value?.open({
managementId: row.id,
title: row.planNo ? `检验结果-${row.planNo}` : '检验结果'
title: row.planNo
? `${t('MoldManagement.MoldWorkOrderInquiry.inspectResultTitlePrefix')}${row.planNo}`
: t('MoldManagement.MoldWorkOrderInquiry.inspectResultTitle')
})
}
@ -184,4 +203,3 @@ onMounted(async () => {
await getList()
})
</script>

@ -18,14 +18,28 @@
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { colors } from '../utils'
import { DashboardApi } from '@/api/dashboard'
const overviewItems = [
{ key: 'device', label: '设备数量', value: '987,965', percent: 78, color: colors.cyan },
{ key: 'running', label: '运行数量', value: '30', percent: 66, color: colors.blue },
{ key: 'idle', label: '待机数量', value: '2', percent: 42, color: colors.warn },
{ key: 'alarm', label: '报警数量', value: '10', percent: 58, color: colors.danger }
]
type OverviewItemKey = 'device' | 'running' | 'idle' | 'alarm' | 'utilization' | 'faultRate'
interface OverviewItem {
key: OverviewItemKey
label: string
value: string
percent: number
color: string
}
const overviewItems = ref<OverviewItem[]>([
{ key: 'device', label: '设备数量', value: '0', percent: 0, color: colors.cyan },
{ key: 'running', label: '运行数量', value: '0', percent: 0, color: colors.blue },
{ key: 'idle', label: '待机数量', value: '0', percent: 0, color: colors.warn },
{ key: 'alarm', label: '报警数量', value: '0', percent: 0, color: colors.danger },
{ key: 'utilization', label: '稼动率', value: '0%', percent: 0, color: colors.green },
{ key: 'faultRate', label: '故障率', value: '0%', percent: 0, color: colors.purple }
])
const getGaugeStyle = (percent: number, color: string) => {
const p = Math.max(0, Math.min(100, percent))
@ -33,6 +47,92 @@ const getGaugeStyle = (percent: number, color: string) => {
background: `conic-gradient(${color} ${p * 3.6}deg, rgba(148,163,184,0.18) 0deg)`
}
}
const formatNumber = (value: number | string | undefined | null) => {
const n = Number(value ?? 0)
if (!Number.isFinite(n)) return '0'
return n.toLocaleString('zh-CN')
}
const calcPercent = (part: number, total: number) => {
if (!total || total <= 0 || !Number.isFinite(part)) return 0
const raw = (part / total) * 100
return Math.max(0, Math.min(100, Math.round(raw)))
}
const loadOverview = async () => {
try {
const res: any = await DashboardApi.getDeviceOperationalStatus()
const data = (res && typeof res === 'object' ? (res.data ?? res) : {}) as any
const totalDevices = Number(data.totalDevices ?? 0)
const runningCount = Number(data.runningCount ?? 0)
const standbyCount = Number(data.standbyCount ?? 0)
const faultCount = Number(data.faultCount ?? 0)
const warningCount = Number(data.warningCount ?? 0)
const utilizationRateRaw = String(data.utilizationRate ?? '0')
const faultRateRaw = String(data.faultRate ?? '0')
const utilizationPercent = Number.parseFloat(utilizationRateRaw.replace('%', '')) || 0
const faultPercent = Number.parseFloat(faultRateRaw.replace('%', '')) || 0
const alarmCount = faultCount + warningCount
overviewItems.value = overviewItems.value.map((item) => {
if (item.key === 'device') {
return {
...item,
value: formatNumber(totalDevices),
percent: calcPercent(totalDevices, totalDevices || 1)
}
}
if (item.key === 'running') {
return {
...item,
value: formatNumber(runningCount),
percent: calcPercent(runningCount, totalDevices)
}
}
if (item.key === 'idle') {
return {
...item,
value: formatNumber(standbyCount),
percent: calcPercent(standbyCount, totalDevices)
}
}
if (item.key === 'alarm') {
return {
...item,
value: formatNumber(alarmCount),
percent: calcPercent(alarmCount, totalDevices)
}
}
if (item.key === 'utilization') {
const p = Math.max(0, Math.min(100, Math.round(utilizationPercent)))
return {
...item,
value: utilizationRateRaw.includes('%') ? utilizationRateRaw : `${utilizationPercent.toFixed(2)}%`,
percent: p
}
}
if (item.key === 'faultRate') {
const p = Math.max(0, Math.min(100, Math.round(faultPercent)))
return {
...item,
value: faultRateRaw.includes('%') ? faultRateRaw : `${faultPercent.toFixed(2)}%`,
percent: p
}
}
return item
})
} catch (e) {
}
}
onMounted(() => {
loadOverview()
})
</script>
<style scoped>
@ -105,7 +205,7 @@ const getGaugeStyle = (percent: number, color: string) => {
.overview-body {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}

@ -1,9 +1,17 @@
<template>
<div class="card">
<div class="panel-title">
<span class="title-dot"></span>
<span>事件提醒</span>
</div>
<div class="panel-title">
<div class="panel-title-left">
<span class="title-dot"></span>
<span>事件提醒</span>
</div>
<div class="panel-title-right">
<el-radio-group v-model="mode" size="small">
<el-radio-button label="device">设备</el-radio-button>
<el-radio-button label="mold">模具</el-radio-button>
</el-radio-group>
</div>
</div>
<div class="panel-body body">
<div class="event-list">
<div v-for="item in eventItems" :key="item.key" class="event-row">
@ -24,77 +32,142 @@
</template>
<script setup lang="ts">
import { onMounted, onUnmounted, ref } from 'vue'
import { onMounted, onUnmounted, ref, watch } from 'vue'
import * as echarts from 'echarts'
import { DashboardApi, TaskStatisticsData } from '@/api/dashboard'
import { colors } from '../utils'
interface EventItem {
key: string
name: string
count: number
percent: number
color: string
}
const chartRef = ref<HTMLElement | null>(null)
let chart: echarts.ECharts | null = null
const eventItems = [
{ key: 'check', name: '点检', count: 1, percent: 30, color: colors.cyan },
{ key: 'maintain', name: '保养', count: 1, percent: 42, color: colors.warn },
{ key: 'repair', name: '维修', count: 1, percent: 20, color: colors.danger }
]
const mode = ref<'device' | 'mold'>('device')
const eventItems = ref<EventItem[]>([])
const rawStats = ref<TaskStatisticsData | null>(null)
let switchTimer: number | undefined
const render = () => {
if (!chart) return
const percentMap = Object.fromEntries(eventItems.map((i) => [i.name, i.percent])) as Record<string, number>
chart.setOption({
backgroundColor: 'transparent',
tooltip: { trigger: 'item' },
legend: {
orient: 'vertical',
right: 10,
top: 'center',
icon: 'circle',
itemWidth: 10,
itemHeight: 10,
itemGap: 14,
selectedMode: false,
textStyle: {
rich: {
percent: { fontSize: 18, fontWeight: 900, color: '#e5f0ff', lineHeight: 20 },
name: { fontSize: 12, fontWeight: 700, color: 'rgba(148,163,184,0.95)', lineHeight: 16 }
}
},
formatter: (name: string) => `{percent|${percentMap[name] ?? 0}%}\n{name|${name}}`
},
series: [
{
type: 'pie',
radius: ['48%', '70%'],
center: ['35%', '50%'],
avoidLabelOverlap: true,
label: { show: false },
labelLine: { show: false },
padAngle: 2,
itemStyle: { borderRadius: 8, borderWidth: 6, borderColor: 'rgba(2,6,23,0.9)' },
emphasis: { scale: false },
data: [
{ value: 30, name: '点检', itemStyle: { color: colors.cyan } },
{ value: 42, name: '保养', itemStyle: { color: colors.warn } },
{ value: 20, name: '维修', itemStyle: { color: colors.danger } }
]
}
]
})
if (!chart) return
const items = eventItems.value
const percentMap = Object.fromEntries(items.map((i) => [i.name, i.percent])) as Record<string, number>
const seriesData = items.map((i) => ({ value: i.count, name: i.name, itemStyle: { color: i.color } }))
chart.setOption({
backgroundColor: 'transparent',
tooltip: { trigger: 'item' },
legend: {
orient: 'vertical',
right: 10,
top: 'center',
icon: 'circle',
itemWidth: 10,
itemHeight: 10,
itemGap: 14,
textStyle: {
rich: {
percent: { fontSize: 18, fontWeight: 900, color: '#e5f0ff', lineHeight: 20 },
name: { fontSize: 12, fontWeight: 700, color: 'rgba(148,163,184,0.95)', lineHeight: 16 }
}
},
formatter: (name: string) => `{percent|${percentMap[name] ?? 0}%}\n{name|${name}}`
},
series: [
{
type: 'pie',
radius: ['48%', '70%'],
center: ['35%', '50%'],
avoidLabelOverlap: true,
label: { show: false },
labelLine: { show: false },
padAngle: 2,
itemStyle: { borderRadius: 8, borderWidth: 6, borderColor: 'rgba(2,6,23,0.9)' },
emphasis: { scale: false },
data: seriesData
}
]
})
}
const applyTaskStatistics = (data: TaskStatisticsData) => {
rawStats.value = data
const isDevice = mode.value === 'device'
const inspection = Number(isDevice ? data.deviceInspection : data.moldInspection) || 0
const maintenance = Number(isDevice ? data.deviceMaintenance : data.moldMaintenance) || 0
const repair = Number(isDevice ? data.deviceRepair : data.moldRepair) || 0
const total = inspection + maintenance + repair
const toPercent = (value: number) => (total > 0 ? Math.round((value / total) * 100) : 0)
eventItems.value = [
{
key: 'check',
name: '点检',
count: inspection,
percent: toPercent(inspection),
color: colors.cyan
},
{
key: 'maintain',
name: '保养',
count: maintenance,
percent: toPercent(maintenance),
color: colors.warn
},
{
key: 'repair',
name: '维修',
count: repair,
percent: toPercent(repair),
color: colors.danger
}
]
render()
}
const loadTaskStatistics = async () => {
try {
const res = await DashboardApi.getTaskStatistics()
const payload = (res && typeof res === 'object' && 'data' in res ? (res as any).data : res) as
| TaskStatisticsData
| null
if (!payload) return
applyTaskStatistics(payload)
} catch (error) {
console.error(error)
}
}
watch(mode, () => {
if (!rawStats.value) return
applyTaskStatistics(rawStats.value)
})
const resize = () => {
chart?.resize()
chart?.resize()
}
onMounted(() => {
if (!chartRef.value) return
chart = echarts.init(chartRef.value, 'dark', { renderer: 'canvas' })
render()
window.addEventListener('resize', resize)
if (!chartRef.value) return
chart = echarts.init(chartRef.value, 'dark', { renderer: 'canvas' })
render()
loadTaskStatistics()
switchTimer = window.setInterval(() => {
if (!rawStats.value) return
mode.value = mode.value === 'device' ? 'mold' : 'device'
}, 10000)
window.addEventListener('resize', resize)
})
onUnmounted(() => {
window.removeEventListener('resize', resize)
chart?.dispose()
window.removeEventListener('resize', resize)
if (switchTimer) {
clearInterval(switchTimer)
switchTimer = undefined
}
chart?.dispose()
})
</script>
@ -142,14 +215,51 @@ onUnmounted(() => {
}
.panel-title {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 12px;
border-bottom: 1px solid rgba(41, 54, 95, 0.9);
font-size: 16px;
font-weight: 900;
color: #e5f0ff;
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
padding: 10px 12px;
border-bottom: 1px solid rgba(41, 54, 95, 0.9);
font-size: 16px;
font-weight: 900;
color: #e5f0ff;
}
.panel-title-left {
display: inline-flex;
align-items: center;
gap: 10px;
}
.panel-title-right {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 2px 4px;
border-radius: 999px;
border: 1px solid rgba(56, 189, 248, 0.5);
background: radial-gradient(circle at 0 0, rgba(56, 189, 248, 0.18), transparent 70%);
}
.panel-title-right :deep(.el-radio-group) {
background: transparent;
}
.panel-title-right :deep(.el-radio-button__inner) {
border: none;
box-shadow: none;
background: transparent;
color: rgba(148, 163, 184, 0.95);
padding: 4px 10px;
font-size: 12px;
}
.panel-title-right :deep(.el-radio-button__original-radio:checked + .el-radio-button__inner) {
background: rgba(15, 23, 42, 0.9);
color: #e5f0ff;
box-shadow: 0 0 0 1px rgba(56, 189, 248, 0.85);
border-radius: 999px;
}
.title-dot {

@ -8,21 +8,46 @@
<table class="task-table">
<thead>
<tr>
<th>时间</th>
<th>类型</th>
<th>设备</th>
<th>责任人</th>
<th>状态</th>
<th>编号</th>
<th>名称</th>
<th>类型</th>
<th>完成状态</th>
<th>结果</th>
</tr>
</thead>
<tbody>
<tr v-for="row in taskRows" :key="row.id" :class="row.status">
<td>{{ row.time }}</td>
<td>{{ row.type }}</td>
<td>{{ row.device }}</td>
<td>{{ row.owner }}</td>
<td class="status-cell" :style="{ color: row.color }">{{ row.statusLabel }}</td>
</tr>
<tbody ref="tbodyRef">
<tr v-for="row in taskRows" :key="row.id">
<td>{{ row.code }}</td>
<td>{{ row.name }}</td>
<td>{{ row.type }}</td>
<td>
<el-tag
v-if="row.finishStatusLabel"
class="status-tag"
size="small"
:disable-transitions="true"
:hit="false"
:round="true"
:type="row.finishStatusType || 'info'"
>
{{ row.finishStatusLabel }}
</el-tag>
</td>
<td class="status-cell">
<el-tag
v-if="row.resultStatusLabel !== '-'"
class="status-tag"
size="small"
:disable-transitions="true"
:hit="false"
:round="true"
:type="row.resultStatusType || 'info'"
>
{{ row.resultStatusLabel }}
</el-tag>
<span v-else>-</span>
</td>
</tr>
</tbody>
</table>
</div>
@ -30,16 +55,106 @@
</template>
<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue'
import { DashboardApi, DashboardTaskItem } from '@/api/dashboard'
import { colors } from '../utils'
const taskRows = [
{ id: 1, time: '10:20', type: '点检', device: '1号装配机', owner: 'XXX', status: 'ok', statusLabel: '正常', color: colors.cyan },
{ id: 2, time: '10:25', type: '点检', device: '1号装配机', owner: 'XXX', status: 'ok', statusLabel: '正常', color: colors.cyan },
{ id: 3, time: '10:30', type: '维修', device: '1号装配机', owner: 'XXX', status: 'danger', statusLabel: '维修', color: colors.danger },
{ id: 4, time: '10:35', type: '保养', device: '1号装配机', owner: 'XXX', status: 'ok', statusLabel: '保养', color: colors.warn },
{ id: 5, time: '10:40', type: '点检', device: '1号装配机', owner: 'XXX', status: 'ok', statusLabel: '正常', color: colors.cyan },
{ id: 6, time: '10:45', type: '点检', device: '1号装配机', owner: 'XXX', status: 'ok', statusLabel: '正常', color: colors.cyan }
]
interface TaskRow {
id: string
code: string
name: string
type: string
finishStatusLabel: string
resultStatusLabel: string
finishStatusType: '' | 'success' | 'warning' | 'danger' | 'info'
resultStatusType: '' | 'success' | 'warning' | 'danger' | 'info'
}
const taskRows = ref<TaskRow[]>([])
const tbodyRef = ref<HTMLElement | null>(null)
let scrollTimer: number | undefined
const mapItemToRow = (item: DashboardTaskItem, index: number): TaskRow => {
const resultStatus = Number(item.resultStatus) || 0
const finishCode = String(item.finishStatus ?? '').trim()
let finishStatusLabel = item.finishStatus
let finishStatusType: TaskRow['finishStatusType'] = ''
if (finishCode === '0') finishStatusLabel = '待完成'
else if (finishCode === '1') finishStatusLabel = '已完成'
else if (finishCode === '2') finishStatusLabel = '已取消'
if (finishCode === '0') finishStatusType = 'warning'
else if (finishCode === '1') finishStatusType = 'success'
else if (finishCode === '2') finishStatusType = 'info'
let resultStatusLabel = '-'
let resultStatusType: TaskRow['resultStatusType'] = ''
if (resultStatus === 1) {
resultStatusLabel = '通过'
resultStatusType = 'success'
} else if (resultStatus === 2) {
resultStatusLabel = '不通过'
resultStatusType = 'danger'
}
return {
id: `${item.code || 'task'}-${index}`,
code: item.code,
name: item.name,
type: item.type,
finishStatusLabel,
resultStatusLabel,
finishStatusType,
resultStatusType
}
}
const loadTaskList = async () => {
try {
const res = await DashboardApi.getAllTaskList()
const payload = (res && typeof res === 'object' && 'data' in res ? (res as any).data : res) as
| DashboardTaskItem[]
| null
if (!payload || !Array.isArray(payload)) {
taskRows.value = []
return
}
taskRows.value = payload.map(mapItemToRow)
} catch (error) {
console.error(error)
taskRows.value = []
}
}
const startAutoScroll = () => {
if (!tbodyRef.value) return
const rows = tbodyRef.value.querySelectorAll('tr')
if (!rows || rows.length <= 8) return
scrollTimer = window.setInterval(() => {
if (!tbodyRef.value) return
const first = tbodyRef.value.firstElementChild as HTMLElement | null
if (!first) return
first.style.transition = 'all 0.35s'
first.style.transform = 'translateY(-36px)'
first.style.opacity = '0'
window.setTimeout(() => {
if (!tbodyRef.value) return
first.style.transition = 'none'
first.style.transform = 'translateY(0)'
first.style.opacity = '1'
tbodyRef.value.appendChild(first)
}, 360)
}, 5000)
}
onMounted(async () => {
await loadTaskList()
startAutoScroll()
})
onUnmounted(() => {
if (scrollTimer) {
clearInterval(scrollTimer)
scrollTimer = undefined
}
})
</script>
<style scoped>
@ -149,4 +264,11 @@ const taskRows = [
.status-cell {
font-weight: 800;
}
.status-tag {
min-width: 60px;
text-align: center;
border-radius: 999px;
padding: 0 10px;
}
</style>

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save