@@ -1,7 +1,7 @@ | |||
### | |||
# @Author: Do not edit | |||
# @Date: 2023-08-29 09:40:39 | |||
# @LastEditTime: 2024-03-22 10:57:53 | |||
# @LastEditTime: 2024-03-22 14:18:33 | |||
# @LastEditors: zhp | |||
# @Description: | |||
### | |||
@@ -1,7 +1,7 @@ | |||
/* | |||
* @Author: Do not edit | |||
* @Date: 2023-10-21 11:50:46 | |||
* @LastEditTime: 2023-11-15 17:19:19 | |||
* @LastEditTime: 2024-03-21 10:49:24 | |||
* @LastEditors: DY | |||
* @Description: | |||
*/ | |||
@@ -118,6 +118,24 @@ export function getCoreWOMaPage(query) { | |||
}) | |||
} | |||
// 获得工单预使用原料分页----根据产品id | |||
export function getlistByProductId(query) { | |||
return request({ | |||
url: '/base/material-product-bom-det/listByProductId', | |||
method: 'get', | |||
params: query | |||
}) | |||
} | |||
// 获得工单预使用原料分页----根据工艺流程 | |||
export function getlistByFlowId(query) { | |||
return request({ | |||
url: '/extend/process-equ-material-bom-det/listByFlowId', | |||
method: 'get', | |||
params: query | |||
}) | |||
} | |||
// 获得预计用料信息分页 | |||
export function getMaterialBomPage(query) { | |||
return request({ | |||
@@ -162,3 +180,12 @@ export function updateConCoreWOr(data) { | |||
data: data | |||
}) | |||
} | |||
// 修改分配产量----批量 | |||
export function updateBatchConCoreWOr(data) { | |||
return request({ | |||
url: '/base/core-order-con-work-order/updateBatch', | |||
method: 'put', | |||
data: data | |||
}) | |||
} |
@@ -94,7 +94,7 @@ | |||
:show-file-list="false" | |||
icon="el-icon-upload2" | |||
:disabled="disabled" | |||
:before-upload="beforeUpload" | |||
:before-upload="col.uploadTips ? beforeUploadPic : beforeUpload" | |||
:on-success=" | |||
(response, file, fileList) => { | |||
handleUploadSuccess(response, file, col.prop); | |||
@@ -110,7 +110,7 @@ | |||
上传文件 | |||
</el-button> | |||
<div class="el-upload__tip" slot="tip" v-if="col.uploadTips"> | |||
{{ col.uploadTips || '只能上传jpg/png文件, 大小不超过2MB' }} | |||
{{ '只能上传jpg/png文件, 大小不超过2MB' }} | |||
</div> | |||
</el-upload> | |||
@@ -416,6 +416,26 @@ export default { | |||
// 上传成功的特殊处理 | |||
beforeUpload(file) { | |||
const checkFileSize = () => { | |||
const isLt2M = file.size / 1024 / 1024 < 2; | |||
if (!isLt2M) { | |||
this.$modal.msgError('上传文件大小不能超过 2MB!'); | |||
} | |||
return isLt2M; | |||
}; | |||
// const checkFileType = () => { | |||
// const isJPG = | |||
// file.type === 'image/jpeg' || | |||
// file.type === 'image/png' || | |||
// file.type === 'image/jpg'; | |||
// return isJPG; | |||
// }; | |||
// return checkFileSize() && checkFileType(); | |||
return checkFileSize(); | |||
}, | |||
// 上传成功的特殊处理----图片 | |||
beforeUploadPic(file) { | |||
const checkFileSize = () => { | |||
const isLt2M = file.size / 1024 / 1024 < 2; | |||
if (!isLt2M) { | |||
@@ -428,6 +448,9 @@ export default { | |||
file.type === 'image/jpeg' || | |||
file.type === 'image/png' || | |||
file.type === 'image/jpg'; | |||
if (!isJPG) { | |||
this.$modal.msgError('只能上传jpg/png文件!'); | |||
} | |||
return isJPG; | |||
}; | |||
return checkFileSize() && checkFileType(); | |||
@@ -2,7 +2,7 @@ | |||
* @Author: zwq | |||
* @Date: 2021-11-18 14:16:25 | |||
* @LastEditors: DY | |||
* @LastEditTime: 2023-12-12 16:04:44 | |||
* @LastEditTime: 2024-03-20 16:20:39 | |||
* @Description: | |||
--> | |||
<template> | |||
@@ -130,6 +130,11 @@ export default { | |||
if (this.dataForm.id) { | |||
this.urlOptions.infoURL(id).then(response => { | |||
this.dataForm = response.data; | |||
const tempPic = [] | |||
this.dataForm.files?.forEach(item => { | |||
tempPic.push(item.fileUrl) | |||
}) | |||
this.files = tempPic.join(',') | |||
if (this.setData) { | |||
this.setDataForm() | |||
} | |||
@@ -150,8 +155,8 @@ export default { | |||
} | |||
this.dataForm.files = [] | |||
if (this.files.length > 0) { | |||
this.files.forEach(item => { | |||
if (this.files.split(',').length > 0) { | |||
this.files.split(',').forEach(item => { | |||
const temp = { | |||
fileType: 1, | |||
fileUrl: item | |||
@@ -387,6 +387,7 @@ export default { | |||
label: '设备图片', | |||
prop: 'files2', | |||
fileType: 1, | |||
uploadTips: true | |||
}, | |||
], | |||
[{ input: true, label: '备注', prop: 'remark' }], | |||
@@ -161,7 +161,7 @@ export default { | |||
{ | |||
upload: true, | |||
label: '上传资料', | |||
prop: 'files', | |||
prop: 'files' | |||
}, | |||
], | |||
[{ input: true, label: '备注', prop: 'remark' }], | |||
@@ -186,8 +186,8 @@ export default { | |||
code: '', | |||
planProductId: '', | |||
specifications: '', | |||
planStartTime: '', | |||
planFinishTime: '', | |||
planStartTime: undefined, | |||
planFinishTime: undefined, | |||
planAssignQuantity: 0, | |||
planQuantity: 0, | |||
processFlowId: '', | |||
@@ -248,7 +248,31 @@ export default { | |||
this.dataForm.materialMethod = 1 | |||
} | |||
}, | |||
reset() { | |||
this.dataForm = { | |||
id: undefined, | |||
workOrderId: '', | |||
name: '', | |||
code: '', | |||
planProductId: '', | |||
specifications: '', | |||
planStartTime: undefined, | |||
planFinishTime: undefined, | |||
planAssignQuantity: 0, | |||
planQuantity: 0, | |||
processFlowId: '', | |||
materialMethod: 1, | |||
triggerOrigin: 1, | |||
priority: '', | |||
productLineIds: [], | |||
type: '', | |||
workers: '', | |||
roomNameDict: '', | |||
status: 1 | |||
} | |||
}, | |||
init(id) { | |||
this.reset(); | |||
this.dataForm.id = id || ""; | |||
this.visible = true; | |||
if (this.urlOptions.getOption) { | |||
@@ -256,6 +280,7 @@ export default { | |||
} | |||
this.$nextTick(() => { | |||
this.$refs["dataForm"].resetFields(); | |||
console.log('222', this.dataForm) | |||
this.planStartTime = '' | |||
this.planFinishTime = '' | |||
if (this.dataForm.id) { | |||
@@ -264,6 +289,12 @@ export default { | |||
if (this.dataForm.priority !== undefined) { | |||
this.dataForm.priority = String(this.dataForm.priority) | |||
} | |||
if (this.dataForm.planStartTime === 0) { | |||
this.dataForm.planStartTime = undefined | |||
} | |||
if (this.dataForm.planFinishTime === 0) { | |||
this.dataForm.planFinishTime = undefined | |||
} | |||
if (this.dataForm.roomNameDict !== undefined) { | |||
this.dataForm.roomNameDict = String(this.dataForm.roomNameDict) | |||
} | |||
@@ -2,16 +2,19 @@ | |||
* @Author: zwq | |||
* @Date: 2021-11-18 14:16:25 | |||
* @LastEditors: DY | |||
* @LastEditTime: 2024-03-15 15:34:58 | |||
* @LastEditTime: 2024-03-22 08:53:20 | |||
* @Description: | |||
--> | |||
<template> | |||
<el-drawer | |||
:visible.sync="visible" | |||
:show-close="false" | |||
:wrapper-closable="false" | |||
:wrapper-closable="true" | |||
class="drawer" | |||
size="55%"> | |||
size="55%" | |||
:before-close="beforeClose" | |||
@closed="$emit('destroy')" | |||
> | |||
<small-title slot="title" :no-padding="true"> | |||
{{ '分配产量' }} | |||
</small-title> | |||
@@ -52,60 +55,47 @@ | |||
<el-date-picker | |||
v-model="dataForm.finishProduceTime" | |||
type="datetime" | |||
value-format="yyyy-MM-dd HH:mm:ss" | |||
placeholder="选择日期时间" /> | |||
value-format="timestamp" | |||
placeholder="选择实际生产完成时间" /> | |||
</el-form-item> | |||
</el-col> | |||
</el-row> | |||
</el-form> | |||
</div> | |||
<div class="attr-list"> | |||
<div v-show="!isdetail" class="attr-list"> | |||
<!-- <el-button v-show="!isdetail" type="success" size="small" style="float: right" @click="addRow()">添加一行</el-button> --> | |||
<el-table | |||
:data="tableData" | |||
style="width: 100%"> | |||
<el-table-column type="index" label="序号" /> | |||
<el-table-column prop="orderName" label="订单名称" /> | |||
<el-table-column prop="orderCode" label="订单编码" /> | |||
<el-table-column prop="priority" label="优先级" /> | |||
<el-table-column prop="planAssignmentQuantity" label="计划分配数量" > | |||
<template slot-scope="scope"> | |||
<el-input v-model="scope.row.planAssignmentQuantity" :disabled="scope.row.isallocation"></el-input> | |||
</template> | |||
</el-table-column> | |||
<el-table-column prop="actualAssignmentQuantity" label="实际分配数量"> | |||
<template slot-scope="scope"> | |||
<el-input v-model="scope.row.actualAssignmentQuantity" :disabled="scope.row.isallocation"></el-input> | |||
</template> | |||
</el-table-column> | |||
<el-table-column label="操作"> | |||
<template slot-scope="scope"> | |||
<el-button type="text" size="small" @click="saveData(scope.row)">保存</el-button> | |||
<!-- <el-tooltip v-if="!scope.row.isEdit" placement="top" content="编辑"> | |||
<el-button | |||
type="text" | |||
:style="{color:'#0B58FF'}" | |||
size="mini" | |||
@click="edit(scope.row)" | |||
> | |||
<svg-icon style="width: 18px; height: 18px" class="item-icon" icon-class="edit" /> | |||
</el-button> | |||
</el-tooltip> --> | |||
<!-- <el-tooltip placement="top" content="删除"> | |||
<el-button | |||
type="text" | |||
:style="{color:'#FF5454'}" | |||
size="mini" | |||
@click="deleteDetail(scope.row)" | |||
> | |||
<svg-icon style="width: 18px; height: 18px" class="item-icon" icon-class="table_delete" /> | |||
</el-button> | |||
</el-tooltip> --> | |||
</template> | |||
</el-table-column> | |||
</el-table> | |||
<el-form ref="tableForm" :model="form" style="padding: 0"> | |||
<el-table | |||
ref="table" | |||
:data="form.tableData" | |||
row-key="id" | |||
style="width: 100%"> | |||
<el-table-column type="index" label="序号" /> | |||
<el-table-column prop="orderName" label="订单名称" /> | |||
<el-table-column prop="orderCode" label="订单编码" /> | |||
<el-table-column prop="priority" label="优先级" /> | |||
<el-table-column prop="planAssignmentQuantity" label="计划分配数量" > | |||
<template slot-scope="scope"> | |||
<el-form-item prop="planAssignmentQuantity"> | |||
<el-input v-model.number="scope.row.planAssignmentQuantity" :disabled="scope.row.isallocation"></el-input> | |||
</el-form-item> | |||
</template> | |||
</el-table-column> | |||
<el-table-column label="*实际分配数量"> | |||
<template slot-scope="scope"> | |||
<el-form-item :prop="`tableData.${scope.$index}.actualAssignmentQuantity`" :rules="[{ required: true, message: '实际分配数量不能为空', trigger: 'blur' }]"> | |||
<el-input v-model.number="scope.row.actualAssignmentQuantity" :disabled="scope.row.isallocation"></el-input> | |||
</el-form-item> | |||
</template> | |||
</el-table-column> | |||
<!-- <el-table-column label="操作"> | |||
<template slot-scope="scope"> | |||
<el-button type="text" size="small" @click="saveData(scope.row)">保存</el-button> | |||
</template> | |||
</el-table-column> --> | |||
</el-table> | |||
</el-form> | |||
<pagination | |||
v-show="listQuery.total > 0" | |||
:total="listQuery.total" | |||
@@ -134,7 +124,7 @@ | |||
<script> | |||
import basicAdd from '../../core/mixins/basic-add'; | |||
import { getConOrderList, updateConCoreWOr, getCoreWO, statusChange } from '@/api/base/coreWorkOrder'; | |||
import { getConOrderList, updateConCoreWOr, updateBatchConCoreWOr, getCoreWO, statusChange } from '@/api/base/coreWorkOrder'; | |||
import SmallTitle from '../material/SmallTitle'; | |||
// import { parseTime } from '../../core/mixins/code-filter'; | |||
// import attrAdd from './attr-add'; | |||
@@ -158,6 +148,10 @@ export default { | |||
code: undefined, | |||
productId: '', | |||
remark: undefined, | |||
}, | |||
form: { | |||
tableData: [] | |||
}, | |||
productList: [], | |||
materialAttrList: [], | |||
@@ -174,26 +168,77 @@ export default { | |||
}, | |||
mounted() {}, | |||
methods: { | |||
beforeClose(done) { | |||
// if (this.mode.includes('edit')) { | |||
this.$confirm('确认关闭?') | |||
.then(_ => { | |||
done(); | |||
}) | |||
.catch(_ => {}); | |||
}, | |||
// 表单提交 | |||
dataFormSubmit() { | |||
// console.log('嗨害嗨', this.$refs['table']) | |||
console.log('nihc ', this.form.tableData) | |||
// this.$refs['tableForm'].validate((valid) => { | |||
// if (valid) { | |||
// alert('提交成功!'); | |||
// } else { | |||
// alert('表单验证失败!'); | |||
// return false; | |||
// } | |||
// }); | |||
this.$refs["dataForm"].validate((valid) => { | |||
if (!valid) { | |||
return false; | |||
} | |||
this.$refs['tableForm'].validate((valid) => { | |||
if (!valid) { | |||
return false; | |||
} | |||
// 修改的提交 | |||
console.log('aaaaaaa', this.form.tableData) | |||
// 判断分配数量 | |||
let num = 0 | |||
const tempList = this.form.tableData.map((item) => { | |||
item.workOrderId = this.dataForm.id | |||
num += item.actualAssignmentQuantity | |||
return item | |||
}) | |||
if (num <= this.dataForm.actualQuantity) { | |||
if (this.dataForm.id) { | |||
statusChange({ | |||
id: this.dataForm.id, | |||
status: 4, | |||
finishProduceTime: this.dataForm.finishProduceTime, | |||
actualQuantity: this.dataForm.actualQuantity | |||
}).then(response => { | |||
this.$modal.msgSuccess("操作成功!工单状态稍后将会更新!"); | |||
this.saveData(tempList) | |||
this.visible = false; | |||
this.$emit("refreshDataList"); | |||
}); | |||
return; | |||
} | |||
} else { | |||
this.$message.error('实际分配数量超过实际生产数量!') | |||
} | |||
console.log('2111', num, tempList) | |||
}); | |||
// 修改的提交 | |||
if (this.dataForm.id) { | |||
statusChange({ | |||
id: this.dataForm.id, | |||
status: 4, | |||
finishProduceTime: this.dataForm.finishProduceTime, | |||
actualQuantity: this.dataForm.actualQuantity | |||
}).then(response => { | |||
this.$modal.msgSuccess("操作成功!工单状态稍后将会更新!"); | |||
this.visible = false; | |||
this.$emit("refreshDataList"); | |||
}); | |||
return; | |||
} | |||
// if (this.dataForm.id) { | |||
// statusChange({ | |||
// id: this.dataForm.id, | |||
// status: 4, | |||
// finishProduceTime: this.dataForm.finishProduceTime, | |||
// actualQuantity: this.dataForm.actualQuantity | |||
// }).then(response => { | |||
// this.$modal.msgSuccess("操作成功!工单状态稍后将会更新!"); | |||
// this.visible = false; | |||
// this.$emit("refreshDataList"); | |||
// }); | |||
// return; | |||
// } | |||
// 添加的提交 | |||
// this.urlOptions.createURL(this.dataForm).then(response => { | |||
// this.$modal.msgSuccess("新增成功"); | |||
@@ -209,30 +254,14 @@ export default { | |||
edit(row) { | |||
row.isEdit = true | |||
}, | |||
saveData(row) { | |||
if (row.actualAssignmentQuantity) { | |||
if (row.id) { | |||
// updateMaterialPBDet({ | |||
// ...row | |||
// }).then((response) => { | |||
// this.$modal.msgSuccess('修改成功'); | |||
// // this.visible = false; | |||
// this.getList(); | |||
// }); | |||
// return; | |||
} | |||
// 修改的提交 | |||
updateConCoreWOr({ | |||
...row, | |||
workOrderId: this.dataForm.id | |||
}).then((response) => { | |||
this.$modal.msgSuccess('分配成功'); | |||
// this.visible = false; | |||
this.getList(); | |||
}); | |||
} else { | |||
this.$message.warning('请填写实际分配数量'); | |||
} | |||
saveData(list) { | |||
console.log('你好', list) | |||
// 修改的提交 | |||
updateBatchConCoreWOr(list).then((response) => { | |||
this.$modal.msgSuccess('分配成功'); | |||
// this.visible = false; | |||
this.getList(); | |||
}); | |||
}, | |||
getList() { | |||
// 获取工单分配详细列表 | |||
@@ -245,6 +274,7 @@ export default { | |||
item.isallocation = item.actualAssignmentQuantity ? true : false | |||
return item | |||
}); | |||
this.$set(this.form, 'tableData', this.tableData) | |||
this.listQuery.total = response.data.length; | |||
}); | |||
}, | |||
@@ -2,7 +2,7 @@ | |||
* @Author: zwq | |||
* @Date: 2021-11-18 14:16:25 | |||
* @LastEditors: DY | |||
* @LastEditTime: 2024-03-15 15:40:24 | |||
* @LastEditTime: 2024-03-21 16:52:46 | |||
* @Description: | |||
--> | |||
<template> | |||
@@ -16,7 +16,13 @@ | |||
<!-- <small-title slot="title" :no-padding="true"> | |||
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }} | |||
</small-title> --> | |||
<div v-show="workOrderButton.length" class="buttonDiv"> | |||
<div v-show="workOrderButton.length" style="position: relative;padding-right: 90px;"> | |||
<topTabVue :orderIdList='workOrderButton' :orderId="workorderId" @emitFun='toggleName' /> | |||
<el-button type="primary" plain size="small" | |||
style="position: absolute;right: 0; top: 0;height: 48px;font-size: 14px;" @click="goback"><svg-icon | |||
icon-class="return" /> 返回</el-button> | |||
</div> | |||
<!-- <div v-show="workOrderButton.length" class="buttonDiv"> | |||
<div style="display: flex; width: 100%;"> | |||
<el-button v-show="showScroll" type="text" style="width: 30px; background: white; margin-right: 8px" @click="scrollLeft" icon="el-icon-caret-left"></el-button> | |||
<div ref="content" class="scrollDiv"> | |||
@@ -27,7 +33,7 @@ | |||
<svg-icon icon-class="return"/>返回 | |||
</el-button> | |||
</div> | |||
</div> | |||
</div> --> | |||
<div class="content"> | |||
<div class="card"> | |||
<div class="boxTitle"> | |||
@@ -157,7 +163,7 @@ | |||
</el-col> | |||
<el-col :span="3"> | |||
<div class="blodTip">废片数量</div> | |||
<div class="lightTip">{{ dataForm.nokQuantity }}</div> | |||
<div class="lightTip">{{ dataForm.nokNum }}</div> | |||
</el-col> | |||
<el-col :span="3"> | |||
<div class="blodTip">检测瑕疵数</div> | |||
@@ -222,12 +228,13 @@ | |||
<script> | |||
// import basicAdd from '../../core/mixins/basic-add'; | |||
import { getCoreWO, getCoreWOMaPage, getConOrderList, getCoreWOListById } from "@/api/base/coreWorkOrder"; | |||
import { getCoreWO, getCoreWOMaPage, getlistByProductId, getlistByFlowId, getConOrderList, getCoreWOListById } from "@/api/base/coreWorkOrder"; | |||
// import { orderList } from "@/api/base/orderManage"; | |||
import { getProcessFlowList } from '@/api/base/orderManage' | |||
import SmallTitle from './SmallTitle'; | |||
import { publicFormatter } from "@/utils/dict"; | |||
import { parseTime } from '@/utils/ruoyi' | |||
import topTabVue from '../../order/base/orderManage/components/topTab.vue'; | |||
const tableBtn = [ | |||
{ | |||
@@ -265,9 +272,9 @@ const tableProps = [ | |||
const tableProps1 = [ | |||
{ | |||
prop: 'material', | |||
label: '物料名称', | |||
filter: publicFormatter('material') | |||
prop: 'materialName', | |||
label: '物料名称' | |||
// filter: publicFormatter('material') | |||
}, | |||
{ | |||
prop: 'unit', | |||
@@ -285,7 +292,7 @@ const tableProps1 = [ | |||
]; | |||
export default { | |||
components: { SmallTitle }, | |||
components: { SmallTitle, topTabVue }, | |||
data() { | |||
return { | |||
tableBtn, | |||
@@ -308,6 +315,7 @@ export default { | |||
dataForm: {}, | |||
orderList: [], | |||
materialList: [], | |||
workorderId: '', | |||
// orderArray: [], | |||
visible: false, | |||
isdetail: false, | |||
@@ -331,13 +339,15 @@ export default { | |||
name: work.name | |||
} | |||
}) | |||
const contentRef = this.$refs.content | |||
if (contentRef.scrollWidth > contentRef.clientWidth) { | |||
this.showScroll = true | |||
} else { | |||
this.showScroll = false | |||
} | |||
console.log(contentRef.scrollWidth, contentRef.clientWidth) | |||
this.workorderId = this.workOrderButton[0].id | |||
console.log('wawa ew', this.workorderId, this.workOrderButton) | |||
// const contentRef = this.$refs.content | |||
// if (contentRef.scrollWidth > contentRef.clientWidth) { | |||
// this.showScroll = true | |||
// } else { | |||
// this.showScroll = false | |||
// } | |||
// console.log(contentRef.scrollWidth, contentRef.clientWidth) | |||
this.init(this.workOrderButton[0].id, true) | |||
}) | |||
} else { | |||
@@ -345,6 +355,11 @@ export default { | |||
} | |||
}, | |||
methods: { | |||
// 切换tab获取订单详情 | |||
toggleName(val) { | |||
this.workorderId = val | |||
this.init(val, true) | |||
}, | |||
scrolRight() { | |||
// let contentRef = this.$refs.content | |||
// console.log('你好啊啊', contentRef.scrollWidth, contentRef.clientWidth) | |||
@@ -442,17 +457,38 @@ export default { | |||
// 获取预使用原料列表 | |||
console.log() | |||
if (this.dataForm.id) { | |||
getCoreWOMaPage({ | |||
workOrderId: this.dataForm.id, | |||
pageNo: 1, | |||
pageSize: 100 | |||
}).then((response) => { | |||
this.materialList = response.data.records.map((item) => { | |||
item.remaining = item?.num * this.dataForm.remainingQuantity || 0 | |||
return item | |||
if (this.dataForm.materialMethod === 1) { | |||
// 产品 | |||
getlistByProductId({ | |||
id: this.dataForm.planProductId | |||
}).then((response) => { | |||
this.materialList = response.data.map((item) => { | |||
item.remaining = item?.num * this.dataForm.remainingQuantity || 0 | |||
return item | |||
}); | |||
}); | |||
// this.listQuery.total = response.data.length; | |||
}); | |||
} else { | |||
// 工艺流程 | |||
getlistByFlowId({ | |||
id: this.dataForm.processFlowId | |||
}).then((response) => { | |||
this.materialList = response.data.map((item) => { | |||
item.remaining = item?.num * this.dataForm.remainingQuantity || 0 | |||
return item | |||
}); | |||
}); | |||
} | |||
// getCoreWOMaPage({ | |||
// workOrderId: this.dataForm.id, | |||
// pageNo: 1, | |||
// pageSize: 100 | |||
// }).then((response) => { | |||
// this.materialList = response.data.records.map((item) => { | |||
// item.remaining = item?.num * this.dataForm.remainingQuantity || 0 | |||
// return item | |||
// }); | |||
// // this.listQuery.total = response.data.length; | |||
// }); | |||
} | |||
// 获取订单相关信息 | |||
// orderList({ | |||
@@ -43,7 +43,8 @@ | |||
<allocation | |||
v-if="allocationVisible" | |||
ref="allocation" | |||
@refreshDataList="getDataList" /> | |||
@refreshDataList="searchStatus" | |||
@destroy="allocationVisible = false" /> | |||
</div> | |||
</template> | |||
@@ -353,6 +354,11 @@ export default { | |||
this.getDataList() | |||
}, | |||
methods: { | |||
searchStatus() { | |||
setTimeout(() => { | |||
this.getDataList() | |||
}, 20000) | |||
}, | |||
getWorkOrder() { | |||
getCoreWOList().then(res => { | |||
this.formConfig[0].selectOptions = res.data.map(item => { | |||
@@ -444,7 +450,7 @@ export default { | |||
type: 'success', | |||
duration: 1500, | |||
onClose: () => { | |||
this.getDataList(); | |||
this.searchStatus(); | |||
// 分配产量 | |||
// if (param.status === 4) { | |||
// this.allocationOrder(param); | |||
@@ -478,7 +484,7 @@ export default { | |||
// 有绑定订单带id | |||
this.$refs.allocation.init(val.id); | |||
} else { | |||
this.$refs.allocation.init(); | |||
this.$refs.allocation.init(val.id, true); | |||
} | |||
}); | |||
}) | |||
@@ -2,14 +2,15 @@ | |||
* @Author: zwq | |||
* @Date: 2021-11-18 14:16:25 | |||
* @LastEditors: DY | |||
* @LastEditTime: 2024-02-21 09:41:39 | |||
* @LastEditTime: 2024-03-21 15:21:32 | |||
* @Description: | |||
--> | |||
<template> | |||
<el-drawer | |||
:visible.sync="visible" | |||
:show-close="false" | |||
:wrapper-closable="isdetail" | |||
:wrapper-closable="true" | |||
:before-close="beforeClose" | |||
class="drawer" | |||
size="60%"> | |||
<small-title slot="title" :no-padding="true"> | |||
@@ -256,6 +257,17 @@ export default { | |||
this.getDict() | |||
}, | |||
methods: { | |||
beforeClose(done) { | |||
if (!this.isdetail) { | |||
this.$confirm('确认关闭?') | |||
.then(_ => { | |||
done(); | |||
}) | |||
.catch(_ => {}); | |||
} else { | |||
done() | |||
} | |||
}, | |||
async getDict() { | |||
// 物料类型列表 | |||
// const res = await listData({ | |||
@@ -2,14 +2,15 @@ | |||
* @Author: zwq | |||
* @Date: 2021-11-18 14:16:25 | |||
* @LastEditors: DY | |||
* @LastEditTime: 2023-11-27 19:50:36 | |||
* @LastEditTime: 2024-03-21 14:39:52 | |||
* @Description: | |||
--> | |||
<template> | |||
<el-drawer | |||
:visible.sync="visible" | |||
:show-close="false" | |||
:wrapper-closable="isdetail" | |||
:wrapper-closable="true" | |||
:before-close="beforeClose" | |||
class="drawer" | |||
size="70%"> | |||
<small-title slot="title" :no-padding="true"> | |||
@@ -196,6 +197,17 @@ export default { | |||
this.getDict() | |||
}, | |||
methods: { | |||
beforeClose(done) { | |||
if (!this.isdetail) { | |||
this.$confirm('确认关闭?') | |||
.then(_ => { | |||
done(); | |||
}) | |||
.catch(_ => {}); | |||
} else { | |||
done() | |||
} | |||
}, | |||
handleClick(raw) { | |||
if (raw.type === 'delete') { | |||
this.deleteDetail(raw.data); | |||
@@ -246,7 +258,7 @@ export default { | |||
}); | |||
}, | |||
initData() { | |||
// this.materialAttrList.splice(0); | |||
this.tableData.splice(0); | |||
this.listQuery.total = 0; | |||
}, | |||
deleteDetail(raw) { | |||
@@ -284,18 +296,18 @@ export default { | |||
}); | |||
}, | |||
// 构造一行 | |||
addRow() { | |||
const row = { | |||
bomId: this.dataForm.id, | |||
materialId: '', | |||
num: 0, | |||
materialCode: undefined, | |||
unit: undefined, | |||
remark: '', | |||
isEdit: true | |||
} | |||
this.tableData.push(row) | |||
}, | |||
// addRow() { | |||
// const row = { | |||
// bomId: this.dataForm.id, | |||
// materialId: '', | |||
// num: 0, | |||
// materialCode: undefined, | |||
// unit: undefined, | |||
// remark: '', | |||
// isEdit: true | |||
// } | |||
// this.tableData.push(row) | |||
// }, | |||
init(id, isdetail) { | |||
this.initData(); | |||
this.isdetail = isdetail || false; | |||
@@ -17,6 +17,7 @@ | |||
:table-props="tableProps" | |||
:table-data="tableData" | |||
@emitFun="handleEmitFun" | |||
:max-height="tableH" | |||
/> | |||
</div> | |||
</div> | |||
@@ -45,6 +46,7 @@ export default { | |||
arr: [], | |||
spanArr: [], | |||
timeList: [], | |||
tableH: this.tableHeight(240), | |||
tableData: [], | |||
tableProps: [], | |||
spanInfo: {}, | |||
@@ -54,6 +56,9 @@ export default { | |||
}, | |||
computed: {}, | |||
mounted() { | |||
window.addEventListener('resize', () => { | |||
this.tableH = this.tableHeight(240) | |||
}) | |||
this.getList(); | |||
}, | |||
methods: { | |||
@@ -148,6 +153,9 @@ export default { | |||
lineData['spec'] = Array.from(new Set(specs)).join(',') | |||
this.tableData.push(lineData) | |||
}) | |||
this.tableData.forEach((item, index) => { | |||
item._index = index + 1 | |||
}) | |||
console.log('打印', this.tableData) | |||
// this.setRowSpan(sectionArr) | |||
// console.log('工段名称列表', sectionArr) | |||
@@ -176,22 +184,26 @@ export default { | |||
console.log('看看数据', res) | |||
this.ResData = res.data | |||
this.arr = [ | |||
{ | |||
prop: '_index', | |||
label: '序号' | |||
}, | |||
{ | |||
prop: 'proLineName', | |||
label: '生产线', | |||
fixed: 'left', | |||
// fixed: 'left', | |||
'show-overflow-tooltip': true | |||
}, | |||
{ | |||
prop: 'workOrderName', | |||
label: '当前工单', | |||
fixed: 'left', | |||
// fixed: 'left', | |||
'show-overflow-tooltip': true | |||
}, | |||
{ | |||
prop: 'spec', | |||
label: '产品规格', | |||
fixed: 'left', | |||
// fixed: 'left', | |||
'show-overflow-tooltip': true | |||
} | |||
] | |||
@@ -104,24 +104,24 @@ export default { | |||
{ name: '故障时长', value: 580 }, | |||
], | |||
}, | |||
{ | |||
// 内环 | |||
name: '', | |||
type: 'pie', | |||
center: ['50%', '48%'], | |||
radius: ['60%', '75%'], | |||
itemStyle: { | |||
borderRadius: 10, | |||
}, | |||
label: { | |||
show: false, | |||
}, | |||
data: [ | |||
//<========= | |||
{ name: '总', value: 3000 }, | |||
{ name: '', value: 1400 }, | |||
], | |||
}, | |||
// { | |||
// // 内环 | |||
// name: '', | |||
// type: 'pie', | |||
// center: ['50%', '48%'], | |||
// radius: ['60%', '75%'], | |||
// itemStyle: { | |||
// borderRadius: 10, | |||
// }, | |||
// label: { | |||
// show: false, | |||
// }, | |||
// data: [ | |||
// //<========= | |||
// { name: '总', value: 3000 }, | |||
// { name: '', value: 1400 }, | |||
// ], | |||
// }, | |||
// { | |||
// name: this.value.equipmentName || 'Default', | |||
// type: 'pie', | |||
@@ -195,22 +195,22 @@ export default { | |||
this.config.title.text = lineName; | |||
this.config.title.subtext = equipmentName; | |||
this.config.series[0].data = [ | |||
{ name: '工作时长', value: workTime }, | |||
{ name: '停机时长', value: stopTime }, | |||
{ name: '故障时长', value: downTime }, | |||
]; | |||
this.config.series[1].data = [ | |||
{ name: '速度开动率', value: peEfficiency }, | |||
{ name: '', value: 100 }, | |||
// { name: '速度开动率', value: peEfficiency }, | |||
// { name: '', value: Math.ceil(peEfficiency) - peEfficiency }, | |||
{ name: '有效时长', value: workTime }, | |||
{ name: '关机时长', value: stopTime }, | |||
{ name: '中断时长', value: downTime } | |||
]; | |||
// this.config.series[1].data = [ | |||
// { name: '速度开动率', value: peEfficiency }, | |||
// // { name: '', value: 100 }, | |||
// // { name: '速度开动率', value: peEfficiency }, | |||
// // { name: '', value: Math.ceil(peEfficiency) - peEfficiency }, | |||
// ]; | |||
// | |||
this.textData = { | |||
workTime: +workTime.toFixed(2), | |||
stopTime: +stopTime.toFixed(2), | |||
downTime: +downTime.toFixed(2), | |||
peEfficiency: +peEfficiency.toFixed(2), | |||
workTime: +workTime?.toFixed(2), | |||
stopTime: +stopTime?.toFixed(2), | |||
downTime: +downTime?.toFixed(2), | |||
// peEfficiency: +peEfficiency?.toFixed(2), | |||
}; | |||
}, | |||
}, | |||
@@ -26,7 +26,8 @@ | |||
:page="queryParams.pageNo" | |||
:limit="queryParams.pageSize" | |||
:table-data="list" | |||
@emitFun="handleEmitFun"></base-table> | |||
@emitFun="handleEmitFun" | |||
:max-height="tableH"></base-table> | |||
</el-tab-pane> | |||
<el-tab-pane :label="'\u3000柱状图\u3000'" name="graph"> | |||
<div | |||
@@ -57,6 +58,7 @@ export default { | |||
const [y, m, d] = [now.getFullYear(), now.getMonth(), now.getDate()]; | |||
return { | |||
dialogVisible: false, | |||
tableH: this.tableHeight(260), | |||
urls: { | |||
page: '/analysis/equipment-analysis/quality', | |||
}, | |||
@@ -155,12 +157,12 @@ export default { | |||
}, | |||
{ | |||
// width: 160, | |||
prop: 'inQuantity', | |||
prop: 'totalQuantity', | |||
label: '加工数量', | |||
}, | |||
{ | |||
// width: 160, | |||
prop: 'outQuantity', | |||
prop: 'okQuantity', | |||
label: '合格数量', | |||
}, | |||
{ | |||
@@ -252,6 +254,9 @@ export default { | |||
this.fillProductOptions(); | |||
}, | |||
mounted() { | |||
window.addEventListener('resize', () => { | |||
this.tableH = this.tableHeight(260) | |||
}) | |||
this.$refs['search-bar'].headBtnClick('search'); | |||
}, | |||
methods: { | |||
@@ -2,7 +2,7 @@ | |||
* @Author: zwq | |||
* @Date: 2021-11-18 14:16:25 | |||
* @LastEditors: DY | |||
* @LastEditTime: 2024-03-18 15:47:20 | |||
* @LastEditTime: 2024-03-20 17:58:29 | |||
* @Description: | |||
--> | |||
<template> | |||
@@ -36,7 +36,8 @@ | |||
<el-select | |||
v-model="dataForm.departmentId" | |||
:disabled="isdetail" | |||
:placeholder="`请选择部门`"> | |||
:placeholder="`请选择部门`" | |||
style="width: 100%"> | |||
<el-option | |||
v-for="opt in departmentOptions" | |||
:key="opt.id" | |||
@@ -90,33 +91,32 @@ | |||
type="datetime" | |||
:disabled="isdetail" | |||
placeholder="请选择巡检时间" | |||
value-format="timestamp"></el-date-picker> | |||
value-format="timestamp" | |||
style="width: 100%" /> | |||
</el-form-item> | |||
</el-col> | |||
</el-row> | |||
</el-form> | |||
</div> | |||
<div class="attr-list" v-if="idAttrShow"> | |||
<small-title | |||
style="margin: 16px 0; padding-left: 8px" | |||
:no-padding="true"> | |||
<div v-if="idAttrShow"> | |||
<small-title> | |||
巡检内容 | |||
</small-title> | |||
<div v-if="!isdetail"> | |||
<div> | |||
<SearchBar | |||
:formConfigs="searchBarFormConfig" | |||
ref="attr-search-bar" | |||
@headBtnClick="handleSearchBarBtnClick" /> | |||
</div> | |||
<!-- <template> | |||
<span style="display: inline-block;" @click="addNew()"> | |||
<div v-if="!isdetail" style="display: flex"> | |||
<SearchBar | |||
:formConfigs="searchBarFormConfig" | |||
ref="attr-search-bar" | |||
@headBtnClick="handleSearchBarBtnClick" /> | |||
<!-- <div class="action_btn"> --> | |||
<el-button type="text" class="action_btn" @click="addNew()"> | |||
<span style="display: inline-block;"> | |||
<svg-icon style="width: 14px; height: 14px" class="item-icon" icon-class="table_add" /> | |||
<span class="add">添加</span> | |||
<span class="add">添加内容</span> | |||
</span> | |||
</template> --> | |||
</el-button> | |||
<!-- </div> --> | |||
</div> | |||
<base-table | |||
:table-props="tableProps" | |||
@@ -229,14 +229,14 @@ export default { | |||
btnName: '查询', | |||
name: 'search', | |||
color: 'primary', | |||
}, | |||
{ | |||
type: 'button', | |||
btnName: '新增', | |||
name: 'add', | |||
color: 'success', | |||
plain: true | |||
} | |||
// { | |||
// type: 'button', | |||
// btnName: '新增', | |||
// name: 'add', | |||
// color: 'success', | |||
// plain: true | |||
// } | |||
], | |||
listQuery: { | |||
pageSize: 10, | |||
@@ -519,10 +519,6 @@ export default { | |||
flex-direction: column; | |||
} | |||
.drawer >>> .el-form-item__label { | |||
padding: 0; | |||
} | |||
.drawer >>> .el-drawer__header { | |||
margin: 0; | |||
padding: 32px 32px 24px; | |||
@@ -551,11 +547,6 @@ export default { | |||
padding-right: 10px; /* 调整滚动条样式 */ | |||
} | |||
.drawer >>> .el-form, | |||
.drawer >>> .attr-list { | |||
padding: 0 16px; | |||
} | |||
.drawer-body__footer { | |||
display: flex; | |||
justify-content: flex-end; | |||
@@ -563,7 +554,7 @@ export default { | |||
} | |||
.action_btn { | |||
float: right; | |||
margin: -32px 15px 0; | |||
/* margin: 0 15px 0; */ | |||
font-size: 14px; | |||
} | |||
.add { | |||
@@ -120,7 +120,7 @@ export default { | |||
tableProps: [ | |||
{ prop: 'name', label: '巡检单名称' }, | |||
{ prop: 'department', label: '部门' }, | |||
{ prop: 'actualCheckTime', label: '巡检时间', filter: parseTime }, | |||
{ prop: 'planCheckTime', label: '巡检时间', filter: parseTime }, | |||
{ prop: 'groupClass', label: '班次' }, | |||
// { prop: 'opt', label: '巡检内容', name: '详情', subcomponent: btn }, | |||
{ prop: 'remark', label: '备注' } | |||
@@ -66,7 +66,7 @@ import { deleteEqMaintainLog, exportMaintainLogExcel } from '@/api/equipment/bas | |||
import AddContent from './addContent.vue'; | |||
import { parseTime } from '../../../../core/mixins/code-filter'; | |||
const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'); | |||
// const timeFilter = (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'); | |||
const btn = { | |||
name: 'tableBtn', | |||
@@ -129,20 +129,22 @@ export default { | |||
// width: 180, | |||
// filter: timeFilter, | |||
// }, | |||
{ prop: 'maintainOrderNumber', label: '设备保养单号' }, | |||
{ prop: 'planName', label: '保养计划名称' }, | |||
{ prop: 'departmentName', label: '部门' }, | |||
{ prop: 'lineName', label: '产线名' }, | |||
{ prop: 'planStartTime', label: '计划开始时间', filter: timeFilter }, | |||
{ prop: 'planEndTime', label: '计划结束时间', filter: timeFilter }, | |||
{ prop: 'startTime', label: '实际开始时间', filter: timeFilter }, | |||
{ prop: 'endTime', label: '实际结束时间', filter: timeFilter }, | |||
{ prop: 'maintainOrderNumber', label: '设备保养单号', width: 170, showOverflowtooltip: true }, | |||
{ prop: 'planName', label: '保养计划名称', width: 150, showOverflowtooltip: true }, | |||
{ prop: 'departmentName', label: '部门', width: 120, showOverflowtooltip: true }, | |||
{ prop: 'lineName', label: '产线名', width: 120, showOverflowtooltip: true }, | |||
{ prop: 'planStartTime', label: '计划开始时间', filter: parseTime, width: 150, showOverflowtooltip: true }, | |||
{ prop: 'planEndTime', label: '计划结束时间', filter: parseTime, width: 150, showOverflowtooltip: true }, | |||
{ prop: 'startTime', label: '实际开始时间', filter: parseTime, width: 150, showOverflowtooltip: true }, | |||
{ prop: 'endTime', label: '实际结束时间', filter: parseTime, width: 150, showOverflowtooltip: true }, | |||
// { prop: 'equipmentName', label: '设备名称' }, | |||
// { prop: 'maintainWorker', label: '保养人员' }, | |||
{ | |||
prop: 'relatePlan', | |||
label: '保养计划类型', | |||
filter: (v) => (v != null ? ['', '计划型', '非计划型'][v] : ''), | |||
width: 170, | |||
showOverflowtooltip: true | |||
}, | |||
{ prop: 'opt', label: '详情', name: '详情', subcomponent: btn } | |||
// { prop: 'maintainDuration', label: '计划保养用时(h)' }, | |||
@@ -393,7 +393,7 @@ | |||
:file="file" | |||
:key="file.fileUrl" | |||
:disabled="disabled" | |||
@delete="!disabled && handleDeleteFile(file, col.prop)" /> | |||
@delete="!disabled && handleDeleteFile(file)" /> | |||
</div> | |||
</el-form-item> | |||
</el-col> | |||
@@ -678,10 +678,12 @@ export default { | |||
file.type === 'image/jpeg' || | |||
file.type === 'image/png' || | |||
file.type === 'image/jpg'; | |||
if (!isJPG) { | |||
this.$modal.msgError('只能上传jpg/png文件!'); | |||
} | |||
return isJPG; | |||
}; | |||
return checkFileSize(); | |||
// return checkFileSize() && checkFileType(); | |||
return checkFileSize() && checkFileType(); | |||
}, | |||
// handlers | |||
@@ -737,7 +739,6 @@ export default { | |||
fileType: prop == 'files' ? 2 : 1, | |||
}); | |||
this.$modal.msgSuccess('上传成功'); | |||
console.log('为我', this.form.files) | |||
this.$emit('update', this.form); | |||
}, | |||
@@ -92,23 +92,34 @@ export default { | |||
}); | |||
if (code == 0) { | |||
this.listLine = data; | |||
return; | |||
} else { | |||
this.listLine.splice(0); | |||
} | |||
this.listLine.splice(0); | |||
}, | |||
async getEquipmentByLineId(id) { | |||
const { data, code } = await this.$axios({ | |||
url: '/base/core-equipment/listByLine', | |||
params: { | |||
id, | |||
}, | |||
// 获得全部设备 | |||
const res = await this.$axios({ | |||
url: '/base/core-equipment/listAll', | |||
}); | |||
if (code == 0) { | |||
this.listEq = data; | |||
if (res.code == 0) { | |||
this.listEq = res.data; | |||
return; | |||
} | |||
this.listEq.splice(0); | |||
}, | |||
async getEquipmentByLineId(id) { | |||
if (id) { | |||
const { data, code } = await this.$axios({ | |||
url: '/base/core-equipment/listByLine', | |||
params: { | |||
id, | |||
}, | |||
}); | |||
if (code == 0) { | |||
this.listEq = data; | |||
return; | |||
} | |||
this.listEq.splice(0); | |||
} | |||
}, | |||
handleSearch() { | |||
this.$emit('action', { | |||
action: 'search', | |||