master
271556543@qq.com 3 years ago
parent dee6df9c4b
commit 2494e0b704

@ -2,5 +2,5 @@
ENV = 'development'
# base api
VUE_APP_BASE_API = ''
VUE_APP_BASE_API = http://hdcontract.ali251.langye.net
VUE_APP_OUT_URL = http://suzhouhedaooa.langye.net

@ -39,3 +39,11 @@ export function detailBudget(params){
params
})
}
export function getProgress(params){
return request({
method:'get',
url:'/api/admin/plan/progress',
params
})
}

@ -89,6 +89,9 @@ export default {
selectClick(selection, row){
this.$emit('select',selection, row)
},
cellClick(row, column, cell){
this.$emit('cellClick',row, column, cell)
},
createIndexRow(){
return <el-table-column type="index" align="center" fixed="left"></el-table-column>
},
@ -110,7 +113,7 @@ export default {
mounted() {
},
render(h) {
let {btnWidth,selectClick,height,createIndexRow,tableStyle,treeProps,showSummary,showHeader,$scopedSlots,showIndex,defaultExpandAll,headerCellStyle,headerRowStyle,rowStyle,cellStyle,indent,tableHeight,tableItem,list,deleteClick,editorClick} = this
let {cellClick,btnWidth,selectClick,height,createIndexRow,tableStyle,treeProps,showSummary,showHeader,$scopedSlots,showIndex,defaultExpandAll,headerCellStyle,headerRowStyle,rowStyle,cellStyle,indent,tableHeight,tableItem,list,deleteClick,editorClick} = this
return (
<div class="table-tree">
{ tableItem && tableItem.length>0 ?
@ -132,7 +135,7 @@ export default {
default-expand-all={defaultExpandAll}
tree-props={treeProps}
fit={true}
on={{['select']:selectClick}}>
on={{['select']:selectClick,['cell-click']:cellClick}}>
{
//
showIndex ? createIndexRow() : ''
@ -213,7 +216,8 @@ export default {
label={item.label}
prop={item.prop}
sortable={item.sortable ?? true}
type={item.type ?? ''}>
type={item.type ?? ''}
selectable={item.selectable}>
</el-table-column>
)
}

@ -6,7 +6,7 @@
<div>
<span style="padding: 0 6px;">年份</span>
<span>
<DatePicker placeholder="选择所属年份" type="year" placement="bottom" :value="select.year" style="width: 130px;" @on-change="(e)=>select.year = e"></DatePicker></DatePicker>
<DatePicker placeholder="选择所属年份" type="year" placement="bottom" :value="select.year" style="width: 130px;" @on-change="(e)=>select.year = e"></DatePicker>
</span>
<span style="padding: 0 6px;">
@ -295,7 +295,7 @@ export default {
width: 180
},
{
label:'金额',
label:'项目金额(元)',
prop:'money',
align:'right',
width: 160

@ -0,0 +1,92 @@
<template>
<div>
<xy-dialog :is-show.sync="isShow" title="付款计划">
<template v-slot:normalContent>
<xy-table :height="300" :list="list" :table-item="table">
<template v-slot:btns>
<div></div>
</template>
</xy-table>
</template>
</xy-dialog>
</div>
</template>
<script>
import {getContractSign} from "@/api/contractSign/contractSign"
import {parseTime} from "@/utils";
export default {
data() {
return {
isShow:false,
list:[],
table:[
{
prop:'contract.name',
label:'项目名称',
width:170
},
{
prop:'money',
label:'计划付款金额(元)',
align:'right',
width:168
},
{
prop:'date',
label:'计划付款日期',
width: 200
},
{
prop:'created_at',
label:'创建信息',
width: 200,
formatter:(v1,v2,value)=>{
return parseTime(new Date(value))
}
},
{
prop:'content',
label:'内容',
minWidth:180,
align:'left'
},
{
prop:'contract.created_at',
label:'合同签订日期',
width: 200,
formatter:(v1,v2,value)=>{
return parseTime(new Date(value))
}
},
{
prop:'contract.supply',
label:'受款单位',
width: 180
},
{
prop:'admin.name',
label:'经办人',
width: 180
},
{
prop:'department.name',
label:'经办科室',
width: 200
}
]
}
},
methods: {
async getSignPlan(contractId){
const res = await getContractSign({contract_id:contractId})
this.list = res.data
console.log(res)
}
},
}
</script>
<style scoped lang="scss">
</style>

@ -10,6 +10,16 @@
</div>
</div>
</template>
<template v-slot:number>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>合同编号
</div>
<div class="xy-table-item-content">
<el-input placeholder="请填写合同编号" v-model="form.number" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:supply>
<div class="xy-table-item">
<div class="xy-table-item-label">
@ -110,6 +120,8 @@ import {Message} from "element-ui";
import {parseTime} from "@/utils"
import detailContractSign from "@/views/contract/components/detailContractSign";
import {getOatoken} from "@/api/oatoken";
import axios from "axios";
export default {
components:{
detailContractSign
@ -117,11 +129,15 @@ export default {
data() {
return {
form:{
number:'',
supply:'',
carryDepartment:'',
money:''
},
rules:{
number:[
{required:true,message:"必填"}
],
supply:[
{required:true,message:"必填"}
],
@ -195,6 +211,7 @@ export default {
sign(){
editorContract({
id:this.contractId,
number:this.form.number,
supply:this.form.supply,
carry_department:this.form.carryDepartment,
money:this.form.money,
@ -227,7 +244,7 @@ export default {
console.log(this.planForm)
addContractSign({
contract_id:this.contract.id,
date:'2022-7-22',
date:`${new Date(this.planForm.date).getFullYear()}-${new Date(this.planForm.date).getMonth()+1}-${new Date(this.planForm.date).getDate()}`,
content:this.planForm.content,
money:this.planForm.money,
remark:this.planForm.remark
@ -240,12 +257,24 @@ export default {
message:'操作成功'
})
})
},
//oa
async getOaContractInfo(){
let res = await getOatoken()
let url =`/oa/admin/flow/view/${this.contract.join_last_flow_id}?oatoken=${res.oatoken}&get_raw=1`
const oaInfo = await axios.get(url)
this.form.money = Number(oaInfo.data.flow['合同金额(万元)']) * 10000
this.form.number = oaInfo.data.flow['合同编号']
this.form.supply = oaInfo.data.flow['承包商\\供应商']
this.form.carryDepartment = oaInfo.data.flow['执行部门']
}
},
watch:{
async contractId(){
await this.getContract()
await this.getContractSignList()
await this.getOaContractInfo()
}
}
}

@ -160,15 +160,18 @@ export default {
},
{
label:"日志类型",
sortable:false
sortable:false,
prop:'type'
},
{
label:"日志内容",
sortable:false
sortable:false,
prop:'remark'
},
{
label:"操作人",
sortable:false
sortable:false,
prop:'admin.name'
},
{
label:"时间",

@ -1,7 +1,7 @@
<!--付款计划详情-->
<template>
<div v-if="plan">
<xy-dialog :is-show.sync="isShow" type="form" title="新增计划" :form="plan" :rules="planRules" :width="48" @submit="editor">
<xy-dialog :is-show.sync="isShow" type="form" title="编辑计划" :form="plan" :rules="planRules" :width="48" @submit="editor">
<template v-slot:date>
<div class="xy-table-item">
<div class="xy-table-item-label">
@ -9,7 +9,7 @@
<span>日期</span>
</div>
<div class="xy-table-item-content">
<el-datePicker style="width: 300px" v-model="plan.date" type="date" placeholder="请选择日期"></el-datePicker>
<el-datePicker value-format="yyyy-MM-dd" style="width: 300px" v-model="plan.date" type="date" placeholder="请选择日期"></el-datePicker>
</div>
</div>
</template>

@ -0,0 +1,288 @@
<template>
<div>
<xy-dialog :is-show.sync="isShow" title="付款登记编辑" type="form" v-if="form && id" :form="form" :rules="rules" @submit="editor">
<template v-slot:extraFormTop>
<div class="payment-registration-row">
<div class="payment-registration-row-title">受款单位</div>
<div class="payment-registration-row-content">{{form.contract.supply}}</div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">合同名称</div>
<div class="payment-registration-row-content">{{form.contract.name}}</div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">合同金额</div>
<div class="payment-registration-row-content">{{form.contract.money}} </div>
</div>
</template>
<template v-slot:apply_money >
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>申请付款金额
</div>
<div class="xy-table-item-content xy-table-item-price">
<el-input clearable placeholder="请填写付款金额" v-model="form.apply_money" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:act_money >
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>实际支付金额
</div>
<div class="xy-table-item-content xy-table-item-price">
<el-input clearable placeholder="请填写实际支付金额" v-model="form.act_money" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:discount_money >
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>本期扣款金额
</div>
<div class="xy-table-item-content xy-table-item-price">
<el-input clearable placeholder="请填写本期扣款金额" v-model="form.discount_money" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:type >
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>款项类型
</div>
<div class="xy-table-item-content">
<el-select placeholder="选择款项类型或直接填写其他类型"
v-model="form.type"
style="width: 200px;"
filterable
allow-create
clearable>
<el-option
v-for="item in paymentType"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:is_end>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>是否最后一笔
</div>
<div class="xy-table-item-content">
<el-switch v-model="form.is_end" @change="toggleSelection"/>
</div>
</div>
</template>
<template v-slot:extraFormBottom v-if="form.is_end">
<Input search enter-button=" " placeholder="搜索预算计划.." v-model="searchContent" @on-search="getBudgets"/>
<xy-table :list="plans" :show-index="false" :table-item="planTable" :height="310" style="margin-top: 10px;" ref="planTable" @select="selectPlan">
<template v-slot:btns>
<el-table-column label="使用金额" header-align="center">
<template slot-scope="scope">
<Input :value="scope.row.use_money" @input="(e)=>scope.row.use_money = e"/>
</template>
</el-table-column>
</template>
</xy-table>
<!-- <div style="display: flex;justify-content: flex-end;">-->
<!-- <Page :total="planTotal" show-elevator @on-change="pageChange"/>-->
<!-- </div>-->
</template>
</xy-dialog>
</div>
</template>
<script>
import {detailFundLog,editorFundLog} from "@/api/paymentRegistration/fundLog"
import {getBudget} from "@/api/budget/budget";
import {Message} from "element-ui";
export default {
data() {
return {
isShow:false,
id:'',
form:null,
paymentType:["进度款","结算款","质保金"],
plansPageIndex:1,
planTotal:0,
plans:[],
searchContent:"",
planTable:[
{
sortable:false,
width:36,
type:'selection'
},
{
label:"分类",
prop:'type',
formatter:(cell,data,value)=>{
switch (value){
case 1:
return "部门预算"
break;
case 2:
return "水务计划"
break;
default:
return "未知"
}
}
},
{
label:"名称",
prop:'name',
align:'left'
},
{
label:"计划金额",
prop:'money',
align:'right'
}
],
rules:{
apply_money:[
{required:true,message:"必填"}
],
act_money:[
{required:true,message:"必填"}
],
discount_money:[
{required:true,message:"必填"}
],
type:[
{required:true,message:"必选"}
]
},
}
},
methods: {
async getFundLog(id){
this.id = id
const res = await detailFundLog({id})
this.form = res
console.log(this.form)
},
async getBudgets(){
let res = await getBudget({name:this.searchContent,page_size:10,page:this.plansPageIndex})
this.plans = res.data
this.planTotal = res.total
},
planPageChange(e){
this.plansPageIndex = e
this.getBudgets()
},
editor(){
editorFundLog(this.form).then(res=>{
this.$emit('success')
this.isShow = false
Message({
type:"success",
message:'操作成功'
})
})
},
async toggleSelection(e) {
if(!e){
return
}
await this.getBudgets()
let plans = this.form.plan_link.map(item => {return item.plan_id})
if (plans) {
plans.map((plan,index) => {
let list = this.plans.map(item => {return item.id})
if(list.indexOf(plan) != -1){
this.plans[list.indexOf(plan)].use_money = this.form.plan_link[index].use_money
console.log(this.plans[list.indexOf(plan)])
}
})
this.plans.filter(plan => {
return plans.includes(plan.id)
}).map(row => {
this.$nextTick(()=>{
this.$refs['planTable'].toggleRowSelection(row);
})
})
} else {
this.$refs['planTable'].clearSelection();
}
},
selectPlan(sel,row){
if(sel){
this.form.plan_link = sel.map(item => {
return {
plan_id:item.id,
use_money:item.useMoney,
new_money:item.money
}
})
}else{
this.form.plan_link = []
}
},
},
mounted() {
}
}
</script>
<style scoped lang="scss">
.payment-registration{
&-row{
display: flex;
padding: 6px 0;
&-title{
padding: 0 10px;
}
&-content{
}
}
}
.xy-table-item-label{
width: 140px;
}
.xy-table-item-price{
position: relative;
&::after{
z-index: 1;
position: absolute;
right: 0;
top: 0;
content:'(元)'
}
::v-deep .el-input__clear{
position: relative;
right: 30px;
z-index: 2;
}
}
.xy-table-item-price-wan{
position: relative;
&::after{
position: absolute;
right: 0;
top: 0;
content:'(万元)'
}
::v-deep .el-input__clear{
position: relative;
right: 46px;
z-index: 2;
}
}
</style>

@ -140,7 +140,7 @@
<template v-slot:btns>
<el-table-column label="使用金额" header-align="center">
<template slot-scope="scope">
<Input :value="scope.row.useMoney ? scope.row.useMoney: scope.row.money" @input="(e)=>scope.row.useMoney = e"/>
<Input :value="scope.row.useMoney" @input="(e)=>scope.row.useMoney = e"/>
</template>
</el-table-column>
</template>
@ -267,7 +267,7 @@ export default {
label:item.name,
value:{
plan_id:item.id,
use_money:item.useMoney ?? item.money,
use_money:item.useMoney,
new_money:item.money
}
}
@ -328,7 +328,7 @@ export default {
label:item.name,
value:{
plan_id:item.id,
use_money:item.useMoney ?? item.money,
use_money:item.useMoney,
new_money:item.money
}
}

@ -312,7 +312,7 @@ export default {
this.paymentRegistrationForm.plan = sel.map(item => {
return {
plan_id:item.id,
use_money:item.useMoney ?? item.money,
use_money:item.useMoney,
new_money:item.money
}
})

@ -5,7 +5,7 @@
<template v-slot:extraFormTop>
<div class="payment-registration-row">
<div class="payment-registration-row-title">受款单位</div>
<div class="payment-registration-row-content">受款单位</div>
<div class="payment-registration-row-content">{{contract.supply}}</div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">合同名称</div>
@ -13,7 +13,7 @@
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">合同金额</div>
<div class="payment-registration-row-content">{{contract.money}} </div>
<div class="payment-registration-row-content">{{priceFormat(contract.money)}} </div>
</div>
<div style="display: flex">
<div class="payment-registration-row">
@ -93,17 +93,17 @@
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>是否最后一笔
</div>
<div class="xy-table-item-content">
<el-switch v-model="paymentRegistrationForm.isLast"/>
<el-switch v-model="paymentRegistrationForm.isLast" @change="toggleSelection"/>
</div>
</div>
</template>
<template v-slot:extraFormBottom>
<template v-slot:extraFormBottom v-if="paymentRegistrationForm.isLast">
<Input search enter-button=" " placeholder="搜索预算计划.." v-model="searchContent" @on-search="getBudgets"/>
<xy-table :list="plans" :show-index="false" :table-item="planTable" :height="310" style="margin-top: 10px;" ref="planTable" @select="selectPlan">
<template v-slot:btns>
<el-table-column label="使用金额" header-align="center">
<template slot-scope="scope">
<Input :value="scope.row.useMoney ? scope.row.useMoney: scope.row.money" @input="(e)=>scope.row.useMoney = e"/>
<Input :value="scope.row.useMoney" @input="(e)=>scope.row.useMoney = e"/>
</template>
</el-table-column>
</template>
@ -234,28 +234,31 @@ export default {
this.paymentRegistrationForm.plan = this.contract.plans.map(item=>{
return {
plan_id:item.id,
use_money:item.useMoney ?? item.money,
use_money:item.useMoney,
new_money:item.money,
}
})
const res = await getFundLog({contract_id:this.contract.id})
this.payment = res.data
this.toggleSelection(this.paymentRegistrationForm.plan.map(item => {
return item.plan_id
}))
},
submit(){
addFundLog({
let data = this.paymentRegistrationForm.isLast ? {
contract_id:this.contract.id,
apply_money:this.paymentRegistrationForm.applyMoney,
discount_money:this.paymentRegistrationForm.deductionMoney,
type:this.paymentRegistrationForm.type,
is_end:this.paymentRegistrationForm.isLast ? 1 : 0,
contract_plan_links:this.paymentRegistrationForm.plan
}).then(res=>{
} : {
contract_id:this.contract.id,
apply_money:this.paymentRegistrationForm.applyMoney,
discount_money:this.paymentRegistrationForm.deductionMoney,
type:this.paymentRegistrationForm.type,
is_end:this.paymentRegistrationForm.isLast ? 1 : 0
}
addFundLog(data).then(res=>{
this.isShowPaymentRegistration = false
Message({
type:'success',
@ -285,7 +288,7 @@ export default {
this.paymentRegistrationForm.plan = sel.map(item => {
return {
plan_id:item.id,
use_money:item.useMoney ?? item.money,
use_money:item.useMoney,
new_money:item.money
}
})
@ -293,18 +296,31 @@ export default {
this.paymentRegistrationForm.plan = []
}
},
toggleSelection(plans) {
toggleSelection(e) {
if(!e){
return
}
let plans = this.paymentRegistrationForm.plan.map(item => {return item.plan_id})
if (plans) {
this.plans.filter(plan => {
return plans.includes(plan.id)
}).map(row => {
this.$refs.planTable.toggleRowSelection(row);
this.$nextTick(()=>{
this.$refs['planTable'].toggleRowSelection(row);
})
})
} else {
this.$refs.planTable.clearSelection();
this.$refs['planTable'].clearSelection();
}
},
},
computed:{
priceFormat(){
return function (price){
return Number(price).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,')
}
}
},
async mounted() {
await this.getBudgets()
}

@ -149,7 +149,7 @@ export default {
.print-table1{
box-sizing: border-box;
&-title{
font-size: 20px;
font-size: 24px;
letter-spacing: 2px;
text-align: center;
font-weight: 600;
@ -159,6 +159,7 @@ export default {
}
&-grid{
font-size: 21px;
border: 1px #000 solid;
display: grid;
grid-template-rows: repeat(14,auto);
@ -195,6 +196,7 @@ export default {
padding: 0.2vw 0;
}
&-center{
text-align: center;
justify-content: center;
align-items: center;
@ -217,70 +219,5 @@ export default {
</style>
<style media="print" lang="scss">
@media print {
.print-table1{
box-sizing: border-box;
&-title{
text-align: center;
font-weight: 600;
border: none;
padding: 0.6vw 0;
}
&-grid{
border: 1px #000 solid;
display: grid;
grid-template-rows: repeat(14,auto);
grid-template-columns: repeat(6,1fr);
grid-template-areas:
"tb1-1 tb1-1 tb1-1 tb1-2 tb1-2 tb1-2"
"tb2-1 tb2-1 tb2-1 tb2-2 tb2-2 tb2-2"
"tb3-1 tb3-1 tb3-2 tb3-2 tb3-3 tb3-3"
"tb4-1 tb4-2 tb4-3 tb4-3 tb4-4 tb4-4"
"tb5-1 tb5-2 tb5-3 tb5-3 tb5-4 tb5-4"
"tb6-1 tb6-2 tb6-3 tb6-3 tb6-4 tb6-4"
"tb7-1 tb7-2 tb7-3 tb7-3 tb7-4 tb7-4"
"tb8-1 tb8-2 tb8-3 tb8-3 tb8-4 tb8-4"
"tb9-1 tb9-2 tb9-3 tb9-3 tb9-4 tb9-4"
"tb10-1 tb10-2 tb10-3 tb10-3 tb10-4 tb10-4"
"tb11-1 tb11-2 tb11-3 tb11-3 tb11-3 tb11-3"
"tb12 tb12 tb12 tb12 tb12 tb12"
"tb13-1 tb13-1 tb13-2 tb13-2 tb13-3 tb13-3"
"tb14-1 tb14-1 tb14-2 tb14-2 tb14-3 tb14-3";
&>div{
border: 1px #000 solid;
display: flex;
}
&-top{
padding: 0.2vw 0 4vw 0.4vw;
}
&-title1{
text-align: center;
justify-content: center;
padding: 0.3vw 0;
}
&-center{
justify-content: center;
align-items: center;
padding: 0.8vw;
}
&-bottom1{
padding: 0.2vw 0 2vw 0.4vw;
}
&-bottom2{
padding: 0.2vw 0 4vw 0.4vw;
}
}
}
}
</style>

@ -74,24 +74,26 @@
<Button type="primary" style="margin-left: 10px" @click="getContracts"></Button>
<Button type="primary" style="margin-left: 10px" ghost
@click=" select = {showDatePicker:'',ageIndex:1,startDate:'',endDate:'',type:'',department:'',purchaseModality:'',purchaseMethods:'',priceMin:null,priceMax:null,status:''}">重置</Button>
<Button type="primary" style="margin-left: 10px">导出</Button>
<!-- <Button type="primary" style="margin-left: 10px">导出</Button>-->
</div>
</slot>
</lx-header>
<xy-table :table-item="table" :list="list" @editor="" @delete="(row)=>deleteContract(row.id)">
<xy-table :table-item="table" :list="list" @editor="" @delete="(row)=>deleteContract(row.id)" @cellClick="showPaymentPlan" :cell-style="cellStyle">
<template v-slot:btns>
<el-table-column label="操作" fixed="right" width="220" header-align="center">
<template slot-scope="scope">
<div class="slot-btns">
<Button class="slot-btns-item" type="primary" size="small" @click="$refs['paymentRegistration'].isShowPaymentRegistration = true,$refs['paymentRegistration'].getContract(scope.row)">付款登记</Button>
<template v-if="scope.row.status === 2">
<Button class="slot-btns-item" type="primary" size="small" @click="$refs['paymentRegistration'].isShowPaymentRegistration = true,$refs['paymentRegistration'].getContract(scope.row)">付款登记</Button>
</template>
<template v-if="scope.row.status === 1 && scope.row.join_status === 3">
<Button class="slot-btns-item" type="primary" size="small" @click="$refs['contractSign'].isShow = true,$refs['contractSign'].contractId = scope.row.id">签订合同</Button>
</template>
<template v-if="scope.row.invite_status === 1 && scope.row.purchase_status === 3">
<Button class="slot-btns-item" type="primary" size="small" @click="bidding(scope.row)"></Button>
</template>
<Button class="slot-btns-item" type="primary" size="small">附件管理</Button>
<!-- <Button class="slot-btns-item" type="primary" size="small">附件管理</Button>-->
<template v-if="scope.row.req_status === 1 && scope.row.is_plan === 0">
<Button class="slot-btns-item" type="primary" size="small" @click="askProcess(scope.row)"></Button>
</template>
@ -102,18 +104,20 @@
v-if="scope.row.purchase_status === 1 && ((scope.row.req_status === 3 && scope.row.is_plan === 0)||scope.row.is_plan === 1)">
<Button class="slot-btns-item" type="primary" size="small" @click="buyProcess(scope.row)"></Button>
</template>
<Poptip
placement="bottom"
:transfer="true"
confirm
title="确认要删除吗"
@on-ok="()=>deleteContract(scope.row.id)">
<i-button
class="slot-btns-item"
type="error"
size="small"
ghost>删除</i-button>
</Poptip>
<template v-if="!(scope.row.req_status != 1 || scope.row.join_status != 1 || scope.row.invite_status != 1 || scope.row.purchase_status != 1 || scope.row.status === 2)">
<Poptip
placement="bottom"
:transfer="true"
confirm
title="确认要删除吗"
@on-ok="()=>deleteContract(scope.row.id)">
<i-button
class="slot-btns-item"
type="error"
size="small"
ghost>删除</i-button>
</Poptip>
</template>
<Button class="slot-btns-item" type="primary" size="small" @click="$refs['detailContract'].isShowDetail = true,$refs['detailContract'].getDetail(scope.row.id)">查看</Button>
<template v-if="scope.row.status != 2">
<Button class="slot-btns-item" type="primary" size="small" @click="$refs['editor'].isShowEditor = true,$refs['editor'].getDetail(scope.row.id)">编辑</Button>
@ -265,6 +269,9 @@
<!-- 合同签订-->
<contractSign ref="contractSign" @signSuccess="getContracts"></contractSign>
<!-- 查看付款计划-->
<contractPaymentRegistration ref="contractPaymentRegistration"></contractPaymentRegistration>
</div>
</template>
@ -281,13 +288,15 @@ import editor from "./components/editorContract"
import detail from "./components/detailContract"
import paymentRegistration from "./components/paymentRegistration";
import contractSign from "@/views/contract/components/contractSign";
import contractPaymentRegistration from "@/views/contract/components/contractPaymentRegistration";
import {login} from "@/api/user";
export default {
components:{
editor,
detail,
paymentRegistration,
contractSign
contractSign,
contractPaymentRegistration
},
data() {
var planPass = (rule, value, callback) => {
@ -373,7 +382,19 @@ export default {
prop:"money_way.value"
},
{
label:"项目预算(万元)",
label:'已付金额',
prop:'fund_log_total',
width:160,
align:'right',
formatter:(cell,data,value)=>{
if(!value){
return '0.00'
}
return value
}
},
{
label:"合同预算价(万元)",
width: 200,
prop:"plan_price",
align:'right',
@ -398,6 +419,14 @@ export default {
}
}
},
{
label:'付款计划',
prop:'plan_link_count',
width: 160,
formatter:(cell,data,value)=>{
return value + '期'
}
},
{
label:"采购流程",
multiHd:[
@ -406,6 +435,9 @@ export default {
width: 200,
prop:'req_status',
formatter:(cell,data,value)=>{
if(cell.is_plan === 1){
return '无'
}
switch (value){
case 1:
return "待申请"
@ -414,7 +446,7 @@ export default {
return "流转中"
break;
case 3:
return "已办"
return "已"
break;
default:
return "异常"
@ -435,7 +467,7 @@ export default {
return "流转中"
break;
case 3:
return "已办"
return "已"
break;
default:
return "异常"
@ -456,7 +488,7 @@ export default {
return "流转中"
break;
case 3:
return "已办"
return "已"
break;
default:
return "异常"
@ -477,7 +509,7 @@ export default {
return "流转中"
break;
case 3:
return "已办"
return "已"
break;
default:
return "异常"
@ -488,12 +520,17 @@ export default {
]
},
{
label:"创建科室",
label:"业务科室",
width: 200,
prop:'department.name'
},
{
label:"创建信息",
label:"经办人",
width: 160,
prop:'admin.name'
},
{
label:"创建日期",
width: 200,
prop:'created_at',
formatter:(cell,data,value)=>{
@ -591,6 +628,80 @@ export default {
}
},
methods: {
cellStyle({row, column, rowIndex, columnIndex}){
if(columnIndex === 10){
if(row.is_plan === 1){
return {'background':'rgba(240,240,240,0.2)'}
}
switch (row.req_status){
case 1:
return {'background':'rgba(140,197,255,0.2)'}
break;
case 2:
return {'background':'rgba(253,226,226,0.2)'}
break;
case 3:
return {'background':'rgba(225,243,216,0.2)'}
break;
default:
return {'background':'rgba(250,236,216,0.2)'}
}
}
if(columnIndex === 11){
switch (row.purchase_status){
case 1:
return {'background':'rgba(140,197,255,0.2)'}
break;
case 2:
return {'background':'rgba(253,226,226,0.2)'}
break;
case 3:
return {'background':'rgba(225,243,216,0.2)'}
break;
default:
return {'background':'rgba(250,236,216,0.2)'}
}
}
if(columnIndex === 12){
switch (row.invite_status){
case 1:
return {'background':'rgba(140,197,255,0.2)'}
break;
case 2:
return {'background':'rgba(253,226,226,0.2)'}
break;
case 3:
return {'background':'rgba(225,243,216,0.2)'}
break;
default:
return {'background':'rgba(250,236,216,0.2)'}
}
}
if(columnIndex === 13){
switch (row.join_status){
case 1:
return {'background':'rgba(140,197,255,0.2)'}
break;
case 2:
return {'background':'rgba(253,226,226,0.2)'}
break;
case 3:
return {'background':'rgba(225,243,216,0.2)'}
break;
default:
return {'background':'rgba(250,236,216,0.2)'}
}
}
},
//
showPaymentPlan(row, column, cell){
if(column.id === 'el-table_1_column_10'){
console.log(row)
this.$refs['contractPaymentRegistration'].getSignPlan(row.id)
this.$refs['contractPaymentRegistration'].isShow = true
}
},
//
async bidding(row){
let baseInfo = {
@ -722,7 +833,7 @@ export default {
label:item.name,
value:{
plan_id:item.id,
use_money:item.useMoney ?? item.money,
use_money:item.useMoney,
new_money:item.money
}
}
@ -804,6 +915,9 @@ export default {
this.getContracts()
}
},
destroyed() {
window.onfocus = null
}
}
</script>

@ -6,9 +6,9 @@
<div class="selects">
<div>
<span style="padding: 0 6px;word-break: keep-all;">
创建日期
付款计划日期
</span>
<DatePicker v-model="select.showDate" placeholder="请选择日期" type="daterange" placement="bottom-start" style="width: 200px" @on-change="datePick"></DatePicker>
<DatePicker :value="[select.start,select.end]" placeholder="请选择日期" type="daterange" placement="bottom-start" style="width: 200px" @on-change="datePick"></DatePicker>
</div>
<div>
@ -48,9 +48,8 @@ export default {
data() {
return {
select:{
showDate:'',
start:'',
end:'',
start:`${new Date().getFullYear()}-${new Date().getMonth()+1}-${new Date().getDate()}`,
end:`${new Date().getFullYear()}-${new Date().getMonth()+2}-${new Date().getDate()}`,
pageIndex:1,
keyword:''
},
@ -59,7 +58,7 @@ export default {
table:[
{
prop:'contract.name',
label:'合同名称',
label:'项目名称',
width:170
},
{
@ -68,6 +67,11 @@ export default {
align:'right',
width:168
},
{
prop:'date',
label:'计划付款日期',
width: 200
},
{
prop:'created_at',
label:'创建信息',
@ -83,10 +87,35 @@ export default {
align:'left'
},
{
prop:'remark',
label:'备注',
minWidth:180,
align:'left'
prop:'contract.created_at',
label:'合同签订日期',
width: 200,
formatter:(v1,v2,value)=>{
return parseTime(new Date(value))
}
},
{
prop:'contract.supply',
label:'受款单位',
width: 180
},
{
prop:'admin.name',
label:'经办人',
width: 180
},
{
prop:'department.name',
label:'经办科室',
width: 200
},
{
prop:'created_at',
label:'创建信息',
width: 200,
formatter:(v1,v2,value)=>{
return parseTime(new Date(value))
}
}
],
}

@ -22,17 +22,18 @@
<template v-slot:btns>
<el-table-column label="操作" fixed="right" width="200" header-align="center">
<template slot-scope="scope">
<Poptip
placement="bottom"
confirm
:transfer="true"
title="确认要删除吗"
@on-ok="deleteFundLog(scope.row)">
<Button size="small" type="error" style="margin-left: 10px;margin-bottom: 4px" ghost>删除</Button>
</Poptip>
<Button size="small" type="primary" style="margin-left: 10px;margin-bottom: 4px" @click="$refs['examineRegistration'].isShow = true,$refs['examineRegistration'].getRegistration(scope.row.id)">审核确认</Button>
<template v-if="scope.row.status === 0">
<Poptip
placement="bottom"
confirm
:transfer="true"
title="确认要删除吗"
@on-ok="deleteFundLog(scope.row)">
<Button size="small" type="error" style="margin-left: 10px;margin-bottom: 4px" ghost>删除</Button>
</Poptip>
<Button size="small" type="primary" style="margin-left: 10px;margin-bottom: 4px" @click="$refs['detailPaymentRegistration'].getFundLog(scope.row.id),$refs['detailPaymentRegistration'].isShow = true">编辑</Button>
</template>
<Button size="small" type="primary" style="margin-left: 10px;margin-bottom: 4px" @click="$refs['printRegistration'].getDetailFundLog(scope.row.id),$refs['printRegistration'].isShow = true">打印</Button>
</template>
</el-table-column>
@ -45,7 +46,7 @@
<printRegistration ref="printRegistration"></printRegistration>
<examineRegistration ref="examineRegistration" @refresh="getFundLogs"></examineRegistration>
<detailPaymentRegistration ref="detailPaymentRegistration" @success="getFundLogs"></detailPaymentRegistration>
</div>
</template>
@ -55,11 +56,11 @@ import {parseTime} from "@/utils"
import {Message} from "element-ui";
import printRegistration from "./components/printRegistration";
import examineRegistration from "./components/examineRegistration";
import detailPaymentRegistration from "./components/detailPaymentRegistration";
export default {
components:{
printRegistration,
examineRegistration
detailPaymentRegistration
},
data() {
return {
@ -69,25 +70,34 @@ export default {
table:[
{
label:"项目名称",
width: 150,
minWidth: 150,
prop:'contract.name'
},
{
label:"付款申请金额(元)",
label:"付款申请金额(元)",
prop:"apply_money",
align:'right',
width: 165
width: 180
},
{
label:'实际金额',
label:'实际付金额',
prop:"act_money",
align:'right',
width: 165
width: 180
},
{
label:"款项类型",
prop:"type",
width: 120
width: 140
},
{
prop:'status',
label:'状态',
width: 140,
formatter:(cell,data,value)=>{
if(value === 0) return '待审核'
else return '已审核'
}
},
{
label:"是否最后一笔",
@ -100,7 +110,7 @@ export default {
{
label:"创建信息",
prop:"created_at",
minWidth:200,
width:220,
formatter:(cell,data,value)=>{
return parseTime(new Date(value))
}

@ -3,7 +3,7 @@
<div class="app-container">
<div>当前登录人{{user.name}}</div>
<div ref="lxHeader">
<LxHeader icon="md-apps" text="通知公告" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<LxHeader icon="md-apps" text="待办事项" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content" />
<slot>
<div></div>
@ -13,6 +13,7 @@
<div class="table-tree">
<el-table :data="list" border class="v-table" style="width: 100%;margin-bottom: 20px;">
<el-table-column type="index" label="序号" align="center" />
<el-table-column prop="type" width="100" label="类型" align="center" :formatter="typeFormatter"/>
<el-table-column prop="content" label="内容" align="left" />
<el-table-column prop="created_at" width="200" label="下发时间" align="center" :formatter="timeFormatter"/>
<el-table-column fixed="right" width="100" label="状态" align="center" prop="read_count">
@ -82,6 +83,9 @@ export default {
timeFormatter(cell,data,value) {
return parseTime(new Date(value))
},
typeFormatter(cell,data,value){
return value === 1 ? '合同类型' : '付款类型'
},
async getNotices(){
const res = await getNotice({page_size:10,page:this.pageIndex})

@ -0,0 +1,386 @@
<template>
<div>
<!-- 付款登记审核-->
<xy-dialog title="付款审核" :is-show.sync="isShow" type="form" class="payment-registration" :form="paymentRegistrationForm" :rules="paymentRegistrationRules" ref="paymentRegistration" @submit="editor">
<template v-slot:extraFormTop>
<div class="payment-registration-row">
<div class="payment-registration-row-title">受款单位</div>
<div class="payment-registration-row-content">{{contract.carry_department}}</div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">合同名称</div>
<div class="payment-registration-row-content">{{contract.name}}</div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">合同金额</div>
<div class="payment-registration-row-content">{{contract.money}}</div>
</div>
<div style="display: flex">
<div class="payment-registration-row">
<div class="payment-registration-row-title">已付金额</div>
<div class="payment-registration-row-content">{{totalMoney()}} </div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">支付占比</div>
<div class="payment-registration-row-content">{{percentPay()}}%</div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">已付笔数</div>
<div class="payment-registration-row-content">{{payment.length}}</div>
<div class="payment-registration-row-content" style="color: #ff0000;padding-left: 16px;cursor: pointer;">
<Poptip :transfer="true">
<div>点击查看列表</div>
<template v-slot:content>
<template v-if="payment&&payment.length>0">
<xy-table :height="200" :list="payment" :table-item="payTable">
<template v-slot:btns><p></p></template>
</xy-table>
</template>
<template v-else>
<div style="text-align: center">暂无已付笔数</div>
</template>
</template>
</Poptip>
</div>
</div>
</div>
</template>
<template v-slot:applyMoney>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>申请付款金额
</div>
<div class="xy-table-item-content xy-table-item-price">
<el-input readonly clearable placeholder="请填写付款金额" v-model="paymentRegistrationForm.applyMoney" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:deductionMoney>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>本期扣款金额
</div>
<div class="xy-table-item-content xy-table-item-price">
<el-input readonly clearable placeholder="请填写扣款金额" v-model="paymentRegistrationForm.deductionMoney" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:type>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>款项类型
</div>
<div class="xy-table-item-content">
<!-- <el-input readonly clearable placeholder="选择款项类型或直接填写其他类型" v-model="paymentRegistrationForm.type" style="width: 300px;"/>-->
<el-select placeholder="选择款项类型或直接填写其他类型"
v-model="paymentRegistrationForm.type"
style="width: 200px;"
disabled
filterable
allow-create
clearable>
<el-option
v-for="item in paymentType"
:key="item"
:label="item"
:value="item">
</el-option>
</el-select>
</div>
</div>
</template>
<template v-slot:isLast>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>是否最后一笔
</div>
<div class="xy-table-item-content">
<el-switch disabled v-model="paymentRegistrationForm.isLast"/>
</div>
</div>
</template>
<template v-slot:actMoney>
<div class="xy-table-item">
<div class="xy-table-item-label">
<span style="color: red;font-weight: 600;padding-right: 4px;">*</span>实际付款金额
</div>
<div class="xy-table-item-content">
<el-input placeholder="请填写实际付款金额" v-model="paymentRegistrationForm.actMoney" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:extraFormBottom v-if="paymentRegistrationForm.isLast">
<Input search enter-button=" " placeholder="搜索预算计划.." v-model="searchContent" @on-search="getBudgets"/>
<xy-table :list="plans" :show-index="false" :table-item="planTable" :height="310" style="margin-top: 10px;" ref="planTable" @select="selectPlan">
<template v-slot:btns>
<el-table-column label="使用金额" header-align="center">
<template slot-scope="scope">
<Input disabled :value="scope.row.use_money" @input="(e)=>scope.row.use_money = e"/>
</template>
</el-table-column>
</template>
</xy-table>
<div style="display: flex;justify-content: flex-end;">
<Page :total="planTotal" show-elevator @on-change="pageChange"/>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {getparameter} from "@/api/system/dictionary"
import {getFundLog,detailFundLog,editorFundLog} from "@/api/paymentRegistration/fundLog"
import {getBudget} from "@/api/budget/budget";
import {detailContract} from "@/api/contract/contract";
import {Message} from "element-ui";
import {parseTime} from "@/utils";
export default {
data() {
return {
searchContent:"",
planTotal:0,
pageIndex:1,
//
plans:[],
contract:{},
payment:[],//
payTable:[
{
label:'支付金额',
prop:'act_money',
sortable:false,
align:'right'
},
{
label:'时间',
prop:'created_at',
sortable:false,
width:120,
formatter:(t1,t2,value)=>{
return parseTime(new Date(value),'{y}-{m}-{d}')
}
}
],
paymentType:["进度款","结算款","质保金"],
isShow:false,
registrationId:"",
paymentRegistrationForm:{
applyMoney:"",
deductionMoney:"",
type:"",
isLast:false,
plan:[],
actMoney:''
},
paymentRegistrationRules:{
applyMoney:[
{required:true,message:"必填"}
],
deductionMoney:[
{required:true,message:"必填"}
],
type:[
{required:true,message:"必选"}
],
actMoney:[
{required:true,message:"必填"}
]
},
planTable:[
{
sortable:false,
width:36,
type:'selection',
selectable:()=>{
return false
}
},
{
label:"分类",
prop:'type',
formatter:(cell,data,value)=>{
switch (value){
case 1:
return "部门预算"
break;
case 2:
return "水务计划"
break;
default:
return "未知"
}
}
},
{
label:"名称",
prop:'name',
align:'left'
},
{
label:"计划金额",
prop:'money',
align:'right'
}
],
}
},
methods: {
//
pageChange(e){
this.pageIndex = e
this.getBudgets()
},
//
totalMoney(){
let total = 0.00
this.payment.map(item => {
total += Number(item.act_money)
})
return total.toFixed(2)
},
//
percentPay(){
let total = this.totalMoney()
return (total/this.contract.money)*100 || 0
},
async getRegistration(id){
this.registrationId = id
const res = await detailFundLog({id})
this.paymentRegistrationForm.type = res.type
this.paymentRegistrationForm.isLast = res.is_end === 1 ? true : false
this.paymentRegistrationForm.deductionMoney = res.apply_money
this.paymentRegistrationForm.applyMoney = res.apply_money
this.paymentRegistrationForm.plan = res.plan_link
await this.getContract(res.contract)
},
//
async getContract(info){
this.contract = info
const res = await getFundLog({contract_id:this.contract.id})
this.payment = res.data
if(!this.paymentRegistrationForm.isLast) return
this.toggleSelection(this.paymentRegistrationForm.plan.map(item => {
return item.plan_id
}))
},
//
editor(){
editorFundLog({
id:this.registrationId,
contract_id:this.contract.id,
act_money:this.paymentRegistrationForm.actMoney,
status:1
}).then(res=>{
this.$emit('refresh')
this.isShow = false
this.paymentRegistrationForm.actMoney = ''
Message({
type:'success',
message:'操作成功'
})
})
},
//
//
async getBudgets(){
let res = await getBudget({name:this.searchContent,page_size:10,page:this.pageIndex})
this.plans = res.data
this.planTotal = res.total
if(!this.paymentRegistrationForm.is_end) return
this.toggleSelection(this.paymentRegistrationForm.plan.map(item => {
return item.plan_id
}))
},
planPageChange(e){
this.plansPageIndex = e
this.getBudgets()
},
selectPlan(sel,row){
if(sel){
this.paymentRegistrationForm.plan = sel.map(item => {
return {
plan_id:item.id,
use_money:item.useMoney,
new_money:item.money
}
})
}else{
this.paymentRegistrationForm.plan = []
}
},
toggleSelection(plans) {
//console.log(this.paymentRegistrationForm)
if (plans) {
plans.map((plan,index) => {
let list = this.plans.map(item => {return item.id})
if(list.indexOf(plan) != -1){
this.plans[list.indexOf(plan)].use_money = this.paymentRegistrationForm.plan[index].use_money
}
})
this.plans.filter(plan => {
return plans.includes(plan.id)
}).map(row => {
this.$refs.planTable.toggleRowSelection(row);
})
} else {
this.$refs.planTable.clearSelection();
}
},
},
async mounted() {
await this.getBudgets()
}
}
</script>
<style scoped lang="scss">
.payment-registration{
&-row{
display: flex;
padding: 6px 0;
&-title{
padding: 0 10px;
}
&-content{
}
}
}
.xy-table-item-label{
width: 140px;
}
.xy-table-item-price{
position: relative;
&::after{
z-index: 1;
position: absolute;
right: 0;
top: 0;
content:'(元)'
}
::v-deep .el-input__clear{
position: relative;
right: 30px;
z-index: 2;
}
}
</style>

@ -0,0 +1,149 @@
<template>
<div style="padding: 0 20px;">
<lx-header icon="md-apps" text="付款登记" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content"></div>
<slot>
<span style="padding: 0 6px;word-break: keep-all;">创建日期</span>
<span>
<DatePicker placeholder="请选择日期" type="date" placement="bottom-start" style="width: 180px"></DatePicker>
</span>
<span style="padding: 0 6px;word-break: keep-all;">关键字</span>
<span>
<Input placeholder="请输入关键字" style="width: 180px"></Input>
</span>
<Button type="primary" style="margin-left: 10px" ghost>重置</Button>
<Button type="primary" style="margin-left: 10px" @click="getFundLogs"></Button>
</slot>
</lx-header>
<xy-table :list="list" :table-item="table">
<template v-slot:btns>
<el-table-column label="操作" fixed="right" width="160" header-align="center">
<template slot-scope="scope">
<template v-if="scope.row.status === 0">
<Button size="small" type="primary" style="margin-left: 10px;margin-bottom: 4px" @click="$refs['examineRegistration'].isShow = true,$refs['examineRegistration'].getRegistration(scope.row.id)">审核确认</Button>
</template>
<template v-else>
<Button size="small" type="error" ghost style="margin-left: 10px;margin-bottom: 4px" @click="cancelExamine(scope.row)"></Button>
</template>
</template>
</el-table-column>
</template>
</xy-table>
<div style="display: flex;justify-content: flex-end;">
<Page :total="total" show-elevator @on-change="pageChange"/>
</div>
<examineRegistration ref="examineRegistration" @refresh="getFundLogs"></examineRegistration>
</div>
</template>
<script>
import {getFundLog,delFundLog,editorFundLog} from "@/api/paymentRegistration/fundLog"
import {parseTime} from "@/utils"
import {Message} from "element-ui";
import examineRegistration from "./components/examineRegistration";
export default {
components:{
examineRegistration
},
data() {
return {
list:[],
total:0,
pageIndex:1,
table:[
{
label:"项目名称",
width: 150,
prop:'contract.name'
},
{
label:"付款申请金额(元)",
prop:"apply_money",
align:'right',
width: 165
},
{
label:'实际付款金额',
prop:"act_money",
align:'right',
width: 165
},
{
label:"款项类型",
prop:"type",
width: 120
},
{
prop:'status',
label:'状态',
width: 140,
formatter:(cell,data,value)=>{
if(value === 0) return '待审核'
else return '已审核'
}
},
{
label:"是否最后一笔",
prop:"is_end",
width: 150,
formatter:(cell,data,value)=>{
return value == 1 ? "是" : "否"
}
},
{
label:"创建信息",
prop:"created_at",
minWidth:200,
formatter:(cell,data,value)=>{
return parseTime(new Date(value))
}
}
]
}
},
methods: {
pageChange(e){
this.pageIndex = e
this.getFundLogs()
},
async getFundLogs(){
const res = await getFundLog({page_size:10,page:this.pageIndex})
this.list = res.data
this.total = res.total
},
deleteFundLog(row){
delFundLog({id:row.id}).then(res=>{
Message({
type:'success',
message:'操作成功'
})
this.getFundLogs()
})
},
cancelExamine(row){
editorFundLog({id:row.id,status:0}).then(res=>{
this.getFundLogs()
Message({
type:"success",
message:"操作成功"
})
})
}
},
mounted() {
this.getFundLogs()
}
}
</script>
<style scoped lang="scss">
</style>

@ -5,35 +5,152 @@
<slot>
<span style="padding: 0 6px;word-break: keep-all;">年份</span>
<span>
<DatePicker placeholder="请选择年份" type="year" placement="bottom-start" style="width: 160px"></DatePicker>
<DatePicker :value="select.year" placeholder="请选择年份" type="year" placement="bottom-start" style="width: 160px" @on-change="(e)=>select.year = e"></DatePicker>
</span>
<span style="padding: 0 6px;word-break: keep-all;">预算类型</span>
<span>
<Select placeholder="请选择预算类型" type="date" style="width: 160px"></Select>
<Select clearable v-model="select.type" placeholder="请选择预算类型" type="date" style="width: 160px">
<Option v-for="item in type" :value="item.value" :key="item.value">{{item.label}}</Option>
</Select>
</span>
<span style="padding: 0 6px;word-break: keep-all;">科室</span>
<span style="padding: 0 6px;">
科室
</span>
<span>
<Select placeholder="请选择科室" type="date" style="width: 160px"></Select>
</span>
<el-cascader
placeholder="选择科室"
size="small"
:value="select.department"
style="width: 160px;"
:options="departments"
:props="{ checkStrictly: true, label: 'name', value: 'id' }"
clearable
@change="e => select.department = e[e.length-1] || ''"/>
</span>
<Button type="primary" style="margin-left: 10px" ghost>重置</Button>
<Button type="primary" style="margin-left: 10px">查询</Button>
<Button type="primary" style="margin-left: 10px" ghost @click="select = {pageIndex:1,year:'',type:'',department:''}">重置</Button>
<Button type="primary" style="margin-left: 10px" @click="getPlanProgress"></Button>
</slot>
</lx-header>
<xy-table></xy-table>
<xy-table :table-item="table" :list="list">
<template v-slot:btns>
<div></div>
</template>
</xy-table>
<div style="display: flex;justify-content: flex-end;">
<Page :total="total" show-elevator @on-change="pageChange"/>
</div>
</div>
</template>
<script>
import {getProgress} from "@/api/budget/budget"
import {listdept} from "@/api/system/department";
export default {
data() {
return {}
return {
type:[
{
label:'部门预算',
value:1
},
{
label:'水务计划',
value:2
}
],//
departments:[],
select:{
pageIndex:1,
year:'',
type:'',
department:''
},
total:0,
list:[],
table:[
{
prop:'type',
label:'预算类型',
width: 120,
formatter:(cell,data,value)=>{
switch (value){
case 1:
return "部门预算"
break;
case 2:
return "水务计划"
break;
default:
return "未知"
}
}
},
{
prop:'name',
label:'项目名称',
width: 200
},
{
prop:'year',
label:'所属年份',
width: 160
},
{
prop:'plan_department.name',
label:"相关科室",
width: 180
},
{
prop:'content',
label:'描述',
align:'left'
},
{
prop:'rate',
label:'进展率',
width: 160,
formatter:(cell,data,value)=>{
return value + '%'
}
}
]
}
},
methods: {},
methods: {
//
pageChange(e){
this.select.pageIndex = e
this.getPlanProgress()
},
//
getDepartment(){
listdept().then(res=>{
this.departments = res
})
},
async getPlanProgress(){
const res = await getProgress({
page_size:10,
page:this.select.pageIndex,
year:this.select.year,
type:this.select.type,
plan_department_id:this.select.department
})
this.list = res.data
this.total = res.total
console.log(res)
}
},
mounted() {
this.getDepartment()
this.getPlanProgress()
}
}
</script>

@ -52,6 +52,13 @@ module.exports = {
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
},
'/oa':{
target:'http://suzhouhedaooa.langye.net',
changeOrigin: true, //配置跨域
pathRewrite: {
'/oa': '/'
}
}
}
},

Loading…
Cancel
Save