Browse Source

2024-04-24

master
zelian_wu 2 years ago
parent
commit
d7438d3f7b
  1. 1
      src/api/code/codeDrawing.js
  2. 1
      src/api/code/codeItemValue.js
  3. 199
      src/views/modules/code/generation.vue
  4. 76
      src/views/modules/code/item.vue
  5. 14
      src/views/modules/code/item/itemValue.vue
  6. 37
      src/views/modules/code/list.vue
  7. 100
      src/views/modules/quotation/pirceCheckDetail/priceCheckDetailForm.vue
  8. 34
      src/views/modules/quotation/priceCheckDetail.vue

1
src/api/code/codeDrawing.js

@ -4,3 +4,4 @@ export const searchDrawingList = (data) => createAPI(`/code/drawing/list`,'post'
export const saveDrawing = (data) => createAPI(`/code/drawing/save`,'post',data);
export const removeDrawing = (data) => createAPI(`/code/drawing/remove`,'post',data);
export const editDrawing = (data) => createAPI(`/code/drawing/edit`,'post',data);
export const codeNoGenerate = (data) => createAPI(`/code/drawing/generation`,'post',data);

1
src/api/code/codeItemValue.js

@ -1,6 +1,7 @@
import {createAPI} from "../../utils/httpRequest";
export const searchCodeItemValueList = (data) => createAPI(`/code/value/list`,'post',data)
export const searchCodeGenerationItemValueList = (data) => createAPI(`/code/value/generation/list`,'post',data)
export const searchCodeItemValueListItem = (data) => createAPI(`/code/value/list/item`,'post',data)
export const saveCodeItemValue = (data) => createAPI(`/code/value/save`,'post',data)
export const saveCodeItemValueBatch = (data) => createAPI(`/code/value/save/batch`,'post',data)

199
src/views/modules/code/generation.vue

@ -1,6 +1,8 @@
<script>
import {searchCodeItemAllDefsSeq, searchCodeItemDefs, searchCodeItemDefsSeq} from "../../../api/code/codeItemDef";
import {toJSON} from "lodash/seq";
import {searchCodeGenerationItemValueList} from "../../../api/code/codeItemValue";
import {codeNoGenerate, saveDrawing} from "../../../api/code/codeDrawing";
import dayjs from "dayjs";
export default {
name: "CodeGeneration",
@ -8,13 +10,18 @@ export default {
return {
codeItemDefs: [],
searchModel:{
codeNo: "",
codeDesc: "",
drawingNo: "",
drawingNoNew: "",
drawingDesc: "",
remark: "",
seqFlag: "N",
},
codeItemTypes: [],
codeItemValues: [],
width: 700,
loadingIndex:-1,
getCodeNoLoading: false,
saveCodeLoading: false,
}
},
activated() {
@ -44,31 +51,164 @@ export default {
},
changeCodeItemType(index){
this.$set(this.codeItemValues, index, undefined)
this.changeRowCodeItemValue(index)
},
getCodeNoBtn(){
if (this.codeItemDefs.length === 0){
this.showAlert("尚未设置编码规则!请先到“编码组成元素定义”中定义!")
return;
}
// this.getCodeNoLoading = true;
let params = [];
//
for (let i = 0; i < this.codeItemDefs.length; i++) {
if (!this.codeItemValues[i] && !(this.codeItemDefs[i].itemType.includes('流水号') && this.codeItemTypes[i] === '流水号')){
this.showAlert(`元素${this.codeItemDefs[i].itemDesc}的值为空`);
this.getCodeNoLoading = false;
return;
}
if (this.codeItemDefs[i].itemType.includes('手工') && this.codeItemTypes[i] === '手工' && this.codeItemValues[i].length > this.codeItemDefs[i].bits ){
this.showAlert(`元素${this.codeItemDefs[i].itemDesc}的值长度不正确,编码位数应为${this.codeItemDefs[i].bits}`)
this.getCodeNoLoading = false;
return;
}
// let paramsData = {
// codeItemDef: {...this.codeItemDefs[i]},
// currentValueNo:"",
// currentSeqValueNo:"",
// currentCodeDesc:"",
// currentCodeRemark:"",
// codeNo:"",
// codeHasSeq:"N",
// hasSeqCount:0,
// };
// if (this.codeItemDefs[i].itemType.includes('') && this.codeItemTypes[i] === ''){
// paramsData.currentValueNo = this.codeItemValues[i];
// paramsData.currentSeqValueNo = `{${paramsData.currentValueNo}}`
// }else if (this.codeItemDefs[i].itemType.includes('') && this.codeItemTypes[i] === ''){
// //
// paramsData.currentValueNo = this.getValueNo(this.codeItemDefs[i].itemValues,this.codeItemValues[i]).valueNo
// paramsData.currentSeqValueNo = `{${paramsData.currentValueNo}}`
// }else {
// paramsData.codeHasSeq = "Y";
// paramsData.hasSeqCount++;
// }
let paramsData = {
...this.codeItemDefs[i],
}
if (this.codeItemDefs[i].itemType.includes('手工') && this.codeItemTypes[i] === '手工'){
paramsData.value = this.codeItemValues[i];
paramsData.itemType = '手工'
}else if (this.codeItemDefs[i].itemType.includes('选择') && this.codeItemTypes[i] === '选择'){
//
paramsData.value = this.getValueNo(this.codeItemDefs[i].itemValues,this.codeItemValues[i]).valueNo
paramsData.label = this.getValueNo(this.codeItemDefs[i].itemValues,this.codeItemValues[i]).itemValue
paramsData.itemType = '选择'
}else if (this.codeItemDefs[i].itemType.includes('流水号') && this.codeItemTypes[i] === '流水号'){
paramsData.itemType = '流水号'
}
params.push(paramsData)
}
this.codeNoGenerate(params)
},
codeNoGenerate(params){
codeNoGenerate(params).then(({data})=>{
if (data && data.code === 0){
this.searchModel = {...data.row}
}else {
this.$message.warning(data.msg)
}
}).catch((error) => {
this.$message.error(error);
})
},
getValueNo(arr,valueItemNo){
//
return arr.find(item=>item.valueItemNo === valueItemNo)
},
showAlert(msg){
this.$alert(msg, '提示', {
confirmButtonText: '确定',
});
},
changeCodeItemValue(index,val){
if (val === true){
let codeItemDef = this.codeItemDefs[index]
if(index === 0 && codeItemDef.itemByCondition === 'Y'){
this.$refs[`codeItemValue${index}`][0].blur();
let codeItemDef = this.codeItemDefs[index]
if (val === true && codeItemDef.itemByCondition === 'Y' && !this.codeItemValues[index]){
if (index === 0){
this.$message.warning("请先检查该元素的定义可选值设置中是否都已经维护了条件!")
return;
}else {
// /
let codeItemDefs = [];
for (let i = 0; i <= index; i++) {
let codeItemDef = {
...this.codeItemDefs[i],
value:this.codeItemValues[i]
}
codeItemDefs.push(codeItemDef)
}
this.searchCodeGenerationItemValueList(codeItemDefs,index)
}
if (codeItemDef.itemByCondition === 'Y' && !this.codeItemValues[index-1]){
}
},
searchCodeGenerationItemValueList(arr,index){
if (arr.length === 0){
return;
}
this.loadingIndex = index
this.codeItemDefs[index].itemValues = []
this.$set(this.codeItemDefs, index, {...this.codeItemDefs[index]})
searchCodeGenerationItemValueList(arr).then(({data})=>{
if (data && data.code === 0){
let itemDefs = {...this.codeItemDefs[index], itemValues: data.rows}
this.$set(this.codeItemDefs, index, itemDefs)
}else {
this.$refs[`codeItemValue${index}`][0].blur();
this.$message.warning('请先选择上一级编码');
return
this.$alert(data.msg, '提示', {
confirmButtonText: '确定',
});
}
}
this.loadingIndex = -1
}).catch((error)=>{
this.$message.error(error);
this.loadingIndex = -1
})
},
getCodeNoBtn(){
//
for (let i = 0; i < this.codeItemValues.length; i++) {
if (!this.codeItemValues[i]){
this.$message.warning(`${this.codeItemDefs[i].itemDesc}不能为空`);
return
changeRowCodeItemValue(index){
//
for (let i = index+1; i < this.codeItemDefs.length; i++) {
if (this.codeItemDefs[i].itemByCondition === 'Y'){
this.$set(this.codeItemValues, i, undefined)
}
}
},
saveDrawing(){
let params = {
...this.searchModel,
site:this.$store.state.user.site,
creator:this.$store.state.user.name,
createDate:dayjs().format('YYYY-MM-DD HH:mm:ss'),
}
this.saveCodeLoading = true;
saveDrawing(params).then(({data})=>{
if (data && data.code === 0){
this.$alert(`成功获取并保存了编码${this.searchModel.drawingNo}`, '提示', {
confirmButtonText: '确定',
});
Object.keys(this.searchModel).forEach(key => {
this.$set(this.searchModel, key, '')
})
for (let i = 0; i < this.codeItemDefs.length; i++) {
this.$set(this.codeItemValues, i, undefined)
}
this.saveCodeLoading = false;
this.searchCodeItemDefs();
}else {
this.saveCodeLoading = false;
this.$message.warning(data.msg)
}
}).catch((error) => {
this.$message.error(error);
})
}
},
}
@ -78,21 +218,21 @@ export default {
<div>
<el-form :model="searchModel" :inline="true" label-position="top">
<el-form-item label=" ">
<el-button type="primary" @click="getCodeNoBtn">获取编码</el-button>
<el-button type="primary">占有编码</el-button>
<el-button type="primary" :loading="getCodeNoLoading" @click="getCodeNoBtn">获取编码</el-button>
<el-button type="primary" :loading="saveCodeLoading" @click="saveDrawing">占有编码</el-button>
</el-form-item>
<el-form-item label="编码:">
<el-input readonly style="width: 200px" v-model="searchModel.codeNo"></el-input>
<el-input readonly style="width: 200px" v-model="searchModel.drawingNo"></el-input>
</el-form-item>
<el-form-item label="编码描述:">
<el-input readonly style="width: 200px" v-model="searchModel.codeDesc"></el-input>
<el-input readonly style="width: 300px" v-model="searchModel.drawingDesc"></el-input>
</el-form-item>
<el-form-item label="备注">
<el-input readonly style="width: 200px" v-model="searchModel.remark"></el-input>
<el-input readonly style="width: 300px" v-model="searchModel.remark"></el-input>
</el-form-item>
</el-form>
<!-- {{codeItemDefs}}-->
<div style="margin-top: 10px;border-top: 1px solid #ccc;padding-top: 10px;height: 400px;overflow-y: auto" :style="{width: `${width}px`}">
<div style="margin-top: 10px;border-top: 1px solid #ccc;padding-top: 10px;height: 780px;overflow-y: auto" :style="{width: `${width}px`}">
<el-form label-position="left" label-width="100px">
<el-form-item :label="`${item.itemDesc}:`" v-for="(item, index) in codeItemDefs" :key="index" style="margin-bottom: 10px">
<div v-if="item.itemType.includes('或')" style="width: 240px;display: inline-block">
@ -103,7 +243,14 @@ export default {
</el-radio-group>
</div>
<div style="display: inline-block;" :style="{width: `${item.itemType.includes('或')?(width-240-105):(width-100)}px`}">
<el-select :ref="`codeItemValue${index}`" v-if="codeItemTypes[index] === '选择'" @visible-change="(val)=>changeCodeItemValue(index,val)" style="width: 100%;" v-model="codeItemValues[index]">
<el-select
:loading="loadingIndex === index"
:ref="`codeItemValue${index}`"
clearable v-if="codeItemTypes[index] === '选择'"
change="changeRowCodeItemValue(index)"
@visible-change="(val)=>changeCodeItemValue(index,val)"
style="width: 100%;"
v-model="codeItemValues[index]">
<el-option :value="val.valueItemNo" :label="val.itemValue" v-for="(val , i) in item.itemValues" :key="i"></el-option>
</el-select>
<el-input v-if="codeItemTypes[index] === '手工'" placeholder="请输入" v-model="codeItemValues[index]"></el-input>

76
src/views/modules/code/item.vue

@ -169,39 +169,40 @@ const columnList = [
status: true,
fixed: '',
columnWidth: 120
},{
functionId: 9009004,
serialNumber: '9009004Table1ValueSeqNo',
tableId: '9009004Table1',
tableName: '编码组成元素',
columnProp: 'valueSeqNo',
headerAlign: 'center',
align: 'right',
columnLabel: '值顺序号',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},{
functionId: 9009004,
serialNumber: '9009004Table1FixedValueFlag',
tableId: '9009004Table1',
tableName: '编码组成元素',
columnProp: 'fixedValueFlag',
headerAlign: 'center',
align: 'right',
columnLabel: '固定值',
columnHidden: false,
columnImage: false,
columnSortable: false,
sortLv: 0,
status: true,
fixed: '',
columnWidth: 120
},
// {
// functionId: 9009004,
// serialNumber: '9009004Table1ValueSeqNo',
// tableId: '9009004Table1',
// tableName: '',
// columnProp: 'valueSeqNo',
// headerAlign: 'center',
// align: 'right',
// columnLabel: '',
// columnHidden: false,
// columnImage: false,
// columnSortable: false,
// sortLv: 0,
// status: true,
// fixed: '',
// columnWidth: 120
// },{
// functionId: 9009004,
// serialNumber: '9009004Table1FixedValueFlag',
// tableId: '9009004Table1',
// tableName: '',
// columnProp: 'fixedValueFlag',
// headerAlign: 'center',
// align: 'right',
// columnLabel: '',
// columnHidden: false,
// columnImage: false,
// columnSortable: false,
// sortLv: 0,
// status: true,
// fixed: '',
// columnWidth: 120
// },
];
const descColumnList = [
{
@ -440,6 +441,7 @@ export default {
searchCodeItemDefs(params).then(({data}) => {
if (data && data.code === 0){
this.codeItemDefs = data.rows;
this.copyCodeItemDefs = data.rows;
if (!this.currentRow.itemNo && this.codeItemDefs.length > 0){
this.currentRow = {...this.codeItemDefs[0]};
}
@ -495,7 +497,7 @@ export default {
if (data && data.code === 0){
this.$message.success(data.msg)
this.visible = false;
// this.currentRow = {};
this.currentRow = {};
this.saveOrEditIndex = undefined
this.searchCodeItemDefs()
}else {
@ -730,7 +732,7 @@ export default {
:min-width="item.columnWidth"
:label="item.columnLabel">
</el-table-column>
<el-table-column label="操作" align="center" header-align="center" width="150">
<el-table-column label="操作" align="center" fixed="left" header-align="center" width="150">
<template slot-scope="{row,$index}">
<el-link style="cursor:pointer;" @click="clickEdit(row)">编辑</el-link>
<el-link style="cursor:pointer;" @click="clickCopy(row)">复制</el-link>
@ -745,7 +747,7 @@ export default {
</el-dialog>
<!--新增/修改弹框-->
<el-dialog :visible.sync="visible" @close="closeDialog" width="500px" v-drag title="新增编码组成元素">
<el-dialog :visible.sync="visible" @close="closeDialog" width="500px" v-drag :title="`${saveCodeItemDef.itemNo? '修改编码组成元素' : '新增编码组成元素'}`">
<el-form :model="saveCodeItemDef" :rules="rules" ref="saveCodeItemDefForm" label-position="top">
<el-row :gutter="10">
<el-col :span="16">
@ -815,12 +817,12 @@ export default {
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8" v-if="false">
<el-form-item label="值顺序号" prop="valueSeqNo" :show-message="false">
<el-input-number v-model="saveCodeItemDef.valueSeqNo" :min="1" style="line-height: 1.5;width: 100%;" :controls="false"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="8" v-if="false">
<el-form-item label="固定值" :show-message="false">
<el-input v-model="saveCodeItemDef.fixedValueFlag"></el-input>
</el-form-item>

14
src/views/modules/code/item/itemValue.vue

@ -132,11 +132,7 @@ export default {
}).catch(() => {})
},
getItemValueList(){
let params = {
itemNo: this.itemValue.itemNo,
site:this.$store.state.user.site
}
searchCodeItemValueList(params).then(({data})=>{
searchCodeItemValueList(this.itemValue).then(({data})=>{
if (data && data.code === 0){
this.itemValueList = data.rows1
this.conditionHeaders = data.rows2
@ -432,6 +428,12 @@ export default {
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
if (this.conditionDetails.length === 0 && this.itemValueList.length !== 0){
this.$alert(`"${this.conditionDetails[this.selectionDetailIndex].SQLStatementExecuteCalculate === 1 ? '并且' : '或者' }(${this.conditionDetails[this.selectionDetailIndex].itemDesc}=${this.conditionDetails[this.selectionDetailIndex].itemValue})"为当前条件的最后一条判断语句而且该条件下已经维护了可选值,请先删除可选值!`, '提示', {
confirmButtonText: '确定',
});
return
}
removeConditionDetailList(this.conditionDetails[this.selectionDetailIndex]).then(({data})=>{
if (data && data.code === 0){
this.$message.success(data.msg)
@ -548,7 +550,7 @@ export default {
</div>
<div style="height: 200px;overflow-y: auto;">
<div v-for="(o, index) in conditionDetails" :key="o.seqNo" @click="selectionDetailIndex = index" :style="{backgroundColor: selectionDetailIndex === index? '#E8F7F6' : '#FFF'}" style="padding: 5px 0;cursor:pointer;border-bottom: 1px solid #ebeef5;color: #606266">
{{ `${o.SQLStatementExecuteCalculate === 1 ? '并且' : '或者' }(${o.itemDesc}=${o.itemValue})` }}
{{ `${o.SQLStatementExecuteCalculate === '1' ? '并且' : '或者' }(${o.itemDesc}=${o.itemValue})` }}
</div>
</div>
</el-card>

37
src/views/modules/code/list.vue

@ -107,47 +107,47 @@ export default {
<el-button type="primary" @click="searchDrawingList">搜索</el-button>
</el-form-item>
</el-form>
<el-table :data="drawingList" height="400px" border style="width: 100%">
<el-table-column prop="drawingNo" header-align="center" align="left" label="编码"></el-table-column>
<el-table :data="drawingList" height="750" border style="width: 100%">
<el-table-column prop="drawingNo" header-align="center" width="140" align="left" label="编码"></el-table-column>
<el-table-column prop="drawingDesc" header-align="center" align="left" label="编码描述"></el-table-column>
<el-table-column prop="creator" header-align="center" align="left" label="创建人"></el-table-column>
<el-table-column prop="createDate" header-align="center" align="left" label="创建时间"></el-table-column>
<el-table-column prop="creator" header-align="center" width="100" align="left" label="创建人"></el-table-column>
<el-table-column prop="createDate" header-align="center" width="130" align="center" label="创建时间"></el-table-column>
<el-table-column prop="remark" header-align="center" align="left" label="备注"></el-table-column>
<el-table-column header-align="center" align="center" label="操作">
<el-table-column header-align="center" width="140" align="center" label="操作">
<template slot-scope="{row}">
<el-button type="text" @click="handleEdit(row)">编辑</el-button>
<el-button type="text" @click="handleDelete(row)">删除</el-button>
<el-link style="cursor:pointer;" type="text" @click="handleEdit(row)">编辑</el-link>
<el-link style="cursor:pointer;" type="text" @click="handleDelete(row)">删除</el-link>
</template>
</el-table-column>
</el-table>
<el-dialog title="编辑编码" :visible.sync="saveDialogVisible">
<fieldset
style="height:80px;margin-top: 2px;border-color: rgb(255,255,255);">
style="margin-top: 2px;border-color: rgb(255,255,255);">
<legend>更改前信息</legend>
<el-form :model="drawing" ref="drawingForm">
<el-form label-position="top" :model="drawing" ref="drawingForm">
<el-form-item label="编码:">
<el-input readonly v-model="drawing.drawingNo" style="width: 200px"></el-input>
</el-form-item>
<el-form-item label="编码描述:">
<el-input readonly v-model="drawing.drawingDesc" style="width: 200px"></el-input>
<el-input readonly v-model="drawing.drawingDesc" ></el-input>
</el-form-item>
<el-form-item label="备注:">
<el-input readonly v-model="drawing.drawingNo" style="width: 200px"></el-input>
<el-input readonly v-model="drawing.remark" ></el-input>
</el-form-item>
</el-form>
</fieldset>
<fieldset
style="height:80px;margin-top: 2px;border-color: rgb(255,255,255);">
style="margin-top: 2px;border-color: rgb(255,255,255);">
<legend>更改后信息</legend>
<el-form :model="drawing" ref="drawingForm">
<el-form label-position="top" :model="drawing" ref="drawingForm">
<el-form-item label="编码:">
<el-input v-model="drawing.drawingNoNew" style="width: 200px"></el-input>
<el-input v-model="drawing.drawingNo" style="width: 200px"></el-input>
</el-form-item>
<el-form-item label="编码描述:">
<el-input readonly v-model="drawing.drawingDesc" style="width: 200px"></el-input>
<el-input readonly v-model="drawing.drawingDesc"></el-input>
</el-form-item>
<el-form-item label="备注:">
<el-input readonly v-model="drawing.drawingNo" style="width: 200px"></el-input>
<el-input readonly v-model="drawing.remark"></el-input>
</el-form-item>
</el-form>
</fieldset>
@ -160,5 +160,8 @@ export default {
</template>
<style scoped>
.el-table /deep/ .cell{
height: auto;
line-height: 1.5;
}
</style>

100
src/views/modules/quotation/pirceCheckDetail/priceCheckDetailForm.vue

@ -0,0 +1,100 @@
<template>
<div>
<el-dialog v-bind="$attrs" v-on="$listeners" @open="onOpen" @close="onClose" title="Dialog Titile">
<el-form ref="priceCheckDetailForm" :model="priceCheck" :rules="priceCheckRule" size="mini" label-width="100px" label-position="top">
<el-row gutter="10">
<el-col :span="12">
<el-form-item label="多行文本" prop="field105">
<el-input v-model="priceCheck.field105" type="textarea" placeholder="请输入多行文本"
:autosize="{minRows: 4, maxRows: 4}" :style="{width: '100%'}"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="多行文本" prop="field116">
<el-input v-model="priceCheck.field116" type="textarea" placeholder="请输入多行文本"
:autosize="{minRows: 4, maxRows: 4}" :style="{width: '100%'}"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="多行文本" prop="field120">
<el-input v-model="priceCheck.field120" type="textarea" placeholder="请输入多行文本"
:autosize="{minRows: 4, maxRows: 4}" :style="{width: '100%'}"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="多行文本" prop="field121">
<el-input v-model="priceCheck.field121" type="textarea" placeholder="请输入多行文本"
:autosize="{minRows: 4, maxRows: 4}" :style="{width: '100%'}"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="handelConfirm">确定</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: 'priceCheckDetailForm',
inheritAttrs: false,
components: {},
props: [],
data() {
return {
priceCheck: {
field105: undefined,
field116: undefined,
field120: undefined,
field121: undefined,
},
priceCheckRule: {
field105: [{
required: true,
message: '请输入多行文本',
trigger: 'blur'
}],
field116: [{
required: true,
message: '请输入多行文本',
trigger: 'blur'
}],
field120: [{
required: true,
message: '请输入多行文本',
trigger: 'blur'
}],
field121: [{
required: true,
message: '请输入多行文本',
trigger: 'blur'
}],
},
}
},
computed: {},
watch: {},
created() {},
mounted() {},
methods: {
onOpen() {},
onClose() {
this.$refs['priceCheckDetailForm'].resetFields()
},
close() {
this.$emit('update:visible', false)
},
handelConfirm() {
this.$refs['priceCheckDetailForm'].validate(valid => {
if (!valid) return
this.close()
})
},
}
}
</script>
<style>
</style>

34
src/views/modules/quotation/priceCheckDetail.vue

@ -0,0 +1,34 @@
<script>
export default {
name: "priceCheckDetail",
props:{
data: {
type: Object,
required: true
}
},
data(){
return{
}
},
created() {
},
}
</script>
<template>
<div>
<div>
<el-button type="primary">新增</el-button>
<el-button type="primary">删除</el-button>
</div>
</div>
</template>
<style scoped>
</style>
Loading…
Cancel
Save