<style scoped>
|
.standard {}
|
|
.standard .title .el-button {
|
height: 32px;
|
border: 1px solid rgba(190, 190, 190, 0.44);
|
box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
|
padding: 0 12px;
|
}
|
|
.standard .title {
|
margin-bottom: 10px;
|
padding: 0 20px;
|
}
|
|
.standard .title *{
|
font-size: 16px;
|
}
|
|
.thing {
|
width: 100%;
|
height: calc(100% - 48px);
|
background-color: #fff;
|
display: flex;
|
}
|
|
.thing .left {
|
width: 295px;
|
height: calc(100% - 32px);
|
border-right: 3px solid rgb(245, 247, 251);
|
padding: 16px;
|
}
|
|
.thing .left .custom-tree-node span {
|
font-size: 14px;
|
}
|
|
.thing .left .custom-tree-node {
|
flex: 1;
|
display: flex;
|
align-items: center;
|
justify-content: space-between;
|
font-size: 14px;
|
padding-right: 8px;
|
}
|
|
.node_i {
|
color: orange;
|
}
|
|
.el-icon-delete {
|
display: none;
|
color: #004EA2;
|
}
|
|
.custom-tree-node:hover .el-icon-delete {
|
display: inline;
|
}
|
|
.thing .right {
|
width: calc(100% - 295px);
|
height: 100%;
|
overflow: hidden;
|
}
|
|
.thing .right .choose {
|
padding: 21px 24px;
|
display: flex;
|
align-items: center;
|
}
|
|
.thing .right .choose * {
|
font-size: 14px;
|
}
|
|
.thing .right .choose .el-button {
|
height: 32px;
|
border: 1px solid rgba(190, 190, 190, 0.44);
|
box-shadow: 0px 2px 4px rgba(220, 220, 220, 0.41);
|
padding: 0 12px;
|
}
|
|
.thing .right .table{
|
margin-right: 24px;
|
height: calc(100% - 74px);
|
}
|
</style>
|
<style>
|
.standard .title .el-button * {
|
font-size: 14px;
|
}
|
|
.standard .title .el-button--default{
|
color: #004EA2;
|
}
|
|
.standard .thing .left .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
|
background: rgba(58, 124, 253, 0.3);
|
color: #004EA2;
|
}
|
|
.el-tree-node__content {
|
height: 30px;
|
border-radius: 2px;
|
}
|
</style>
|
|
<template>
|
<div class="standard">
|
<div class="title">
|
<el-row>
|
<el-col :span="12" style="line-height: 32px;">标准BOM</el-col>
|
<el-col :span="12" style="text-align: right;">
|
<el-button type="primary" icon="el-icon-plus" style="background: #004EA2;" @click="bomAddModelVisible= true">新增</el-button>
|
<el-button icon="el-icon-edit-outline">修改</el-button>
|
<el-button icon="el-icon-delete">删除</el-button>
|
</el-col>
|
</el-row>
|
</div>
|
<div class="thing">
|
<div class="left">
|
<el-input v-model="search" suffix-icon="el-icon-search" placeholder="请输入搜索内容" size="small" clearable></el-input>
|
<el-tree :data="list" ref="tree" :props="{children: 'children',label: 'name'}" node-key="id" default-expand-all
|
:filter-node-method="filterNode" @node-click="handleNodeClick" highlight-current @node-expand="nodeOpen"
|
@node-collapse="nodeClose">
|
<div class="custom-tree-node" slot-scope="{ node, data }">
|
<span><i :class="`node_i ${data.code != '[4]'?'el-icon-folder-opened':'el-icon-tickets'}`"></i>
|
{{data.code}}{{ data.name }}</span>
|
<el-button type="text" size="mini" @click.stop="remove(node, data)">
|
<i class="el-icon-delete"></i>
|
</el-button>
|
</div>
|
</el-tree>
|
</div>
|
<div class="right">
|
<div class="choose">
|
<span>类型:</span>
|
<el-select v-model="tableType" size="small" placeholder="请选择" style="width: 224px;margin-right: 52px;">
|
<el-option :value="0" label="工艺文件"></el-option>
|
<el-option :value="1" label="技术指标"></el-option>
|
</el-select>
|
<span>{{tableType==1?'项目:':'工艺名称:'}}</span>
|
<el-input v-model="searchName" size="small" placeholder="请输入" style="width: 224px;margin-right: 24px;" clearable></el-input>
|
<el-button size="mini" @click="()=>{searchName='';selectProductTableData()}"><span>重 置</span></el-button>
|
<el-button size="mini" type="primary" style="background: #004EA2;" @click="selectProductTableData"><span>查 询</span></el-button>
|
</div>
|
<div class="table">
|
<technology v-if="tableData.length!==0" :tableType="tableType" :tableData="tableData"></technology>
|
</div>
|
</div>
|
</div>
|
<div class="bom-add-model">
|
<el-dialog
|
title="BOM新增"
|
:visible.sync="bomAddModelVisible"
|
width="30%"
|
:before-close="handleClose">
|
<el-form>
|
|
</el-form>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="bomAddModelVisible = false">取 消</el-button>
|
<el-button type="primary" @click="bomAddModelVisible = false">确 定</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import technology from "./standard-table/technology.vue"
|
export default {
|
components: {technology},
|
data() {
|
return {
|
// BOM树数据结构
|
list: [{
|
id: 0,
|
name: "原材料",
|
code: "[1]",
|
children: []
|
}, {
|
id: 1,
|
name: "成品",
|
code: "[1]",
|
children: []
|
}, {
|
id: 2,
|
name: "半成品",
|
code: "[1]",
|
children: []
|
}],
|
search: null,
|
// 表格类型 1:技术指标,0:工艺路线
|
tableType: 1,
|
// 查询条件-名称
|
searchName: "",
|
// 点击选中树节点
|
checkTreeNode: {},
|
tableData:[],
|
// 控制bom新增模态框是否显示
|
bomAddModelVisible: false
|
}
|
},
|
watch: {
|
search(val) {
|
this.$refs.tree.filter(val);
|
},
|
tableType(val){
|
console.log(val)
|
this.selectProductTableData()
|
}
|
},
|
mounted() {
|
this.selectMaterialTree()
|
},
|
methods: {
|
handleNodeClick(data) {
|
// console.log(data);
|
this.checkTreeNode = data
|
// this.selectMaterialTree()
|
this.selectProductTableData()
|
},
|
filterNode(value, data) {
|
if (!value) return true;
|
return data.label.indexOf(value) !== -1;
|
},
|
remove(node, data) {
|
this.$confirm("是否删除", "警告", {
|
type: "warning"
|
}).then(res => {
|
const parent = node.parent;
|
const children = parent.data.children || parent.data;
|
const index = children.findIndex(d => d.id === data.id);
|
children.splice(index, 1);
|
}).catch(e => {})
|
},
|
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')
|
},
|
selectMaterialTree() {
|
this.$axios.get(this.$api.url.selectTreeByMaterial).then(res => {
|
res.data.forEach(a => {
|
this.list.forEach(b => {
|
if (a.type == b.id) b.children = [a]
|
})
|
})
|
this.$nextTick().then(() => {
|
const firstNode = document.querySelector('.el-tree-node .el-tree-node__children .el-tree-node .el-tree-node__children .el-tree-node .el-tree-node__children .el-tree-node')
|
firstNode.click()
|
// console.log(firstNode)
|
})
|
})
|
|
},
|
async selectProductTableData() {
|
switch (this.tableType) {
|
case 0:
|
const {data:technologyList} = await this.$axios.get(this.$api.url.selectTechnologyByMaterial,{params:{specificationId:this.checkTreeNode.id,technologyName:this.searchName}})
|
this.tableData = technologyList
|
break;
|
case 1:
|
const {data:productList} = await this.$axios.get(this.$api.url.selectProductByMaterial,{params:{specifications:this.checkTreeNode.id,project:this.searchName}})
|
productList.forEach((item,index)=>{
|
item.name = item.father
|
item.index = index+1
|
item.id = item.father
|
if(item.children.length===1){
|
productList[index] = {...item.children[0],index: index+1,name:item.father}
|
}
|
})
|
this.tableData = productList
|
break;
|
}
|
console.log(this.tableData)
|
}
|
}
|
}
|
</script>
|