<template>
|
<div class="standard-library-main">
|
<div class="content-main">
|
<div class="library-bom">
|
<el-input
|
v-model="filterText"
|
placeholder="输入关键字进行过滤"
|
/>
|
<el-button type="text" @click="getAllStandard">全部</el-button>
|
<el-tree
|
ref="tree"
|
class="filter-tree"
|
:data="standardTree"
|
:props="defaultProps"
|
default-expand-all
|
:filter-node-method="filterNode"
|
@node-click="nodeClick"
|
/>
|
</div>
|
<div class="library-table">
|
<div class="table-header">
|
<div class="search-bar">
|
<el-form ref="form" :inline="true" :model="searchData">
|
<el-form-item>
|
<el-input
|
v-model="searchData.keyword"
|
placeholder="请输入人员名称/原材料名称"
|
>
|
<i slot="prefix" class="el-input__icon el-icon-search" />
|
</el-input>
|
</el-form-item>
|
<el-form-item>
|
<el-button type="primary" @click="filteredTableData">查询</el-button>
|
<el-button type="primary" plain @click="resetBtn">重置</el-button>
|
<!-- <el-button type="text">高级搜索<i class="el-icon-arrow-down el-icon--right" /></el-button> -->
|
</el-form-item>
|
</el-form>
|
</div>
|
<div class="serve-btn">
|
<el-button type="primary" icon="el-icon-plus" @click="showFormInfo">{{ selectedNodeType }}</el-button>
|
</div>
|
</div>
|
<div class="table-box">
|
<el-table
|
ref="tableData"
|
:cell-style="{textAlign: 'center'}"
|
:header-cell-style="{border:'0px',background:'#f5f7fa',color:'#606266',boxShadow: 'inset 0 1px 0 #ebeef5',textAlign: 'center'}"
|
:data="tableData"
|
style="width: 100%"
|
>
|
<el-table-column
|
type="index"
|
label="序号"
|
min-width="50"
|
/>
|
<!-- 复用 -->
|
<el-table-column
|
v-for="(item,index) in tablespecifications"
|
:key="index"
|
:prop="item.prop"
|
:label="item.label"
|
:min-width="item.minWidth"
|
/>
|
<template v-if="showTableCurrent===2">
|
<el-table-column
|
prop="spe_state"
|
label="状态"
|
min-width="150"
|
>
|
<template slot-scope="scope">
|
<el-tag
|
:type="scope.row.spe_state === 0 ? 'primary' : 'success'"
|
disable-transitions
|
>{{ scope.row.spe_state === 0 ? '已停用' : '已启用' }}</el-tag>
|
</template>
|
</el-table-column>
|
<el-table-column
|
label="操作"
|
min-width="150"
|
>
|
<template slot-scope="scope">
|
<el-button
|
type="text"
|
size="small"
|
:style="{marginRight:'8px'}"
|
@click="specificationDetails(scope.row)"
|
>查看</el-button>
|
<el-popover
|
v-model="scope.row.visible"
|
placement="top"
|
width="30"
|
>
|
<div @click=" getRowID(scope.row)" style="text-align: center; margin: 0">
|
<div>
|
<el-button size="mini" @click="dialogFormVisible4=true" type="text">编辑</el-button>
|
</div>
|
<div>
|
<el-button size="mini" @click="dialogFormVisible5 = true" type="text">停用</el-button>
|
</div>
|
</div>
|
<el-button slot="reference" type="text"><i class="el-icon-more" /></el-button>
|
</el-popover>
|
</template>
|
</el-table-column>
|
</template>
|
</el-table>
|
<!-- 弹出表单页 -->
|
<div>
|
<!-- 添加标准 -->
|
<el-dialog title="添加标准" :visible.sync="dialogFormVisible1">
|
<el-form ref="standardForm" :model="standardForm" :rules="rulesStandard">
|
<el-form-item label="标准号" :label-width="formLabelWidth" prop="standardnumber">
|
<el-input v-model="standardForm.standardnumber" autocomplete="off" />
|
</el-form-item>
|
<el-form-item label="标准名称" :label-width="formLabelWidth" prop="standardname">
|
<el-input v-model="standardForm.standardname" autocomplete="off" />
|
</el-form-item>
|
<el-form-item label="英文名称" :label-width="formLabelWidth" prop="standardenname">
|
<el-input v-model="standardForm.engname" autocomplete="off" />
|
</el-form-item>
|
<el-form-item label="父级分类" :label-width="formLabelWidth">
|
<el-select v-model="standardForm.type" placeholder="请选择">
|
<el-option label="原材料" value="0" />
|
<el-option label="电线电缆" value="1" />
|
</el-select>
|
</el-form-item>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click="dialogFormVisible1 = false">取 消</el-button>
|
<el-button type="primary" @click="submitForm">确 定</el-button>
|
</div>
|
</el-dialog>
|
<!-- 添加型号 -->
|
<el-dialog title="添加型号" :visible.sync="dialogFormVisible2">
|
<el-form ref="form" :model="modelForm" :rules="rulesModel">
|
<el-form-item label="型号" :label-width="formLabelWidth" prop="model">
|
<el-input v-model="modelForm.model" autocomplete="off" />
|
</el-form-item>
|
<el-form-item label="型号名称" :label-width="formLabelWidth" prop="modelname">
|
<el-input v-model="modelForm.modelname" autocomplete="off" />
|
</el-form-item>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click="dialogFormVisible2 = false">取 消</el-button>
|
<el-button type="primary" @click="submitForm()">确 定</el-button>
|
</div>
|
</el-dialog>
|
<!-- 添加规格 -->
|
<el-dialog title="添加规格" :visible.sync="dialogFormVisible3">
|
<el-form ref="form" :model="specificationForm" :rules="rulesspecification">
|
<el-form-item label="规格名称" :label-width="formLabelWidth" prop="name">
|
<el-input v-model="specificationForm.name" autocomplete="off" />
|
</el-form-item>
|
<el-form-item label="规格编号" :label-width="formLabelWidth" prop="number">
|
<el-input v-model="specificationForm.number" autocomplete="off" />
|
</el-form-item>
|
<el-form-item label="上方填写生产指令号" :label-width="formLabelWidth" prop="instruct">
|
<el-input v-model="specificationForm.instruct" autocomplete="off" />
|
</el-form-item>
|
<el-form-item label="电压等级" :label-width="formLabelWidth">
|
<el-select v-model="specificationForm.voltageLevel" placeholder="请选择电压等级">
|
<el-option label="分类1" value="test" />
|
<el-option label="分类2" value="2" />
|
<el-option label="分类3" value="3" />
|
</el-select>
|
</el-form-item>
|
<el-form-item label="主线芯截面" :label-width="formLabelWidth">
|
<el-select v-model="specificationForm.crossSection" placeholder="请选择主线芯截面">
|
<el-option label="分类1" value="test" />
|
<el-option label="分类2" value="2" />
|
<el-option label="分类3" value="3" />
|
</el-select>
|
</el-form-item>
|
<el-form-item label="主线芯芯数" :label-width="formLabelWidth">
|
<el-select v-model="specificationForm.numberOfCores" placeholder="请选择主线芯芯数">
|
<el-option label="分类1" value="test" />
|
<el-option label="分类2" value="2" />
|
<el-option label="分类3" value="3" />
|
</el-select>
|
</el-form-item>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click="dialogFormVisible3 = false">取 消</el-button>
|
<el-button type="primary" @click="submitForm()">确 定</el-button>
|
</div>
|
</el-dialog>
|
<!-- 编辑规格 -->
|
<el-dialog title="编辑规格" :visible.sync="dialogFormVisible4">
|
<el-form ref="form" :model="editSpeForm" :rules="rulesspecification">
|
<el-form-item label="规格名称" :label-width="formLabelWidth" prop="name">
|
<el-input v-model="editSpeForm.name" autocomplete="off" />
|
</el-form-item>
|
<el-form-item label="规格编号" :label-width="formLabelWidth" prop="number">
|
<el-input v-model="editSpeForm.number" autocomplete="off" />
|
</el-form-item>
|
<el-form-item label="上方填写生产指令号" :label-width="formLabelWidth" prop="instruct">
|
<el-input v-model="editSpeForm.instruct" autocomplete="off" />
|
</el-form-item>
|
<el-form-item label="电压等级" :label-width="formLabelWidth">
|
<el-select v-model="editSpeForm.voltageLevel" placeholder="请选择电压等级">
|
<el-option label="分类1" value="test" />
|
<el-option label="分类2" value="2" />
|
<el-option label="分类3" value="3" />
|
</el-select>
|
</el-form-item>
|
<el-form-item label="主线芯截面" :label-width="formLabelWidth">
|
<el-select v-model="editSpeForm.crossSection" placeholder="请选择主线芯截面">
|
<el-option label="分类1" value="test" />
|
<el-option label="分类2" value="2" />
|
<el-option label="分类3" value="3" />
|
</el-select>
|
</el-form-item>
|
<el-form-item label="主线芯芯数" :label-width="formLabelWidth">
|
<el-select v-model="editSpeForm.numberOfCores" placeholder="请选择主线芯芯数">
|
<el-option label="分类1" value="test" />
|
<el-option label="分类2" value="2" />
|
<el-option label="分类3" value="3" />
|
</el-select>
|
</el-form-item>
|
<el-form-item label="规格状态" :label-width="formLabelWidth">
|
<el-select v-model="editSpeForm.spe_state" placeholder="请选择规格状态">
|
<el-option label="停用" value="0" />
|
<el-option label="正常" value="1" />
|
<el-option label="草稿" value="-1" />
|
</el-select>
|
</el-form-item>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click="dialogFormVisible4 = false">取 消</el-button>
|
<el-button type="primary" @click="handleEdit">确 定</el-button>
|
</div>
|
</el-dialog>
|
<!-- 停用 -->
|
<el-dialog
|
title="提示"
|
:visible.sync="dialogFormVisible5"
|
width="30%">
|
<span>确认停用吗?</span>
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="dialogFormVisible5 = false">取 消</el-button>
|
<el-button type="primary" @click="updateSpeState">确 定</el-button>
|
</span>
|
</el-dialog>
|
</div>
|
<div>
|
<!-- 分页器 -->
|
<el-pagination
|
:current-page="pageParams.pageNo"
|
:page-sizes="[10, 15, 20, 25]"
|
:page-size="pageParams.pageNo"
|
layout="total, sizes, prev, pager, next, jumper"
|
:total="pageParams.total"
|
@size-change="handleSizeChange"
|
@current-change="handleCurrentChange"
|
/>
|
</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { getStandardsList, getSerialNumberList, getSpecificationsList, getStandardsListOfPage, addStandards, addSerialNumber, addSpecifications, updateSpecifications, updateSpeState } from '@/api/standardLibrary'
|
export default {
|
data() {
|
return {
|
dialogFormVisible1: false,
|
dialogFormVisible2: false,
|
dialogFormVisible3: false,
|
dialogFormVisible4: false,
|
dialogFormVisible5: false,
|
visible: false,
|
filterText: '',
|
// 标准库bom树
|
standardTree: [],
|
// bom的,默认值
|
defaultProps: {
|
children: 'children',
|
label: 'label'
|
},
|
// 查询条件
|
searchData: {
|
keyword: ''
|
},
|
tableData: [
|
],
|
oldtableData: [],
|
// 分页参数
|
pageParams: {
|
pageNo: 1,
|
pageSize: 10,
|
total: 0
|
},
|
tablespecifications: [
|
],
|
// 选中节点对应的表格 0 是标准表 1是型号表 2规格表
|
showTableCurrent: 0,
|
// 选中的节点数据
|
selectNode: {},
|
selectedNodeType: '添加标准',
|
standardForm: [{
|
standardnumber: '',
|
standardname: '',
|
engname: '',
|
type: ''
|
}],
|
modelForm: [{
|
model: '',
|
modelname: ''
|
}],
|
specificationForm: [{
|
name: '', // 产品规格名称
|
number: '', // 规格编号
|
crossSection: '',
|
numberOfCores: '',
|
instruct: '',
|
voltageLevel: ''
|
}],
|
editSpeForm: [{
|
crossSection: '',
|
instruct: '',
|
name: '', // 规格名称
|
number: '', // 规格编号
|
numberOfCores: '',
|
serialId: '', // 型号ID
|
spe_state: '',
|
voltageLevel: ''
|
}],
|
formLabelWidth: '120',
|
rulesStandard: {
|
standardnumber: [
|
{
|
required: true, message: '请输入标准号', trigger: 'blur'
|
}
|
],
|
standardname: [{
|
required: true, message: '请输入标准名称', trigger: 'blur'
|
}],
|
standardenname: [
|
{ required: false, message: '请输入英文名称', trigger: 'blur' }
|
]
|
},
|
rulesModel: {
|
model: [
|
{ required: true, message: '请输入型号', trigger: 'blur'
|
}],
|
modelname: [{
|
required: true, message: '请输入型号名称', trigger: 'blur'
|
}],
|
parentclassification: [
|
{ required: true, message: '请输入', trigger: 'blur' }
|
]
|
},
|
rulesspecification: {
|
number: [
|
{ required: true, message: '请输入规格编号', trigger: 'blur'
|
}],
|
name: [{
|
required: true, message: '请输入规格名称', trigger: 'blur'
|
}],
|
instruct: [
|
{ required: true, message: '请输入上方填写生产指令号', trigger: 'blur' }
|
]
|
},
|
standardId: '', // 获取当前标准ID
|
modelId: '', // 获取当前型号ID
|
rowId: '' // 获取当前规格所在行ID
|
}
|
},
|
watch: {
|
filterText(val) {
|
this.$refs.tree.filter(val)
|
}
|
},
|
created() {
|
this.getStandardTree()
|
this.getAllStandard()
|
},
|
methods: {
|
filterNode(value, data) {
|
if (!value) return true
|
return data.label.indexOf(value) !== -1
|
},
|
// 获取bom树的标准数据
|
async getStandardTree() {
|
this.selectedNodeType = '添加标准'
|
const { data: standard } = await getStandardsList()// 获取所有标准
|
// console.log(standard)// 获取所有标准
|
this.standardTree = standard.map(item => {
|
item.serialNumber = item.serialNumber?.map(childrenItem => ({ ...childrenItem, label: childrenItem.name }))
|
return { ...item, label: item.name, children: item.serialNumber }
|
})
|
// console.log(this.standardTree)
|
},
|
// 点击bom树节点方法
|
async nodeClick(data, node, element) {
|
// console.log('data', data)
|
// console.log('children' in data)
|
// 是子节点
|
if (!('children' in data)) {
|
// console.log('点击子节点', data)
|
this.selectedNodeType = '添加规格'
|
this.modelId = data.id
|
this.selectNode = data
|
// 获取点击子节点的表格
|
await this.getSpecifications(data)
|
return
|
}
|
// 不是子节点
|
this.selectedNodeType = '添加型号'
|
this.standardId = data.id
|
this.selectNode = data
|
await this.getSerialNumber(data)
|
},
|
specificationDetails(row) {
|
// 跳转产品规格详情页
|
this.$router.push(`/standardLibrary/SpecificationDetails/${row.id}`)
|
},
|
getRowID(row) {
|
// console.log(row.id)
|
this.id = row.id
|
},
|
// 获取所有标准table
|
async getAllStandard() {
|
this.selectedNodeType = '添加标准'
|
// console.log(this.pageParams)
|
const { data: { row, total }} = await getStandardsListOfPage({ ...this.pageParams })
|
// console.log('得到所有标准==>', row)
|
this.pageParams.total = total
|
this.tableData = row
|
this.tablespecifications = [
|
{
|
prop: 'name',
|
label: '标准名称',
|
minWidth: '150px'
|
},
|
{
|
prop: 'eng_name',
|
label: '标准英文名称',
|
minWidth: '150px'
|
},
|
{
|
prop: 'createTime',
|
label: '创建时间',
|
minWidth: '150px'
|
}
|
]
|
this.showTableCurrent = 0
|
},
|
// 获取对应型号下的所有规格
|
async getSerialNumber(data) {
|
const { data: { row, total }} = await getSerialNumberList({ standardsId: data.id, ...this.pageParams })
|
console.log('点击父节点', row)// 根据标准获取对应标准下的规格
|
this.tableData = row
|
this.pageParams.total = total
|
this.tablespecifications = [
|
{
|
prop: 'name',
|
label: '型号名称',
|
minWidth: '150px'
|
}
|
]
|
this.showTableCurrent = 1
|
},
|
// 获取标准下对应的所有型号
|
async getSpecifications(data) {
|
const { data: { row, total }} = await getSpecificationsList({ serialNumberId: data.id, ...this.pageParams })
|
// console.log(row)
|
this.tableData = row
|
this.pageParams.total = total
|
this.tablespecifications = [
|
{
|
prop: 'name',
|
label: '产品名称',
|
minWidth: '150px'
|
},
|
{
|
prop: 'username',
|
label: '更新人',
|
minWidth: '100px'
|
},
|
{
|
prop: 'updateTime',
|
label: '更新时间',
|
minWidth: '150px'
|
},
|
{
|
prop: 'vel',
|
label: '版本',
|
minWidth: '150px'
|
}
|
]
|
this.showTableCurrent = 2
|
},
|
// 展示弹出框
|
showFormInfo() {
|
if (this.selectedNodeType === '添加标准') {
|
this.dialogFormVisible1 = true
|
} else if (this.selectedNodeType === '添加型号') {
|
this.dialogFormVisible2 = true
|
} else {
|
this.dialogFormVisible3 = true
|
}
|
},
|
async submitForm() {
|
if (this.showTableCurrent === 0) {
|
await addStandards({ engName: this.standardForm.engname,
|
id: this.standardForm.standardnumber,
|
name: this.standardForm.standardname,
|
type: parseInt(this.standardForm.type) })
|
this.dialogFormVisible1 = false
|
} else if (this.showTableCurrent === 1) {
|
await addSerialNumber({ id: this.modelForm.model,
|
name: this.modelForm.modelname,
|
standardsId: this.standardId // 关联标准ID
|
})
|
this.dialogFormVisible2 = false
|
} else {
|
await addSpecifications({ crossSection: this.specificationForm.crossSection,
|
instruct: this.specificationForm.instruct,
|
name: this.specificationForm.name,
|
number: this.specificationForm.number,
|
numberOfCores: this.specificationForm.numberOfCores,
|
serialId: this.modelId, // 关联型号ID
|
voltageLevel: this.specificationForm.voltageLevel
|
})
|
this.dialogFormVisible3 = false
|
}
|
},
|
|
// 分页条件改变时判断需要分页查询的方法
|
judgment() {
|
switch (this.showTableCurrent) {
|
case 0:
|
this.getAllStandard()
|
break
|
case 1:
|
this.getSerialNumber(this.selectNode)
|
break
|
case 2:
|
this.getSpecifications(this.selectNode)
|
break
|
}
|
},
|
handleSizeChange(val) {
|
console.log(`每页 ${val} 条`)
|
this.pageParams.pageSize = val
|
this.judgment()
|
},
|
handleCurrentChange(val) {
|
console.log(`当前页: ${val}`)
|
this.pageParams.pageNo = val
|
this.judgment()
|
},
|
// 查询按钮
|
filteredTableData() {
|
this.oldtableData = this.tableData
|
// 根据输入的关键字得到过滤后的数据,如果有就把过滤后的数据展示在页面上
|
const filteredtabledata = this.tableData.filter(item => {
|
return item.name.includes(this.searchData.keyword)
|
})
|
// console.log('filteredtabledata', filteredtabledata)
|
this.tableData = filteredtabledata
|
},
|
// 重置按钮
|
resetBtn() {
|
this.searchData.keyword = ''
|
this.tableData = this.oldtableData
|
},
|
// 处理编辑规格
|
async handleEdit() {
|
// console.log(this.id)
|
await updateSpecifications({ crossSection: this.editSpeForm.crossSection,
|
id: this.rowId,
|
instruct: this.editSpeForm.instruct,
|
name: this.editSpeForm.name,
|
number: this.editSpeForm.number,
|
numberOfCores: this.editSpeForm.numberOfCores,
|
serialId: this.modelId, // 关联型号ID
|
spe_state: this.editSpeForm.spe_state,
|
voltageLevel: this.editSpeForm.spe_state })
|
this.dialogFormVisible4 = false
|
},
|
// 停用
|
async updateSpeState() {
|
await updateSpeState({ id: this.rowId,
|
spe_state: '0' })
|
this.dialogFormVisible5 = false
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
|
.standard-library-main{
|
width: 100%;
|
height: 100%;
|
// 页面中心内容区域
|
.content-main{
|
display: flex;
|
height: 100%;
|
min-height: calc(100vh - 88px);
|
padding: 15px;
|
>div{
|
padding: 20px;
|
background: #fff;
|
}
|
.library-bom{
|
flex: 2;
|
margin-right: 12px;
|
.el-tree {
|
// margin-top: 12px;
|
}
|
// .el-tree {
|
// margin-top: 12px;
|
// ::v-deep .el-tree-node__content{
|
// height: 24px !important;
|
// font-size: 14px;
|
// display: inline-block !important;
|
// padding: 2px;
|
// color: #333;
|
// }
|
// ::v-deep .el-tree-node__content:hover{
|
// background: rgba(58,124,253,0.1) ;
|
// // opacity: 0.31;
|
// border-radius: 3px;
|
// color: #333 !important;
|
// }
|
// ::v-deep .el-tree-node:focus>.el-tree-node__content{
|
// background: rgba(58,124,253,0.1) ;
|
// // opacity: 0.31;
|
// border-radius: 3px;
|
// color: #333 !important;
|
// }
|
// }
|
}
|
.library-table{
|
flex: 8;
|
margin-left: 12px;
|
display: flex;
|
flex-direction: column;
|
|
.table-header{
|
display: flex;
|
justify-content: space-between;
|
.el-form-item{
|
margin-bottom: 30px !important;
|
}
|
}
|
.table-box{
|
flex: 1;
|
background: #fff;
|
// padding: 20px 20px 10px 20px;
|
display: flex;
|
flex-direction: column;
|
.el-table {
|
flex: 1;
|
}
|
>div:nth-child(2){
|
display: flex;
|
justify-content: end;
|
margin: 10px 0;
|
}
|
}
|
}
|
}
|
}
|
</style>
|