Merge branch 'dev-scheduling' of http://42.192.7.176:3000/suojin/jonhon-mes-web into dev-scheduling

dev-scheduling
zhangdi 1 month ago
commit 1802a6832d
  1. 25
      src/api/desk/myMessage.js
  2. 11
      src/api/outsourcingManagement/oemOrderSettlement.js
  3. 18
      src/api/outsourcingManagement/performanceCheck.js
  4. 9
      src/api/outsourcingManagement/performanceReview.js
  5. 47
      src/api/outsourcingManagement/settlementRules.js
  6. 9
      src/api/qualityManagement/productionTesting/productionDisposition.js
  7. 24
      src/api/qualityManagement/productionTesting/productionQuality.js
  8. 74
      src/page/index/top/index.vue
  9. 22
      src/utils/event-bus.js
  10. 11
      src/views/desk/completedTasks.vue
  11. 167
      src/views/desk/myMessage.vue
  12. 42
      src/views/desk/todoList.vue
  13. 294
      src/views/oem/oemOrderSettlement/components/unsettled.vue
  14. 3
      src/views/oem/performanceCalculate/components/millMeritsProduce.vue
  15. 262
      src/views/oem/performanceCheck/index.vue
  16. 73
      src/views/oem/performanceReview/index.vue
  17. 312
      src/views/oem/settlementRules/components/plate.vue
  18. 8
      src/views/oem/settlementRules/index.vue
  19. 88
      src/views/productionDisposition/hearingDialog.vue
  20. 44
      src/views/productionManagement/components/addDialog.vue
  21. 107
      src/views/productionManagement/components/coatingMater/addRequirements.vue
  22. 75
      src/views/productionTesting/productionQuality.vue
  23. 6
      vite.config.mjs

@ -14,3 +14,28 @@ export const getList = (current, size, params) => {
});
};
export const update = ids => {
return request({
url: '/blade-desk/mesNotifyMessage/read',
method: 'post',
params: {
ids,
},
cryptoToken: false,
cryptoData: false,
});
};
export const count = (current, size, params) => {
return request({
url: '/blade-desk/mesNotifyMessage/count',
method: 'get',
params: {
...params,
current,
size,
},
cryptoToken: false,
cryptoData: false,
});
};

@ -0,0 +1,11 @@
// 外协订单结算
import request from '@/axios';
// 获取列表
export const getStatement = params =>{
return request({
url:"/api/blade-desk/mesOemStatement/page",
method:'get',
params
})
}

@ -8,4 +8,22 @@ export const getList = params => {
method: 'get',
params
});
};
// 重新计算
export const reCalculate = data => {
return request({
url: '/api/blade-desk/mesOemMerits/updateData',
method: 'post',
data
});
};
// 绩效保存
export const saveData = data => {
return request({
url: '/api/blade-desk/mesOemMerits/submitData',
method: 'post',
data
});
};

@ -8,4 +8,13 @@ export const getList = params => {
method: 'get',
params
});
};
// 审核通过
export const approvalData = data => {
return request({
url: '/api/blade-desk/mesOemMerits/processSubmit',
method: 'post',
data
});
};

@ -0,0 +1,47 @@
// 外协结算管理
import request from '@/axios';
// 获取镀种规则维护列表
export const getPlateList = params => {
return request({
url: '/api/blade-desk/mesPlatingTypeRules/page',
method: 'get',
params
});
};
// 镀种下拉
export const getPlateSelect = params => {
return request({
url: '/api/blade-desk/BA/Plating/listForSelect',
method: 'get',
params
});
};
// 新增镀种规则
export const addPlateData = data => {
return request({
url: '/api/blade-desk/mesPlatingTypeRules/save',
method: 'post',
data
});
};
// 修改镀种规则
export const updatePlateData = data => {
return request({
url: '/api/blade-desk/mesPlatingTypeRules/update',
method: 'post',
data
});
};
// 删除逻辑规则
export const deletePlateData = params => {
return request({
url: '/api/blade-desk/mesPlatingTypeRules/remove',
method: 'post',
params
});
};

@ -117,4 +117,13 @@ export const getRelatedBatchList = (params) => {
method: 'get',
params
});
};
// 查询流程卡号相同数据
export const getSameLotList = (params) => {
return request({
url: '/api/blade-desk/QA/ReviewSheet/getByCardNo',
method: 'get',
params
});
};

