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.

412 lines
14 KiB

1 year ago
<template>
<div>
<xy-dialog ref="dialog" :width="60" :is-show.sync="isShow" :type="'form'" :title="'数据填报'" :form="form"
:rules='rules' @submit="submit">
<template v-slot:business_id>
<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="business_name" disabled placeholder="请输入业务名称" style="width: 100%;"></el-input>
</div>
</div>
</template>
<template v-slot:area_id>
<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">
1 year ago
<el-select style="width:100%" @change="changeArea" :disabled="(stateObj.is_admin)?false:true" v-model="form.area_id" placeholder="请选择">
1 year ago
<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:year>
<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">
1 year ago
<el-date-picker style="width:100%" @change="changeYear" format="yyyy" value-format="yyyy" v-model="form.year" type="year"
1 year ago
placeholder="选择年">
</el-date-picker>
</div>
</div>
</template>
<template v-slot:month>
<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-date-picker style="width:100%" format="MM月" value-format="MM" v-model="form.month" type="month" placeholder="选择月">
</el-date-picker>
</div>
</div>
</template>
1 year ago
<template v-slot:year_datas v-if="form.year_datas.length>0">
<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">
<xy-table style="width:850px" :list="form.year_datas" :isPage="false" :height="150"
:table-item="year_datas_item">
<template v-slot:btns>
<div></div>
</template>
</xy-table>
</div>
</div>
</template>
1 year ago
<template v-slot:id_fill_datas_fill_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="fill_datas" :isPage="false" :height="550"
:table-item="fill_datas_item">
<template v-slot:business_type_id>
<el-table-column align='left' label="业务类别" width="320">
<template slot-scope="scope">
<template v-for="item in list_types">
<div v-if="item.id === scope.row.business_type_id">
{{item.name}}
</div>
</template>
</template>
</el-table-column>
</template>
<template v-slot:business_data_id>
<el-table-column align='left' label="业务数据" width="320">
<template slot-scope="scope">
<template v-for="item in list_datas">
<div v-if="item.id === scope.row.business_data_id">
{{item.name}}
</div>
</template>
</template>
</el-table-column>
</template>
<template v-slot:value>
<el-table-column align='left' label="数据值" width="160">
<template slot-scope="scope">
<el-input v-model="scope.row.value" style="width:100%"></el-input>
</template>
</el-table-column>
</template>
<template v-slot:btns>
<div></div>
</template>
</xy-table>
</div>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {
save,
show,
index,
destroy
} from "@/api/system/baseForm.js"
import state from '@/store/modules/user.js'
export default {
components: {
},
data() {
return {
isShow: false,
type: 'add',
id: '',
stateObj: {},
business_name: '', //业务名
business_id: '', // 业务id
area_id: '',
table_name: 'fills',
list_areas: [],
list_types: [],
list_datas: [],
1 year ago
year_datas:[],
year_datas_item:[{
prop: 'year',
label: '年份',
align: 'center',
width: 100
},{
prop: 'all_year',
label: '年度总预算',
align: 'center',
width: 150
},{
prop: 'quarter_1',
label: '第一季度预算',
align: 'center',
width: 150
},{
prop: 'quarter_2',
label: '第二季度预算',
align: 'center',
width: 150
},{
prop: 'quarter_3',
label: '第三季度预算',
align: 'center',
width: 150
},{
prop: 'quarter_4',
label: '第四季度预算',
align: 'center',
width: 150
}],
1 year ago
// 填报数据
fill_datas:[],
fill_datas_item: [{
type: 'index',
width: 50,
}, {
prop: 'business_type_id',
label: '填报类别',
align: 'left',
width: 620
}, {
prop: 'business_data_id',
label: '填报数据',
align: 'left',
width: 620
}, {
prop: 'value',
label: '填报值',
align: 'left',
width: 620
}],
form: {
business_id: '',
area_id: '',
year: '',
1 year ago
month: '',
year_datas:[],
1 year ago
id_fill_datas_fill_id_relation: []
},
1 year ago
rules: {
business_id: [{
required: true,
message: '请选择业务'
}],
area_id: [{
required: true,
message: '请选择区域'
}],
1 year ago
year: [{
required: true,
message: '请选择年份'
}],
month: [{
required: true,
message: '请选择月份'
}]
}
}
},
created() {
this.stateObj = state.state
},
methods: {
// 获取 业务类型数据
setBusinessId(id){
this.form.business_id = id
},
async getBusiness() {
const res = await show({
id: this.business_id,
table_name: 'businesses',
json_data_fields: ['area_ids'],
})
this.business_name = res.name
this.list_areas = res.area_ids_details ? res.area_ids_details : []
this.list_types = res.id_business_types_business_id_relation ? res.id_business_types_business_id_relation : []
1 year ago
if(res.id_business_datas_business_id_relation){
this.list_datas = res.id_business_datas_business_id_relation.sort((a, b) => parseInt(a.sort) - parseInt(b.sort))
}
// this.list_datas = res.id_business_datas_business_id_relation ? res.id_business_datas_business_id_relation : []
// 区域年度预算
this.year_datas = res.id_budgets_business_id_relation
this.form.year_datas = res.id_budgets_business_id_relation.filter(item=>{return item.area_id===this.form.area_id && item.year==this.form.year})
1 year ago
// 初始化 填报数据
if(this.type==='add'){
this.form.area_id = this.stateObj.area_id ? this.stateObj.area_id : ''
let _arr = []
this.list_types.map(item=>{
this.list_datas.map(item1=>{
if(item.area_id===this.stateObj.area_id){
_arr.push({
business_id: this.business_id,
year: this.$moment(new Date()).format("YYYY"),
month: this.$moment(new Date()).format("MM"),
area_id: this.area_id,
business_type_id: item.id,
business_data_id: item1.id,
1 year ago
value: 0,
sort:item1.sort
1 year ago
})
}
})
})
console.log("_arr",_arr)
1 year ago
this.fill_datas = _arr.sort()
1 year ago
}
},
1 year ago
changeYear(e){
// 区域年度预算
console.log(e,this.year_datas)
this.form.year_datas = this.year_datas.filter(item=>{return item.area_id===this.form.area_id && item.year==e})
},
1 year ago
changeArea(e){
this.form.area_id = e ? e : ''
let _arr = []
this.list_types.map(item=>{
this.list_datas.map(item1=>{
if(item.area_id===e){
_arr.push({
business_id: this.business_id,
year: this.$moment(new Date()).format("YYYY"),
month: this.$moment(new Date()).format("MM"),
area_id: e,
business_type_id: item.id,
business_data_id: item1.id,
1 year ago
value: 0,
sort:item1.sort
1 year ago
})
}
})
})
this.fill_datas = _arr
1 year ago
this.form.year_datas = this.year_datas.filter(item=>{return item.area_id === e && item.year===this.form.year})
console.log("this.form.year_datas",e,this.year_datas,this.form.year_datas)
1 year ago
},
submit() {
if (this.id) {
this.form.id = this.id
}
if (this.type == 'add') {
this.form.id = ''
}
this.fill_datas.map(item=>{
item.year = this.form.year
item.month = this.form.month
item.area_id = this.form.area_id
})
this.form.id_fill_datas_fill_id_relation = this.fill_datas
console.log("this.form", this.form)
// return
// // 判断 填报数据是否有 为空的数据
// if (this.form.id_fill_datas_fill_id_relation.length > 0) {
// // 判断属性中是否为空
// for (var p of this.form.id_fill_datas_fill_id_relation) {
// if (this.base.isNull(p.business_type_id)) {
// this.$message({
// type: 'warning',
// message: `业务类别不能为空`
// })
// return
// }
// if (this.base.isNull(p.business_data_id)) {
// 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.business_id = res.business_id
this.form.area_id = res.area_id ? res.area_id : [],
this.form.id_fill_datas_fill_id_relation = res.id_fill_datas_fill_id_relation ? res
.id_fill_datas_fill_id_relation : []
this.fill_datas = this.form.id_fill_datas_fill_id_relation
})
},
},
watch: {
isShow(newVal) {
if (newVal) {
this.getBusiness()
if (this.type === 'editor') {
this.getDetail()
}else{
this.form.year = this.$moment(new Date).format("YYYY")
this.form.month = this.$moment(new Date).format("MM")
}
} else {
this.id = ''
this.business_id = ''
1 year ago
this.business_name = ''
this.list_areas = []
this.list_types = []
this.list_datas = []
this.year_datas = []
1 year ago
this.type = "add"
this.form = {
business_id: '',
area_id: '',
year: '',
1 year ago
month: '',
year_datas:[],
1 year ago
id_fill_datas_fill_id_relation: []
}
this.$refs['dialog'].reset()
}
},
}
}
</script>
<style scoped lang="scss">
// ::v-deep .area_ids,
// ::v-deep .name{
// flex-basis: 100%;
// }
</style>