|
|
@@ -2,14 +2,14 @@
|
|
|
<div class='flex flex-justify-start flex-align-center flex-col'>
|
|
|
<div class='flex flex-center full-width flex-justify-between mt-10 mb-10'>
|
|
|
<span class='full-width text-left bold'>{{ info.dictValue }}</span>
|
|
|
- <el-button v-if='detail.can_update' type='primary' @click='disabled = !disabled'>
|
|
|
+ <el-button v-if='detail.can_update' type='primary' @click='update'>
|
|
|
{{ disabled ? '编 辑' : '保 存' }}
|
|
|
</el-button>
|
|
|
</div>
|
|
|
<div class="mt-10 mb-10 full-width" style="width: 93%;">
|
|
|
- <base-button title="新增年度" icon="Plus"/>
|
|
|
+ <base-button title="新增年度" icon="Plus" @click='addYear(1)'/>
|
|
|
</div>
|
|
|
- <div class='mt-10' style='width: 80%;'>
|
|
|
+ <div class='mt-10' style='width: 90%;'>
|
|
|
<el-form
|
|
|
:model="form"
|
|
|
label-width='180px'
|
|
|
@@ -17,71 +17,62 @@
|
|
|
label-position="left"
|
|
|
class='form-content flex flex-col'
|
|
|
>
|
|
|
- <div class='grid'>
|
|
|
- <el-form-item v-for='item in list1' :key='item' :label="item.name" style='flex:1'>
|
|
|
- <el-input v-model="form.name">
|
|
|
- <template #append>
|
|
|
- <div class='btnSub white font-12 flex flex-center pointer' @click='inputMonth'>
|
|
|
- <el-icon :size="14">
|
|
|
- <Edit/>
|
|
|
- </el-icon>
|
|
|
- 月填报
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-input>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
+ <el-form-item v-for='item in list1' :key='item' label-width='0'>
|
|
|
+ <div class='flex flex-col flex-center full-width'>
|
|
|
+ <div class='flex flex-center flex-justify-between full-width'>
|
|
|
+ <div class='flex-child-average full-width flex flex-center'>
|
|
|
+ <span style='width: 300px'>{{ item.year }}年度计划投资(万元)</span>
|
|
|
+ <el-input v-model='item.value' @change='change(item)'></el-input>
|
|
|
+ </div>
|
|
|
+ <div style='width: 20px'></div>
|
|
|
+ <div class='flex-child-average full-width flex flex-center'>
|
|
|
+ <span style='width: 380px'>{{ item.year }}年度累计投资(万元)</span>
|
|
|
+ <div class='disable-input' @change='change(item)'>{{ item.value2 }}</div>
|
|
|
+ <div class='btnSub pointer' @click='showMonth(item)'>月填报</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
<div class="mt-20 mb-10 full-width" style="width: 93%;">
|
|
|
- <base-button title="新增年度" icon="Plus"/>
|
|
|
+ <base-button title="新增年度" icon="Plus" @click='addYear(2)'/>
|
|
|
</div>
|
|
|
- <div class='mt-10' style='width: 80%;'>
|
|
|
+ <div class='mt-10' style='width: 90%;'>
|
|
|
<el-form
|
|
|
:model="form"
|
|
|
- label-width='240px'
|
|
|
- :disabled='true'
|
|
|
+ label-width='180px'
|
|
|
+ :disabled='disabled'
|
|
|
label-position="left"
|
|
|
class='form-content flex flex-col'
|
|
|
>
|
|
|
- <div class='flex flex-justify-start '>
|
|
|
- <el-form-item label="2023年计划纳统投资(万元)" style='flex:1'>
|
|
|
- <el-input v-model="form.name"/>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="2023年累计纳统投资(万元)" style='flex:1' class='ml-20'>
|
|
|
- <el-input v-model="form.region"/>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
- <div class='full-width flex'>
|
|
|
- <el-form-item label="2022年计划纳统投资(万元)" style='flex:1'>
|
|
|
- <el-input v-model="form.name"/>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="2022年累计纳统投资(万元)" style='flex:1' class='ml-20'>
|
|
|
- <el-input v-model="form.region"/>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
- <div class='full-width flex'>
|
|
|
- <el-form-item label="2021年计划纳统投资(万元)" style='flex:1'>
|
|
|
- <el-input v-model="form.name"/>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="2021年累计纳统投资(万元)" style='flex:1' class='ml-20'>
|
|
|
- <el-input v-model="form.region"/>
|
|
|
- </el-form-item>
|
|
|
- </div>
|
|
|
+ <el-form-item v-for='item in list2' :key='item' label-width='0'>
|
|
|
+ <div class='flex flex-col flex-center full-width'>
|
|
|
+ <div class='flex flex-center flex-justify-between full-width'>
|
|
|
+ <div class='flex-child-average full-width flex flex-center'>
|
|
|
+ <span style='width: 400px'>{{ item.year }}年度计划纳统投资(万元)</span>
|
|
|
+ <el-input v-model='item.value' @change='change(item)'></el-input>
|
|
|
+ </div>
|
|
|
+ <div style='width: 20px'></div>
|
|
|
+ <div class='flex-child-average full-width flex flex-center'>
|
|
|
+ <span style='width: 440px'>{{ item.year }}年度累计纳统投资(万元)</span>
|
|
|
+ <div class='disable-input' @change='change(item)'>{{ item.value2 }}</div>
|
|
|
+ <div class='btnSub pointer' @click='showMonth(item)'>月填报</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
</el-form>
|
|
|
</div>
|
|
|
|
|
|
- <el-dialog v-model='show' title='2023年度'>
|
|
|
+ <el-dialog v-model='show' :title='current ? current.year + "年度" : ""'>
|
|
|
<div class='flex flex-center flex-wrap'>
|
|
|
- <div v-for='item in data1' :key='item'>
|
|
|
- <div class='bold'>{{ item.name }}</div>
|
|
|
- <input class='input flex flex-center' v-model="item.num" :min="1"/>
|
|
|
+ <div v-for='item in current.months' :key='item'>
|
|
|
+ <div class='bold mb-10 mt-10'>{{ item.name }}月</div>
|
|
|
+ <input class='input flex flex-center' v-model="item.value" :min="1" @change='changeMonth(item)'/>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class='mt-20 full-width flex flex-center'>
|
|
|
- <el-button type='primary' plain>取 消</el-button>
|
|
|
- <el-button type='primary'>保 存</el-button>
|
|
|
- </div>
|
|
|
+ <div class='mt-20 full-width flex text-left red'>* 请按月份进行填报,单位:万元</div>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
@@ -102,39 +93,154 @@ export default {
|
|
|
default: null
|
|
|
}
|
|
|
},
|
|
|
+ watch: {
|
|
|
+ detail: {
|
|
|
+ handler (val) {
|
|
|
+ if (val) {
|
|
|
+ this.form = this.detail
|
|
|
+ this.init(val)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ immediate: true
|
|
|
+ }
|
|
|
+ },
|
|
|
data () {
|
|
|
return {
|
|
|
show: false,
|
|
|
disabled: true,
|
|
|
- list1: [
|
|
|
- { name: '2023年计划投资(万元)', value: 300330 },
|
|
|
- { name: '2022年计划投资(万元)', value: 300330 },
|
|
|
- { name: '2021年计划投资(万元)', value: 300330 }
|
|
|
- ],
|
|
|
- data1: [
|
|
|
- { name: '1月', num: 0 },
|
|
|
- { name: '2月', num: 0 },
|
|
|
- { name: '3月', num: 0 },
|
|
|
- { name: '4月', num: 0 },
|
|
|
- { name: '5月', num: 0 },
|
|
|
- { name: '6月', num: 0 },
|
|
|
- { name: '7月', num: 0 },
|
|
|
- { name: '8月', num: 0 },
|
|
|
- { name: '9月', num: 0 },
|
|
|
- { name: '10月', num: 0 },
|
|
|
- { name: '11月', num: 0 },
|
|
|
- { name: '12月', num: 0 }
|
|
|
- ],
|
|
|
- form: {
|
|
|
- name: '',
|
|
|
- region: '',
|
|
|
- type: ''
|
|
|
- }
|
|
|
+ list1: [],
|
|
|
+ list2: [],
|
|
|
+ form: {},
|
|
|
+ current: null
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
- inputMonth () {
|
|
|
+ addYear (type) {
|
|
|
+ this.disabled = false
|
|
|
+ if (type === 1) {
|
|
|
+ let lastYear = new Date().getFullYear()
|
|
|
+ if (this.list1.length > 0) {
|
|
|
+ const tmp = this.list1.map(sub => sub.year)
|
|
|
+ const max = Math.max.apply(null, tmp)
|
|
|
+ lastYear = max + 1
|
|
|
+ }
|
|
|
+ const months = []
|
|
|
+ for (let i = 1; i <= 12; i++) {
|
|
|
+ months.push({ name: i, value: '' })
|
|
|
+ }
|
|
|
+ const item = {
|
|
|
+ type: 1,
|
|
|
+ year: lastYear,
|
|
|
+ code: lastYear + '_plan_complete_amount',
|
|
|
+ code2: lastYear + '_total_complete_amount',
|
|
|
+ value: '',
|
|
|
+ value1: '',
|
|
|
+ months
|
|
|
+ }
|
|
|
+ this.list1.push(item)
|
|
|
+ }
|
|
|
+ if (type === 2) {
|
|
|
+ let lastYear = new Date().getFullYear()
|
|
|
+ if (this.list2.length > 0) {
|
|
|
+ const tmp = this.list2.map(sub => sub.year)
|
|
|
+ const max = Math.max.apply(null, tmp)
|
|
|
+ lastYear = max + 1
|
|
|
+ }
|
|
|
+ const months = []
|
|
|
+ for (let i = 1; i <= 12; i++) {
|
|
|
+ months.push({ name: i, value: '' })
|
|
|
+ }
|
|
|
+ const item = {
|
|
|
+ type: 2,
|
|
|
+ year: lastYear,
|
|
|
+ code: lastYear + '_plan_investment_amount',
|
|
|
+ code2: lastYear + '_total_investment_amount',
|
|
|
+ value: '',
|
|
|
+ value1: '',
|
|
|
+ months
|
|
|
+ }
|
|
|
+ this.list2.push(item)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ init () {
|
|
|
+ const keys = Object.keys(this.detail).filter(sub => sub.indexOf('_plan_complete_amount') > -1)
|
|
|
+ if (keys.length > 0) {
|
|
|
+ keys.forEach(sub => {
|
|
|
+ const tmp = Number.parseInt(sub.substring(0, 4))
|
|
|
+
|
|
|
+ const months = []
|
|
|
+ for (let i = 1; i <= 12; i++) {
|
|
|
+ months.push({ index: i, name: i, value: this.form[tmp + '_' + i + '_month_complete_amount'] })
|
|
|
+ }
|
|
|
+
|
|
|
+ const item = {
|
|
|
+ type: 1,
|
|
|
+ code: sub,
|
|
|
+ code2: tmp + '_total_complete_amount',
|
|
|
+ year: tmp,
|
|
|
+ value: this.detail[tmp + '_plan_complete_amount'],
|
|
|
+ value2: this.detail[tmp + '_total_complete_amount'],
|
|
|
+ months
|
|
|
+ }
|
|
|
+ this.list1.push(item)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ const keysInvestment = Object.keys(this.detail).filter(sub => sub.indexOf('_plan_investment_amount') > -1)
|
|
|
+ if (keysInvestment.length > 0) {
|
|
|
+ keysInvestment.forEach(sub => {
|
|
|
+ const tmp = Number.parseInt(sub.substring(0, 4))
|
|
|
+ const months = []
|
|
|
+ for (let i = 1; i <= 12; i++) {
|
|
|
+ months.push({ index: i, name: i, value: this.form[tmp + '_' + i + '_month_investment_amount'] })
|
|
|
+ }
|
|
|
+ const item = {
|
|
|
+ type: 2,
|
|
|
+ code: sub,
|
|
|
+ code2: tmp + '_total_investment_amount',
|
|
|
+ year: tmp,
|
|
|
+ value: this.detail[tmp + '_plan_investment_amount'],
|
|
|
+ value2: this.detail[tmp + '_total_investment_amount']
|
|
|
+ }
|
|
|
+ this.list2.push(item)
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ change (item) {
|
|
|
+ this.form[item.code] = item.value
|
|
|
+ this.form[item.code2] = item.value2
|
|
|
+ },
|
|
|
+ update (show = Boolean) {
|
|
|
+ this.disabled = !this.disabled
|
|
|
+ this.form.projectId = this.form.id
|
|
|
+ delete this.form._id
|
|
|
+ this.$api.project.proUpdate(this.detail).then(res => {
|
|
|
+ if (res.code === 200) {
|
|
|
+ if (show) {
|
|
|
+ this.$message.success(res.msg)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.$message.error(res.msg)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ showMonth (item) {
|
|
|
this.show = !this.show
|
|
|
+ this.current = item
|
|
|
+ },
|
|
|
+ changeMonth (res) {
|
|
|
+ const code = this.current.year + '_' + res.name + (this.current.type === 1 ? '_month_complete_amount' : '_month_investment_amount')
|
|
|
+ this.form[code] = res.value
|
|
|
+ const tmp = this.current.months.map(sub => Number.parseInt(sub.value))
|
|
|
+ const sum = tmp.reduce((accumulator, value) => {
|
|
|
+ return accumulator + (value || 0)
|
|
|
+ }, 0)
|
|
|
+ const codeParent = this.current.year + (this.current.type === 1 ? '_total_complete_amount' : '_total_investment_amount')
|
|
|
+ console.log(sum)
|
|
|
+ this.form[codeParent] = sum
|
|
|
+ this.current.value2 = sum
|
|
|
+ console.log(this.current)
|
|
|
+ this.update(false)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -155,7 +261,6 @@ export default {
|
|
|
.input {
|
|
|
width: 120px;
|
|
|
height: 40px;
|
|
|
- margin-top: 20px;
|
|
|
border: #e7e7e7 solid 1px;
|
|
|
padding: 10px;
|
|
|
border-right: none;
|
|
|
@@ -164,13 +269,26 @@ export default {
|
|
|
.input:last-child {
|
|
|
width: 120px;
|
|
|
height: 40px;
|
|
|
- margin-top: 20px;
|
|
|
padding: 10px;
|
|
|
border-right: #e7e7e7 solid 1px;
|
|
|
}
|
|
|
|
|
|
+.disable-input {
|
|
|
+ height: 30px;
|
|
|
+ width: 100%;
|
|
|
+ border-radius: 4px;
|
|
|
+ background-color: #F5F7FA;
|
|
|
+ border: #E6E8ED solid 1px;
|
|
|
+ text-align: left;
|
|
|
+ padding: 0 10px;
|
|
|
+ color: #B2B4BA;
|
|
|
+}
|
|
|
+
|
|
|
.btnSub {
|
|
|
- height: 25px;
|
|
|
+ color: white;
|
|
|
+ width: 120px;
|
|
|
+ margin-left: 10px;
|
|
|
+ height: 30px;
|
|
|
background-color: #EDAC56;
|
|
|
border-radius: 30px;
|
|
|
padding: 0 10px;
|