@ -64,14 +64,14 @@ export const applySameLot = (params) => {
});
};
// 获取硬度数据列表
export const getHardnessList = (params) => {
return request({
url: '/api/blade-desk/QA/IotHardness/getDataFirst',
method: 'get',
params
});
};
// // 获取硬度数据列表
// export const getHardnessList = (params) => {
// return request({
// url: '/api/blade-desk/QA/IotHardness/getDataFirst',
// method: 'get',
// params
// });
// };
// 刷新硬度数据
export const refreshHardness = (params) => {
@ -83,11 +83,11 @@ export const refreshHardness = (params) => {
};
// 获取测厚数据
export const getThicknessList = (params) => {
export const getThicknessList = (data) => {
return request({
url: '/api/blade-desk/QA/IotThickness/getData',
method: 'get',
params
url: '/api/blade-desk/QA/IotThickness/queryChyData',
method: 'post',
data
});
};

@ -26,9 +26,10 @@
<div class="top-bar__item">
<top-login :iconName="'system-management'" :contentTooltip="'单点登录'" :color="setting.styleRadio == 4 && '#fff'"></top-login>
</div>
<div class="top-bar__item" :title="'消息'">
<el-badge :value="200" :max="99" class="item">
<el-icon>
<div class="top-bar__item" :title="'消息'">
<el-badge @click="readMsg" :value="unreadCount" :max="99" class="item msg-icon">
<el-icon >
<Bell />
</el-icon>
</el-badge>
@ -139,7 +140,8 @@ import { getUserInfo as getUerOauthInfo } from '@/api/user';
import { validatenull } from '@/utils/validate';
import func from '@/utils/func';
import { color } from 'echarts';
import { count } from '@/api/desk/myMessage';
import EventBus from '@/utils/event-bus';
export default {
components: {
topLock,
@ -156,6 +158,7 @@ export default {
name: 'top',
data() {
return {
unreadCount: 0, //
userId: '',
roleId: '',
roleName: '',
@ -222,6 +225,26 @@ export default {
created() {
this.init();
},
mounted() {
//
console.log('事件监听已注册');
EventBus.$on('message-read', this.handleMessageRead);
// localStorage
window.addEventListener('storage', this.handleStorageChange);
},
beforeUnmount() {
//
console.log('取消事件监听');
EventBus.$off('message-read', this.handleMessageRead);
window.removeEventListener('storage', this.handleStorageChange);
},
handleStorageChange(event) {
if (event.key === 'message-read-timestamp') {
console.log('检测到消息已读(storage事件)');
this.getUnreadCount();
}
},
computed: {
func() {
return func;
@ -239,6 +262,13 @@ export default {
]),
},
methods: {
readMsg() {
this.$router.push({
path: '/desk/myMessage',
// state: { id: row.id }
});
// this.$message.info('...');
},
openSearch() {
// this.$store.commit('SET_IS_SEARCH', true);
console.log('route--------------------',this.$router)
@ -281,6 +311,26 @@ export default {
this.roleId = res.data.roleId;
this.deptId = res.data.deptId;
});
//
this.getUnreadCount();
},
getUnreadCount() {
console.log('开始获取未读数量...');
count('').then(res => {
console.log('获取未读数量响应:', res);
if (res.data.code === 200 && res.data.data) {
console.log('更新 unreadCount:', res.data.data);
this.unreadCount = res.data.data;
}
}).catch(err => {
console.error('获取未读消息数量失败:', err);
});
},
handleMessageRead() {
//
console.log('收到消息已读事件,更新未读数量');
this.getUnreadCount();
},
toDashboard() {
this.$router.push({ path: '/' });
@ -407,4 +457,20 @@ export default {
.bar_title_third{
margin-left: 245px;
}
//
.msg-icon {
cursor: pointer;
transition: all 0.3s ease;
font-size: 18px;
&:hover {
color: #409EFF;
transform: scale(1.1);
}
&:active {
transform: scale(0.95);
}
}
</style>

@ -0,0 +1,22 @@
// Vue 3 事件总线
const EventBus = {
events: {},
$on(event, callback) {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(callback);
},
$off(event, callback) {
if (this.events[event]) {
this.events[event] = this.events[event].filter(cb => cb !== callback);
}
},
$emit(event, data) {
if (this.events[event]) {
this.events[event].forEach(callback => callback(data));
}
}
};
export default EventBus;

@ -88,7 +88,7 @@ export default {
column: [
{
label: '类型',
prop: 'type',
prop: 'bizType',
sortable: false,
type: 'select',
filter: true,
@ -103,7 +103,7 @@ export default {
},
{
label: '标题',
prop: 'title',
prop: 'content',
sortable: false,
filter: true,
span: 12,
@ -112,7 +112,7 @@ export default {
},
{
label: '创建人',
prop: 'createUser',
prop: 'createUserName',
sortable: false,
filter: true,
span: 12,
@ -180,9 +180,10 @@ export default {
this.onLoad(this.page);
},
searchChange(params, done) {
this.query = params;
console.log('搜索参数:', params);
this.query = params;
this.page.currentPage = 1;
this.onLoad();
this.onLoad(this.page);
done();
},
currentChange(currentPage) {

@ -15,22 +15,25 @@
@selection-change="selectionChange"
@on-load="onLoad"
>
<template #status="{row}">
<el-tag v-if="row.status === 1" type="info">已读</el-tag>
<el-tag v-if="row.status === 2" type="success">未读</el-tag>
</template>
<template #menu-left>
<el-button type="primary" @click="handleRead">标记已读</el-button>
</template>
<template #content="{row}">
<span @click="hanleView(row)" style="color:#284c89;cursor:pointer">{{row.content}}</span>
</template>
<template #status="{ row }">
<el-tag v-if="row.status === 1" type="info">已读</el-tag>
<el-tag v-if="row.status === 0" type="success">未读</el-tag>
</template>
<template #menu-left>
<el-button type="primary" @click="handleRead">标记已读</el-button>
</template>
<template #content="{ row }">
<span @click="hanleView(row)" style="color: #284c89; cursor: pointer">{{
row.content
}}</span>
</template>
</avue-crud>
</basic-container>
</template>
<script>
import { getList} from '@/api/desk/myMessage';
import { getList, update } from '@/api/desk/myMessage';
import EventBus from '@/utils/event-bus';
export default {
data() {
return {
@ -46,8 +49,8 @@ export default {
option: {
columnSort: true,
tip: false,
height: "auto",
align: "center",
height: 'auto',
align: 'center',
calcHeight: 32,
simplePage: false,
searchShow: true,
@ -61,9 +64,9 @@ export default {
viewBtn: false,
delBtn: true,
editBtn: true,
editBtnText: "修改",
editBtnIcon: " ",
delBtnIcon: " ",
editBtnText: '修改',
editBtnIcon: ' ',
delBtnIcon: ' ',
addBtn: false,
labelWidth: 120,
searchLabelWidth: 120,
@ -76,18 +79,18 @@ export default {
gridBtn: false,
searchShowBtn: false,
showOverflowTooltip: true,
searchLabelPosition: "left",
searchLabelPosition: "left",
searchLabelPosition: 'left',
searchLabelPosition: 'left',
searchGutter: 24,
searchSpan: 6,
menuAlign: "left",
menuAlign: 'left',
gridBtn: false,
searchMenuPosition: "right",
addBtnIcon: " ",
viewBtnIcon: " ",
delBtnIcon: " ",
editBtnIcon: " ",
menu:false,
searchMenuPosition: 'right',
addBtnIcon: ' ',
viewBtnIcon: ' ',
delBtnIcon: ' ',
editBtnIcon: ' ',
menu: false,
column: [
{
@ -112,10 +115,9 @@ export default {
searchLabelWidth: 90,
display:false,
},
{
label: '消息类型',
prop: 'type',
prop: 'bizType',
sortable: false,
type: 'select',
filter: true,
@ -140,7 +142,7 @@ export default {
},
{
label: '未读',
value: '2',
value: '0',
},
],
filter: true,
@ -152,8 +154,8 @@ export default {
label: '发送时间',
prop: 'approvalTime',
type: 'date',
format:"YYYY-MM-DD",
valueFormat:"YYYY-MM-DD",
format: 'YYYY-MM-DD',
valueFormat: 'YYYY-MM-DD',
searchRange:true,
sortable: false,
filter: true,
@ -179,19 +181,32 @@ export default {
data: [],
};
},
computed: {
ids() {
let ids = [];
this.selectionList.forEach(ele => {
ids.push(ele.id);
});
return ids.join(',');
},
},
created() {
this.onLoad(this.page);
},
methods: {
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
console.log('搜索参数:', params);
this.query = params;
this.page.currentPage = 1;
this.onLoad();
this.onLoad(this.page);
done();
},
selectionChange(list){
this.selectionList = list;
selectionChange(list) {
this.selectionList = list;
},
currentChange(currentPage) {
this.page.currentPage = currentPage;
@ -202,69 +217,47 @@ export default {
refreshChange() {
this.onLoad();
},
hanleView(row){
this.$refs.crud.rowView(row)
hanleView(row) {
this.$refs.crud.rowView(row);
},
handleRead(){
if(this.selectionList.length == 0){
this.$message.error('请至少选择一条数据!');
return
}
let tmp = this.selectionList.find(item => item.status == 1)
if(tmp){
this.$message.error('请选择状态为【未读】的数据!')
return
}
handleRead() {
if (this.selectionList.length == 0) {
this.$message.error('请至少选择一条数据!');
return;
}
let tmp = this.selectionList.find(item => item.status == 1);
console.log(tmp, '111');
if (tmp) {
this.$message.error('请选择状态为【未读】的数据!');
return;
} else {
console.log(this.ids);
this.$confirm('确定将选择消息标记为已读?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
update(this.ids).then(() => {
this.$message.success('操作成功!');
this.onLoad(this.page);
//
console.log('触发消息已读事件');
EventBus.$emit('message-read');
// localStorage
localStorage.setItem('message-read-timestamp', Date.now());
});
});
}
},
onLoad(page, params = {}) {
onLoad(page, params = {}) {
getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
console.log(res,'00000001');
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
});
},
// onLoad(page, params = {}) {
// this.loading = true;
// this.data = [
// {
// id: 1,
// type: 1,
// title: '',
// content:"",
// createUser: '',
// status:1,
// approvalTime:"2026-01-18 22:15:30",
// createTime: '2026-01-05 09:06:32',
// },
// {
// id: 2,
// type: 2,
// title: '',
// content:"",
// createUser: '',
// status:1,
// approvalTime:"2026-01-18 22:15:30",
// createTime: '2026-01-12 09:06:32',
// },
// {
// id: 3,
// type: 1,
// title: '',
// content:"",
// createUser: '',
// status:2,
// approvalTime:"2026-01-18 22:15:30",
// createTime: '2026-01-15 09:06:32',
// },
// ];
// this.page.total = this.data.length;
// this.loading = false;
// },
},
};
</script>

@ -66,7 +66,7 @@ export default {
column: [
{
label: '业务类型',
label: '类型',
prop: 'bizType',
sortable: false,
type: 'select',
@ -75,13 +75,13 @@ export default {
search: true,
searchLabelWidth: 90,
dicData: [
{ label: '外协审批', value: 'testType' },
{ label: '外协审批', value: 1 },
{ label: '仓管审批', value: 2 },
{ label: '槽液审批', value: 3 },
],
},
{
label: '业务内容',
label: '标题',
prop: 'content',
sortable: false,
filter: true,
@ -91,7 +91,7 @@ export default {
},
{
label: '创建人',
prop: 'currentRoleName',
prop: 'createUserName',
sortable: false,
filter: true,
span: 12,
@ -144,12 +144,15 @@ export default {
},
searchReset() {
this.query = {};
this.onLoad(this.page);
},
searchChange(params, done) {
console.log('搜索参数:', params);
this.query = params;
this.page.currentPage = 1;
this.onLoad();
this.onLoad(this.page);
done();
},
currentChange(currentPage) {
@ -174,34 +177,7 @@ export default {
});
},
// onLoad(page, params = {}) {
// this.loading = true;
// this.data = [
// {
// id: 1,
// type: 1,
// title: '',
// createUser: '',
// createTime: '2026-01-05 09:06:32',
// },
// {
// id: 2,
// type: 2,
// title: '',
// createUser: '',
// createTime: '2026-01-12 09:06:32',
// },
// {
// id: 3,
// type: 3,
// title: '',
// createUser: '',
// createTime: '2026-01-15 09:06:32',
// },
// ];
// this.page.total = this.data.length;
// this.loading = false;
// },
},
};
</script>

@ -29,7 +29,7 @@
</template>
<script>
import settlementDailog from './SettlementDailog.vue'
import {getStatement} from "@/api/outsourcingManagement/oemOrderSettlement"
export default {
components: {
settlementDailog
@ -92,7 +92,7 @@ export default {
column: [
{
label: '外协单号',
prop: 'workCenterNames',
prop: 'oemCode',
sortable: true,
filter: true,
span: 24,
@ -103,7 +103,7 @@ export default {
},
{
label: '车间订单单号',
prop: 'workCenterNames',
prop: 'woCode',
sortable: true,
filter: true,
span: 24,
@ -114,7 +114,7 @@ export default {
},
{
label: '零件号',
prop: 'workCenterNames',
prop: 'partCode',
sortable: true,
filter: true,
span: 24,
@ -124,7 +124,7 @@ export default {
},
{
label: '零件名称',
prop: 'workCenterNames',
prop: 'partName',
sortable: true,
filter: true,
span: 24,
@ -133,7 +133,7 @@ export default {
},
{
label: '批次号',
prop: 'workCenterNames',
prop: 'batchNo',
sortable: true,
filter: true,
span: 24,
@ -143,7 +143,7 @@ export default {
},
{
label: '生产标识',
prop: 'workCenterNames',
prop: 'prodIdent',
sortable: true,
filter: true,
span: 24,
@ -151,42 +151,43 @@ export default {
width: 120,
type:'select',
searchOrder:16,
dicData:[
{
label:'JI',
value:1
},
{
label:'JII',
value:2
},
]
dicUrl:"/api/blade-scheduling/qualityGrade/getGrades",
props:{
label:'qualityGrade',
value:"id"
}
},
{
label: '工序',
prop: 'workCenterNames',
prop: 'psCode',
sortable: true,
filter: true,
span: 24,
search: true,
width: 120,
type:'select',
dicData:[
{
label:'工序1',
value:1
},
{
label:'工序2',
value:2
},
]
dicUrl:"/api/blade-desk/bsProcessSet/getProcessSetList",
props:{
label: 'name',
value: 'code',
// res: 'data.records',
},
// dicData:[
// {
// label:'1',
// value:1
// },
// {
// label:'2',
// value:2
// },
// ]
},
{
label: '工艺能力',
prop: 'workCenterNames',
prop: 'caName',
sortable: true,
filter: true,
span: 24,
@ -196,7 +197,7 @@ export default {
},
{
label: '镀后入库时间',
prop: 'duhoutime',
prop: 'putStoreTime',
sortable: true,
filter: true,
span: 24,
@ -221,7 +222,7 @@ export default {
},
{
label: '生产数量',
prop: 'workCenterNames',
prop: 'makeQty',
sortable: true,
filter: true,
span: 24,
@ -231,7 +232,7 @@ export default {
},
{
label: '单位面积(d㎡)',
prop: 'workCenterNames',
prop: 'ypArea',
sortable: true,
filter: true,
span: 24,
@ -241,7 +242,7 @@ export default {
},
{
label: '总面积(d㎡)',
prop: 'workCenterNames',
prop: 'totalArea',
sortable: true,
filter: true,
span: 24,
@ -251,28 +252,33 @@ export default {
},
{
label: '外协厂商',
prop: 'workCenterNames',
prop: 'ocId',
sortable: true,
filter: true,
span: 24,
search: true,
width: 120,
type:'select',
dicData:[
{
label:'外协厂商1',
value:1
},
{
label:'外协厂商2',
value:2
},
]
dicUrl:"/api/blade-desk/BA/Oem/listForSelect",
props:{
label:'ocName',
value:"id"
}
// dicData:[
// {
// label:'1',
// value:1
// },
// {
// label:'2',
// value:2
// },
// ]
},
{
label: '镀种',
prop: 'workCenterNames',
prop: 'plate',
sortable: true,
filter: true,
span: 24,
@ -282,7 +288,7 @@ export default {
},
{
label: '镀层厚度',
prop: 'workCenterNames',
prop: 'plateThickness',
sortable: true,
filter: true,
span: 24,
@ -292,7 +298,7 @@ export default {
},
{
label: '涂色标个数',
prop: 'workCenterNames',
prop: 'tsbNum',
sortable: true,
filter: true,
span: 24,
@ -302,7 +308,7 @@ export default {
},
{
label: '涂色带个数',
prop: 'workCenterNames',
prop: 'tsdNum',
sortable: true,
filter: true,
span: 24,
@ -312,7 +318,7 @@ export default {
},
{
label: '涂箭头个数',
prop: 'workCenterNames',
prop: 'tjtNum',
sortable: true,
filter: true,
span: 24,
@ -359,96 +365,106 @@ export default {
},
onLoad() {
this.loading = true
this.data = [
{
"bsTeamSet": null,
"bsWorkCenter": {
"area": 13000.0,
"batchNo": null,
"bigBatch": false,
"bsJfCenter": {
"createMan": {
"userId": 1,
"userName": "admin"
},
"createTime": "2024-12-09 00:00:00",
"deleted": false,
"jcCode": "RBZX",
"jcId": 1,
"jcName": "热表中心",
"keyValue": 1,
"updateTime": "2024-12-09 00:00:00"
},
"checkout": false,
"craftAbility": "化学镀镍",
"createMan": {
"userId": 1,
"userName": "admin"
},
"createTime": "2023-02-06 12:31:36",
"deleted": false,
"describe": null,
"endPoint": null,
"keyValue": 81,
"leaderUser": {
"userId": 541,
"userName": "崔殿龙"
},
"limitType": 0,
"processes": "上挂、下挂、交检、化学镀镍、喷砂",
"quantity": null,
"roundCycle": null,
"saturation": 85.0,
"sign": "4",
"startPoint": null,
"team": "化学镀镍一班崔胜伟、化学镀镍一班郭家梁",
"updateTime": "2023-03-06 18:42:47",
"wcCode": "001",
"wcId": 81,
"wcName": "化学镀镍作业中心",
"whetherPlate": false
},
"createMan": {
"userId": 1,
"userName": "admin"
},
"createTime": "2025-04-09 11:27:09",
"deEquipmentCard": {
"bindQty": 4,
"categorys": "产线设备",
"deviceCode": "9652247",
"deviceIp": "192.168.43.179",
"deviceName": "化学镀镍",
"docking": true,
"ecId": 1,
"keyValue": 1,
"macCode": "9652247",
"macSpec": null,
"memo": null,
"rfId": "SYM-HCP-L4",
"status": true,
"typeName": "9652247",
"updateTime": null,
"used": 1,
"usedText": "正常服役",
"virtualMac": false
},
"keyValue": 121,
"pureWater": 1.0,
"quotaArea": 0.0,
"tapWater": 1.0,
"updateTime": "2025-04-09 11:27:09",
"uqDate": "2025-04-09",
"uqId": 121,
"uqType": 0,
"useElectric": 0.0,
"workCenterId": "[81]",
"workCenterName": "[\"化学镀镍作业中心\"]",
"workCenterNames": "化学镀镍作业中心"
}
]
this.page.total = this.data.length
this.loading = false
getStatement({
current:this.page.currentPage,
size:this.page.pageSize,
rosStatusList:'1',
...this.query
}).then(res =>{
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
// this.data = [
// {
// "bsTeamSet": null,
// "bsWorkCenter": {
// "area": 13000.0,
// "batchNo": null,
// "bigBatch": false,
// "bsJfCenter": {
// "createMan": {
// "userId": 1,
// "userName": "admin"
// },
// "createTime": "2024-12-09 00:00:00",
// "deleted": false,
// "jcCode": "RBZX",
// "jcId": 1,
// "jcName": "",
// "keyValue": 1,
// "updateTime": "2024-12-09 00:00:00"
// },
// "checkout": false,
// "craftAbility": "",
// "createMan": {
// "userId": 1,
// "userName": "admin"
// },
// "createTime": "2023-02-06 12:31:36",
// "deleted": false,
// "describe": null,
// "endPoint": null,
// "keyValue": 81,
// "leaderUser": {
// "userId": 541,
// "userName": "殿"
// },
// "limitType": 0,
// "processes": "",
// "quantity": null,
// "roundCycle": null,
// "saturation": 85.0,
// "sign": "4",
// "startPoint": null,
// "team": "",
// "updateTime": "2023-03-06 18:42:47",
// "wcCode": "001",
// "wcId": 81,
// "wcName": "",
// "whetherPlate": false
// },
// "createMan": {
// "userId": 1,
// "userName": "admin"
// },
// "createTime": "2025-04-09 11:27:09",
// "deEquipmentCard": {
// "bindQty": 4,
// "categorys": "线",
// "deviceCode": "9652247",
// "deviceIp": "192.168.43.179",
// "deviceName": "",
// "docking": true,
// "ecId": 1,
// "keyValue": 1,
// "macCode": "9652247",
// "macSpec": null,
// "memo": null,
// "rfId": "SYM-HCP-L4",
// "status": true,
// "typeName": "9652247",
// "updateTime": null,
// "used": 1,
// "usedText": "",
// "virtualMac": false
// },
// "keyValue": 121,
// "pureWater": 1.0,
// "quotaArea": 0.0,
// "tapWater": 1.0,
// "updateTime": "2025-04-09 11:27:09",
// "uqDate": "2025-04-09",
// "uqId": 121,
// "uqType": 0,
// "useElectric": 0.0,
// "workCenterId": "[81]",
// "workCenterName": "[\"\"]",
// "workCenterNames": ""
// }
// ]
// this.page.total = this.data.length
// this.loading = false
// setTimeout(() => {
// this.selectionClear()
// }, 500)

@ -302,9 +302,6 @@ export default {
return c
},
maintenanceClick() {
console.log('this.otherData-------------',this.otherData)
console.log('this.data-------------',this.data)
console.log('c-------------',this.calcData(this.otherData,this.data))
this.maintenanceArr = this.calcData(this.otherData,this.data)
let jhzhError = this.maintenanceArr.find(item => item.jhzsReality === null)

@ -15,11 +15,191 @@
</template>
<template #jhzsReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #jhzsReality="{row}">
<el-input v-model="row.jhzsReality"
: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'"
></el-input>
</template>
<template #zdljReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #zdljReality="{row}">
<el-input v-model="row.zdljReality"
: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'"
></el-input>
</template>
<template #qqxReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #qqxReality="{row}">
<el-input-number controls-position="right" style="width:90%;" v-model="row.qqxReality"
: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'"
></el-input-number>
</template>
<template #produceTsReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #produceTsReality="{row}">
<el-input-number controls-position="right" style="width:90%;" v-model="row.produceTsReality"
: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'"
></el-input-number>
</template>
<template #hgxTarget-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #hgxTarget="{row}">
<el-input v-model="row.hgxTarget"
:class="maintenanceArr.length > 0
&& maintenanceArr.find(item => item.id == row.id)
&& (maintenanceArr.find(item => item.id == row.id).hgxTarget === null || maintenanceArr.find(item => item.id == row.id).hgxTarget === '')
&& 'error'"
></el-input>
</template>
<template #hgxReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #hgxReality="{row}">
<el-input v-model="row.hgxReality"
:class="maintenanceArr.length > 0
&& maintenanceArr.find(item => item.id == row.id)
&& (maintenanceArr.find(item => item.id == row.id).hgxReality === null || maintenanceArr.find(item => item.id == row.id).hgxReality === '')
&& 'error'"
></el-input>
</template>
<template #dppmTarget-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #dppmTarget="{row}">
<el-input v-model="row.dppmTarget"
:class="maintenanceArr.length > 0
&& maintenanceArr.find(item => item.id == row.id)
&& (maintenanceArr.find(item => item.id == row.id).dppmTarget === null || maintenanceArr.find(item => item.id == row.id).dppmTarget === '')
&& 'error'"
></el-input>
</template>
<template #dppmReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #dppmReality="{row}">
<el-input v-model="row.dppmReality"
:class="maintenanceArr.length > 0
&& maintenanceArr.find(item => item.id == row.id)
&& (maintenanceArr.find(item => item.id == row.id).dppmReality === null || maintenanceArr.find(item => item.id == row.id).dppmReality === '')
&& 'error'"
></el-input>
</template>
<template #djcwReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #djcwReality="{row}">
<el-input v-model="row.djcwReality"
:class="maintenanceArr.length > 0
&& maintenanceArr.find(item => item.id == row.id)
&& (maintenanceArr.find(item => item.id == row.id).djcwReality === null || maintenanceArr.find(item => item.id == row.id).djcwReality === '')
&& 'error'"
></el-input>
</template>
<template #qualityTsReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #qualityTsReality="{row}">
<el-input-number controls-position="right" style="width:90%;" v-model="row.qualityTsReality"
:class="maintenanceArr.length > 0
&& maintenanceArr.find(item => item.id == row.id)
&& (maintenanceArr.find(item => item.id == row.id).qualityTsReality === null || maintenanceArr.find(item => item.id == row.id).qualityTsReality === '')
&& 'error'"
></el-input-number>
</template>
<template #pcxReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #pcxReality="{row}">
<el-input-number controls-position="right" style="width:90%;" v-model="row.pcxReality"
:class="maintenanceArr.length > 0
&& maintenanceArr.find(item => item.id == row.id)
&& (maintenanceArr.find(item => item.id == row.id).pcxReality === null || maintenanceArr.find(item => item.id == row.id).pcxReality === '')
&& 'error'"
></el-input-number>
</template>
<template #dywReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #dywReality="{row}">
<el-input-number controls-position="right" style="width:90%;" v-model="row.dywReality"
:class="maintenanceArr.length > 0
&& maintenanceArr.find(item => item.id == row.id)
&& (maintenanceArr.find(item => item.id == row.id).dywReality === null || maintenanceArr.find(item => item.id == row.id).dywReality === '')
&& 'error'"
></el-input-number>
</template>
<template #qlwtReality-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #qlwtReality="{row}">
<el-input-number controls-position="right" style="width:90%;" v-model="row.qlwtReality"
:class="maintenanceArr.length > 0
&& maintenanceArr.find(item => item.id == row.id)
&& (maintenanceArr.find(item => item.id == row.id).qlwtReality === null || maintenanceArr.find(item => item.id == row.id).qlwtReality === '')
&& 'error'"
></el-input-number>
</template>
<template #growAbility-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #growAbility="{row}">
<el-input v-model="row.growAbility"
: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'"
></el-input>
</template>
<template #ajorIssues-header="{ column }">
<span style="color: red;margin-right:5px;">*</span>{{column.label}}
</template>
<template #ajorIssues="{row}">
<el-input v-model="row.ajorIssues"
:class="maintenanceArr.length > 0
&& maintenanceArr.find(item => item.id == row.id)
&& (maintenanceArr.find(item => item.id == row.id).ajorIssues === null || maintenanceArr.find(item => item.id == row.id).ajorIssues === '')
&& 'error'"
></el-input>
</template>
</avue-crud>
</basic-container>
</template>
<script>
import {getList} from "@/api/outsourcingManagement/performanceCheck"
import {getList,reCalculate,saveData} from "@/api/outsourcingManagement/performanceCheck"
export default {
components: {
@ -29,6 +209,9 @@ export default {
selectionList: [],
loading:false,
query:{},
maintenanceArr:[],
otherData:[],
data:[],
option: {
height: 'auto',
calcHeight: 32,
@ -605,25 +788,69 @@ export default {
}
},
methods: {
calcData(a,b){
//
const fieldsToCheck = [
'jhzsReality','zdljReality','qqxReality', 'produceTsReality', 'growAbility',
'djcwReality','qualityTsReality','pcxReality', 'dywReality', 'qlwtReality','dppmTarget',
'dppmReality','hgxTarget','hgxReality',"ajorIssues"
];
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
},
updateData() {
// this.$refs.myTable.fullValidate((errMap) => {
// if (errMap) {
// return;
// }
// const dataList = this.$refs.myTable.getRecordset().updateRecords;
// this.$ajax
// .post('oemMerits/updateData', {
// dataList
// })
// .then((res) => {
// if (res.code === 0) {
// this.$message.success('');
// this.queryTable();
// }
// });
// });
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)
let djcwError = this.maintenanceArr.find(item => item.djcwReality === null)
let qualityError = this.maintenanceArr.find(item => item.qualityTsReality === null)
let pcxError = this.maintenanceArr.find(item => item.pcxReality === null)
let dywError = this.maintenanceArr.find(item => item.dywReality === null)
let qlwtError = this.maintenanceArr.find(item => item.qlwtReality === null)
let dppmTargetError = this.maintenanceArr.find(item => item.dppmTarget === null)
let dppmRealityError = this.maintenanceArr.find(item => item.dppmReality === null)
let hgxTargetError = this.maintenanceArr.find(item => item.hgxTarget === null)
let hgxRealityError = this.maintenanceArr.find(item => item.hgxReality === null)
let ajorError = this.maintenanceArr.find(item => item.ajorIssues === null)
if(jhzhError || ajorError || zdljError || qqxError || produceError || growError || djcwError || qualityError || pcxError || dywError || qlwtError || dppmTargetError || dppmRealityError || hgxTargetError || hgxRealityError){
this.$message.error('请填写表格中红框数据')
return
}
reCalculate(this.maintenanceArr).then(res =>{
if(res.data.code === 200){
this.$message.success('重新计算成功')
this.onLoad()
}
})
},
submitData() {
saveData(this.data).then(res =>{
if(res.data.code === 200){
this.$message.success('保存成功')
this.onLoad()
}
})
// this.$refs.myTable.fullValidate((errMap) => {
// if (errMap) {
// return;
@ -702,6 +929,7 @@ export default {
...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;
})

@ -5,7 +5,7 @@
@selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
@refresh-change="refreshChange" @on-load="onLoad">
<template #menu-left>
<el-button type="primary" @click="processSubmitData()">审核通过</el-button>
<el-button type="primary" v-if="isOk" @click="processSubmitData()">审核通过</el-button>
</template>
<template #menu-right>
@ -20,7 +20,7 @@
</basic-container>
</template>
<script>
import {getList} from "@/api/outsourcingManagement/performanceReview"
import {getList,approvalData} from "@/api/outsourcingManagement/performanceReview"
export default {
components: {
@ -81,26 +81,16 @@ export default {
column: [
{
label: '工艺能力',
prop: 'plate',
prop: 'caName',
sortable: true,
filter: true,
span: 24,
search: false,
width: 130,
type:'select',
dicData:[
{
label:'镀金'
},
{
label:'镀银'
}
]
width: 130,
},
{
label: '厂家代码',
prop: 'bsOemCustomer.ocCode',
bind: 'bsOemCustomer.ocCode',
prop: 'oemCode',
search: false,
sortable: true,
filter: true,
@ -109,8 +99,7 @@ export default {
},
{
label: '厂家名称',
prop: 'bsOemCustomer.ocName',
bind: 'bsOemCustomer.ocName',
prop: 'oemName',
search: false,
sortable: true,
filter: true,
@ -631,28 +620,45 @@ export default {
},
]
},
form: {
},
form: {},
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
omId: null,
isOpen: false
isOpen: false,
isOk:true,
}
},
created(){
this.query = {
statusList:"3,4",
}
},
methods: {
refreshChange(){
this.query = {
statusList:"3,4",
}
this.onLoad()
},
processSubmitData() {
this.$confirm('选中数据是否审核通过?', '提示', {
this.$confirm('确定审核通过数据?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
}).then(() => {
approvalData(this.data).then(res =>{
if(res.data.code == 200){
this.$message.success('审核成功')
this.query = {
statusList:"3,4",
}
this.onLoad()
}
})
})
// const dataList = this.$refs.myTable.getTableData().tableData;
// if (dataList.length === 0) {
// this.$message.warning('');
@ -671,7 +677,20 @@ export default {
},
switchClick(flag) {
this.isOk = flag;
// this.queryTable();
if(flag){
this.query = {
statusList:"3",
}
this.onLoad()
}else{
// statusList2produceStatusList3qualityStatusList3
this.query = {
statusList:"2",
produceStatusList:"3",
qualityStatusList:"3"
}
this.onLoad()
}
},
updateData() {
// this.$refs.myTable.fullValidate((errMap) => {
@ -761,10 +780,10 @@ export default {
},
onLoad() {
this.loading = true
console.log('query----------',this.query)
getList({
current:this.page.currentPage,
size:this.page.pageSize,
statusList:"3,4",
...this.query,
}).then((res) => {
this.data = res.data.data.records

@ -1,12 +1,13 @@
<template>
<div>
<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"
@row-del="rowDel" @row-save="rowSave" @row-update="rowUpdate" @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="batchMaintain()">批量维护
</el-button> -->
<el-button type="danger" @click="handleDelete">删除</el-button>
</template>
<template #menu-right>
<el-button type="primary" @click="handleImport">导入
@ -22,15 +23,16 @@
<!-- 导入 -->
<basic-import v-if="isShowImport" title="导入" :isShow="isShowImport"
templateUrl="/blade-desk/QA/CycleTestItem/download-excel-template"
templateName="试验项目模板.xlsx"
importUrl="/blade-desk/QA/CycleTestItem/import-excel"
templateUrl="/blade-desk/mesPlatingTypeRules/downloadExcelTemplate"
templateName="结算规则模板.xlsx"
importUrl="/blade-desk/mesPlatingTypeRules/importExcel"
@closeDialog="closeDialog"></basic-import>
</div>
</template>
<script>
import processDialog from './processDialog.vue'
import basicImport from '@/components/basic-import/main.vue'
import {getPlateList,addPlateData,updatePlateData,deletePlateData} from "@/api/outsourcingManagement/settlementRules"
export default {
components: {
processDialog,
@ -41,6 +43,7 @@ export default {
isShowImport: false,
loading: false,
selectionList: [],
query:{},
option: {
height: 'auto',
calcHeight: 32,
@ -55,7 +58,7 @@ export default {
border: true,
index: true,
selection: true,
editBtn: false,
editBtn: true,
viewBtn: false,
delBtn: true,
addBtn: true,
@ -65,7 +68,7 @@ export default {
editBtnIcon: ' ',
viewBtnText: '详情',
labelWidth: 120,
menuWidth: 180,
menuWidth: 100,
dialogWidth: 640,
dialogClickModal: false,
searchEnter: true,
@ -78,7 +81,7 @@ export default {
index: false,
showOverflowTooltip: true,
searchLabelPosition: 'left',
searchLabelPosition: 'left',
labelWidth: 120,
searchGutter: 24,
searchSpan: 6,
menuAlign: 'left',
@ -89,6 +92,7 @@ export default {
delBtnIcon: ' ',
editBtnIcon: ' ',
align: 'center',
menuAlign:"center",
column: [
// {
// label: '-',
@ -108,12 +112,12 @@ export default {
// },
{
label: '镀种-描述规则',
prop: 'workCenterNames',
prop: 'quotationPlat',
sortable: true,
filter: true,
span: 24,
search: false,
labelWidth:130,
labelWidth:120,
rules: [
{
required: true,
@ -134,7 +138,7 @@ export default {
// },
{
label: '镀种-订单',
prop: 'workCenterNames1',
prop: 'orderPlat',
sortable: true,
filter: true,
span: 24,
@ -142,17 +146,11 @@ export default {
type:'select',
clearable:true,
filterable: true,
dicData:[
{
label:'Ep.Cu8.Ap.Ni8',
value:1
},
{
label:'Ep.Cu1.Ap.Ni3',
value:2
},
],
dicUrl:"/api/blade-desk/BA/Plating/listForSelect",
props:{
label:"plating",
value:'plating'
},
rules: [
{
required: true,
@ -165,7 +163,7 @@ export default {
{
label: '维护人',
prop: 'workCenterNames2',
prop: 'createTime',
sortable: true,
filter: true,
span: 24,
@ -175,7 +173,7 @@ export default {
},
{
label: '维护时间',
prop: 'workCenterNames3',
prop: 'createUser',
sortable: true,
filter: true,
span: 24,
@ -199,18 +197,31 @@ export default {
},
methods: {
//
handleImport() {
this.isShowImport = true
},
handleImport() {
this.isShowImport = true
},
batchMaintain() {
this.isOpen = true
},
closeDialog() {
closeDialog(val) {
this.isOpen = false
this.isShowImport = false
if(val){
this.onLoad()
}
},
currentChange(currentPage){
this.page.currentPage = currentPage
},
sizeChange(pageSize){
this.page.pageSize = pageSize
},
refreshChange(){
this.onLoad()
},
handleDelete() {
if (this.selectionList.length === 0) {
this.$message.warning('请选择至少一条数据');
this.$message.error('请选择至少一条数据');
return;
}
this.$confirm('确定将选择数据删除?', {
@ -218,111 +229,164 @@ export default {
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
deletePlateData({
ids:this.selectionList.map(item => item.id).join(',')
}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
//
selectionChange(list) {
this.selectionList = list;
},
rowSave(row, done, loading){
addPlateData(row).then(res =>{
if(res.data.code == 200){
this.$message.success('新增成功')
done()
this.onLoad()
}
})
},
rowUpdate(row, index, done, loading){
updatePlateData(row).then(res =>{
if(res.data.code == 200){
this.$message.success('修改成功')
done()
this.onLoad()
}
})
},
rowDel(row){
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
deletePlateData({ids:row.id}).then(res =>{
if(res.data.code == 200){
this.$message.success('删除成功')
this.onLoad()
}
})
})
},
onLoad() {
this.loading = true
this.data = [
{
"bsTeamSet": null,
"bsWorkCenter": {
"area": 13000.0,
"batchNo": null,
"bigBatch": false,
"bsJfCenter": {
"createMan": {
"userId": 1,
"userName": "admin"
},
"createTime": "2024-12-09 00:00:00",
"deleted": false,
"jcCode": "RBZX",
"jcId": 1,
"jcName": "热表中心",
"keyValue": 1,
"updateTime": "2024-12-09 00:00:00"
},
"checkout": false,
"craftAbility": "化学镀镍",
"createMan": {
"userId": 1,
"userName": "admin"
},
"createTime": "2023-02-06 12:31:36",
"deleted": false,
"describe": null,
"endPoint": null,
"keyValue": 81,
"leaderUser": {
"userId": 541,
"userName": "崔殿龙"
},
"limitType": 0,
"processes": "上挂、下挂、交检、化学镀镍、喷砂",
"quantity": null,
"roundCycle": null,
"saturation": 85.0,
"sign": "4",
"startPoint": null,
"team": "化学镀镍一班崔胜伟、化学镀镍一班郭家梁",
"updateTime": "2023-03-06 18:42:47",
"wcCode": "001",
"wcId": 81,
"wcName": "化学镀镍作业中心",
"whetherPlate": false
},
"createMan": {
"userId": 1,
"userName": "admin"
},
"createTime": "2025-04-09 11:27:09",
"deEquipmentCard": {
"bindQty": 4,
"categorys": "产线设备",
"deviceCode": "9652247",
"deviceIp": "192.168.43.179",
"deviceName": "化学镀镍",
"docking": true,
"ecId": 1,
"keyValue": 1,
"macCode": "9652247",
"macSpec": null,
"memo": null,
"rfId": "SYM-HCP-L4",
"status": true,
"typeName": "9652247",
"updateTime": null,
"used": 1,
"usedText": "正常服役",
"virtualMac": false
},
"keyValue": 121,
"pureWater": 1.0,
"quotaArea": 0.0,
"tapWater": 1.0,
"updateTime": "2025-04-09 11:27:09",
"uqDate": "2025-04-09",
"uqId": 121,
"uqType": 0,
"useElectric": 0.0,
"workCenterId": "[81]",
"workCenterName": "[\"化学镀镍作业中心\"]",
"workCenterNames": "镀金",
"workCenterNames1": "Cu%Ni%",
"workCenterNames2": "张三",
"workCenterNames3": "2025-10-09 12:09:08",
}
]
this.page.total = this.data.length
this.loading = false
setTimeout(() => {
this.selectionClear()
}, 500)
getPlateList({
current:this.page.currentPage,
size:this.page.pageSize,
...this.query
}).then(res =>{
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
// this.data = [
// {
// "bsTeamSet": null,
// "bsWorkCenter": {
// "area": 13000.0,
// "batchNo": null,
// "bigBatch": false,
// "bsJfCenter": {
// "createMan": {
// "userId": 1,
// "userName": "admin"
// },
// "createTime": "2024-12-09 00:00:00",
// "deleted": false,
// "jcCode": "RBZX",
// "jcId": 1,
// "jcName": "",
// "keyValue": 1,
// "updateTime": "2024-12-09 00:00:00"
// },
// "checkout": false,
// "craftAbility": "",
// "createMan": {
// "userId": 1,
// "userName": "admin"
// },
// "createTime": "2023-02-06 12:31:36",
// "deleted": false,
// "describe": null,
// "endPoint": null,
// "keyValue": 81,
// "leaderUser": {
// "userId": 541,
// "userName": "殿"
// },
// "limitType": 0,
// "processes": "",
// "quantity": null,
// "roundCycle": null,
// "saturation": 85.0,
// "sign": "4",
// "startPoint": null,
// "team": "",
// "updateTime": "2023-03-06 18:42:47",
// "wcCode": "001",
// "wcId": 81,
// "wcName": "",
// "whetherPlate": false
// },
// "createMan": {
// "userId": 1,
// "userName": "admin"
// },
// "createTime": "2025-04-09 11:27:09",
// "deEquipmentCard": {
// "bindQty": 4,
// "categorys": "线",
// "deviceCode": "9652247",
// "deviceIp": "192.168.43.179",
// "deviceName": "",
// "docking": true,
// "ecId": 1,
// "keyValue": 1,
// "macCode": "9652247",
// "macSpec": null,
// "memo": null,
// "rfId": "SYM-HCP-L4",
// "status": true,
// "typeName": "9652247",
// "updateTime": null,
// "used": 1,
// "usedText": "",
// "virtualMac": false
// },
// "keyValue": 121,
// "pureWater": 1.0,
// "quotaArea": 0.0,
// "tapWater": 1.0,
// "updateTime": "2025-04-09 11:27:09",
// "uqDate": "2025-04-09",
// "uqId": 121,
// "uqType": 0,
// "useElectric": 0.0,
// "workCenterId": "[81]",
// "workCenterName": "[\"\"]",
// "workCenterNames": "",
// "workCenterNames1": "Cu%Ni%",
// "workCenterNames2": "",
// "workCenterNames3": "2025-10-09 12:09:08",
// }
// ]
// this.page.total = this.data.length
// this.loading = false
// setTimeout(() => {
// this.selectionClear()
// }, 500)
}
}
}

@ -1,9 +1,9 @@
<template>
<basic-container>
<el-tabs v-model="activeName" class="demo-tabs" @tab-change="tabPositionChange">
<el-tab-pane label="结算规则维护" name="1"></el-tab-pane>
<el-tab-pane label="镀种规则维护" name="3"></el-tab-pane>
<el-tab-pane label="工序规则维护" name="2"></el-tab-pane>
<!-- <el-tab-pane label="结算规则维护" name="1"></el-tab-pane> -->
<!-- <el-tab-pane label="镀种规则维护" name="3"></el-tab-pane> -->
<!-- <el-tab-pane label="工序规则维护" name="2"></el-tab-pane> -->
</el-tabs>
<settlement v-if="activeName == '1'"></settlement>
@ -26,7 +26,7 @@ export default {
},
data() {
return {
activeName: '1',
activeName: '3',
isOpen: false,
}
},

@ -8,11 +8,11 @@
</el-radio-group>
</div>
<div class="test_type" v-if="testType == 1">
<span>历史订单</span>
<el-select v-model="detailInfo.refWoId" placeholder="请选择" style="width: 400px;" :disabled="type == 'view'">
<span>流程卡号</span>
<!-- <el-select v-model="detailInfo.refWoId" placeholder="请选择" style="width: 400px;" :disabled="type == 'view'">
<el-option v-for="item in historyList" :key="item.woId" :label="item.woInfo" :value="item.woId" />
<!-- <el-option label="订单2" value="2" /> -->
</el-select>
</el-select> -->
<el-input placeholder="请输入流程卡号" style="width:400px;" v-model="cardNo"></el-input>
<el-button @click="handleUse" type="primary" style="margin-left:10px;" :disabled="type == 'view'">应用</el-button>
</div>
<el-descriptions title="订单信息" border :column="4" label-width="110">
@ -301,7 +301,7 @@
<script>
import {getFaultClassList,getQuestionClassList,getQuestionClassList2,getProductionDispositionDetail,
createProductionDisposition,getHistoryOrderList,setHistoryOrderValue,getDispositionTypeList,getResponsiblePartList,
getResponsibleBatchList,getRelatedPartList,getRelatedBatchList} from "@/api/qualityManagement/productionTesting/productionDisposition"
getResponsibleBatchList,getRelatedPartList,getRelatedBatchList,getSameLotList} from "@/api/qualityManagement/productionTesting/productionDisposition"
export default {
props: {
showDialog: {
@ -326,6 +326,7 @@ export default {
openShow: false,
tableData: [],
form: {},
cardNo:"",
testType: 1,
disposalType:1, //
faultList:[],
@ -351,7 +352,7 @@ export default {
this.getError()
this.getQuestionBig()
this.getDetail()
this.getHistory()
// this.getHistory()
this.getDisposeType()
this.getResponsiblePart()
this.getResponsibleBatch()
@ -409,41 +410,60 @@ export default {
})
},
handleUse(){
if(!this.detailInfo.refWoId || this.detailInfo.refWoId == ''){
if(!this.cardNo || this.cardNo == ''){
return
}
// this.checkWoId = this.detailInfo.refWoId
setHistoryOrderValue({
getSameLotList({
id:this.rsId,
woId:this.detailInfo.refWoId
cardNo:this.cardNo
}).then(res =>{
console.log('res1----------------',res)
getProductionDispositionDetail({
// woId:this.detailInfo.refWoId
id:this.rsId
}).then(res =>{
console.log('res2--------------------------------',res)
// this.getQuestionSmall()
this.checkList = []
this.checkList.push(
res.data.data.isBatProblem == 1 ? 'isBatProblem' : null,
res.data.data.isClassicProblem == 1 ? 'isClassicProblem' : null,
res.data.data.isLowError == 1 ? 'isLowError' : null,
res.data.data.isQualityProblem == 1 ? 'isQualityProblem' : null,
)
this.detailInfo = res.data.data
res.data.data.faultList.map((item,index) =>{
item._select = false
this.getQuestionSmall(item.ngType3Id,index)
})
this.faultList = res.data.data.faultList
res.data.data.dutyList.map(item =>{
item._select = false
})
this.dutyList = res.data.data.dutyList
}).catch(err =>{
this.detailInfo.refWoId = ''
this.detailInfo = res.data.data
this.checkList = []
this.checkList.push(
res.data.data.isBatProblem == 1 ? 'isBatProblem' : null,
res.data.data.isClassicProblem == 1 ? 'isClassicProblem' : null,
res.data.data.isLowError == 1 ? 'isLowError' : null,
res.data.data.isQualityProblem == 1 ? 'isQualityProblem' : null,
)
res.data.data.faultList.map((item,index) =>{
item._select = false
this.getQuestionSmall(item.ngType3Id,index)
})
this.faultList = res.data.data.faultList
res.data.data.dutyList.map(item =>{
item._select = false
})
this.dutyList = res.data.data.dutyList
// getProductionDispositionDetail({
// // woId:this.detailInfo.refWoId
// id:this.rsId
// }).then(res =>{
// console.log('res2--------------------------------',res)
// // this.getQuestionSmall()
// this.checkList = []
// this.checkList.push(
// res.data.data.isBatProblem == 1 ? 'isBatProblem' : null,
// res.data.data.isClassicProblem == 1 ? 'isClassicProblem' : null,
// res.data.data.isLowError == 1 ? 'isLowError' : null,
// res.data.data.isQualityProblem == 1 ? 'isQualityProblem' : null,
// )
// this.detailInfo = res.data.data
// res.data.data.faultList.map((item,index) =>{
// item._select = false
// this.getQuestionSmall(item.ngType3Id,index)
// })
// this.faultList = res.data.data.faultList
// res.data.data.dutyList.map(item =>{
// item._select = false
// })
// this.dutyList = res.data.data.dutyList
// }).catch(err =>{
// this.detailInfo.refWoId = ''
// })
}).catch(err =>{
this.detailInfo.refWoId = ''
})

@ -7,35 +7,46 @@
@close="closeDialog"
@open="open"
>
<el-descriptions :column="4" border title="物料需求信息" :label-width="150">
<el-descriptions :column="3" border title="" :label-width="150">
<el-descriptions-item label="作业中心">{{
addForm.wcName
}}</el-descriptions-item>
<el-descriptions-item label="建立人员">{{ addForm.createUserName }}</el-descriptions-item>
<el-descriptions-item label="建立时间">{{ addForm.createTime }}</el-descriptions-item>
<el-descriptions-item label="申请人">{{ addForm.createUserName }}</el-descriptions-item>
<el-descriptions-item label="申请时间">{{ addForm.createTime }}</el-descriptions-item>
<el-descriptions-item label="物料编码">{{ addForm.goodsCode }}</el-descriptions-item>
<el-descriptions-item label="班组实际消耗(克)">{{
<!-- <el-descriptions-item label="班组实际消耗(克)">{{
addForm.teamActualConsumption
}}</el-descriptions-item>
-->
<el-descriptions-item label="物料名称">{{ addForm.goodsName }}</el-descriptions-item>
<el-descriptions-item label="班组预添加(克)">{{
addForm.teamPreAddGram
addForm.goodsAddTotal
}}</el-descriptions-item>
<el-descriptions-item label="物料名称">{{ addForm.goodsName }}</el-descriptions-item>
<el-descriptions-item label="可使用定额(克)">{{
addForm.usableQuotaGram
addForm.goodsDemandTotal
}}</el-descriptions-item>
<el-descriptions-item label="累计结余(克)">{{
addForm.accumulatedBalanceGram
addForm.declaredQuotaTotal
}}</el-descriptions-item>
<el-descriptions-item label="本次添加涉及单号">{{
<!-- <el-descriptions-item label="本次添加涉及单号">{{
addForm.involvingRecordCode
}}</el-descriptions-item>
<el-descriptions-item label="本次剩余单号余量">{{
addForm.involvingSurplus
}}</el-descriptions-item>
}}</el-descriptions-item> -->
</el-descriptions>
<el-descriptions
<el-descriptions class="margin-top" :column="4" border title="物料需求明细"> </el-descriptions>
<el-table :data="data">
<el-table-column label="需求单号" prop="demandCode"></el-table-column>
<el-table-column label="作业中心" prop="wcName"></el-table-column>
<el-table-column label="物料编码" prop="goodsCode"></el-table-column>
<el-table-column label="物料名称" prop="goodsName"></el-table-column>
<el-table-column label="本次使用(克)" prop="code"></el-table-column>
<el-table-column label="剩余量(克)" prop="surplus"></el-table-column>
</el-table>
<!-- <el-descriptions
class="margin-top"
:column="4"
border
@ -56,8 +67,8 @@
addForm.approvalMemo
}}</el-descriptions-item>
</template>
</el-descriptions>
<el-descriptions class="margin-top" :column="4" border title="订单信息"> </el-descriptions>
</el-descriptions> -->
<!-- <el-descriptions class="margin-top" :column="4" border title="订单信息"> </el-descriptions>
<el-table :data="tableData">
<el-table-column label="槽号" prop="slotName" align="center"></el-table-column>
<el-table-column label="化验值" prop="testVal" align="center"></el-table-column>
@ -68,7 +79,9 @@
align="center"
></el-table-column>
<el-table-column label="理论值" prop="saveBoardVal" align="center"></el-table-column>
</el-table>
</el-table> -->
</el-dialog>
</template>
@ -97,9 +110,10 @@ export default {
//
try {
const ref = await getOrderMoldPlanCaDeatils({ id: this.id });
console.log('res------------',ref)
if (ref.data.code == 200) {
this.addForm = ref.data.data;
this.tableData = ref.data.data.yieldOrderList;
this.tableData = ref.data.data.recordVos;
}
} catch (err) {
console.log(err);

@ -119,8 +119,8 @@ export default {
align: 'center',
column: [
{
label: '需求单号',
prop: 'demandCode',
label: '申报单号',
prop: 'applyCode',
span: 24,
overflow: true,
search: true,
@ -130,7 +130,7 @@ export default {
rules: [
{
required: true,
message: '请输入需求单号',
message: '请输入申报单号',
trigger: 'blur',
},
],
@ -194,8 +194,8 @@ export default {
],
},
{
label: '镀层物料需求(克)',
prop: 'goodsDemand',
label: '班组预添加量(克)',
prop: 'goodsAddTotal',
span: 24,
overflow: true,
search: false,
@ -205,59 +205,110 @@ export default {
rules: [
{
required: true,
message: '请输入金钾申报量(克)',
message: '请输入班组预添加量(克)',
trigger: 'blur',
},
],
},
{
label: '已使用(克)',
prop: 'usedGoldVal',
span: 24,
overflow: true,
search: false,
headerAlign: 'center',
align: 'center',
rules: [
{
required: true,
message: '请输入金钾申报量(克)',
trigger: 'blur',
},
],
},
{
label: '申报量(克)',
prop: 'declaredQuota',
label: '可使用定额(克)',
prop: 'goodsDemandTotal',
span: 24,
overflow: true,
search: false,
headerAlign: 'center',
align: 'center',
width: 160,
rules: [
{
required: true,
message: '请输入银钾申报量(克)',
message: '请输入可使用定额(克)',
trigger: 'blur',
},
],
},
{
label: '剩余量(克)',
prop: 'surplus',
label: '累计结余(克)',
prop: 'declaredQuotaTotal',
span: 24,
overflow: true,
search: false,
headerAlign: 'center',
align: 'center',
width: 160,
rules: [
{
required: true,
message: '请输入银板申报量(克)',
message: '请输入累计结余(克)',
trigger: 'blur',
},
],
},
// {
// label: '()',
// prop: 'goodsDemand',
// span: 24,
// overflow: true,
// search: false,
// headerAlign: 'center',
// align: 'center',
// width: 160,
// rules: [
// {
// required: true,
// message: '()',
// trigger: 'blur',
// },
// ],
// },
// {
// label: '使()',
// prop: 'usedGoldVal',
// span: 24,
// overflow: true,
// search: false,
// headerAlign: 'center',
// align: 'center',
// rules: [
// {
// required: true,
// message: '()',
// trigger: 'blur',
// },
// ],
// },
// {
// label: '()',
// prop: 'declaredQuota',
// span: 24,
// overflow: true,
// search: false,
// headerAlign: 'center',
// align: 'center',
// rules: [
// {
// required: true,
// message: '()',
// trigger: 'blur',
// },
// ],
// },
// {
// label: '()',
// prop: 'surplus',
// span: 24,
// overflow: true,
// search: false,
// headerAlign: 'center',
// align: 'center',
// rules: [
// {
// required: true,
// message: '()',
// trigger: 'blur',
// },
// ],
// },
{
label: '状态',
prop: 'status',

@ -43,7 +43,7 @@
</template>
</avue-crud>
<el-dialog append-to-body title="检验结果" width="90%" v-model="showDialog" fullscreen>
<el-dialog append-to-body title="检验结果" width="90%" v-model="showDialog" fullscreen @close="handleClose">
<div style="display: flex; align-items: center; justify-content: space-between">
<el-descriptions title="订单信息" :column="5" border style="width: 100%" :label-width="110">
<el-descriptions-item label="车间订单号" class="fixed-width-item">{{
@ -136,7 +136,7 @@
@expand-change="handleExpandChange"
:default-expand-all="false"
>
<el-table-column type="expand">
<el-table-column type="expand" v-if="dialogData.ppsName != '烧结包装防护'">
<template #default="scope">
<el-table
:data="scope.row.wpItemDetailList"
@ -405,7 +405,7 @@
<script>
import {dateFormat} from '@/utils/date'
import {createInspection,getInspectionList,getInspectionDetail,fillInspection,getSameLotList,applySameLot,getHardnessList,
import {createInspection,getInspectionList,getInspectionDetail,fillInspection,getSameLotList,applySameLot,
refreshHardness,getThicknessList,goQualityRecord,goCertificate,getSubPackageList, getSupplierList,getMeasurement} from '@/api/qualityManagement/productionTesting/productionQuality.js'
import sametankView from './components/sametankView.vue';
export default {
@ -885,9 +885,7 @@ export default {
};
},
mounted() {
getMeasurement().then(res =>{
this.measureList = res.data.data
})
},
methods: {
handleCreate(){
@ -938,9 +936,13 @@ export default {
if (!tmp) {
this.expandedRowKeys = [...this.expandedRowKeys, row.id];
}
if((row.checkUserId != -1 || row.checkUserRealName != '')){
this.thicknessData = row.wpItemDetailList
return
}
this.isStart = !this.isStart;
if(this.isStart){
this.thicknessData = []
this.thicknessData = this.thicknessData.length > 0 ? this.thicknessData : []
this.startTime = dateFormat(new Date(),'yyyy-MM-dd hh:mm:ss')
this.firstInterval = setInterval(() =>{
this.getThickness(0,true,dateFormat(new Date(),'yyyy-MM-dd hh:mm:ss'),itemDetail)
@ -993,14 +995,26 @@ export default {
getThickness(val,allData,endTime,itemDetail){
getThicknessList({
startTime:this.startTime,
endTime:endTime,
// startTime:this.startTime,
// endTime:endTime,
allData,
count:val
// count:val
}).then(res =>{
console.log('res111111111111',res)
if (res.data.data != null) {
const resultList = res.data.data;
// const resultList = [{
// IP:"10.15.3.26",
// devCode:"Ni/CuZn59",
// devId:"LG020029",
// fi1etime: "2025/11/21 16:38:32",
// measurings: [
// {unit: "um", name: "Ni", value: "8.92142"},
// {unit: "/", name: "Cu", value: "/"},
// {unit: "/", name: "Cu", value: "/"}
// ]
// }]
console.log('resultList--------------',resultList)
if (resultList.length > 0) {
resultList.forEach((item) => {
@ -1012,7 +1026,7 @@ export default {
});
if (isExist) return;
console.log('item------------',item)
const { measurings, devId, devCode, filetime } = JSON.parse(item.data);
const { measurings, devId, devCode, filetime } = item;
const obj1 = { ...itemDetail };
// this.devCode = devCode;
obj1.gaugeValue7 = devCode;
@ -1029,7 +1043,8 @@ export default {
obj1['gaugeValue5'] = measurings[2].name;
obj1['gaugeValue6'] = this.getValue(measurings[2].value);
}
if (JSON.parse(item.data).measurings.length > 0) {
console.log('obj1------------',obj1)
if (item.measurings.length > 0) {
obj1.updateTime = dateFormat(new Date(),'yyyy-MM-dd hh:mm:ss');
// obj1.updateTime = filetime;
const index = this.provingObjIsNull();
@ -1053,6 +1068,7 @@ export default {
})
}
console.log('this.thicknessData',this.thicknessData)
console.log('resultList',resultList)
const arr = [...this.getDChyData, ...resultList];
const obj = {};
this.getDChyData = arr.reduce((cur, next) => {
@ -1236,6 +1252,9 @@ export default {
handleResult(row) {
console.log('row------------------',row)
this.checkedId = row.id
getMeasurement().then(res =>{
this.measureList = res.data.data
})
getInspectionDetail({
id: row.id,
}).then(res => {
@ -1246,19 +1265,23 @@ export default {
this.remindMsgList = res.data.data.remindMsgList;
this.vxeTableData = res.data.data.wpItemList;
this.getSameList(row.id)
this.vxeTableData.forEach(item =>{
if(item.item.specialType == '2'){
this.ydInterval = setInterval(() =>{
getHardnessList().then(res =>{
console.log('res2--------------------------',res)
if (res.data.data.length > 0) {
item.checkValue = JSON.parse(res.data.data[0].data).formatted_hardness
clearInterval(this.ydInterval)
}
})
},window.YINGDU_Trigger)
}
})
if(this.dialogData.ppsName != '烧结包装防护'){
this.vxeTableData.forEach(item =>{
console.log('item--------------',item)
if(item.item.specialType == '2' && (item.checkUserId == -1 || item.checkUserRealName == '')){
this.ydInterval = setInterval(() =>{
refreshHardness().then(res =>{
console.log('res2--------------------------',res)
if (res.data.data.length > 0) {
item.checkValue = res.data.data[0].formatted_hardness
clearInterval(this.ydInterval)
}
})
},window.YINGDU_Trigger)
}
})
}
if(this.dialogData.ppsName === '烧结包装防护'){
getSubPackageList({
@ -1275,6 +1298,7 @@ export default {
},
onLoad() {
console.log('query----------------',this.query)
this.loading = true
if(this.query.receiveDate){
delete this.query.receiveDate
}
@ -1288,6 +1312,7 @@ export default {
})
this.data = res.data.data.records
this.page.total = res.data.data.total
this.loading = false
})
},
},

@ -61,12 +61,12 @@ export default ({ mode, command }) => {
port: 2888,
proxy: {
'/api': {
target: 'http://192.168.0.104:80',//本地
target: 'http://192.168.0.115:80',//本地
// target: 'http://192.168.1.5:82',
// target: "http://192.168.1.4:82",
// target:'http://49.232.74.228:82',
// target: 'http://49.232.74.228:82',
// target: "http://192.168.0.7",
//target: 'https://saber3.bladex.cn/api',
// target: 'https://saber3.bladex.cn/api',
// target: 'http://49.232.74.228:82',
// target: "http:192.168.0.220:80",
// target: 'http:49.232.74.228:49',

Loading…
Cancel
Save