From 049fda473cc178917a02f3a174dfd08a84b0cb8d Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 17 九月 2026 10:52:28 +0800
Subject: [PATCH] 新疆——新聚lims 1.每个检验项都要有一个选择检测时间的地方,跟温湿度放在一起,还有检测地点,设备也要单独绑定检验项,最后导出模版再总结到一起 2.产品名称改为检测依据、加一个样品名称手输 3.下单时原始记录模板可以从标准库绑定的模板进行删减
---
src/views/business/productOrder/components/addOrder.vue | 521 +++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 341 insertions(+), 180 deletions(-)
diff --git a/src/views/business/productOrder/components/addOrder.vue b/src/views/business/productOrder/components/addOrder.vue
index 67b582d..22f6a4c 100644
--- a/src/views/business/productOrder/components/addOrder.vue
+++ b/src/views/business/productOrder/components/addOrder.vue
@@ -1,48 +1,76 @@
<template>
<div class="app-container">
- <div v-show="!cableConfigShow&&!auxiliaryShow">
- <div style="display: flex;justify-content: space-between;align-items:center;">
- <div>濮旀墭鍗曚俊鎭�</div>
- <div>
- <el-cascader
- v-model="addObj.quarterItemId"
- :disabled="active>1"
- :options="quarterItemOptions"
- size="small"
- style="width: 380px"
- @focus="getQuarterOnOrderList"></el-cascader>
- <el-select v-show="active==1" v-model="template" placeholder="涓嬪崟妯℃澘" size="small"
- @change="selectInsOrderTemplateById">
- <el-option v-for="(a, ai) in templates" :key="ai" :label="a.name" :value="a.id">
- <div style="display: flex; align-items: center; justify-content: space-between;">
- <span>{{ a.name }}</span>
- <i class="el-icon-delete"
- style="color: #66b1ff; font-size: 16px; cursor: pointer;"
- @click.stop="handleDelete(a)">
- </i>
- </div>
- </el-option>
- </el-select>
- <el-button v-show="active==1" size="small" @click="templateDia=true">
- <span style="color: #3A7BFA;">淇濆瓨妯℃澘</span>
- </el-button>
- <el-button v-if="active==1&&addObj.sampleType!=undefined&&(addObj.sampleType.indexOf('鐢电紗')>-1 ||addObj.sampleType.indexOf('缁煎悎')>-1)" size="small" type="primary" @click="openCableConfig">鐢电紗閰嶇疆</el-button>
- <el-button v-if="active==1&&addObj.sampleType!=undefined&&addObj.sampleType.indexOf('鐢电紗')>-1" size="small" type="primary" @click="openAuxiliaryCore">杈呭姪绾胯姱閰嶇疆</el-button>
- <el-button v-show="active==1||(tabIndex==4&&active==2)" :loading="saveLoad" size="small" type="primary" @click="save">鎻愪氦</el-button>
- <!-- 瀹℃牳 -->
- <el-button v-show="active==3" :disabled="saveLoad" :loading="saveLoad" size="small"
- @click="upInsOrderOfState(2)">涓嶉�氳繃</el-button>
- <el-button v-show="active==3" :loading="saveLoad" size="small" type="primary"
- @click="upInsOrderOfState(1)">閫氳繃</el-button>
- <el-button size="small" @click="goBack">
- <span style="color: #3A7BFA;">杩斿洖</span>
- </el-button>
- </div>
+ <div v-show="!cableConfigShow&&!auxiliaryShow" class="order-header">
+ <span class="order-header__title">濮旀墭鍗曚俊鎭�</span>
+ <div class="order-header__actions">
+<!-- <el-cascader-->
+<!-- v-model="addObj.quarterItemId"-->
+<!-- :disabled="active>1"-->
+<!-- :options="quarterItemOptions"-->
+<!-- placeholder="璇烽�夋嫨瀛e害"-->
+<!-- size="small"-->
+<!-- class="order-header__quarter"-->
+<!-- @focus="getQuarterOnOrderList"></el-cascader>-->
+ <el-select v-show="active==1" v-model="template" placeholder="涓嬪崟妯℃澘" size="small"
+ class="order-header__template"
+ @change="selectInsOrderTemplateById">
+ <el-option v-for="(a, ai) in templates" :key="ai" :label="a.name" :value="a.id">
+ <div style="display: flex; align-items: center; justify-content: space-between;">
+ <span>{{ a.name }}</span>
+ <i class="el-icon-delete"
+ style="color: #66b1ff; font-size: 16px; cursor: pointer;"
+ @click.stop="handleDelete(a)">
+ </i>
+ </div>
+ </el-option>
+ </el-select>
+ <el-button v-show="active==1" size="small" @click="templateDia=true">淇濆瓨妯℃澘</el-button>
+ <el-button v-if="active==1&&addObj.sampleType!=undefined&&(addObj.sampleType.indexOf('鐢电紗')>-1 ||addObj.sampleType.indexOf('缁煎悎')>-1)" size="small" type="primary" plain @click="openCableConfig">鐢电紗閰嶇疆</el-button>
+ <el-button v-if="active==1&&addObj.sampleType!=undefined&&addObj.sampleType.indexOf('鐢电紗')>-1" size="small" type="primary" plain @click="openAuxiliaryCore">杈呭姪绾胯姱閰嶇疆</el-button>
+ <el-button v-show="active==1||(tabIndex==4&&active==2)" :loading="saveLoad" size="small" type="primary" @click="save">鎻愪氦</el-button>
+ <!-- 瀹℃牳 -->
+ <el-button v-show="active==3" :disabled="saveLoad" :loading="saveLoad" size="small"
+ @click="upInsOrderOfState(2)">涓嶉�氳繃</el-button>
+ <el-button v-show="active==3" :loading="saveLoad" size="small" type="primary"
+ @click="upInsOrderOfState(1)">閫氳繃</el-button>
+ <el-button size="small" @click="goBack">杩斿洖</el-button>
</div>
</div>
- <div v-show="!cableConfigShow&&!auxiliaryShow" style="margin-top: 10px">
- <div class="search">
- <el-form ref="addObj" :inline="true" :model="addObj" :rules="addObjRules" label-width="108px" label-position="right">
+ <div v-show="!cableConfigShow&&!auxiliaryShow" class="order-body">
+ <el-card shadow="never" class="order-card">
+ <el-form ref="newJuOrder" :model="addObj" size="small" label-width="108px" label-position="right">
+ <el-row :gutter="16">
+ <el-col :span="6"><el-form-item label="妫�娴嬩緷鎹�"><el-input v-model="addObj.sample" disabled size="small"><template slot="append"><el-button :disabled="active>1" icon="el-icon-search" @click="selectStandardTree = true" /></template></el-input></el-form-item></el-col>
+ <el-col :span="18">
+ <el-form-item label="鍘熷璁板綍妯℃澘">
+ <div v-loading="templateBindingLoading" class="template-tag-list">
+ <el-tag v-for="(item, index) in boundTemplateList" :key="item.templateId" :closable="active==1" size="small" effect="plain" @close="removeBoundTemplate(index)">{{ item.name }}</el-tag>
+ <span v-if="!templateBindingLoading && boundTemplateList.length === 0" class="empty-template-text">鏆傛湭缁戝畾鍘熷璁板綍妯℃澘</span>
+ </div>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="16">
+ <el-col :span="6"><el-form-item label="鏍峰搧鍚嶇О"><el-input v-model="addObj.sampleView" :disabled="active>1" size="small" /></el-form-item></el-col>
+ <el-col :span="6"><el-form-item label="鐢熶骇鍗曚綅"><el-input v-model="addObj.production" :disabled="active>1" size="small" /></el-form-item></el-col>
+ <el-col :span="6"><el-form-item label="濮旀墭鍗曚綅"><el-input v-model="addObj.company" disabled size="small"><template slot="append"><el-button :disabled="active>1" icon="el-icon-search" @click="openCompanyList" /></template></el-input></el-form-item></el-col>
+ <el-col :span="6"><el-form-item label="妫�楠岀被鍒�"><el-select v-model="addObj.orderType" :disabled="active>1" size="small"><el-option v-for="item in dict.type.check_type1" :key="item.value" :label="item.label" :value="item.value" /></el-select></el-form-item></el-col>
+ </el-row>
+ <el-row :gutter="16">
+ <el-col :span="6"><el-form-item label="鏍峰搧鏁伴噺"><el-input v-model="addObj.testQuantity" :disabled="active>1" placeholder="濡傦細2妗躲��500mL" size="small" /></el-form-item></el-col>
+ <el-col :span="6"><el-form-item label="鏍峰搧缂栧彿"><el-input v-model="sampleCode" :disabled="active>1" size="small" /></el-form-item></el-col>
+ <el-col :span="6"><el-form-item label="鏍峰搧澶栬"><el-input v-model="addObj.sampleStatus" :disabled="active>1" size="small" /></el-form-item></el-col>
+ <el-col :span="6"><el-form-item label="閫佹牱浜�"><el-input v-model="addObj.prepareUser" :disabled="active>1" size="small" /></el-form-item></el-col>
+ </el-row>
+ <el-row :gutter="16">
+ <el-col :span="6"><el-form-item label="鐢熶骇鏃ユ湡"><el-date-picker v-model="addObj.productionDate" type="date" value-format="yyyy-MM-dd" :disabled="active>1" size="small" /></el-form-item></el-col>
+ <el-col :span="6"><el-form-item label="鐢熶骇鎵瑰彿"><el-input v-model="addObj.productionBatch" :disabled="active>1" size="small" /></el-form-item></el-col>
+ <el-col :span="6"><el-form-item label="閫佹牱鏃ユ湡"><el-date-picker v-model="addObj.sampleDate" type="date" value-format="yyyy-MM-dd" :disabled="active>1" size="small" /></el-form-item></el-col>
+ <el-col :span="6"><el-form-item label="鑱旂郴鏂瑰紡"><el-input v-model="addObj.phone" :disabled="active>1" size="small" /></el-form-item></el-col>
+ </el-row>
+ <el-row :gutter="16"><el-col :span="12"><el-form-item label="澶囨敞"><el-input v-model="addObj.remark" :disabled="active>1" size="small" /></el-form-item></el-col></el-row>
+ </el-form>
+ <el-form v-if="false" ref="addObj" :inline="true" :model="addObj" :rules="addObjRules" label-width="108px" label-position="right">
<el-row>
<el-col :span="6">
<el-form-item label="濮旀墭缂栧彿:" prop="entrustCode">
@@ -204,8 +232,8 @@
</el-col>
</el-row>
</el-form>
- </div>
- <div>
+ </el-card>
+ <div v-if="false">
<div style="display: flex;justify-content: space-between;background-color: #F5F7FB;margin-bottom: 6px">
<div v-if="active==1">
<el-form :inline="true" :model="addObj1" label-width="90px">
@@ -300,19 +328,27 @@
</template>
</el-table-column>
</el-table>
+ <div v-if="canSelectProduct" style="display: flex; align-items: center; gap: 12px; padding: 10px 0;">
+ <span>妫�娴嬭寖鍥达細</span>
+ <el-radio-group v-model="inspectionScope" size="small" @change="changeInspectionScope">
+ <el-radio-button label="all">鍏ㄩ儴妫�楠�</el-radio-button>
+ <el-radio-button label="specified">鎸囧畾妫�楠岄」</el-radio-button>
+ </el-radio-group>
+ <span>宸查�� {{ selectedProductCount }} / 鍏� {{ productList.length }} 椤�</span>
+ </div>
<el-table ref="productTable" v-loading="getProductLoad" :data="productList"
:row-class-name="tableRowClassName" border class="el-table"
:header-cell-style="{ background: '#f8f8f9', color: '#515a6e' }"
max-height="400px" style="margin-bottom: 10px;" tooltip-effect="dark"
@select="selectOne" @selection-change="selectProduct" @select-all="handleAll">
- <el-table-column v-if="active==1" :selectable="selectable0" type="selection" width="65"></el-table-column>
+ <el-table-column v-if="canSelectProduct" :selectable="selectable0" type="selection" width="65"></el-table-column>
<el-table-column label="妫�楠岄」鍒嗙被" min-width="140" prop="inspectionItemClass" show-overflow-tooltip></el-table-column>
<el-table-column label="妫�楠岄」" min-width="140" prop="inspectionItem" show-overflow-tooltip>
<template slot="header" slot-scope="scope">
<div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
<span>妫�楠岄」</span>
<el-input
- v-if="active==1"
+ v-if="canSelectProduct"
v-model="inspectionItem"
placeholder="璇疯緭鍏�"
size="mini"
@@ -326,7 +362,7 @@
<div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
<span>妫�楠岄」瀛愰」</span>
<el-input
- v-if="active==1"
+ v-if="canSelectProduct"
v-model="inspectionItemSubclass"
placeholder="璇疯緭鍏�"
size="mini"
@@ -368,7 +404,7 @@
<div style="display: flex;align-items: center;flex-direction: column;font-size: 14px">
<span>璇曢獙鏂规硶</span>
<el-input
- v-if="active==1"
+ v-if="canSelectProduct"
v-model="methodS"
placeholder="璇疯緭鍏�"
size="mini"
@@ -419,7 +455,7 @@
<el-col :span="24">
<span><i
:class="`node_i ${data.children != undefined ? (data.code==='[1]'?'el-icon-folder-opened':'el-icon-folder') : 'el-icon-tickets'}`"></i>
- {{ data.code }} {{ data.label }}</span>
+ {{ data.label }}</span>
</el-col>
</el-row>
</div>
@@ -598,12 +634,17 @@
upInsOrderOfState
} from "@/api/business/add";
import {selectUserCondition} from "@/api/performance/class";
-import {selectsStandardMethodByFLSSM} from "@/api/standard/standardLibrary";
+import {selectTemplateBindings, selectsStandardMethodByFLSSM} from "@/api/standard/standardLibrary";
import limsTable from "@/components/Table/lims-table.vue";
import {selectCustomPageList} from "@/api/system/customer";
import {mapGetters} from "vuex";
import { bigEval } from "@/utils/bigEval";
import {addQuarter, updateQuarterOnOrder} from "@/api/business/finishedProductSampling";
+import {
+ isLeafPath,
+ buildSelectTree,
+ dropLastLabel,
+} from "@/utils/standardTree";
export default {
name: 'AddOrder',
@@ -614,6 +655,12 @@
},
computed:{
...mapGetters(["nickName", 'nameEn', 'userName']),
+ canSelectProduct() {
+ return this.active == 1 || (this.tabIndex == 4 && this.active == 2)
+ },
+ selectedProductCount() {
+ return this.productList.filter(item => item.state == 1).length
+ },
newJuLaboratoryList() {
return (this.dict.type.sys_sub_lab || []).filter(item => item.label === '鏂拌仛')
},
@@ -624,6 +671,9 @@
active: '',
tabIndex: '',
currentId: '',
+ sampleCode: '',
+ boundTemplateList: [],
+ templateBindingLoading: false,
sampleSelectionList: [],//鏍峰搧琛ㄦ牸閫変腑鏁版嵁
editTable:[],
template: null,
@@ -652,7 +702,7 @@
orderType: null,
send: 1,
formType: '閫佹', // 鏉ユ牱鏂瑰紡
- sampleStatus: 'In good condition', // 鏍峰搧鐘舵��
+ sampleStatus: '', // 鏍峰搧鐘舵��
testQuantity: '', // 鏍峰搧鐘舵��
production: null,
productionEn: null,
@@ -678,7 +728,7 @@
{ required: true, message: '璇烽�夋嫨绱ф�ョ▼搴�', trigger: 'change' }
],
sample: [
- { required: true, message: '璇烽�夋嫨鏍峰搧鍚嶇О', trigger: 'change' }
+ { required: true, message: '璇烽�夋嫨妫�娴嬩緷鎹�', trigger: 'change' }
],
sampleNum: [
{ required: true, message: '璇峰~鍐欐牱鍝佹暟閲�', trigger: 'blur' }
@@ -691,12 +741,6 @@
],
testQuantity: [
{ required: true, message: '璇峰~鍐欐娊妫�鏁伴噺', trigger: 'blur' }
- ],
- production: [
- { required: true, message: '璇峰~鍐欑敓浜у崟浣�', trigger: 'blur' }
- ],
- productionEn: [
- { required: true, message: '璇峰~鍐欑敓浜у崟浣岴N', trigger: 'blur' }
],
},
sample: {
@@ -736,6 +780,8 @@
list: [],
selectStandardTreeLoading: false,
selectTree: null,
+ // 褰撳墠閫変腑鐨勬爲鑺傜偣锛堢敤浜庢寜灞傜骇鎺ㄥ瀛楁锛�
+ selectTreeNode: null,
sampleViewEn: null,
expandedKeys: [],
sampleList: [],
@@ -799,6 +845,7 @@
quarterItemOptions: [], // 鏌ヨ瀛e害淇℃伅
specialStandardMethod: '',
isSpecial: false,
+ inspectionScope: 'all',
}
},
watch: {
@@ -909,16 +956,24 @@
...res.data.insOrder
};
this.addObj.type = String(this.addObj.type)
- this.sampleList = this.HaveJson(res.data.sampleProduct);
- this.specialStandardMethod = this.sampleList[0].specialStandardMethod
- this.getProNum()
- this.addObj.sampleNum = this.sampleList.length
- this.$nextTick(() => {
- this.$refs.sampleTable.doLayout()
- if (this.addObj.sampleNum > 0) {
- this.$refs.sampleTable.setCurrentRow(this.sampleList[0], true)
- this.rowClick(this.sampleList[0])
- }
+ const samples = this.HaveJson(res.data.sampleProduct)
+ this.sampleCode = samples.length ? samples[0].sampleCode || '' : ''
+ this.boundTemplateList = this.sortTemplateList(res.data.templateList)
+ const loadSamples = this.canSelectProduct
+ ? Promise.all(samples.map(sample => this.loadSelectableProducts(sample)))
+ : Promise.resolve(samples)
+ loadSamples.then(sampleList => {
+ this.sampleList = sampleList
+ this.specialStandardMethod = this.sampleList[0].specialStandardMethod
+ this.getProNum()
+ this.addObj.sampleNum = this.sampleList.length
+ this.$nextTick(() => {
+ this.$refs.sampleTable.doLayout()
+ if (this.addObj.sampleNum > 0) {
+ this.$refs.sampleTable.setCurrentRow(this.sampleList[0], true)
+ this.rowClick(this.sampleList[0])
+ }
+ })
})
})
}
@@ -1134,6 +1189,14 @@
return str.replaceAll(find, value);
},
save() {
+ if (this.addObj.standardTreeId) {
+ if (!this.addObj.sample || !this.addObj.company || !this.addObj.orderType || !this.addObj.testQuantity) {
+ this.$message.error('璇峰~鍐欐娴嬩緷鎹�佸鎵樺崟浣嶃�佹楠岀被鍒拰鏍峰搧鏁伴噺');
+ return;
+ }
+ this.saveData([]);
+ return;
+ }
this.$refs['addObj'].validate((valid) => {
if (valid) {
this.sampleList.forEach(item => {
@@ -1169,22 +1232,23 @@
if (this.tabIndex != 4) {
delete c.id
}
+ if (c.isNew) {
+ c.id = null
+ delete c.isNew
+ }
})
}
if (a.endModels) {
a.model = a.endModels
}
- a.insProduct = a.insProduct.filter(b=>b.state === 1)
+ if (!this.canSelectProduct || this.active == 1) {
+ a.insProduct = a.insProduct.filter(b=>b.state === 1)
+ }
})
let projectNum = this.totalArr.filter(a => a.state == 1).length
if(projectNum==0){
- this.$confirm('妫�楠岄」鐩负绌猴紝鏄惁纭鎻愪氦?', "鎻愮ず", {
- confirmButtonText: "纭畾",
- cancelButtonText: "鍙栨秷",
- type: "warning"
- }).then(() => {
- this.saveMethod(sampleList)
- }).catch(() => {})
+ this.$message.warning('璇疯嚦灏戦�夋嫨涓�涓楠岄」')
+ return
}else{
let isRTS = this.totalArr.find(a => a.ask != null && this.symbolList.find(b=>a.ask.includes(b)) && a.state == 1)
if (isRTS) {
@@ -1209,12 +1273,18 @@
if (this.tabIndex != 4) {
delete c.id
}
+ if (c.isNew) {
+ c.id = null
+ delete c.isNew
+ }
})
}
if (a.endModels) {
a.model = a.endModels
}
- a.insProduct = a.insProduct.filter(b=>b.state === 1)
+ if (!this.canSelectProduct || this.active == 1) {
+ a.insProduct = a.insProduct.filter(b=>b.state === 1)
+ }
})
this.saveMethod(sampleList)
}else{
@@ -1307,6 +1377,10 @@
}
},
saveMethod(sampleList){
+ if (this.addObj.standardTreeId) {
+ this.saveData([]);
+ return;
+ }
if (this.addObj.quarterItemId) {
this.addObj.quarterItemId = this.addObj.quarterItemId[1]
}
@@ -1353,7 +1427,18 @@
})
}else{
// 甯歌鎻愪氦
- addInsOrder({insOrder: {...this.addObj,typeSource:-1}, sampleList: sampleList}).then(res => {
+ const newJuOrder = {...this.addObj,typeSource:-1}
+ delete newJuOrder.temperature
+ delete newJuOrder.humidity
+ const payload = this.addObj.standardTreeId
+ ? {
+ insOrder: newJuOrder,
+ standardTreeId: this.addObj.standardTreeId,
+ sampleCode: this.sampleCode,
+ templateList: this.boundTemplateList.map((item, index) => ({ templateId: item.templateId, sort: index }))
+ }
+ : { insOrder: {...this.addObj,typeSource:-1}, sampleList: sampleList }
+ addInsOrder(payload).then(res => {
this.saveLoad = false
this.$message.success('宸叉彁浜�')
this.bsm3Dia = false;
@@ -1448,9 +1533,9 @@
},
nodeOpen(data, node, el) {
$($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened')
- if (node.data.code === '[3]') {
+ if (data.sampleTypeEn !== undefined && data.sampleTypeEn !== null) {
this.sampleViewEn = data.sampleTypeEn
- } else if (node.data.code === '[4]') {
+ } else if (data.sampleEn !== undefined && data.sampleEn !== null) {
this.sampleViewEn = data.sampleEn
}
},
@@ -1458,47 +1543,13 @@
$($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder')
},
handleNodeClick(val, node, el) {
- this.selectTree = ''
- this.models = val.children
- this.getNodeParent(node)
- let flag = false
- if (node.level == 3) {
- if(node.data.children.length>0){
- node.data.children.forEach(a => {
- let key = Object.keys(a)
- if(!key.includes('level')) {
- flag = true
- }
- })
-
- }
- }
- if (node.data.code === '[3]') {
+ this.selectTreeNode = node
+ this.models = val.children || []
+ this.selectTree = buildSelectTree(node, '')
+ if (val.sampleTypeEn !== undefined && val.sampleTypeEn !== null) {
this.sampleViewEn = val.sampleTypeEn
- } else if (node.data.code === '[4]') {
- if (node.data.children!==null && node.data.children.length>0) {
- this.sampleViewEn = val.sampleEn
- }
- }
- this.selectTree = this.selectTree.replace(' - ', '')
- if(flag) {
- this.selectTree = ' - - ' + this.selectTree
- }
- let data = this.selectTree.split(' - ')
- let data2 = ''
- for (let index = data.length - 1; index >= 0; index--) {
- data2 += " - " + data[index]
- }
- this.selectTree = data2.replace(' - ', '')
- },
- getNodeParent(val) {
- if (val.parent != null) {
- if (val.data.children === null) {
- this.selectTree += ' - ' + val.label + ' - ' + ''
- } else {
- this.selectTree += ' - ' + val.label
- }
- this.getNodeParent(val.parent)
+ } else if (val.sampleEn !== undefined && val.sampleEn !== null) {
+ this.sampleViewEn = val.sampleEn
}
},
selectStandardTreeList() {
@@ -1516,42 +1567,42 @@
return data.label.indexOf(value) !== -1;
},
activeStandardTree() {
- let trees = this.selectTree.split(" - ")
- if (trees.length < 3) {
- this.$message.error('鏈�夋嫨瀵硅薄')
+ if (!this.selectTreeNode || this.selectTreeNode.data.code !== '[2]') {
+ this.$message.error('璇烽�夋嫨浜岀骇浜у搧')
return
}
- this.addObj.factory = trees[0]
- this.addObj.laboratory = trees[1]
- this.addObj.sampleType = trees[2]
- if (trees[3] === undefined || trees[3] === '' || trees[3] === '- ') {
- this.addObj.sample = trees[2]
- } else {
- this.addObj.sample = trees[3]
- }
- this.addObj.sampleView = this.addObj.sample
- this.addObj.sampleViewEn = this.sampleViewEn
- this.addObj.model = (trees[4] == undefined ? null : trees[4])
+ const productName = this.selectTreeNode.data.label
+ this.addObj.sample = productName
+ this.addObj.standardTreeId = this.selectTreeNode.data.id
+ this.loadTemplateBindings(this.addObj.standardTreeId)
this.selectStandardTree = false
this.sampleList = []
- for (var i = 0; i < this.addObj.sampleNum; i++) {
- this.sample.joinName = null
- this.sample.joinModel = null
- this.sample.joinNum = 1
- this.sample.sample = this.addObj.sample
- this.sample.model = this.addObj.model
- this.sample.unit = this.addObj.unit
- this.sample.standardMethodListId = null
- this.sample.insProduct = []
- this.sample.id = this.count
- this.sample.childSampleList = []
- this.sample.insulating = null
- this.sample.sheath = null
- this.sampleList.push(this.HaveJson(this.sample))
- this.count++
+ },
+ sortTemplateList(list) {
+ return (list || []).slice().sort((a, b) => (a.sort || 0) - (b.sort || 0))
+ },
+ // 涓嬪崟鏃朵粠鏍囧噯搴撶粦瀹氱殑妯℃澘閲屽垹鍑忥紝鎻愪氦鏃堕殢 templateList 涓�璧蜂笅鍙�
+ removeBoundTemplate(index) {
+ this.boundTemplateList.splice(index, 1)
+ },
+ async loadTemplateBindings(standardTreeId) {
+ this.boundTemplateList = []
+ if (!standardTreeId) return
+ this.templateBindingLoading = true
+ try {
+ const res = await selectTemplateBindings({standardTreeId})
+ this.boundTemplateList = this.sortTemplateList(res.data)
+ } finally {
+ this.templateBindingLoading = false
}
- this.$refs.sampleTable.doLayout()
- // this.selectsStandardMethodByFLSSM()
+ },
+ // 鐢ㄦ寚瀹氬瀷鍙锋浛鎹㈡爲璺緞鏈锛堟湯娈靛嵆鏍囧噯/鍨嬪彿锛�
+ buildFactoryPath(model) {
+ const tree = this.selectTree || ''
+ if (!tree || !model) return tree
+ const tokens = tree.split(' - ')
+ tokens[tokens.length - 1] = model
+ return tokens.join(' - ')
},
selectsStandardMethodByFLSSMList() {
this.methodLoad = true
@@ -1559,20 +1610,21 @@
tree: this.selectTree
}).then(res => {
this.methodLoad = false
- try {
- if (res.data.standardMethodList.length == 0 && this.selectTree.split('-').length == 5) {
- let arr = this.selectTree.split('-')
- let arr0 = arr.slice(0, arr.length - 1)
- let selectTree = arr0.join('-').substring(0, arr0.join('-').length - 1)
+ const list = (res.data && res.data.standardMethodList) || []
+ // 褰撳墠鏄彾瀛�(鏍囧噯)鍗存煡涓嶅埌鏍囧噯鏃讹紝鍥為��鍒扮埗绾у啀鏌ヤ竴娆�
+ // 鐢ㄨ矾寰勫垽瀹氬彾瀛愶細妯℃澘鍥炲~鏃� selectTreeNode 涓虹┖锛岃妭鐐瑰璞″垽瀹氫細澶辨晥
+ if (list.length === 0 && isLeafPath(this.selectTree)) {
+ const parentTree = dropLastLabel(this.selectTree)
+ if (parentTree) {
selectsStandardMethodByFLSSM({
- tree: selectTree
+ tree: parentTree
}).then(ress => {
- this.methods = ress.data.standardMethodList
+ this.methods = (ress.data && ress.data.standardMethodList) || []
})
- } else {
- this.methods = res.data.standardMethodList
+ return
}
- } catch (e) {}
+ }
+ this.methods = list
})
},
addStandardTree() {
@@ -1628,6 +1680,9 @@
}
this.productList = row.insProduct
this.productList0 = JSON.parse(JSON.stringify(this.productList))
+ this.inspectionScope = this.productList.length === 0
+ ? (this.active == 1 ? 'all' : 'specified')
+ : (this.productList.every(item => item.state == 1) ? 'all' : 'specified')
setTimeout(() => {
this.productList.forEach(a => {
if (a.state == 1) {
@@ -1697,6 +1752,9 @@
})
this.changeProductList0()
this.currentMethod.insProduct = this.productList0
+ this.inspectionScope = this.productList.length > 0 && this.productList.every(item => item.state == 1)
+ ? 'all'
+ : 'specified'
this.getProNum()
},
permute(nums) {
@@ -1805,19 +1863,17 @@
}
}
this.getProductLoad = true
- let selectTreeList = this.selectTree.split(" - ")
- this.addObj.model&&(selectTreeList[selectTreeList.length - 1] = this.addObj.model)
selectStandardProductList({
model: this.addObj.model?this.addObj.model:row.model,
modelNum: row.modelNum,
standardMethodListId: val,
- factory: selectTreeList.join(" - "),
+ factory: this.buildFactoryPath(this.addObj.model),
cores: row.cores,
conductorMaterial: row.conductorMaterial,
conductorType: row.conductorType,
}).then(res => {
res.data.forEach(a => {
- a.state = 0
+ a.state = this.inspectionScope === 'all' ? 1 : 0
})
row.insProduct = this.HaveJson(res.data)
this.getProductLoad = false
@@ -1832,6 +1888,9 @@
this.productList.forEach(a => {
if (a.state == 1) this.toggleSelection(a)
})
+ if (this.inspectionScope === 'all') {
+ this.handleAll(this.productList.filter(item => this.selectable0(item)))
+ }
}, 200)
})
},
@@ -1869,17 +1928,15 @@
this.isAskOnlyRead = false
}
this.getProductLoad = true
- let selectTreeList = this.selectTree.split(" - ")
- this.addObj.model&&(selectTreeList[selectTreeList.length - 1] = this.addObj.model)
selectStandardProductList({
model: this.addObj.model?this.addObj.model:row.model,
modelNum: row.modelNum,
standardMethodListId: val,
cores: row.cores,
- factory: selectTreeList.join(" - "),
+ factory: this.buildFactoryPath(this.addObj.model),
}).then(res => {
res.data.forEach(a => {
- a.state = 0
+ a.state = this.inspectionScope === 'all' ? 1 : 0
})
row.insProduct = this.HaveJson(res.data)
this.getProductLoad = false
@@ -1890,6 +1947,9 @@
this.productList.forEach(a => {
if (a.state == 1) this.toggleSelection(a)
})
+ if (this.inspectionScope === 'all') {
+ this.handleAll(this.productList.filter(item => this.selectable0(item)))
+ }
}, 200)
})
},
@@ -1915,13 +1975,13 @@
},
handleChangeModel(e) {
this.productList = []
- let num = this.selectTree.split('-').length;
- if (num != 5) {
- this.selectTree = this.selectTree + ' - ' + e
+ const tree = this.selectTree || ''
+ // 璺緞鏈宸叉槸鏍囧噯(鍙跺瓙)锛氭浛鎹㈡湯娈碉紱鍚﹀垯杩藉姞
+ // 鐢ㄨ矾寰勫垽瀹氾細妯℃澘鍥炲~(obj.selectTree)鏃舵病鏈夊彲鐢ㄧ殑鏍戣妭鐐瑰璞�
+ if (isLeafPath(tree)) {
+ this.selectTree = this.buildFactoryPath(e)
} else {
- let arr = this.selectTree.split('-')
- let arr0 = arr.slice(0, arr.length - 1)
- this.selectTree = arr0.join('-') + '- ' + e
+ this.selectTree = tree ? tree + ' - ' + e : e
}
},
// 瑕佹眰鍊煎彉鍖栨椂
@@ -1958,7 +2018,7 @@
}
},
selectable0(row,index) {
- if (this.active > 1||row.repetitionTag) {
+ if (!this.canSelectProduct||row.repetitionTag) {
return false
} else {
return true
@@ -2029,17 +2089,51 @@
return item
})
}
- this.productList.forEach(item => {
- if (item.id == row.id) {
- item.state = row.state;
- }
- })
this.changeProductList0()
this.currentMethod.insProduct = this.productList0
+ this.inspectionScope = e.length > 0 ? 'all' : 'specified'
this.getProNum()
this.$nextTick(() => {
this.$refs.productTable.doLayout()
})
+ },
+ changeInspectionScope(scope) {
+ if (scope !== 'all' || this.productList.length === 0) return
+ this.$refs.productTable.clearSelection()
+ this.productList.forEach(item => {
+ if (this.selectable0(item)) this.$refs.productTable.toggleRowSelection(item, true)
+ })
+ this.handleAll(this.productList.filter(item => this.selectable0(item)))
+ },
+ inspectionProductKey(product) {
+ return [
+ product.structureItemParameterId,
+ product.inspectionItemClass,
+ product.inspectionItem,
+ product.inspectionItemSubclass
+ ].join('|')
+ },
+ loadSelectableProducts(sample) {
+ const selectedProducts = sample.insProduct || []
+ if (!sample.standardMethodListId) return Promise.resolve(sample)
+ const product = selectedProducts[0] || {}
+ const factory = this.buildFactoryPath(product.model || sample.model)
+ return selectStandardProductList({
+ model: sample.model,
+ modelNum: sample.modelNum,
+ standardMethodListId: sample.standardMethodListId,
+ factory,
+ cores: sample.cores,
+ conductorMaterial: sample.conductorMaterial,
+ conductorType: sample.conductorType
+ }).then(res => {
+ const selectedKeys = new Set(selectedProducts.map(item => this.inspectionProductKey(item)))
+ const availableProducts = (res.data || [])
+ .filter(item => !selectedKeys.has(this.inspectionProductKey(item)))
+ .map((item, index) => ({...item, id: `new-${sample.id}-${index}`, state: 0, isNew: true}))
+ sample.insProduct = selectedProducts.concat(availableProducts)
+ return sample
+ }).catch(() => sample)
},
submitTell() {
if (!this.tell) {
@@ -2291,4 +2385,71 @@
color: orange;
font-size: 18px;
}
+.template-tag-list {
+ min-height: 32px;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 8px;
+}
+.empty-template-text {
+ color: #909399;
+}
+/* 濮旀墭鍗曚俊鎭細椤堕儴鎿嶄綔鏍� */
+.order-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ flex-wrap: wrap;
+ gap: 8px;
+ padding-bottom: 12px;
+ border-bottom: 1px solid #ebeef5;
+}
+.order-header__title {
+ font-size: 16px;
+ font-weight: bold;
+ color: #303133;
+}
+.order-header__actions {
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ gap: 8px;
+}
+/* 闂磋窛缁熶竴浜ょ粰 gap锛屽幓鎺夌浉閭绘寜閽嚜甯︾殑 margin-left */
+.order-header__actions>>>.el-button+.el-button {
+ margin-left: 0;
+}
+.order-header__quarter {
+ width: 220px;
+}
+.order-header__template {
+ width: 160px;
+}
+/* 濮旀墭鍗曚俊鎭細琛ㄥ崟鍗$墖 */
+.order-body {
+ margin-top: 12px;
+}
+.order-card>>>.el-card__body {
+ padding: 20px 20px 6px;
+}
+.order-card>>>.el-form-item {
+ margin-bottom: 16px;
+}
+/* 鎺т欢缁熶竴鍗犳弧鏍囩涔嬪鐨勬暣鍒楀搴︼細el-date-editor 榛樿鍐欐 220px銆�
+ el-select 瀹藉害鏀剁缉鎴愬浐鏈夊搴︼紝涓嶆寚瀹氬氨浼氬拰鍏朵粬杈撳叆妗嗗乏鍙宠竟缂樺涓嶉綈 */
+.order-card>>>.el-input,
+.order-card>>>.el-select {
+ width: 100%;
+}
+/* append 鍗曞厓鏍肩殑 20px 鍐呰竟璺� + 鎸夐挳 -10px 璐熻竟璺濇槸鎸夐粯璁� 40px 鎸夐挳鏍囧畾鐨勶紝
+ small 杈撳叆涓嬫寜閽細姣旇緭鍏ユ楂樸�佷笂涓嬫孩鍑猴紱鏀规垚鎸夐挳鐩存帴鎾戞弧鍗曞厓鏍� */
+.order-card>>>.el-input-group__append {
+ padding: 0;
+}
+.order-card>>>.el-input-group__append .el-button {
+ margin: 0;
+ padding: 9px 15px;
+ font-size: 12px;
+}
</style>
--
Gitblit v1.9.3