dev_xds
姜玉琦 2023-09-01 02:28:19 +08:00
commit 86a8a6a93c
10 changed files with 195 additions and 31 deletions

View File

@ -66,3 +66,11 @@ export function addMonthInvestment(data){
data:data data:data
}) })
} }
export function batchUpdate(datas){
return request({
url: '/project/costOutput/batchUpdate',
method: 'post',
data:datas
})
}

View File

@ -1,6 +1,17 @@
<template> <template>
<div class="cost-month" style="border:solid 1px #409eff;margin: 12px 0px;padding: 6px 12px 0px;position: relative;"> <div class="cost-month" style="border:solid 1px #409eff;margin: 12px 0px;padding: 6px 12px 0px;position: relative;">
<el-button size="small" type="primary" style="position: absolute;top:10px;right:12px;">增加年份</el-button> <el-popover placement="top" v-model="showPop2">
<p>选择年份</p>
<div style="margin-bottom: 12px;">
<el-date-picker v-model="selYear" type="year" placeholder="选择年" :picker-options="{disabledDate:doPick}" >
</el-date-picker>
</div>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="showPop2 = false">取消</el-button>
<el-button type="primary" size="mini" @click="doAddYear"></el-button>
</div>
<el-button slot="reference" size="mini" type="success" style="margin-right: 12px;" round>增加年份</el-button>
</el-popover>
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane v-for="(it,idx) in monthInv" :label="''+it.year" :name="''+it.year" :key="idx"> <el-tab-pane v-for="(it,idx) in monthInv" :label="''+it.year" :name="''+it.year" :key="idx">
<el-col v-for="(item,idxx) in it.value" :key="idxx" :span="12"> <el-col v-for="(item,idxx) in it.value" :key="idxx" :span="12">
@ -16,14 +27,17 @@
</template> </template>
<script> <script>
import {addMonthInvestment} from "@/api/project/costOutput.js";
export default { export default {
name: 'RuoyiUiCostMonth', name: 'RuoyiUiCostMonth',
data() { data() {
return { return {
selYear:'',
names:['','一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'], names:['','一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'],
activeName:'', activeName:'',
monthInv:[] monthInv:[],
showPop2:false,
}; };
}, },
@ -32,6 +46,14 @@ export default {
}, },
methods: { methods: {
doPick(a,b){
return this.yearInv.filter(d=>d.year==a.getFullYear()).length>0;
},
doAddYear(){
addMonthInvestment({year:this.$dt(this.selYear).$y,projectId:this.prj.id,costType:9}).then(d=>{
this.$emit('success');
});
},
init(d){ init(d){
this.monthInv=d; this.monthInv=d;
if(d.filter(it=>it.year==new Date().getFullYear()).length>0){ if(d.filter(it=>it.year==new Date().getFullYear()).length>0){

View File

@ -6,15 +6,15 @@
<right-toolbar @queryTable="loadData" :search="false"> <right-toolbar @queryTable="loadData" :search="false">
</right-toolbar> </right-toolbar>
</template> </template>
<div style="margin-top:12px;"> <div style="margin-top:12px;" v-if="form.totalInv">
<el-form ref="form" label-width="160px"> <el-form ref="form" label-width="160px">
<el-form-item label="总投资" class="w400"> <el-form-item label="总投资" class="w400">
<el-input-number :precision="4" v-model="form.totalInv" placeholder="请输入总投资"> <el-input-number :precision="4" v-model="form.totalInv.money" placeholder="请输入总投资">
</el-input-number> </el-input-number>
<span class="sp-unit">万元</span> <span class="sp-unit">万元</span>
</el-form-item> </el-form-item>
<div class="div-title fblue" style="color: #409eff;">年度投资</div> <div class="div-title fblue" style="color: #409eff;">年度投资</div>
<costYear ref="costYear"> <costYear ref="costYear" @success="doAddYearSuccess">
</costYear> </costYear>
@ -22,21 +22,21 @@
<el-row style="margin-top:12px;"> <el-row style="margin-top:12px;">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合同金额" class="w200"> <el-form-item label="合同金额" class="w200">
<el-input-number :precision="4" v-model="form.contract1" placeholder="请输入合同金额"> <el-input-number :precision="4" v-model="form.contract1.money" placeholder="请输入合同金额">
</el-input-number> </el-input-number>
<span class="sp-unit">万元</span> <span class="sp-unit">万元</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合同支付金额" class="w200"> <el-form-item label="合同支付金额" class="w200">
<el-input-number :precision="4" v-model="form.contract2" placeholder="请输入合同支付金额"> <el-input-number :precision="4" v-model="form.contract2.money" placeholder="请输入合同支付金额">
</el-input-number> </el-input-number>
<span class="sp-unit">万元</span> <span class="sp-unit">万元</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合同挂账金额" class="w200"> <el-form-item label="合同挂账金额" class="w200">
<el-input-number :precision="4" v-model="form.contract3" placeholder="请输入合同挂账金额"> <el-input-number :precision="4" v-model="form.contract3.money" placeholder="请输入合同挂账金额">
</el-input-number> </el-input-number>
<span class="sp-unit">万元</span> <span class="sp-unit">万元</span>
</el-form-item> </el-form-item>
@ -47,21 +47,21 @@
<el-row style="margin-top:12px;"> <el-row style="margin-top:12px;">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="安措金额" class="w200"> <el-form-item label="安措金额" class="w200">
<el-input-number :precision="4" v-model="form.safety1" placeholder="请输入安措金额"> <el-input-number :precision="4" v-model="form.safety1.money" placeholder="请输入安措金额">
</el-input-number> </el-input-number>
<span class="sp-unit">万元</span> <span class="sp-unit">万元</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="安措支付金额" class="w200"> <el-form-item label="安措支付金额" class="w200">
<el-input-number :precision="4" v-model="form.safety2" placeholder="请输入安措支付金额"> <el-input-number :precision="4" v-model="form.safety2.money" placeholder="请输入安措支付金额">
</el-input-number> </el-input-number>
<span class="sp-unit">万元</span> <span class="sp-unit">万元</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="安措挂账金额" class="w200"> <el-form-item label="安措挂账金额" class="w200">
<el-input-number :precision="4" v-model="form.safety3" placeholder="请输入安措挂账金额"> <el-input-number :precision="4" v-model="form.safety3.money" placeholder="请输入安措挂账金额">
</el-input-number> </el-input-number>
<span class="sp-unit">万元</span> <span class="sp-unit">万元</span>
</el-form-item> </el-form-item>
@ -69,10 +69,10 @@
</el-row> </el-row>
<div class="div-title fblue" style="color: #409eff;">月度投资</div> <div class="div-title fblue" style="color: #409eff;">月度投资</div>
<costMonth ref="costMonth"></costMonth> <costMonth ref="costMonth" @success="doAddYearSuccess"></costMonth>
</el-form> </el-form>
<div style="text-align: center;margin-top: 24px;"> <div style="text-align: center;margin-top: 24px;">
<el-button type="success">保存</el-button> <el-button type="success" @click="doSave"></el-button>
</div> </div>
</div> </div>
@ -82,7 +82,7 @@
</template> </template>
<script> <script>
import { listByProjectId,addYearInvestment,addMonthInvestment } from "@/api/project/costOutput.js"; import { listByProjectId,batchUpdate } from "@/api/project/costOutput.js";
import costYear from './costYear.vue' import costYear from './costYear.vue'
import costMonth from './costMonth.vue' import costMonth from './costMonth.vue'
export default { export default {
@ -106,26 +106,59 @@ export default {
}, },
yearInv:[],// yearInv:[],//
monthInv:[],// monthInv:[],//
oldData:[]
}; };
}, },
mounted() { }, mounted() { },
methods: { methods: {
doSave(){
let objs=this.oldData.map(it=>{
let obj={...it};
obj.money=obj.money?obj.money*10000:0;
return obj;
});
batchUpdate(objs).then(d=>{
if(d.code!=200){
this.loadData();
}
});
},
doAddYearSuccess(){
this.loadData();
},
resetData(tmps){
if(this.oldData.length==0){
return;
}
tmps.forEach(it=>{
let objs=this.oldData.filter(d=>d.id==it.id);
if(objs.length>0){
it.money=objs[0].money;
}
});
},
loadData(init) { loadData(init) {
listByProjectId(this.prj.id).then((d) => { listByProjectId(this.prj.id).then((d) => {
let tmps=d.data||[]; let tmps=(d.data||[]).map(it=>{
this.form.totalInv=this.getValue(tmps,1).money||0; it.money=it.money?it.money/10000.0:0;
return it;
});
this.resetData(tmps);
this.oldData=tmps;
this.form.totalInv=this.getValue(tmps,1);
this.yearInv=tmps.filter(it=>it.costType==2); this.yearInv=tmps.filter(it=>it.costType==2);
this.form.contract1=this.getValue(tmps,3).money||0; this.form.contract1=this.getValue(tmps,3);
this.form.contract2=this.getValue(tmps,4).money||0; this.form.contract2=this.getValue(tmps,4);
this.form.contract3=this.getValue(tmps,5).money||0; this.form.contract3=this.getValue(tmps,5);
this.form.safety1=this.getValue(tmps,6).money||0; this.form.safety1=this.getValue(tmps,6);
this.form.safety2=this.getValue(tmps,7).money||0; this.form.safety2=this.getValue(tmps,7);
this.form.safety3=this.getValue(tmps,8).money||0; this.form.safety3=this.getValue(tmps,8);
let objs=tmps.filter(it=>it.costType==9); let objs=tmps.filter(it=>it.costType==9);
let obj={}; let obj={};
this.monthInv=[];
objs.forEach(it=>{ objs.forEach(it=>{
if(!obj[it.year]){ if(!obj[it.year]){
obj[it.year]=[]; obj[it.year]=[];
@ -138,8 +171,10 @@ export default {
value:obj[k] value:obj[k]
}) })
} }
this.$refs.costYear.init(this.yearInv); setTimeout(()=>{
this.$refs.costMonth.init(this.monthInv); this.$refs.costYear.init(this.yearInv,this.prj);
this.$refs.costMonth.init(this.monthInv,this.prj);
},400)
}); });
}, },
getValue(tmps,type){ getValue(tmps,type){
@ -168,7 +203,11 @@ export default {
::v-deep .el-drawer__body { ::v-deep .el-drawer__body {
padding: 0px 24px; padding: 0px 24px;
.el-popover__reference-wrapper{
position: absolute;
right: 0px;
z-index: 999;
}
.el-form { .el-form {
overflow: hidden; overflow: hidden;

View File

@ -1,6 +1,20 @@
<template> <template>
<div class="cost-year" style="border:solid 1px #409eff;margin: 12px 0px;padding: 12px 12px 0px;position: relative;"> <div class="cost-year" style="border:solid 1px #409eff;margin: 12px 0px;padding: 12px 12px 0px;position: relative;">
<el-button size="small" type="primary" style="position: absolute;top:10px;right:12px;">增加年份</el-button>
<el-popover placement="top" v-model="showPop2">
<p>选择年份</p>
<div style="margin-bottom: 12px;">
<el-date-picker v-model="selYear" type="year" placeholder="选择年" :picker-options="{disabledDate:doPick}" >
</el-date-picker>
</div>
<div style="text-align: right; margin: 0">
<el-button size="mini" type="text" @click="showPop2 = false">取消</el-button>
<el-button type="primary" size="mini" @click="doAddYear"></el-button>
</div>
<el-button slot="reference" size="mini" type="success" style="margin-right: 12px;" round>增加年份</el-button>
</el-popover>
<el-tabs v-model="activeName"> <el-tabs v-model="activeName">
<el-tab-pane v-for="(it,idx) in yearInv" :label="''+it.year" :name="''+it.year" :key="idx"> <el-tab-pane v-for="(it,idx) in yearInv" :label="''+it.year" :name="''+it.year" :key="idx">
<el-form-item label="年度投资" class="w400"> <el-form-item label="年度投资" class="w400">
@ -14,13 +28,16 @@
</template> </template>
<script> <script>
import {addYearInvestment} from "@/api/project/costOutput.js";
export default { export default {
name: 'RuoyiUiCostYear', name: 'RuoyiUiCostYear',
data() { data() {
return { return {
selYear:'',
activeName:'', activeName:'',
yearInv:[] yearInv:[],
showPop2:false,
}; };
}, },
@ -29,7 +46,16 @@ export default {
}, },
methods: { methods: {
init(d){ doPick(a,b){
return this.yearInv.filter(d=>d.year==a.getFullYear()).length>0;
},
doAddYear(){
addYearInvestment({year:this.$dt(this.selYear).$y,projectId:this.prj.id,costType:2}).then(d=>{
this.$emit('success');
});
},
init(d,prj){
this.prj=prj;
this.yearInv=d; this.yearInv=d;
if(d.filter(it=>it.year==new Date().getFullYear()).length>0){ if(d.filter(it=>it.year==new Date().getFullYear()).length>0){
this.activeName=""+new Date().getFullYear() this.activeName=""+new Date().getFullYear()

View File

@ -0,0 +1,37 @@
package com.yanzhu.jh.bigscreen.web.controller;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.redis.RedisCache;
import com.yanzhu.jh.project.domain.SurProjectCostOutput;
import com.yanzhu.jh.project.service.ISurProjectCostOutputService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.concurrent.TimeUnit;
@RestController
@RequestMapping("/bgscreen/costOut")
public class ProjectCostOutputController {
@Autowired
private ISurProjectCostOutputService surProjectCostOutputService;
@Autowired
private RedisCache redisCache;
@PostMapping("/selectYearAndMonth")
public AjaxResult selectYearAndMonth(@RequestBody SurProjectCostOutput where){
String key="bgscreen_costOut_selectYearAndMonth_"+where.getYear()+"-"+where.getMonth()+"-"+where.getProjectId();
Object obj=redisCache.getCacheObject(key);
if(obj!=null){
return AjaxResult.success(obj);
}
List<SurProjectCostOutput> list=surProjectCostOutputService.selectYearAndMonth(where);
if(list.size()==0){
surProjectCostOutputService.initProject(where.getProjectId());
}
list=surProjectCostOutputService.selectYearAndMonth(where);
redisCache.setCacheObject(key, list, Constants.BIGSCREEN_QUERY_CACHE, TimeUnit.MINUTES);
return AjaxResult.success(list);
}
}

View File

@ -148,5 +148,17 @@ public class SurProjectCostOutputController extends BaseController
} }
@PostMapping("/batchUpdate")
public AjaxResult batchUpdate(@RequestBody List<SurProjectCostOutput> list){
try {
for (SurProjectCostOutput it : list) {
surProjectCostOutputService.updateSurProjectCostOutput(it);
}
return AjaxResult.success("保存成功!");
}catch (Exception ex){
return AjaxResult.error(ex.getMessage());
}
}
} }

View File

@ -59,4 +59,6 @@ public interface SurProjectCostOutputMapper
* @return * @return
*/ */
public int deleteSurProjectCostOutputByIds(Long[] ids); public int deleteSurProjectCostOutputByIds(Long[] ids);
public List<SurProjectCostOutput> selectYearAndMonth(SurProjectCostOutput where);
} }

View File

@ -69,4 +69,6 @@ public interface ISurProjectCostOutputService
public void addYearInvestment(SurProjectCostOutput where); public void addYearInvestment(SurProjectCostOutput where);
public void addMonthInvestment(SurProjectCostOutput where); public void addMonthInvestment(SurProjectCostOutput where);
public List<SurProjectCostOutput> selectYearAndMonth(SurProjectCostOutput where);
} }

View File

@ -156,5 +156,10 @@ public class SurProjectCostOutputServiceImpl implements ISurProjectCostOutputSer
insertSurProjectCostOutput(it); insertSurProjectCostOutput(it);
} }
} }
@Override
public List<SurProjectCostOutput> selectYearAndMonth(SurProjectCostOutput where) {
return surProjectCostOutputMapper.selectYearAndMonth(where);
}
} }

View File

@ -98,4 +98,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
#{id} #{id}
</foreach> </foreach>
</delete> </delete>
<select id="selectYearAndMonth" parameterType="SurProjectCostOutput" resultMap="SurProjectCostOutputResult">
SELECT *
FROM sur_project_cost_output
WHERE project_id = #{projectId}
and (
(YEAR=#{year} AND cost_type=2) OR cost_type NOT IN (2, 9)
OR (cost_type = 9 AND YEAR = #{year} AND MONTH &lt;= #{month})
OR (cost_type = 9 AND YEAR &lt; #{year})
)
</select>
</mapper> </mapper>