312 lines
11 KiB
Vue
312 lines
11 KiB
Vue
<!--生成企标编号组件-->
|
||
<template>
|
||
<div>
|
||
<el-drawer
|
||
:visible.sync="visibleShow"
|
||
:title="title"
|
||
@close="close"
|
||
size="500px"
|
||
>
|
||
<div class="demo-drawer-content">
|
||
<el-form
|
||
ref="generationNumberForm"
|
||
:model="generationNumberForm"
|
||
:rules="generationNumberFormRules"
|
||
class="label-input-form"
|
||
label-width="150px"
|
||
>
|
||
<el-form-item label="标准代号" prop="standCode" class="add-form-item form-item-disabled">
|
||
<el-input
|
||
v-model="generationNumberForm.standCode"
|
||
placeholder="请输入标准代号"
|
||
disabled
|
||
></el-input>
|
||
</el-form-item>
|
||
<el-form-item label="标准属性" prop="standAttribute" class="add-form-item">
|
||
<el-select
|
||
filterable
|
||
v-model="generationNumberForm.standAttribute"
|
||
placeholder="请选择标准属性"
|
||
@change="standAttributeChange"
|
||
>
|
||
<el-option
|
||
v-for="(item, index) in standAttributeOption"
|
||
:label="item.qbCname"
|
||
:value="item.qbCode"
|
||
:key="item.qbCode + '-' + index"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
<el-form-item label="分类号" prop="classificationNumber" class="add-form-item">
|
||
<el-input
|
||
v-model="generationNumberForm.classificationNumber"
|
||
placeholder="请选择分类号"
|
||
clearable
|
||
readonly
|
||
@click.native="classClick"
|
||
></el-input>
|
||
</el-form-item>
|
||
<el-form-item label="顺序号" prop="sequenceNumber" class="add-form-item form-item-disabled">
|
||
<el-input
|
||
v-model="generationNumberForm.sequenceNumber"
|
||
placeholder="请选择顺序号"
|
||
disabled
|
||
></el-input>
|
||
</el-form-item>
|
||
<el-form-item label="年份" prop="year" class="add-form-item form-item-disabled">
|
||
<el-datePicker
|
||
v-model="generationNumberForm.year"
|
||
:editable="false"
|
||
type="year"
|
||
disabled
|
||
placeholder="选择年份">
|
||
</el-datePicker>
|
||
</el-form-item>
|
||
<el-form-item label="版本号" prop="versionNumber" class="add-form-item form-item-disabled">
|
||
<el-input
|
||
v-model="generationNumberForm.versionNumber"
|
||
placeholder="请输入版本号"
|
||
disabled
|
||
></el-input>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
<div class="demo-drawer-footer">
|
||
<el-button class="common-button-primary" icon="el-icon-check" type="primary" @click="isOk" :loading="submitLoading">确定</el-button>
|
||
<el-button class="common-button-default" icon="el-icon-close" @click="visibleShow = false">取消</el-button>
|
||
</div>
|
||
</el-drawer>
|
||
<!--分类号抽屉-->
|
||
<el-drawer
|
||
:visible.sync="isClassDrawer"
|
||
title="分类号选择"
|
||
size="350px">
|
||
<laws-tree
|
||
:zNodes="zNodes"
|
||
deptSelect
|
||
:loading="loading"
|
||
treeDivId="depTreeInland"
|
||
@treeDblClick="(treeId, treeNode) => treeDbClick(treeId, treeNode)"
|
||
:editable="false"
|
||
ref="depTreeInland"
|
||
class="ztree" style="overflow: auto"
|
||
>
|
||
</laws-tree>
|
||
</el-drawer>
|
||
</div>
|
||
</template>
|
||
<script>
|
||
export default {
|
||
props: {
|
||
// 显示状态
|
||
isShow: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
title: {
|
||
type: String,
|
||
default: '选择企标'
|
||
}
|
||
},
|
||
data () {
|
||
return {
|
||
visibleShow: false,
|
||
// 生成编号form字段
|
||
generationNumberForm: {
|
||
standCode: 'SMTC', // 标准代号
|
||
standAttribute: '', // 标准属性
|
||
classificationNumber: '', // 分类号
|
||
classificationNumberId: '', // 分类号ID
|
||
sequenceNumber: '', // 顺序号
|
||
year: this.$moment(new Date()).format('YYYY'), // 年份
|
||
versionNumber: 'V1' // 版本号
|
||
},
|
||
// 生成编号form验证
|
||
generationNumberFormRules: {
|
||
standCode: [
|
||
{required: true, message: '标准代号不能为空', trigger: 'change'}
|
||
],
|
||
standAttribute: [
|
||
{required: true, message: '标准属性不能为空', trigger: 'change'}
|
||
],
|
||
classificationNumber: [
|
||
{required: true, message: '分类号不能为空', trigger: 'change'}
|
||
],
|
||
// sequenceNumber: [
|
||
// {required: true, message: '顺序号不能为空', trigger: 'change'}
|
||
// ],
|
||
year: [
|
||
{required: true, message: '年份不能为空', trigger: 'change'}
|
||
],
|
||
versionNumber: [
|
||
{required: true, message: '版本号不能为空', trigger: 'change'}
|
||
]
|
||
},
|
||
zNodes: [], // 分类号
|
||
// 标准属性字段数据
|
||
standAttributeOption: [],
|
||
isClassDrawer: false, // 分类号抽屉
|
||
flag: '', // 1是自定义,2是SVPPS
|
||
loading: false,
|
||
submitLoading: false
|
||
}
|
||
},
|
||
methods: {
|
||
// 关闭抽屉
|
||
close () {
|
||
this.visibleShow = false
|
||
},
|
||
// 抽屉确定事件
|
||
isOk () {
|
||
this.submitLoading = true
|
||
this.$refs['generationNumberForm'].validate((valid) => {
|
||
if (valid) {
|
||
this.getSeqNum().then(() => {
|
||
let generationNumberForm = this.generationNumberForm
|
||
// 拼接企标编号
|
||
let verNum = generationNumberForm.versionNumber.replace(/[^0-9]/ig,"");
|
||
let verEn= generationNumberForm.versionNumber.replace(/[^A-Z]+/ig,"");
|
||
// 此处因企标编号中带有空格所以此处不再补充添加空格,如果企标编码中没有空格则补充空格 但是产品标准除外
|
||
let judgeFn = new RegExp(/\s+/g);
|
||
let standCode = ''
|
||
if(judgeFn.test(generationNumberForm.standSort)){
|
||
standCode = generationNumberForm.standCode + ' ' + generationNumberForm.standAttribute + ' ' +
|
||
generationNumberForm.classificationNumber + ' ' + generationNumberForm.sequenceNumber + '-' +
|
||
this.$moment(generationNumberForm.year).format('YYYY') + '(' + generationNumberForm.versionNumber + ')'
|
||
}else if(generationNumberForm.standSort === 'Q/QCBFC'){
|
||
standCode = generationNumberForm.standCode + '' + generationNumberForm.standAttribute + ' ' +
|
||
generationNumberForm.classificationNumber + ' ' + generationNumberForm.sequenceNumber + '-' +
|
||
this.$moment(generationNumberForm.year).format('YYYY') + '(' + generationNumberForm.versionNumber + ')'
|
||
}else {
|
||
standCode = generationNumberForm.standCode + ' ' + generationNumberForm.standAttribute + ' ' +
|
||
generationNumberForm.classificationNumber + ' ' + generationNumberForm.sequenceNumber + '-' +
|
||
this.$moment(generationNumberForm.year).format('YYYY') + '(' + generationNumberForm.versionNumber + ')'
|
||
}
|
||
this.$emit('isOk', standCode, {
|
||
standCode: standCode,
|
||
qbCode: this.generationNumberForm.standAttribute, // 标准属性
|
||
classCode: this.generationNumberForm.classificationNumberId // 分类号
|
||
})
|
||
this.visibleShow = false
|
||
this.submitLoading = false
|
||
})
|
||
} else {
|
||
this.submitLoading = false
|
||
this.$message.warning('请检查表单是否填写正确')
|
||
}
|
||
})
|
||
},
|
||
// 选择分类号事件
|
||
treeDbClick (treeId, treeNode) {
|
||
if (this.flag === 1) {
|
||
this.generationNumberForm.classificationNumber = treeNode.number.length > 2 ? treeNode.number :
|
||
treeNode.number.length === 2 ? treeNode.number + '0' : treeNode.number + '00'
|
||
this.generationNumberForm.classificationNumberId = treeNode.id
|
||
} else {
|
||
this.generationNumberForm.classificationNumber = treeNode.svppsCode.length > 2 ? treeNode.svppsCode :
|
||
treeNode.svppsCode.length === 2 ? treeNode.svppsCode + '0' : treeNode.svppsCode + '00'
|
||
this.generationNumberForm.classificationNumberId = treeNode.id
|
||
}
|
||
this.isClassDrawer = false
|
||
},
|
||
// 根据标准属性和分类号获取顺序号
|
||
getSeqNum () {
|
||
return new Promise((resolve, reject) => {
|
||
this.$http.get('lawss/sarBussRecordsCode/createSeqNum', {
|
||
qbcode: this.generationNumberForm.standAttribute, // 标准属性
|
||
classCode: this.generationNumberForm.classificationNumberId // 分类号
|
||
}, {
|
||
_this: this
|
||
}, res => {
|
||
if (res.ok) {
|
||
this.generationNumberForm.sequenceNumber = res.data
|
||
resolve()
|
||
} else {
|
||
this.$message.warning(res.message)
|
||
}
|
||
})
|
||
})
|
||
},
|
||
// 标准属性change事件,查询分类号
|
||
standAttributeChange (val) {
|
||
this.loading = true
|
||
this.zNodes = []
|
||
this.generationNumberForm.classificationNumber = ''
|
||
this.$http.post('lawss/sarBussRecordsCode/queryByStandAttribute', {
|
||
code: val
|
||
}, {
|
||
_this: this
|
||
}, res => {
|
||
if (res.ok) {
|
||
let treeNode = []
|
||
// 1是自定义,2是SVPPS
|
||
this.flag = res.data.flag
|
||
if (res.data.flag === 1) {
|
||
res.data.rowList.map((item, index) => {
|
||
let treeItem = {
|
||
name: item.number + ' ' + item.name,
|
||
pId: item.pid,
|
||
id: item.id,
|
||
number: item.number,
|
||
rootNum: item.rootNum,
|
||
rank: item.rank
|
||
}
|
||
treeNode[index] = treeItem
|
||
})
|
||
} else {
|
||
res.data.rowList.map((item, index) => {
|
||
let treeItem = {
|
||
name: item.svppsCode + ' ' + item.svppsCnName + ' ' + item.svppsEnName,
|
||
pId: item.pid,
|
||
id: item.id,
|
||
svppsCode: item.svppsCode,
|
||
snum: item.snum,
|
||
fnum: item.fnum,
|
||
tnum: item.tnum
|
||
}
|
||
treeNode[index] = treeItem
|
||
})
|
||
}
|
||
this.zNodes = treeNode
|
||
} else {
|
||
this.$message.warning(res.message)
|
||
}
|
||
this.loading = false
|
||
})
|
||
},
|
||
// 分类号抽屉展示
|
||
classClick () {
|
||
if (this.generationNumberForm.standAttribute) {
|
||
this.isClassDrawer = true
|
||
} else {
|
||
this.$message.warning('请先选择标准属性')
|
||
}
|
||
},
|
||
// 查询标准属性数据
|
||
getQueryAll () {
|
||
this.$http.get('lawss/sarBussRecordsCode/queryAll', {}, {}, res => {
|
||
if (res.ok) {
|
||
this.standAttributeOption = res.data
|
||
} else {
|
||
this.$message.warning(res.message)
|
||
}
|
||
})
|
||
}
|
||
},
|
||
watch: {
|
||
isShow (val) {
|
||
this.$nextTick(() => {
|
||
this.$refs.generationNumberForm.resetFields()
|
||
})
|
||
this.visibleShow = val
|
||
},
|
||
visibleShow (val) {
|
||
this.$emit('update:isShow', val)
|
||
}
|
||
},
|
||
mounted () {
|
||
this.getQueryAll()
|
||
}
|
||
}
|
||
</script>
|