<template>
|
<div class="ins_order_config">
|
<div>
|
<el-row class="title">
|
<el-col :span="6" style="padding-left: 20px;text-align: left;">子样品配置</el-col>
|
<el-col :span="18" style="text-align: right;">
|
<el-button size="medium" type="primary" @click="addChild" v-if="active==1">添加子样品</el-button>
|
<el-button size="medium" type="primary" @click="save" :loading="saveLoad" v-if="active==1">保 存</el-button>
|
<el-button size="medium" @click="outConfig">
|
<span style="color: #3A7BFA;">返 回</span>
|
</el-button>
|
</el-col>
|
</el-row>
|
</div>
|
<div class="center">
|
<el-table class="el-table sampleTable" ref="sampleTable" :data="sampleList" height="50%" tooltip-effect="dark"
|
border highlight-current-row @row-click="rowClick" @current-change="selectSample">
|
<!-- <el-table-column type="selection" width="60" :selectable="selectable" v-if="active==1"></el-table-column> -->
|
<el-table-column type="index" label="序号" width="65" align="center"></el-table-column>
|
<el-table-column prop="sample" label="样品名称" align="center" min-width="100">
|
<template slot-scope="scope">
|
<el-input size="small" v-model="scope.row.sample" clearable :readonly="active>1"></el-input>
|
</template>
|
</el-table-column>
|
<el-table-column prop="sampleCode" label="样品编号" min-width="140" align="center">
|
<template slot-scope="scope">
|
<el-input size="small" v-model="scope.row.sampleCode" clearable placeholder="不填写则系统自动生成"
|
:readonly="active>1"></el-input>
|
</template>
|
</el-table-column>
|
<el-table-column prop="model" label="样品型号" align="center" min-width="100">
|
<template slot-scope="scope">
|
<el-select v-model="scope.row.model" filterable allow-create default-first-option placeholder="样品型号"
|
size="small" @change="handleChangeModel" :disabled="active>1" style="width: 100%;">
|
<el-option v-for="item in models" :key="item.value" :label="item.label" :value="item.value">
|
</el-option>
|
</el-select>
|
</template>
|
</el-table-column>
|
<el-table-column prop="modelNum" label="型号参数" width="130" align="center" v-if="!(active>1)">
|
<template slot-scope="scope">
|
<el-input size="small" v-model="scope.row.modelNum" clearable placeholder="非必填"
|
@keyup.enter.native="methodChange(scope.row.standardMethodListId, scope.row)"
|
@clear="methodChange(scope.row.standardMethodListId, scope.row)"></el-input>
|
</template>
|
</el-table-column>
|
<el-table-column prop="standardMethodListId" label="检验标准" align="center" min-width="100">
|
<template slot-scope="scope">
|
<el-select v-model="scope.row.standardMethodListId" :disabled="scope.row.model==null||active>1"
|
placeholder="检验标准" size="small" :loading="methodLoad" @change="(value)=>methodChange(value, scope.row)"
|
@focus="methodFocus" :readonly="active>1" style="width: 100%;">
|
<el-option v-for="item in methods" :key="item.id" :label="item.code" :value="item.id">
|
</el-option>
|
</el-select>
|
</template>
|
</el-table-column>
|
<el-table-column prop="num" label="样品数量" align="center" width="90">
|
</el-table-column>
|
<el-table-column label="操作" width="120">
|
<template slot-scope="scope">
|
<el-button @click.native.prevent="deleteRow(scope.$index, sampleList)" type="text"
|
size="small">删除</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<el-table class="el-table" ref="productTable" :data="productList" height="50%" tooltip-effect="dark" border
|
@selection-change="selectProduct" style="margin-bottom: 10px;" @select="upProductSelect"
|
:row-class-name="tableRowClassName" v-loading="getProductLoad" @select-all="handleAll">
|
<el-table-column type="selection" width="65" :selectable="selectable" v-if="active==1"></el-table-column>
|
<el-table-column prop="inspectionItem" label="检验项" min-width="140" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="inspectionItemSubclass" label="检验项子项" min-width="140"
|
show-overflow-tooltip></el-table-column>
|
<el-table-column prop="sonLaboratory" label="子实验室" min-width="130" show-overflow-tooltip :filters="filters"
|
:filter-method="filterHandler"></el-table-column>
|
<el-table-column prop="methodS" label="试验方法" min-width="120" show-overflow-tooltip>
|
</el-table-column>
|
<el-table-column prop="unit" label="计量单位" width="100" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="price" label="单价" width="100" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="section" label="区间" min-width="120" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="ask" label="要求值" min-width="220px">
|
<template slot-scope="scope">
|
<el-input size="small" placeholder="要求值" v-model="scope.row.ask" clearable type="textarea"
|
:autosize="{ minRows: 1, maxRows: 3}" @change="e=>requestChange(e,scope.row)"
|
v-if="active==1&&isAskOnlyRead"></el-input>
|
<span v-else>{{ scope.row.ask }}</span>
|
</template>
|
</el-table-column>
|
</el-table>
|
</div>
|
<el-dialog title="选择子样品" :visible.sync="selectStandardTree" width="400px" @closed="addObj.sampleNum = 1">
|
<div class="body" style="height: 60vh;overflow-y: auto;user-select: none;" v-if="selectStandardTree">
|
<el-row style="margin-bottom: 10px;">
|
<el-col :span="24">
|
<label>样品数量:</label>
|
<el-input-number v-model="addObj.sampleNum" :min="1" label="请输入数量" size="small"></el-input-number>
|
</el-col>
|
</el-row>
|
<el-row>
|
<el-col :span="24">
|
<el-input placeholder="输入关键字进行搜索" suffix-icon="el-icon-search" v-model="search" size="small"
|
style="margin-bottom: 5px;" clearable @blur="searchFilter" @clear="searchFilter"
|
@keyup.enter.native="searchFilter"></el-input>
|
</el-col>
|
</el-row>
|
<el-tree :data="list" ref="tree" :props="{ children: 'children', label: 'label' }" node-key="label"
|
:filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen"
|
@node-collapse="nodeClose" :default-expanded-keys="expandedKeys" @dblclick.native="activeStandardTree">
|
<div class="custom-tree-node" slot-scope="{ node, data }">
|
<el-row>
|
<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>
|
</el-col>
|
</el-row>
|
</div>
|
</el-tree>
|
</div>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="selectStandardTree = false">取 消</el-button>
|
<el-button type="primary" @click="activeStandardTree">确 定</el-button>
|
</span>
|
</el-dialog>
|
<el-dialog title="检测到特殊项,请作出以下选择" :visible.sync="bsm1Dia" width="500px" :show-close="false"
|
:before-close="beforeClose">
|
<div class="body" style="max-height: 60vh;">
|
<el-row v-if="bsm1">
|
<el-col class="search_thing" :span="22">
|
<div class="search_label"><span class="required-span">* </span>护套密度:</div>
|
<div class="search_input">
|
<el-radio-group v-model="bsm1Val" @input="upBsm1">
|
<el-radio v-for="(a, ai) in JSON.parse(bsmRow.section)" :key="ai" :label="a"></el-radio>
|
</el-radio-group>
|
</div>
|
</el-col>
|
<el-col class="search_thing" :span="22">
|
<div class="search_label">要求值:</div>
|
<div class="search_input" v-show="bsm1Val!==null&&bsm1Val!==''">
|
<el-radio-group v-model="bsm1Val" @input="upBsm1">
|
<el-radio v-for="(a, ai) in JSON.parse(bsmRow.section)" :key="ai"
|
:label="a">{{JSON.parse(bsmRow.ask)[ai]}}</el-radio>
|
</el-radio-group>
|
</div>
|
</el-col>
|
</el-row>
|
</div>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
export default {
|
props: {
|
active: {
|
type: Number,
|
default: () => 0
|
},
|
},
|
data() {
|
return {
|
saveLoad: false,
|
sampleList: [],
|
productList: [],
|
getProductLoad: false,
|
filters: [],
|
sampleIds: [],
|
isAskOnlyRead: false,
|
selectStandardTree: false,
|
search: '',
|
expandedKeys: [],
|
addObj: {
|
sampleNum: 1,
|
},
|
selectTree: null,
|
models: [],
|
sample: {
|
sampleCode: null,
|
laboratory: null,
|
factory: null,
|
sampleType: null,
|
sample: null,
|
model: null,
|
modelNum: null,
|
sampleNum: 1,
|
isLeave: 0,
|
unit: null
|
},
|
currentMethod: null,
|
methods: [],
|
methodLoad: false,
|
sampleId: null,
|
bsmRow: null,
|
bsm1: false,
|
bsm1Val: null,
|
bsm1Dia: false,
|
list: [],
|
parentSample: []
|
}
|
},
|
mounted() {
|
this.selectStandardTreeList()
|
this.selectStandardMethods()
|
this.$parent.sampleIds.forEach(a => {
|
for (var i = 0; i < this.$parent.sampleList.length; i++) {
|
if (this.$parent.sampleList[i].id == a) {
|
this.sampleList = this.$parent.sampleList[i].childSampleList
|
this.parentSample.push(this.$parent.sampleList[i])
|
break
|
}
|
}
|
})
|
},
|
methods: {
|
selectStandardTreeList() {
|
this.$axios.get(this.$api.standardTree.selectStandardTreeList).then(res => {
|
this.list = res.data
|
this.list.forEach(a => {
|
this.expandedKeys.push(a.label)
|
})
|
})
|
},
|
save() {
|
if (this.sampleList.length === 0) {
|
this.$message.error('缺少配置无法保存')
|
return
|
}
|
this.parentSample.forEach(a => {
|
a.childSampleList = this.sampleList
|
})
|
this.$message.success('已保存')
|
},
|
deleteRow(index, rows) {
|
this.productList = []
|
rows.splice(index, 1);
|
},
|
outConfig() {
|
this.$parent.equipConfigShow = false
|
},
|
addChild() {
|
this.selectStandardTree = true
|
},
|
selectSample(val) {
|
if (val === null) return
|
this.sampleIds = [val.id]
|
},
|
rowClick(row, column, event) {
|
this.currentMethod = row
|
let obj = this.methods.find(a => a.id == this.currentMethod.standardMethodListId)
|
if (obj && obj.code == '委托要求') {
|
this.isAskOnlyRead = true
|
} else {
|
this.isAskOnlyRead = false
|
}
|
this.sampleId = row.id
|
if (this.active !== 1) {
|
this.sampleIds = []
|
this.sampleIds.push(row.id)
|
}
|
this.productList = row.insProduct
|
setTimeout(() => {
|
this.productList.forEach(a => {
|
if (a.state == 1) this.toggleSelection(a)
|
})
|
}, 200)
|
},
|
toggleSelection(row) {
|
this.$refs.productTable.toggleRowSelection(row, true);
|
},
|
selectable() {
|
if (this.active > 1) {
|
return false
|
} else {
|
return true
|
}
|
},
|
handleChangeModel(e) {
|
let num = this.selectTree.split('-').length;
|
if (num != 5) {
|
this.selectTree = this.selectTree + ' - ' + e
|
} else {
|
let arr = this.selectTree.split('-')
|
let arr0 = arr.slice(0, arr.length - 1)
|
this.selectTree = arr0.join('-') + '- ' + e
|
}
|
},
|
methodChange(val, row) {
|
if (val === null || val === '') return
|
this.currentMethod = row
|
let obj = this.methods.find(a => a.id == this.currentMethod.standardMethodListId)
|
if (obj && obj.code == '委托要求') {
|
this.isAskOnlyRead = true
|
} else {
|
this.isAskOnlyRead = false
|
}
|
this.getProductLoad = true
|
this.$axios.post(this.$api.standardTree.selectStandardProductList, {
|
model: row.model + '-' + row.modelNum,
|
standardMethodListId: val,
|
factory: this.selectTree,
|
}, {
|
headers: {
|
'Content-Type': 'application/json'
|
}
|
}).then(res => {
|
res.data.forEach(a => {
|
a.state = 0
|
})
|
row.insProduct = this.HaveJson(res.data)
|
this.getProductLoad = false
|
this.productList = row.insProduct
|
this.$refs.sampleTable.setCurrentRow(row)
|
setTimeout(() => {
|
this.productList.forEach(a => {
|
if (a.state == 1) this.toggleSelection(a)
|
})
|
}, 200)
|
})
|
},
|
methodFocus() {
|
this.selectsStandardMethodByFLSSM()
|
},
|
selectStandardMethods() {
|
this.$axios.get(this.$api.standardTree.selectStandardMethodEnum).then(res => {
|
this.methods = res.data
|
})
|
},
|
selectsStandardMethodByFLSSM() {
|
this.methodLoad = true
|
this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
|
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)
|
this.$axios.post(this.$api.standardTree.selectsStandardMethodByFLSSM, {
|
tree: selectTree
|
}).then(ress => {
|
this.methods = ress.data.standardMethodList
|
})
|
} else {
|
this.methods = res.data.standardMethodList
|
}
|
} catch (e) {}
|
})
|
},
|
selectProduct(val) {
|
this.productIds = []
|
val.forEach(a => {
|
this.productIds.push(a.id)
|
})
|
},
|
upProductSelect(selection, row) {
|
row.state = row.state == 1 ? 0 : 1
|
if (row.bsm === '1' && row.section !== '' && row.section !== null && row.state === 1) {
|
if (row.section.indexOf('[') > -1) {
|
this.bsmRow = this.HaveJson(row)
|
}
|
this.bsm1 = true
|
this.bsm1Dia = true
|
} else if (row.bsm === '1' && row.section !== '' && row.section !== null && row.state === 0) {
|
this.bsm1 = false
|
}
|
this.sampleList.map(item => {
|
if (this.sampleIds.indexOf(item.id) > -1) {
|
item.insProduct.map(m => {
|
if (m.id == row.id) {
|
m.state = row.state;
|
}
|
return m;
|
})
|
}
|
return item
|
})
|
},
|
tableRowClassName({
|
row,
|
rowIndex
|
}) {
|
if (row.state === 0) {
|
return 'warning-row';
|
}
|
return '';
|
},
|
handleAll(e) {
|
if (e.length > 0) {
|
this.productList.map(m => {
|
m.state = 1
|
return m
|
})
|
} else {
|
this.productList.map(m => {
|
m.state = 0
|
return m
|
})
|
}
|
this.productList.forEach(p => {
|
if (p.bsm === '1' && p.section !== '' && p.section !== null && p.state === 1) {
|
if (p.section.indexOf('[') > -1) {
|
this.bsmRow = this.HaveJson(p)
|
}
|
this.bsm1 = true
|
this.bsm1Dia = true
|
} else if (p.bsm === '1' && p.section !== '' && p.section !== null && p.state === 0) {
|
this.bsm1 = false
|
}
|
})
|
if (e.length > 0) {
|
this.sampleList.map(item => {
|
if (this.sampleIds.indexOf(item.id) > -1) {
|
item.insProduct.map(m => {
|
m.state = 1
|
return m;
|
})
|
}
|
return item
|
})
|
} else {
|
this.sampleList.map(item => {
|
if (this.sampleIds.indexOf(item.id) > -1) {
|
item.insProduct.map(m => {
|
m.state = 0
|
return m;
|
})
|
}
|
return item
|
})
|
}
|
this.$nextTick(() => {
|
this.$refs.productTable.doLayout()
|
})
|
},
|
filterHandler(value, row, column) {
|
const property = column['property'];
|
return row[property] === value;
|
},
|
requestChange(e, row) {
|
this.sampleList.map(item => {
|
if (this.sampleIds.indexOf(item.id) > -1) {
|
item.insProduct.map(m => {
|
if (m.id == row.id) {
|
m.ask = e;
|
}
|
return m;
|
})
|
}
|
return item
|
})
|
},
|
activeStandardTree() {
|
let trees = this.selectTree.split(" - ")
|
if (trees.length < 4) {
|
this.$message.error('未选择子产品')
|
return
|
}
|
this.addObj.factory = trees[0]
|
this.addObj.laboratory = trees[1]
|
this.addObj.sampleType = trees[2]
|
if(trees[3]===''){
|
this.addObj.sample = (trees[4] == undefined ? null : trees[4])
|
}else if(trees[3]===undefined){
|
this.addObj.sample = trees[2]
|
}else{
|
this.addObj.sample = trees[3]
|
}
|
this.addObj.model = (trees[4] == undefined ? null : trees[4])
|
this.selectStandardTree = false
|
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.num = this.addObj.sampleNum
|
this.sampleList.push(this.HaveJson(this.sample))
|
this.count++
|
this.$refs.sampleTable.doLayout()
|
},
|
searchFilter() {
|
this.$refs.tree.filter(this.search)
|
},
|
filterNode(value, data) {
|
if (!value) return true;
|
return data.label.indexOf(value) !== -1;
|
},
|
handleNodeClick(val, node, el) {
|
this.selectTree = ''
|
this.models = val.children
|
this.getNodeParent(node)
|
this.selectTree = this.selectTree.replace(' - ', '')
|
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)
|
}
|
},
|
nodeOpen(data, node, el) {
|
$($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder-opened')
|
},
|
nodeClose(data, node, el) {
|
$($(el.$el).find('.node_i')[0]).attr('class', 'node_i el-icon-folder')
|
},
|
beforeClose(done) {
|
if (this.bsm1) {
|
if (this.bsm1Val === null || this.bsm1Val === '') {
|
this.$message.error('特殊项目必须处理')
|
return
|
}
|
}
|
done()
|
},
|
upBsm1(val) {
|
let sections = JSON.parse(this.bsmRow.section);
|
let asks = JSON.parse(this.bsmRow.ask);
|
let tells = JSON.parse(this.bsmRow.tell);
|
let manHours = JSON.parse(this.bsmRow.manHour);
|
let prices = JSON.parse(this.bsmRow.price);
|
for (var a in sections) {
|
if (val === sections[a]) {
|
this.productList.forEach(p => {
|
if (p.id === this.bsmRow.id) {
|
p.section = sections[a]
|
p.ask = asks[a]
|
p.tell = tells[a]
|
p.manHour = manHours[a]
|
p.price = prices[a]
|
}
|
})
|
break
|
}
|
}
|
},
|
}
|
}
|
</script>
|
<style scoped>
|
.ins_order_config {
|
width: 100%;
|
height: 100%;
|
overflow-y: auto;
|
overflow-x: hidden;
|
}
|
|
.ins_order_config::-webkit-scrollbar {
|
width: 0;
|
}
|
|
.title {
|
height: 60px;
|
line-height: 60px;
|
}
|
|
.center {
|
width: 100%;
|
height: calc(100% - 60px);
|
}
|
|
|
>>>.all-disabled .el-checkbox__input .el-checkbox__inner {
|
background-color: #edf2fc;
|
border-color: #dcdfe6;
|
cursor: not-allowed;
|
}
|
|
.node_i {
|
color: orange;
|
font-size: 18px;
|
}
|
|
.el-select-dropdown__item {
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
}
|
</style>
|