Files
rd_mes_uniapp/pages/qc/updateStandardList.vue
2025-12-18 14:11:48 +08:00

551 lines
16 KiB
Vue
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view>
<button type="primary" size="mini" @click="add">添加</button>
<uni-row>
<uni-col :span="12">
<view style="margin-bottom: 10px;">物料编码 <input v-model="mc" /> </view>
<view style="margin-bottom: 10px;">物料批号 <input v-model="materialBatchNo" /></view>
</uni-col>
<uni-col :span="12">
<view style="margin-bottom: 10px;">物料名称 <input v-model="materialName" /> </view>
<view style="margin-bottom: 10px;">规格 <input v-model="specification1" /></view>
</uni-col>
</uni-row>
<view style="background-color: #fff;">
<uni-table ref="table" :loading="loading" border stripe emptyText="暂无更多数据" style="padding-bottom: 18vh;">
<uni-tr>
<uni-th width="50" align="center">序号</uni-th>
<uni-th width="50" align="center">质检标准项/单位</uni-th>
<uni-th width="50" align="center">质检实际检测值</uni-th>
<uni-th width="50" align="center">是否合格</uni-th>
<uni-th width="50" align="center">图片上传</uni-th>
</uni-tr>
<uni-tr v-for="(item, index) in dataslice(tableData,historyCurPage)" :key="index">
<uni-td>{{ item.seq }}</uni-td>
<uni-td>{{ item.qualityStandardItem }}/{{ item.qualityStandardUnit }}</uni-td>
<uni-td>
<uni-easyinput @change="count(index)" type="text" v-model="item.qualityActualValue" />
</uni-td>
<uni-td>
<uni-data-select v-model="item.isQuality" :localdata="range"></uni-data-select>
</uni-td>
<uni-td align="center">
<!-- <uni-file-picker :value="item.qcImages" @select @success="success" :listStyles="listStyles"
limit="3"></uni-file-picker> -->
<u-upload :fileList="item.qcImages" @afterRead="afterRead(index, $event)"
@delete="deletePic(index, $event)" name="1" multiple :maxCount="5"></u-upload>
<!-- <view class="addrpage_text" style="">
<view class="addrimg">
<view class="upimg">
<view class="uni-uploader__files">
<view v-for="(image, index1) in item.qcImages" :key="index1">
<view class="uni-uploader__file">
<view class="delete" @tap="onDeleteClick(index,index1)">
<text></text>
</view>
<image class="uni-uploader__img" @tap.stop="lookimgbut(index,image)"
:src="image"></image>
</view>
</view>
</view>
<view class="upload" @tap="onGetImgClick(index)" style="">
<uni-icons custom-prefix="iconfont" type="icon-jiahao"
style="color: #C6C6C6;margin-top:30rpx;" size="40"></uni-icons>
</view>
</view>
</view>
</view> -->
</uni-td>
</uni-tr>
</uni-table>
<view style="position: fixed;bottom: 0;background-color: #fff;width: 100%;padding: 10px 0;">
<uni-pagination :total="historyTotal" :pageSize="historyPageSize" @change="changePage" title="标题文字" />
<view style="margin: 10px 0 10px 0;text-align: center;">
<text
class="example-info">当前页{{ historyCurPage }}数据总量{{ historyTotal }}每页数据{{ historyPageSize }}</text>
</view>
<u-button type="primary" @click="submit">提交</u-button>
</view>
</view>
</view>
</template>
<script>
import {
uploadImage,
getStandardList,
addQualityHistoryList,
listQualityHistory,
updateQualityHistory
} from "@/api/qc/qc.js";
// var did;
// var list = null;
// var qscid = null;
export default {
onLoad: function(option) { //option为object类型会序列化上个页面传递的参数
console.log(option);
this.materialBatchNo = option.materialBatchNo;
this.materialCode = option.materialCode;
this.materialName = option.materialName;
this.specification1 = option.specification1;
this.qscid = Number(option.qscid);
this.number = option.number;
this.billId = option.billId;
this.did = option.did;
this.mc = this.materialCode.replace(/\"/g, "");
},
data() {
return {
qualityStandardDetailOptions: [],
queryDetailParams: {},
fileList1: [],
qscid: null,
did: null,
qualityStandardCode: null,
materialBatchNo: null,
materialCode: null,
specification1: null,
materialName: '',
mc: null,
number: null,
tableData: [],
qualityActualValue: null,
loading: false,
historyCurPage: 1,
historyTotal: 0,
historyPageSize: 1,
range: [{
value: 0,
text: "不合格"
},
{
value: 1,
text: "合格"
},
],
listStyles: {
// 是否显示边框
border: true,
// 是否显示分隔线
dividline: true,
// 线条样式
borderStyle: {
width: 1,
color: 'blue',
style: 'dashed',
radius: 2
}
},
}
},
filters: {
dataslice(array, historyCurPage) {
const newdata = array.filter((item) => {
return item.seq == historyCurPage;
});
return newdata;
},
},
mounted() {
this.first();
},
methods: {
changePage(e) {
console.log(e)
this.historyCurPage = e.current
},
dataslice(array, historyCurPage) {
const newdata = array.filter((item) => {
return item.seq == historyCurPage;
});
return newdata;
},
// 删除图片
deletePic(index, event) {
this.tableData[index].qcImages.splice(event.index, 1)
},
// 新增图片
async afterRead(index, event) {
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
console.log(this.tableData[index].qcImages)
let fileListLen = this.tableData[index].qcImages.length
lists.map((item) => {
this.tableData[index].qcImages.push({
...item,
status: 'uploading',
message: '上传中'
})
})
for (let i = 0; i < lists.length; i++) {
console.log(1)
const result = await this.uploadFilePromise(lists[i].url)
let item = this.tableData[index].qcImages[fileListLen]
// console.log(item)
this.tableData[index].qcImages.splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
url: result
}))
fileListLen++
}
},
uploadFilePromise(url) {
return new Promise((resolve, reject) => {
let a = uploadImage({
filePath: url
}).then(response => {
uni.showToast({
title: "上传成功",
icon: 'success'
});
console.log(response)
resolve(response.fileName)
});
})
},
// 获取上传状态
select(e) {
console.log('选择文件:', e)
},
// 获取上传进度
progress(e) {
console.log('上传进度:', e)
},
// 上传成功
success(e) {
console.log(e)
},
// 上传失败
fail(e) {
console.log('上传失败:', e)
},
onGetImgClick(index) {
const _this = this
console.log(index);
console.log(_this.tableData[index].qcImages);
uni.chooseImage({
count: 5, // 最多可以选择的图片张数默认9
sizeType: ['original', 'compressed'], //original 原图compressed 压缩图,默认二者都有
sourceType: ['album', 'camera'], //album 从相册选图camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项
success: function(res) {
console.log(JSON.stringify(res.tempFilePaths));
for (let i = 0; i < res.tempFilePaths.length; i++) {
let a = res.tempFilePaths[i];
let data = {
filePath: res.tempFilePaths[i]
}
uploadImage(data).then(response => {
uni.showToast({
title: "上传成功",
icon: 'success'
});
_this.tableData[index].qcImages.push(response.url);
});
}
// if(_this.tableData[index].qcImages!=null){
// const len = _this.tableData[index].qcImages.length;
// console.log(len);
// for (let i = 0; i < 5 - len; i++) {
// if (res.tempFilePaths[i]) _this.tableData[index].qcImages.push(res.tempFilePaths[i])
// }
// }else{
// for (let i = 0; i < 5; i++) {
// if (res.tempFilePaths[i]) _this.tableData[index].qcImages.push(res.tempFilePaths[i])
// }
// }
}
})
},
//删除功能
onDeleteClick(index, index1) {
const _this = this
console.log(index + ' ' + index1 + ' ' + _this.tableData[index].qcImages);
_this.tableData[index].qcImages.splice(index1, 1);
},
// 预览功能
lookimgbut(index, image) {
uni.previewImage({
urls: this.tableData[index].qcImages,
current: image,
loop: false //是否可循环预览,默认值为 false有需要的可以设置为true
})
},
//先执行,查看已添加的质检序列
first() {
// this.materialBatchNo = row.materialBatchNo;
// this.materialCode = row.materialCode;
// this.materialLotNo = row.materialLotNo;
// this.qualityStandardId = row.qualityStandardCode;
// this.qualityBillId = this.form.id;
// this.qualityBillDetailId = row.id;
this.queryDetailParams.batchNo = this.materialBatchNo;
this.queryDetailParams.materialCode = this.materialCode;
this.queryDetailParams.qualityBillId = this.billId;
this.queryDetailParams.qualityStandardId = this.qscid;
this.queryDetailParams.qualityBillDetailId = this.did;
// getStandardList(this.qualityStandardId).then((response) => {
// this.qualityStandardDetailOptions =
// response.data.qcQualtyStandardListDetailList;
// });
this.tableData = [];
getStandardList(this.qscid).then((response) => {
this.qualityStandardDetailOptions =
response.data.qcQualtyStandardListDetailList;
});
listQualityHistory(this.queryDetailParams).then((res) => {
console.log(res.rows);
let arry = res.rows;
for (let i in arry) {
if (arry[i].isQuality != "") {
arry[i].isQuality = Number(arry[i].isQuality);
} else {
arry[i].isQuality = 1;
}
if (arry[i].qcImages != null) {
arry[i].qcImages = arry[i].qcImages.split(',');
} else {
arry[i].qcImages = [];
}
this.tableData.push(arry[i]);
}
console.log(this.tableData);
});
// this.tableData = [];
// let obj = {
// batchNo: this.materialBatchNo,
// materialCode: this.materialCode
// }
// listQualityHistory(obj).then(async res => {
// console.log(res.rows);
// let arry = res.rows;
// for (let i in arry) {
// if (arry[i].isQuality != "") {
// arry[i].isQuality = Number(arry[i].isQuality);
// }
// if (arry[i].qcImages != null) {
// arry[i].qcImages = arry[i].qcImages.split(',');
// } else {
// arry[i].qcImages = [];
// }
// this.tableData.push(arry[i]);
// }
// console.log(this.tableData);
// });
},
add() {
this.tableData = [];
var objs = [];
for (let seq = 0; seq < this.number; seq++) {
for (let i = 0; i < this.qualityStandardDetailOptions.length; i++) {
let obj = {};
obj.seq = seq + 1;
obj.batchNo = this.materialBatchNo;
obj.lotNo = this.materialLotNo;
obj.materialCode = this.materialCode;
obj.qualityStandardItem =
this.qualityStandardDetailOptions[i].qualityStandardItem;
obj.downQualityStandardValue =
this.qualityStandardDetailOptions[i].downQualityStandardValue;
obj.upQualityStandardValue =
this.qualityStandardDetailOptions[i].upQualityStandardValue;
obj.upValueRate = this.qualityStandardDetailOptions[i].upValueRate;
obj.downValueRate = this.qualityStandardDetailOptions[i].downValueRate;
obj.qualityStandardValue =
this.qualityStandardDetailOptions[i].qualityStandardValue;
obj.qualityStandardUnit =
this.qualityStandardDetailOptions[i].qualityStandardUnit;
obj.qualityActualValue = "";
obj.isQuality = 1;
obj.remark = "";
// 设置单据Id,方便追溯
obj.qualityBillId = this.queryDetailParams.qualityBillId;
obj.qualityStandardId = this.queryDetailParams.qualityStandardId;
obj.qualityBillDetailId = this.queryDetailParams.qualityBillDetailId;
objs.push(obj);
}
}
this.tableData = this.tableData.concat(objs);
this.historyTotal = this.tableData.length;
this.historyPageSize = this.historyTotal / this.number;
},
count(index) {
var qsv = this.tableData[index].qualityStandardValue;
var uqsv = this.tableData[index].upQualityStandardValue;
var dqsv = this.tableData[index].downQualityStandardValue;
var v = this.tableData[index].qualityActualValue;
var m = /\d+(\.\d+)?/g;
var rangeUp = null;
var rangeDown = null;
if (uqsv && dqsv) {
rangeUp = Number(qsv.match(m)) + Number(uqsv.match(m));
rangeDown = Number(qsv.match(m)) - Number(dqsv.match(m));
console.log(rangeUp + " " + rangeDown);
if (v <= rangeUp && v >= rangeDown) {
console.log("合格");
this.tableData[index].isQuality = 1;
console.log(this.tableData[index].isQuality);
} else {
console.log("不合格");
this.tableData[index].isQuality = 0;
console.log(this.tableData[index].isQuality);
}
}
},
submit() {
/** 计算合格数 */
var passNumber = 0;
for (var i = 1, k = 0; i <= this.tableData.length; i++) {
k += Number(this.tableData[i - 1].isQuality);
if (i % this.qualityStandardDetailOptions.length == 0) {
if (k == this.qualityStandardDetailOptions.length) {
passNumber++;
k = 0;
} else {
k = 0;
}
}
// console.log(this.tableData[i].qcImages)
// if (this.tableData[i].qcImages.length > 0) {
// console.log(this.tableData[i].qcImages)
// // this.tableData[i].qcImages = this.tableData[i].qcImages.map(obj => obj.url).join(', ');
// }
}
// var zjNum = 0;
// var zjhgNum = 0;
// var a = null;
for (var i in this.tableData) {
// this.tableData[i].materialCode = this.materialCode;
// this.tableData[i].index = i;
// if (this.tableData[i].qualityActualValue != null && this.tableData[i].isQuality != null) {
// zjNum++;
// if (this.tableData[i].isQuality == 1) {
// zjhgNum++;
// }
// }
if (this.tableData[i].qcImages) {
this.tableData[i].qcImages = this.tableData[i].qcImages.map(obj => obj.url).join(', ');
}
}
console.log(this.tableData);
this.$modal.loading('提交中')
addQualityHistoryList(this.tableData, this.queryDetailParams.qualityBillDetailId).then(async res => {
this.$modal.closeLoading();
console.log(getCurrentPages());
var pages = getCurrentPages();
var prevPage = pages[pages.length - 2]; //上一个页面
var object = {
number: this.tableData.length /
this.qualityStandardDetailOptions.length,
passNumber: passNumber,
did: this.did
}
prevPage.$vm.otherFun(object); //重点$vm
uni.navigateBack();
// this.$tab.navigateTo('/pages/qc/ipqc');
});
}
}
}
</script>
<style lang="scss">
.u-reset-button {
background-color: #3c9cff;
font-size: 18px;
color: #fff;
}
.example-body {
padding: 10px;
padding-top: 0;
}
.upload {
float: left;
width: 100%;
display: block;
}
.addrimg {
width: 100%;
background-color: rgb(255, 255, 255);
margin-top: 40rpx;
}
.uptext {
color: rgba(74, 74, 74, 1);
font-size: 28rpx;
padding: 30rpx 0rpx 0rpx 30rpx;
}
.upimg {
width: 100%;
}
.upimg::after {
content: '';
display: block;
clear: both;
}
.upimg>image {
width: 159rpx;
height: 159rpx;
margin: 20rpx 0rpx 20rpx 30rpx;
float: left;
}
.uni-uploader__file {
float: left;
width: 159rpx;
height: 159rpx;
margin: 20rpx 0rpx 20rpx 30rpx;
position: relative;
}
/* 上传成功的图片 */
.uni-uploader__img {
float: left;
width: 100rpx;
height: 100rpx;
}
.delete {
width: 40rpx;
height: 40rpx;
border-radius: 40rpx;
line-height: 45rpx;
/* color: rgb(255, 255, 255); */
font-size: 26rpx;
position: absolute;
top: -20rpx;
right: 30rpx;
background-color: rgb(255, 255, 255);
z-index: 99;
text-align: center;
border: 1rpx solid rgb(255, 255, 255);
}
.delete>text {
position: absolute;
top: -2rpx;
right: -10rpx;
}
</style>