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

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="'数据填报'" :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">
<el-select style="width:100%" @change="changeArea" :disabled="(stateObj.is_admin)?false:true" v-model="form.area_id" 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: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">
<el-date-picker style="width:100%" @change="changeYear" format="yyyy" value-format="yyyy" v-model="form.year" type="year"
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>
<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>
<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: [],
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
}],
// 填报数据
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: '',
month: '',
year_datas:[],
id_fill_datas_fill_id_relation: []
},
rules: {
business_id: [{
required: true,
message: '请选择业务'
}],
area_id: [{
required: true,
message: '请选择区域'
}],
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 : []
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})
// 初始化 填报数据
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,
value: 0,
sort:item1.sort
})
}
})
})
console.log("_arr",_arr)
this.fill_datas = _arr.sort()
}
},
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})
},
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,
value: 0,
sort:item1.sort
})
}
})
})
this.fill_datas = _arr
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)
},
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 = ''
this.business_name = ''
this.list_areas = []
this.list_types = []
this.list_datas = []
this.year_datas = []
this.type = "add"
this.form = {
business_id: '',
area_id: '',
year: '',
month: '',
year_datas:[],
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>