You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

341 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div>
<xy-dialog ref="dialog" :width="60" :is-show.sync="isShow" :type="'form'" :title="type === 'add' ? '新增业务类型' : '编辑业务类型'"
:form="form" :rules='rules' @submit="submit">
<template v-slot:name>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>业务名称
</div>
<div class="xy-table-item-content">
<el-input v-model="form.name" placeholder="请输入业务名称" clearable style="width: 100%;"></el-input>
</div>
</div>
</template>
<template v-slot:area_ids>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;">*</span>填报区域:
</div>
<div class="xy-table-item-content">
<el-select style="width:100%" v-model="form.area_ids" multiple collapse-tags
placeholder="请选择">
<el-option v-for="item in list_areas" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:id_business_types_business_id_relation>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>业务类别:
</div>
<div class="xy-table-item-content">
<el-button type="primary" style="margin-bottom:10px" size="small" @click="addRow">新增</el-button>
<xy-table style="width:850px" :list="form.id_business_types_business_id_relation" :isPage="false" :height="350"
:table-item="business_types_item">
<template v-slot:name>
<el-table-column align='left' label="类别名称" width="340">
<template slot-scope="scope">
<el-input placeholder="请输入类别名称" style="width:100%" v-model="scope.row.name"></el-input>
</template>
</el-table-column>
</template>
<template v-slot:area_id>
<el-table-column align='left' label="所属区域" width="340">
<template slot-scope="scope">
<el-select style="width:100%"
v-model="scope.row.area_id" placeholder="请选择所属区域">
<el-option v-for="(item,index) in list_areas" :key="index" :label="item.name"
:value="item.id">
</el-option>
</el-select>
</template>
</el-table-column>
</template>
<template v-slot:btns>
<el-table-column align='center' label="操作" width="120" header-align="center">
<template slot-scope="scope">
<el-popconfirm style="margin:0 10px"
@confirm="delRow(scope.$index,scope.row.id)" title="确认删除该项业务类别?">
<el-button type="danger" size="small" slot="reference">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</div>
</template>
<template v-slot:id_business_datas_business_id_relation>
<div class="xy-table-item">
<div class="xy-table-item-label" style="font-weight: bold">
<span style="color: red;font-weight: bold;padding-right: 4px;"></span>业务填报数据:
</div>
<div class="xy-table-item-content">
<el-button type="primary" style="margin-bottom:10px" size="small" @click="addDataRow">新增</el-button>
<xy-table style="width:850px" :list="form.id_business_datas_business_id_relation" :isPage="false" :height="350"
:table-item="business_datas_item">
<template v-slot:name>
<el-table-column align='left' label="填报数据名称" width="680">
<template slot-scope="scope">
<el-input placeholder="请输入填报数据名称" style="width:100%" v-model="scope.row.name"></el-input>
</template>
</el-table-column>
</template>
<!-- <template v-slot:sort>
<el-table-column align='center' label="排序" width="100">
<template slot-scope="scope">
<el-input placeholder="请输入排序" style="width:100%" v-model="scope.row.sort"></el-input>
</template>
</el-table-column>
</template> -->
<template v-slot:btns>
<el-table-column align='center' label="操作" width="120" header-align="center">
<template slot-scope="scope">
<el-popconfirm style="margin:0 10px"
@confirm="delDataRow(scope.$index,scope.row.id)" title="确认删除该项业务填报数据?">
<el-button type="danger" size="small" slot="reference">删除</el-button>
</el-popconfirm>
</template>
</el-table-column>
</template>
</xy-table>
</div>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {
save,
show,
index,
destroy
} from "@/api/system/baseForm.js"
export default {
components: {
},
data() {
return {
isShow: false,
type: 'add',
id: '',
table_name: 'businesses',
list_areas: [],
// 业务类别子表
business_types_item:[{
type: 'index',
width: 50,
}, {
prop: 'name',
label: '类别名称',
align: 'left',
width: 620
}, {
prop: 'area_id',
label: '所属区域',
align: 'left',
width: 620
}],
// 业务填报数据 子表
business_datas_item:[{
type: 'index',
width: 50,
}, {
prop: 'name',
label: '数据名称',
align: 'left',
width: 630
}],
form: {
name: '',
area_ids: [],
id_business_types_business_id_relation:[],
id_business_datas_business_id_relation:[]
},
rules: {
name: [{
required: true,
message: '请输入业务名称'
}],
area_ids: [{
required: true,
message: '请选择填报区域'
}]
}
}
},
created() {
},
methods: {
async getAreaList() {
const res = await index({
page_size: 999,
page: 1,
table_name: 'areas',
sort_type:'ASC',
sort_name:'sort',
})
this.list_areas = res.data
},
addRow() {
this.form.id_business_types_business_id_relation.push({
name:'',
area_id:''
})
},
delRow(index,id) {
if(id){
destroy({
id: id,
table_name: 'business_types'
}).then(response => {
this.form.id_business_types_business_id_relation.splice(index, 1)
}).catch(error => {
console.log(error)
reject(error)
})
}else{
this.form.id_business_types_business_id_relation.splice(index, 1)
}
},
addDataRow() {
this.form.id_business_datas_business_id_relation.push({
name:'',
sort:0
})
},
delDataRow(index,id) {
if(id){
destroy({
id: id,
table_name: 'business_datas'
}).then(response => {
this.form.id_business_datas_business_id_relation.splice(index, 1)
}).catch(error => {
console.log(error)
reject(error)
})
}else{
this.form.id_business_datas_business_id_relation.splice(index, 1)
}
},
submit() {
if (this.id) {
this.form.id = this.id
}
if (this.type == 'add') {
this.form.id = ''
}
console.log("this.form", this.form)
// 判断 业务类型是否有 为空的数据
if (this.form.id_business_types_business_id_relation.length > 0) {
// 判断属性中是否为空
for (var p of this.form.id_business_types_business_id_relation) {
if (this.base.isNull(p.name)) {
this.$message({
type: 'warning',
message: `业务类别名称不能为空`
})
return
}
if (this.base.isNull(p.area_id)) {
this.$message({
type: 'warning',
message: `请选择业务类别所属区域`
})
return
}
}
}
// 判断 业务填报数据是否有 为空的数据
if (this.form.id_business_datas_business_id_relation.length > 0) {
// 判断属性中是否为空
for (var p of this.form.id_business_datas_business_id_relation) {
if (this.base.isNull(p.name)) {
this.$message({
type: 'warning',
message: `业务填报数据名称不能为空`
})
return
}
}
}
// return
save({
table_name: this.table_name,
...this.form
}).then(res => {
this.$message({
type: 'success',
message: this.type === 'add' ? '新增成功' : '编辑成功'
})
this.isShow = false
this.$emit('refresh')
})
},
getDetail() {
show({
id: this.id,
table_name: this.table_name,
}).then(res => {
this.form = this.base.requestToForm(res, this.form)
this.form.area_ids = res.area_ids ? res.area_ids : [],
this.form.id_business_types_business_id_relation = res.id_business_types_business_id_relation?res.id_business_types_business_id_relation:[]
if(res.id_business_datas_business_id_relation){
this.form.id_business_datas_business_id_relation = res.id_business_datas_business_id_relation.sort((a, b) => parseInt(a.sort) - parseInt(b.sort))
}
// this.form.id_business_datas_business_id_relation = res.id_business_datas_business_id_relation?res.id_business_datas_business_id_relation:[]
})
},
},
watch: {
isShow(newVal) {
this.getAreaList()
if (newVal) {
if (this.type === 'editor') {
this.getDetail()
}
} else {
this.id = ''
this.type = "add"
this.list_areas = []
this.form = {
name: '',
area_ids: [],
id_business_types_business_id_relation:[],
id_business_datas_business_id_relation:[]
}
this.$refs['dialog'].reset()
}
},
}
}
</script>
<style scoped lang="scss">
// ::v-deep .area_ids,
// ::v-deep .name{
// flex-basis: 100%;
// }
</style>