Files
foton-laws-system-front/src/components/generationNumber/index.vue
T
2022-10-12 12:12:49 +08:00

312 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!--生成企标编号组件-->
<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>