You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
499 lines
16 KiB
499 lines
16 KiB
<template> |
|
<avue-crud |
|
:option="option" |
|
:table-loading="loading" |
|
:data="data" |
|
v-model="form" |
|
v-model:page="page" |
|
ref="crud" |
|
@row-del="rowDel" |
|
@search-change="searchChange" |
|
@search-reset="searchReset" |
|
@selection-change="selectionChange" |
|
@current-change="currentChange" |
|
@size-change="sizeChange" |
|
@refresh-change="refreshChange" |
|
@on-load="onLoad" |
|
> |
|
<template #menu-left> |
|
<el-button type="primary" @click="maintenanceClick">维护 </el-button> |
|
<el-button type="primary" @click="proofreadClick">校对 </el-button> |
|
</template> |
|
<template #menu-right> </template> |
|
<template #menu="scope"> </template> |
|
<template #produceStatus="scope"> |
|
<el-tag v-if="scope.row.produceStatus == 1">未维护</el-tag> |
|
<el-tag v-else type="success">待校对</el-tag> |
|
</template> |
|
<template #jhzsReality-header="{ column }"> |
|
<span style="color: red;margin-right:5px;">*</span>{{column.label}} |
|
</template> |
|
<template #jhzsReality="{ row }"> |
|
<el-input :class="maintenanceArr.length > 0 |
|
&& maintenanceArr.find(item => item.id == row.id) |
|
&& (maintenanceArr.find(item => item.id == row.id).jhzsReality === null || maintenanceArr.find(item => item.id == row.id).jhzsReality === '') && 'error'" v-model="row.jhzsReality"></el-input> |
|
</template> |
|
<template #zdljReality-header="{ column }"> |
|
<span style="color: red;margin-right:5px;">*</span>{{column.label}} |
|
</template> |
|
<template #zdljReality="{ row }"> |
|
<el-input :class="maintenanceArr.length > 0 |
|
&& maintenanceArr.find(item => item.id == row.id) |
|
&& (maintenanceArr.find(item => item.id == row.id).zdljReality === null || maintenanceArr.find(item => item.id == row.id).zdljReality === '') && 'error'" v-model="row.zdljReality"></el-input> |
|
</template> |
|
<template #qqxReality-header="{ column }"> |
|
<span style="color: red;margin-right:5px;">*</span>{{column.label}} |
|
</template> |
|
<template #qqxReality="{ row }"> |
|
<el-input :class="maintenanceArr.length > 0 |
|
&& maintenanceArr.find(item => item.id == row.id) |
|
&& (maintenanceArr.find(item => item.id == row.id).qqxReality === null || maintenanceArr.find(item => item.id == row.id).qqxReality === '') && 'error'" v-model="row.qqxReality"></el-input> |
|
</template> |
|
<template #produceTsReality-header="{ column }"> |
|
<span style="color: red;margin-right:5px;">*</span>{{column.label}} |
|
</template> |
|
<template #produceTsReality="{ row }"> |
|
<el-input :class="maintenanceArr.length > 0 |
|
&& maintenanceArr.find(item => item.id == row.id) |
|
&& (maintenanceArr.find(item => item.id == row.id).produceTsReality === null || maintenanceArr.find(item => item.id == row.id).produceTsReality === '') && 'error'" v-model="row.produceTsReality"></el-input> |
|
</template> |
|
<template #growAbility-header="{ column }"> |
|
<span style="color: red;margin-right:5px;">*</span>{{column.label}} |
|
</template> |
|
<template #growAbility="{ row }"> |
|
<el-input :class="maintenanceArr.length > 0 |
|
&& maintenanceArr.find(item => item.id == row.id) |
|
&& (maintenanceArr.find(item => item.id == row.id).growAbility === null || maintenanceArr.find(item => item.id == row.id).growAbility === '') && 'error'" v-model="row.growAbility"></el-input> |
|
</template> |
|
</avue-crud> |
|
</template> |
|
<script> |
|
import {getList,maintenanceData,checkData} from "@/api/outsourcingManagement/performanceCalculate" |
|
export default { |
|
data() { |
|
return { |
|
selectionList: [], |
|
loading:false, |
|
query:{}, |
|
option: { |
|
height: "auto", |
|
calcHeight: 32, |
|
tip: false, |
|
// size: "medium", |
|
simplePage: true, |
|
searchShow: true, |
|
searchMenuSpan: 6, |
|
searchIcon: true, |
|
searchIndex: 3, |
|
tree: false, |
|
border: true, |
|
index: true, |
|
selection: false, |
|
viewBtn: false, |
|
delBtn: false, |
|
addBtn: false, |
|
editBtn: false, |
|
editBtnText: "修改", |
|
viewBtnIcon: " ", |
|
delBtnIcon: " ", |
|
editBtnIcon: " ", |
|
viewBtnText: "详情", |
|
labelWidth: 120, |
|
menuWidth: 180, |
|
dialogWidth: 640, |
|
dialogClickModal: false, |
|
searchEnter: true, |
|
excelBtn: false, |
|
filterBtn: true, |
|
searchShowBtn: false, |
|
columnSort: true, |
|
excelBtn: true, |
|
columnSort: true, |
|
showOverflowTooltip: true, |
|
menu: false, |
|
searchLabelPosition: "left", |
|
searchLabelPosition: "left", |
|
searchGutter: 24, |
|
searchSpan: 6, |
|
menuAlign: "left", |
|
gridBtn: false, |
|
searchMenuPosition: "right", |
|
addBtnIcon: " ", |
|
viewBtnIcon: " ", |
|
delBtnIcon: " ", |
|
editBtnIcon: " ", |
|
align: "center", |
|
column: [ |
|
{ |
|
label: "工艺能力", |
|
prop: "caName", |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
search: false, |
|
width: 130, |
|
}, |
|
{ |
|
label: "厂家代码", |
|
prop: "oemCode", |
|
// bind: "bsOemCustomer.ocCode", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
}, |
|
{ |
|
label: "厂家名称", |
|
prop: "oemName", |
|
// bind: "bsOemCustomer.ocName", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
}, |
|
{ |
|
label: "计划准时完成", |
|
children: [ |
|
{ |
|
label: "目标值(%)", |
|
prop: "jhzsTarget", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
}, |
|
{ |
|
label: "实际值(%)", |
|
prop: "jhzsReality", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
// cell: true, |
|
// rules: [{ required: true, message: "请输入姓名", trigger: "blur" }], |
|
}, |
|
], |
|
}, |
|
{ |
|
label: "重点零件完成率", |
|
children: [ |
|
{ |
|
label: "目标值(%)", |
|
prop: "zdljTarget", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
}, |
|
{ |
|
label: "实际值(%)", |
|
prop: "zdljReality", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
// cell: true, |
|
// rules: [{ required: true, message: "请输入姓名", trigger: "blur" }], |
|
}, |
|
], |
|
}, |
|
{ |
|
label: "清欠项", |
|
children: [ |
|
{ |
|
label: "目标值", |
|
prop: "qqxTarget", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
}, |
|
{ |
|
label: "实际值", |
|
prop: "qqxReality", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
// cell: true, |
|
// rules: [{ required: true, message: "请输入姓名", trigger: "blur" }], |
|
}, |
|
], |
|
}, |
|
{ |
|
label: "客户投诉(扣分项)", |
|
children: [ |
|
{ |
|
label: "目标值", |
|
prop: "produceTsTarget", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
}, |
|
{ |
|
label: "实际值", |
|
prop: "produceTsReality", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
// cell: true, |
|
// rules: [{ required: true, message: "请输入姓名", trigger: "blur" }], |
|
}, |
|
], |
|
}, |
|
{ |
|
label: "发展能力", |
|
children: [ |
|
{ |
|
label: "加分", |
|
prop: "growAbility", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
// cell: true, |
|
// rules: [{ required: true, message: "请输入姓名", trigger: "blur" }], |
|
}, |
|
], |
|
}, |
|
{ |
|
label: "状态", |
|
prop: "produceStatus", |
|
search: false, |
|
sortable: true, |
|
filter: true, |
|
span: 24, |
|
}, |
|
], |
|
}, |
|
maintenanceArr:[], |
|
otherData:[], |
|
form: {}, |
|
page: { |
|
pageSize: 10, |
|
currentPage: 1, |
|
total: 0, |
|
}, |
|
}; |
|
}, |
|
methods: { |
|
calcData(a,b){ |
|
// 需要比较的字段 |
|
const fieldsToCheck = ['jhzsReality','zdljReality','qqxReality', 'produceTsReality', 'growAbility']; |
|
|
|
const c = b.filter((itemB, index) => { |
|
// 策略 A: 如果两个数组顺序严格一致,直接使用索引匹配 (最快) |
|
const itemA = a[index]; |
|
|
|
// 策略 B: 如果顺序可能不一致,需要通过 id 查找 (更稳健,但如果有重复 ID 会匹配到第一个) |
|
// const itemA = a.find(item => item.id === itemB.id); |
|
|
|
if (!itemA) return false; // a 中找不到对应的项,视情况决定是否保留,这里暂不保留 |
|
|
|
// 检查指定字段是否有任何一个不相等 |
|
const isDifferent = fieldsToCheck.some(key => { |
|
return itemA[key] !== itemB[key]; |
|
}); |
|
|
|
return isDifferent; |
|
}); |
|
return c |
|
}, |
|
maintenanceClick() { |
|
this.maintenanceArr = this.calcData(this.otherData,this.data) |
|
|
|
let jhzhError = this.maintenanceArr.find(item => item.jhzsReality === null) |
|
let zdljError = this.maintenanceArr.find(item => item.zdljReality === null) |
|
let qqxError = this.maintenanceArr.find(item => item.qqxReality === null) |
|
let produceError = this.maintenanceArr.find(item => item.produceTsReality === null) |
|
let growError = this.maintenanceArr.find(item => item.growAbility === null) |
|
|
|
if(jhzhError || zdljError || qqxError || produceError || growError){ |
|
this.$message.error('请填写表格中红框数据') |
|
return |
|
} |
|
maintenanceData({type:"produce",oemMeritsEntities:this.maintenanceArr}).then(res =>{ |
|
if(res.data.code === 200){ |
|
this.$message.success('维护成功') |
|
this.onLoad() |
|
} |
|
}) |
|
|
|
}, |
|
proofreadClick() { |
|
let checkArr = this.data.filter(item => item.produceStatus == 2) |
|
checkData({ |
|
oemMeritsEntities:checkArr, |
|
type:'produce' |
|
}).then(res =>{ |
|
if(res.data.code === 200){ |
|
this.$message.success('校对成功') |
|
this.onLoad() |
|
} |
|
}) |
|
// const dataList = this.$refs.myTable.getTableData().tableData; |
|
// this.$ajax |
|
// .post('oemMerits/proofread', { |
|
// dataList, |
|
// status: 3, |
|
// type: 'produce' |
|
// }) |
|
// .then((res) => { |
|
// if (res.code === 0) { |
|
// this.$message.success('校对成功'); |
|
// this.queryTable(); |
|
// } |
|
// }); |
|
}, |
|
handleDelete() { |
|
if (this.selectionList.length === 0) { |
|
this.$message.warning("请选择至少一条数据"); |
|
return; |
|
} |
|
this.$confirm("确定将选择数据删除?", { |
|
confirmButtonText: "确定", |
|
cancelButtonText: "取消", |
|
type: "warning", |
|
}).then(() => {}); |
|
}, |
|
// 多选 |
|
selectionChange(list) { |
|
this.selectionList = list; |
|
}, |
|
onLoad() { |
|
this.loading = true; |
|
getList({ |
|
current:this.page.currentPage, |
|
size:this.page.pageSize, |
|
produceStatusList:"1,2", |
|
statusList:"1,2", |
|
...this.query, |
|
}).then((res) => { |
|
this.data = res.data.data.records |
|
this.otherData = JSON.parse(JSON.stringify(res.data.data.records)); |
|
this.page.total = res.data.data.total; |
|
this.loading = false; |
|
}) |
|
|
|
// this.data = [ |
|
// { |
|
// $cellEdit: true, |
|
// bsOemCustomer: { |
|
// abbreviation: "L076", |
|
// address: "aaa", |
|
// codeAndName: "L076/L076", |
|
// contactMan: "aaa", |
|
// contactPhone: "aaa", |
|
// craftAbility: |
|
// "镀银、挂镀银、喷砂、涂色标、铜合金化学镀镍、电镀镍、DL零件包装", |
|
// curStatus: 0, |
|
// curStatusText: "正常供货", |
|
// email: "aaa", |
|
// keyValue: 21, |
|
// limitType: 0, |
|
// ocCode: "L076", |
|
// ocId: 21, |
|
// ocName: "L076", |
|
// oemPassword: null, |
|
// partCodeYesOrNo: false, |
|
// qualification: 10, |
|
// qualificationTitle: null, |
|
// region: "陕西省", |
|
// updateTime: "2023-04-14 18:33:49", |
|
// }, |
|
// createMan: { |
|
// userId: 541, |
|
// userName: "崔殿龙", |
|
// }, |
|
// createTime: "2023-11-10 18:06:40", |
|
// keyValue: 1, |
|
// oaaId: 1, |
|
// plate: "222", |
|
// }, |
|
// { |
|
// $cellEdit: true, |
|
// bsOemCustomer: { |
|
// abbreviation: "L120", |
|
// address: "aaa", |
|
// codeAndName: "L120/L120", |
|
// contactMan: "aaa", |
|
// contactPhone: "aaa", |
|
// craftAbility: "不锈钢涂福斯润滑剂、DL零件包装、", |
|
// curStatus: 0, |
|
// curStatusText: "正常供货", |
|
// email: "aaa", |
|
// keyValue: 2, |
|
// limitType: 0, |
|
// ocCode: "L120", |
|
// ocId: 2, |
|
// ocName: "L120", |
|
// oemPassword: null, |
|
// partCodeYesOrNo: false, |
|
// qualification: 0, |
|
// qualificationTitle: "民品&普军", |
|
// region: "江苏省", |
|
// updateTime: "2023-04-14 18:33:49", |
|
// }, |
|
// createMan: { |
|
// userId: 541, |
|
// userName: "崔殿龙", |
|
// }, |
|
// createTime: "2023-11-10 18:06:40", |
|
// keyValue: 4, |
|
// oaaId: 4, |
|
// plate: "222", |
|
// }, |
|
// { |
|
// $cellEdit: true, |
|
// bsOemCustomer: { |
|
// abbreviation: "L070", |
|
// address: "aaa", |
|
// codeAndName: "L070/L070", |
|
// contactMan: "aaa", |
|
// contactPhone: "aaa", |
|
// craftAbility: "滚镀金或振镀金、局部镀厚金、闪镀金、镀铂金、局部退火", |
|
// curStatus: 0, |
|
// curStatusText: "正常供货", |
|
// email: "aaa", |
|
// keyValue: 5, |
|
// limitType: 0, |
|
// ocCode: "L070", |
|
// ocId: 5, |
|
// ocName: "L070", |
|
// oemPassword: null, |
|
// partCodeYesOrNo: false, |
|
// qualification: 10, |
|
// qualificationTitle: null, |
|
// region: "江苏省", |
|
// updateTime: "2023-04-14 18:33:49", |
|
// }, |
|
// createMan: { |
|
// userId: 541, |
|
// userName: "崔殿龙", |
|
// }, |
|
// createTime: "2023-12-06 17:24:48", |
|
// keyValue: 21, |
|
// oaaId: 21, |
|
// plate: "222", |
|
// }, |
|
// ]; |
|
// this.page.total = this.data.length; |
|
// this.loading = false; |
|
// setTimeout(() => { |
|
// this.selectionClear(); |
|
// }, 500); |
|
}, |
|
}, |
|
}; |
|
</script> |
|
<style lang="scss" scoped> |
|
.error { |
|
::v-deep .el-input__wrapper { |
|
// background: red; |
|
// border:none |
|
border:1px solid #ff0000 !important; |
|
} |
|
} |
|
</style>
|
|
|