| | |
| | | >提 交</el-button |
| | | > |
| | | <el-button |
| | | icon="el-icon-download" |
| | | icon="el-icon-back" |
| | | @click=" |
| | | () => { |
| | | goBack(); |
| | |
| | | <el-input |
| | | v-else |
| | | v-model="detailInfo.name" |
| | | placeholder="请输入" |
| | | placeholder="请输入原材料名称" |
| | | ></el-input> </el-form-item |
| | | ></el-col> |
| | | <el-col :span="7"> |
| | | <el-form-item label="原材料编码:"> |
| | | <el-input |
| | | v-if="detailId !== null" |
| | | :disabled="detailId !== null" |
| | | v-model="detailInfo.code" |
| | | ></el-input> |
| | | <el-input |
| | | v-else |
| | | v-model="detailInfo.code" |
| | | placeholder="请输入原材料编码" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | ></el-input> |
| | | <el-input |
| | | v-else |
| | | v-model="detailInfo.specificationsArr" |
| | | v-model="detailInfo.specifications" |
| | | placeholder="请输入规格型号" |
| | | ></el-input> |
| | | </el-form-item> |
| | |
| | | <el-col :span="7"> |
| | | <el-form-item label="单位:"> |
| | | <el-input |
| | | v-if="detailId !== null" |
| | | :disabled="detailId !== null" |
| | | v-model="detailInfo.runit" |
| | | ></el-input> |
| | | <el-input |
| | | v-else |
| | | placeholder="请输入检验单位" |
| | | :disabled="detailId !== null" |
| | | v-model="detailInfo.unit" |
| | |
| | | <el-col :span="7"> |
| | | <el-form-item label="数量:"> |
| | | <el-input |
| | | placeholder="请输入检验数量" |
| | | :placeholder="detailId !== null ? '' : '请输入检验数量'" |
| | | :disabled="detailId !== null" |
| | | v-model="detailInfo.number" |
| | | ></el-input> |
| | |
| | | <el-col :span="7"> |
| | | <el-form-item label="供应商名称:"> |
| | | <el-input |
| | | placeholder="请输入检验数量" |
| | | :placeholder="detailId !== null ? '' : '请输入供应商名称'" |
| | | :disabled="detailId !== null" |
| | | v-model="detailInfo.number" |
| | | v-model="detailInfo.supplier" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-form-item v-show="detailId !== null" label="报检日期:"> |
| | | <el-input |
| | | :disabled="detailId !== null" |
| | | v-model="detailInfo.createTime" |
| | | v-model="detailInfo.creatTime" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-row> |
| | | <el-col :span="12" style="line-height: 32px;">检验项目</el-col> |
| | | <el-col :span="12" style="line-height: 32px; padding-top: 6px;"> |
| | | <el-button v-if="detailId == null" style="float: right;" |
| | | <el-button |
| | | style="float: right;" |
| | | @click="clickDeleteInspectionColumn()" |
| | | >删除检验值列</el-button |
| | | > |
| | | <el-button |
| | | style="float: right;margin-right: 30px;" |
| | | @click="clickAddInspectionColumn()" |
| | | >添加检验值列</el-button |
| | | > |
| | | <el-button |
| | |
| | | </div> |
| | | <div class="raw-project-table"> |
| | | <el-table :data="projectTable" style="width: 100%" height="320"> |
| | | <el-table-column type="index" label="序号" width="100"> |
| | | <el-table-column type="index" label="序号" width="60"> |
| | | </el-table-column> |
| | | <el-table-column prop="name" label="项目" width="212"> |
| | | <template scope="scope"> |
| | | <el-table-column prop="rpName" label="项目" width="212"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-if="detailId == null" |
| | | v-model="scope.row.name" |
| | | placeholder="请输入项目名称" |
| | | ></el-input> |
| | | <el-input v-else v-model="scope.row.rpName" disabled></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="unit" label="单位" width="148"> |
| | | <template scope="scope"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-if="detailId == null" |
| | | v-model="scope.row.unit" |
| | | placeholder="请输入单位" |
| | | ></el-input> |
| | | <el-input v-else v-model="scope.row.rpUnit" disabled></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="required" label="标准" width="254"> |
| | | <template scope="scope"> |
| | | <el-table-column prop="required" label="标准值" min-width="150"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | :disabled="detailId != null" |
| | | @blur="assertTest(scope.row)" |
| | | v-model="scope.row.required" |
| | | placeholder="请输入标准值" |
| | | ></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="internal" label="内控值" width="254"> |
| | | <template scope="scope"> |
| | | <el-table-column prop="internal" label="内控值" min-width="150"> |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | @blur="assertTest(scope.row)" |
| | | :disabled="detailId != null" |
| | | v-model="scope.row.internal" |
| | | placeholder="请输入内控值" |
| | | ></el-input> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="testValue" label="检查值" width="254"> |
| | | <el-table-column |
| | | prop="testValue" |
| | | label="检测值" |
| | | min-width="150" |
| | | v-for="(item, index) in empiricalValueAdd" |
| | | :key="index" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-input |
| | | v-model="scope.row.testValue" |
| | | @blur="changeState(scope.row)" |
| | | placeholder="请输入检测值" |
| | | ></el-input> |
| | | <el-tooltip |
| | | :disabled="scope.row.deviceId != null" |
| | | class="item" |
| | | effect="dark" |
| | | content="请先选择设备!" |
| | | placement="top-start" |
| | | > |
| | | <el-input |
| | | :disabled="scope.row.deviceId == null" |
| | | v-model="scope.row.testValueList[index]" |
| | | @blur="changeState(scope.row, index)" |
| | | placeholder="请输入检测值" |
| | | ></el-input> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="deviceName" label="试验设备"> |
| | | <el-button type="text">选择</el-button> |
| | | <el-table-column prop="deviceName" label="试验设备" min-width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="clickTableSelect(scope)">{{ |
| | | scope.row.deviceId == null ? "请选择" : scope.row.deviceName |
| | | }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="testState" label="结论"> |
| | | <el-table-column |
| | | v-if="detailId !== null" |
| | | prop="testState" |
| | | label="结论" |
| | | min-width="100" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span |
| | | v-show="scope.row.testState != null" |
| | |
| | | <span v-show="scope.row.testState == null">暂未结论</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="detailId == null" label="操作" fixed="right"> |
| | | <template scope="scope"> |
| | | <el-table-column v-if="detailId == null" label="操作" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="clickDeleteline(scope)" |
| | | >删除</el-button |
| | | > |
| | |
| | | <el-table :data="conclusionTable" style="100%"> |
| | | <el-table-column prop="code" label="物料编号"> </el-table-column> |
| | | <el-table-column prop="name" label="物料名称"> </el-table-column> |
| | | <el-table-column prop="names" label="检验员"> |
| | | <el-table-column v-if="detailId != null" prop="uName" label="检验员"> |
| | | <template slot-scope="scope"> |
| | | <span |
| | | v-for="item in scope.row.names" |
| | | :key="item && item.userName" |
| | | v-for="item in scope.row.uName" |
| | | :key="item && item.uName" |
| | | :style="{ marginRight: '8px' }" |
| | | >{{ item }}</span |
| | | > |
| | |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <el-dialog |
| | | title="请选择设备" |
| | | :visible.sync="centerDialogVisible" |
| | | width="20%" |
| | | > |
| | | <div class="div_device_dialog"> |
| | | <el-input |
| | | placeholder="输入关键字进行过滤" |
| | | v-model="filterText" |
| | | style="margin-bottom: 6px;" |
| | | > |
| | | </el-input> |
| | | <el-tree |
| | | class="filter-tree" |
| | | :data="materialOptions" |
| | | :props="defaultProps" |
| | | default-expand-all |
| | | highlight-current |
| | | @node-click="nodeClick" |
| | | :filter-node-method="filterNode" |
| | | ref="tree" |
| | | > |
| | | <div class="custom-tree-node" slot-scope="{ data }"> |
| | | <span |
| | | ><i |
| | | :class=" |
| | | `node_i ${ |
| | | data.children ? 'el-icon-folder-opened' : 'el-icon-tickets' |
| | | }` |
| | | " |
| | | ></i> |
| | | {{ data.name }}</span |
| | | > |
| | | </div> |
| | | </el-tree> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="centerDialogVisible = false">取 消</el-button> |
| | | <el-button type="primary" @click="clickNodeSure()">确 定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { triggerRef } from "vue"; |
| | | import RawIns from "./raw-ins.vue"; |
| | | export default { |
| | | components: { RawIns }, |
| | |
| | | this.detailInfo = {}; |
| | | if (this.detailId) { |
| | | this.getDetailInfo(); |
| | | } else { |
| | | this.getOptions(); |
| | | } |
| | | this.getOptions(); |
| | | }, |
| | | mounted() {}, |
| | | computed: { |
| | |
| | | const conclusion = {}; |
| | | conclusion.name = this.detailInfo.name; |
| | | conclusion.code = this.detailInfo.code; |
| | | conclusion.names = [ |
| | | ...new Set(this.projectTable.map(item => item.userName)) |
| | | conclusion.uName = [ |
| | | ...new Set(this.projectTable.map(item => item.uName)) |
| | | ]; |
| | | if ( |
| | | this.projectTable.filter(item => item.testState === null).length === |
| | |
| | | } else { |
| | | conclusion.testState = 1; |
| | | } |
| | | console.log([conclusion]); |
| | | return [conclusion]; |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | // 添加列 |
| | | empiricalValueAdd: 1, |
| | | // 编辑时存储最长的列数字,做删除判断 |
| | | empiricalValueAddMaxNumber: 0, |
| | | // 设备选择树显示 |
| | | centerDialogVisible: false, |
| | | // 详情页就是详情信息 |
| | | detailInfo: {}, |
| | | // 表格 |
| | | projectTable: [], |
| | | // 新建检验单参数对象 |
| | | rawInsParams: {}, |
| | | // 项目名称options |
| | | materialOptions: [], |
| | | specificationOptions: [] |
| | | specificationOptions: [], |
| | | filterText: "", |
| | | materialOptions: [], // 树数据 |
| | | defaultProps: { |
| | | // 设备树数据设置 |
| | | children: "children", |
| | | label: "name" |
| | | }, |
| | | nodeData: "", // node点击保存当前点击数据 |
| | | clickSelectDevice: { |
| | | index: "", // 点击选择存储当前行索引 |
| | | rpId: "" // 点击选择存储当前行项目Id |
| | | } |
| | | }; |
| | | }, |
| | | watch: { |
| | | filterText(val) { |
| | | this.$refs.tree.filter(val); |
| | | } |
| | | }, |
| | | methods: { |
| | | assertTest(row){ |
| | | let fuArr=['>', '<', '='] |
| | | if(!fuArr.includes(row.required[0])){ |
| | | this.$message({ |
| | | message: "标准值["+row.required+"]格式首位应包含>,<或者=", |
| | | type: 'warning' |
| | | }); |
| | | return |
| | | } |
| | | if(!fuArr.includes(row.internal[0])){ |
| | | this.$message({ |
| | | message: "内控值["+row.internal+"]格式首位应包含>,<或者=", |
| | | type: 'warning' |
| | | }); |
| | | return |
| | | } |
| | | }, |
| | | // 设备树过滤搜索 |
| | | filterNode(value, data) { |
| | | if (!value) return true; |
| | | return data.name.indexOf(value) !== -1; |
| | | }, |
| | | |
| | | // 获取报检单详情信息 |
| | | async getDetailInfo() { |
| | | const { data } = await this.$axios.get( |
| | | this.$api.url.selectRawInspectsListById + `${this.detailId}`, |
| | | { params: { id: this.detailId } } |
| | | ); |
| | | this.detailInfo = data; |
| | | this.projectTable = data.rawInsProducts; |
| | | await this.$axios |
| | | .get(this.$api.url.selectRawInspectsListById + `${this.detailId}`, { |
| | | params: { id: this.detailId } |
| | | }) |
| | | .then(res => { |
| | | this.detailInfo = res.data; |
| | | this.projectTable = res.data.children; |
| | | this.projectTable.forEach(i => { |
| | | // 解决重新赋值无法编辑操作 |
| | | if (i.testValue == null) { |
| | | this.$set(i, "testValueList", []); |
| | | } else { |
| | | this.$set(i, "testValueList", i.testValue.split(",")); |
| | | } |
| | | // 取最长的列表数 |
| | | if (i.testValueList.length > this.empiricalValueAdd) { |
| | | this.empiricalValueAdd = i.testValueList.length; |
| | | this.empiricalValueAddMaxNumber = i.testValueList.length - 1; |
| | | } |
| | | }); |
| | | }); |
| | | }, |
| | | // 新增检验单 |
| | | async addNewRawInspect() { |
| | | this.detailInfo.specifications = this.detailInfo.specificationsArr.join( |
| | | "-" |
| | | ); |
| | | // const time = this.detailInfo.formTime |
| | | // this.detailInfo.formTime = `${time.getFullYear()}-${time.getMonth() + 1 < 10 ? '0' + (time.getMonth() + 1) : time.getMonth() + 1}-${time.getDate() < 10 ? '0' + time.getDate() : time.getDate()}` |
| | | const res = await this.$axios.post( |
| | | //TODO: |
| | | console.log(this.projectTable); |
| | | if(this.projectTable.length>0){ |
| | | let filterTable= this.projectTable.filter(item=>{ |
| | | return item.required===''||item.internal===''|| |
| | | item.required===null||item.internal===null||item.name==='' |
| | | }) |
| | | if(filterTable.length>0) { |
| | | this.$message({ |
| | | message: "项目名称,标准值和内控值不能为空!", |
| | | type: 'warning' |
| | | }); |
| | | return |
| | | } |
| | | } |
| | | this.projectTable.forEach(i => { |
| | | // 将列表转换为字符串 |
| | | i.testValue = i.testValueList.join(","); |
| | | }); |
| | | this.detailInfo.rawInsProducts = this.projectTable; |
| | | this.$axios.post( |
| | | this.$api.url.addRawInspects, |
| | | { ...this.detailInfo }, |
| | | { headers: { "Content-Type": "application/json" } } |
| | | ); |
| | | this.detailId = res.data; |
| | | this.getDetailInfo(); |
| | | |
| | | this.$message.success("提交成功"); |
| | | ).then(res=>{ |
| | | console.log(res); |
| | | if(res.code=="201"){ |
| | | this.$message({ |
| | | message: res.message, |
| | | type: 'warning' |
| | | }); |
| | | return |
| | | }else{ |
| | | // this.detailId = res.data; |
| | | // this.getDetailInfo(); |
| | | // // this.$message.success(res.message); |
| | | // this.goBack(); |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | // 修改项目的检测值改变结论 |
| | | async changeState(row) { |
| | | const res = await this.$axios.post( |
| | | this.$api.url.updaterawInsProduct, |
| | | { ...row }, |
| | | { headers: { "Content-Type": "application/json" } } |
| | | ); |
| | | this.$message.success("提交成功"); |
| | | this.getDetailInfo(); //重新刷新信息数据 |
| | | async changeState(row, index) { |
| | | if (this.detailId !== null) { |
| | | const res = await this.$axios.post(this.$api.url.updaterawInsProduct, { |
| | | DevId: row.deviceId, |
| | | rpId: row.rpId, |
| | | testValue: row.testValueList.join(",") |
| | | }); |
| | | this.$message.success("提交成功"); |
| | | this.getDetailInfo(); //重新刷新信息数据 |
| | | } |
| | | }, |
| | | async submitSave() { |
| | | const res = await this.$axios.post( |
| | | this.$api.url.updateRawInspectsById + `${this.detailId}` |
| | | ); |
| | | this.$message.success("提交成功"); |
| | | this.getDetailInfo(); |
| | | ).then(res=>{ |
| | | this.$message.success("提交成功"); |
| | | this.getDetailInfo(); |
| | | this.goBack() |
| | | }); |
| | | }, |
| | | async getOptions() { |
| | | const { data } = await this.$axios.get(this.$api.url.selectDevice); |
| | | this.materialOptions = data; |
| | | }, |
| | | checkRawName(data) { |
| | | this.materialOptions.forEach(item => { |
| | | if (item.name === data) { |
| | | this.detailInfo.code = item.code; |
| | | this.$axios |
| | | .get(this.$api.url.selectSpBySt, { params: { id: item.id } }) |
| | | .then(res => { |
| | | this.specificationOptions = res.data; |
| | | }); |
| | | } |
| | | // 获取设备树内容 |
| | | getOptions() { |
| | | this.$axios.get(this.$api.url.rawSelectDevice).then(res => { |
| | | this.materialOptions = res.data; |
| | | }); |
| | | }, |
| | | // 添加行 |
| | | clickAddLine() { |
| | | let obj = { |
| | | deviceId: 0, |
| | | deviceId: null, |
| | | deviceName: "", |
| | | internal: "", |
| | | name: "", |
| | | required: "", |
| | | testValue: "", |
| | | textValue: "", |
| | | testState:null, |
| | | testValueList: [], |
| | | unit: "" |
| | | }; |
| | | this.projectTable.push(obj); |
| | |
| | | // 删除行 |
| | | clickDeleteline(scope) { |
| | | this.projectTable.splice(scope.$index, 1); |
| | | }, |
| | | // 点击设备树保存点击记录 |
| | | nodeClick(data) { |
| | | if (data.id != undefined) this.nodeData = data; |
| | | }, |
| | | // 点击表格选择触发 |
| | | clickTableSelect(scope) { |
| | | this.centerDialogVisible = true; |
| | | this.clickSelectDevice.index = scope.$index; |
| | | this.clickSelectDevice.rpId = scope.row.rpId; |
| | | }, |
| | | // 点击树里面的确定 |
| | | clickNodeSure() { |
| | | if (this.detailId == null) { |
| | | this.projectTable[ |
| | | this.clickSelectDevice.index |
| | | ].deviceId = this.nodeData.id; |
| | | this.projectTable[ |
| | | this.clickSelectDevice.index |
| | | ].deviceName = this.nodeData.name; |
| | | this.centerDialogVisible = false; |
| | | } else { |
| | | this.$axios |
| | | .post(this.$api.url.updateDevByRpId, { |
| | | rpId: this.clickSelectDevice.rpId, |
| | | devId: this.nodeData.id |
| | | }) |
| | | .then(res => { |
| | | this.getDetailInfo(); |
| | | this.centerDialogVisible = false; |
| | | }); |
| | | } |
| | | }, |
| | | // 删除检验值列 |
| | | clickDeleteInspectionColumn() { |
| | | if (this.empiricalValueAdd - 1 === 0) { |
| | | } else { |
| | | if (this.empiricalValueAddMaxNumber != this.empiricalValueAdd - 1) { |
| | | this.empiricalValueAdd = this.empiricalValueAdd - 1; |
| | | this.projectTable.forEach(i => { |
| | | i.testValueList.splice(this.empiricalValueAdd, 1); |
| | | }); |
| | | } |
| | | } |
| | | }, |
| | | // 添加检验值列 |
| | | clickAddInspectionColumn() { |
| | | this.empiricalValueAdd = this.empiricalValueAdd + 1; |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .node_i { |
| | | color: orange; |
| | | } |
| | | .div_device_dialog { |
| | | min-height: 400px; |
| | | overflow: auto; |
| | | } |
| | | .rawInsBox { |
| | | height: 100%; |
| | | width: 100%; |
| | |
| | | display: flex; |
| | | flex-direction: column; |
| | | } |
| | | .el-table__fixed-body-wrapper { |
| | | top: 48px; |
| | | } |
| | | .rawInsBox .title .el-button { |
| | | height: 32px; |
| | | border: 1px solid rgba(190, 190, 190, 0.44); |