master
271556543@qq.com 3 years ago
parent 8cbc4aaaec
commit 53f3c86126

@ -39,3 +39,4 @@ export function editorContract(data){
data
})
}

@ -0,0 +1,9 @@
import request from "@/utils/request";
export function addContractSign(data){
return request({
method:'post',
url:'/api/admin/sign_plan/store',
data
})
}

@ -0,0 +1,9 @@
import request from "@/utils/request";
export function getNotice(params){
return request({
method:'get',
url:'/api/admin/notice/index',
params
})
}

@ -0,0 +1,17 @@
import request from "@/utils/request";
export function getFundLog(params){
return request({
method:'get',
url:'/api/admin/fund_log/index',
params
})
}
export function addFundLog(data){
return request({
method:'post',
url:"/api/admin/fund_log/store",
data
})
}

@ -82,8 +82,22 @@ export default {
editorClick(row){
this.$emit('editor',row)
},
selectClick(selection, row){
this.$emit('select',selection, row)
},
createIndexRow(){
return <el-table-column type="index" align="center" fixed="left"></el-table-column>
},
toggleRowSelection(row){
this.$nextTick(()=>{
this.$refs.table.toggleRowSelection(row);
})
},
clearSelection(){
this.$refs.table.clearSelection();
},
toggleAllSelection(){
this.$refs.table.toggleAllSelection()
}
},
created() {
@ -92,11 +106,12 @@ export default {
mounted() {
},
render(h) {
let {height,createIndexRow,tableStyle,treeProps,showSummary,showHeader,$scopedSlots,showIndex,defaultExpandAll,headerCellStyle,headerRowStyle,rowStyle,cellStyle,indent,tableHeight,tableItem,list,deleteClick,editorClick} = this
let {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 ?
(<el-table
ref="table"
show-summary={showSummary}
show-header={showHeader}
header-row-style={headerRowStyle}
@ -112,7 +127,8 @@ export default {
border
default-expand-all={defaultExpandAll}
tree-props={treeProps}
fit={true}>
fit={true}
on={{['select']:selectClick}}>
{
//
showIndex ? createIndexRow() : ''
@ -171,7 +187,8 @@ export default {
label={item1.label}
width={item1.width ?? 'auto'}
min-width={item1.minWidth ?? item1.width}
sortable={item1.sortable ?? true}>
sortable={item1.sortable ?? true}
type={item1.type ?? ''}>
</el-table-column>
)
}
@ -190,7 +207,8 @@ export default {
align={item.align ?? 'center'}
label={item.label}
prop={item.prop}
sortable={item.sortable ?? true}>
sortable={item.sortable ?? true}
type={item.type ?? ''}>
</el-table-column>
)
}

@ -183,3 +183,7 @@ top: 41px !important;
background: #ddd;
}
.app-main{
background: #EFF2F9;
}

@ -0,0 +1,68 @@
<template>
<div>
<xy-dialog :is-show.sync="isShow" title="合同签订" type="form">
<template v-slot:extraFormTop>
<div class="base-info">
<div class="base-info-title">合同信息</div>
<div class="base-info-item">
<div class="base-info-item-title">合同名称</div>
<div class="base-info-item-content">{{contract.name}}</div>
</div>
</div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {addContractSign} from "@/api/contractSign/contractSign";
import {detailContract} from "@/api/contract/contract";
export default {
data() {
return {
isShow:false,
contractId:null,
contract:{},
}
},
methods: {
async getContract(){
const res = await detailContract({id:this.contractId})
this.contract = res
}
},
watch:{
contractId(){
this.getContract()
}
}
}
</script>
<style scoped lang="scss">
.base-info{
&-title{
font-weight: 600;
padding: 0 10px;
}
&-item{
display: flex;
margin-top: 8px;
&-title{
padding: 0 20px;
}
&-content{
}
&-unit{
margin-left: 20px;
}
}
}
</style>

@ -0,0 +1,253 @@
<template>
<div>
<!-- 合同详情-->
<xy-dialog :is-show.sync="isShowDetail" type="normal" title="详情" class="contract-detail" v-if="detail">
<template v-slot:normalContent>
<div class="base-info">
<div class="base-info-title">项目基本信息</div>
<div class="base-info-item">
<div class="base-info-item-title">项目名称</div>
<div class="base-info-item-content">{{detail.name}}</div>
</div>
<div class="base-info-item">
<div class="base-info-item-title">项目类型</div>
<div class="base-info-item-content">{{detail.type}}</div>
</div>
<div style="display: flex;justify-content: space-between;">
<div class="base-info-item" style="flex-basis: 50%">
<div class="base-info-item-title">采购形式</div>
<div class="base-info-item-content">{{detail && detail.purchase_way.value}}</div>
</div>
<div class="base-info-item" style="flex-basis: 50%">
<div class="base-info-item-title">采购方式</div>
<div class="base-info-item-content">{{detail && detail.purchase_type.value}}</div>
</div>
</div>
<div class="base-info-item">
<div class="base-info-item-title">项目预算</div>
<div class="base-info-item-content">{{detail.plan_price}}</div>
<div class="base-info-item-unit">()</div>
</div>
<div class="base-info-item">
<div class="base-info-item-title">资金渠道</div>
<div class="base-info-item-content">{{detail && detail.money_way.value}}</div>
</div>
</div>
<div class="link-budget-plan">
<div class="link-budget-plan-title">关联预算计划</div>
<xy-table :height="260" :table-item="linkBudgetPlanTable" :show-index="false" :list="detail.plans">
<template v-slot:btns>
<div></div>
</template>
</xy-table>
</div>
<div class="sign-info">
<div class="sign-info-title">签订信息</div>
<div class="sign-info-item">
<div class="sign-info-item-title">合同金额</div>
<div class="sign-info-item-content">{{detail.money}}</div>
<div class="sign-info-item-unit"></div>
</div>
<div style="display: flex;justify-content: space-between">
<div class="sign-info-item" style="flex-basis: 50%">
<div class="sign-info-item-title">承包商\供应商</div>
<div class="sign-info-item-content">{{detail.supply}}</div>
</div>
<div class="sign-info-item" style="flex-basis: 50%">
<div class="sign-info-item-title">执行部门</div>
<div class="sign-info-item-content">{{detail.carry_department}}</div>
</div>
</div>
</div>
<div class="related-processes">
<div class="related-processes-title">相关流程</div>
<div class="related-processes-item">
<div>采购流程查看</div>
<div>合同会签流程</div>
<div>招标审批流程</div>
</div>
</div>
<div class="journal">
<div class="journal-title">日志</div>
<xy-table :height="240" :table-item="journalTable" :list="detail.log" :show-index="false">
<template v-slot:btns>
<div></div>
</template>
</xy-table>
</div>
</template>
<template v-slot:footerContent>
<div></div>
</template>
</xy-dialog>
</div>
</template>
<script>
import {detailContract} from "@/api/contract/contract";
import {parseTime} from "@/utils"
export default {
data() {
return {
//
detail:null,
isShowDetail:false,
linkBudgetPlanTable:[
{
label:"ID",
sortable:false,
prop:'id',
width:160
},
{
label:"类型",
width:100,
sortable: false,
customFn:(row)=>{
return (
<div>
<Tag color="primary">
{row.type === 1 ? '部门预算' : '水务计划'}
</Tag>
</div>
)
}
},
{
label:"项目",
width: 140,
sortable: false,
prop:'name'
},
{
label:"金额",
sortable: false,
prop:'money',
align:'right'
}
],
journalTable:[
{
label:'ID',
sortable:false,
prop:'id'
},
{
label:"日志类型",
sortable:false
},
{
label:"日志内容",
sortable:false
},
{
label:"操作人",
sortable:false
},
{
label:"时间",
sortable:false,
prop:'created_at',
formatter:(cell,data,value)=>{
return parseTime(new Date(value),'{y}-{m}-{d}')
}
}
],
}
},
methods: {
async getDetail(id){
let res = await detailContract({id:id})
this.detail = res
},
},
}
</script>
<style scoped lang="scss">
.contract-detail{
.base-info{
&-title{
font-weight: 600;
padding: 0 10px;
}
&-item{
display: flex;
margin-top: 8px;
&-title{
padding: 0 20px;
}
&-content{
}
&-unit{
margin-left: 20px;
}
}
}
.link-budget-plan{
margin-top: 20px;
&-title{
@extend .base-info-title;
padding-bottom: 10px;
}
}
.sign-info{
&-title{
@extend .link-budget-plan-title;
}
&-item{
@extend .base-info-item;
&-title{
@extend .base-info-item-title;
}
&-content{
@extend .base-info-item-content;
}
&-unit{
@extend .base-info-item-unit;
}
}
}
.related-processes{
margin-top: 20px;
&-title{
@extend .link-budget-plan-title;
}
&-item{
color: red;
cursor: pointer;
display: flex;
&>div{
flex-basis: 25%;
padding: 0 20px;
}
}
}
.journal{
margin-top: 20px;
&-title{
@extend .link-budget-plan-title;
}
}
}
</style>

@ -22,9 +22,9 @@
</template>
<template v-slot:methods>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>采购类型</Col>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>采购形式</Col>
<Col>
<Select placeholder="请选择采购类型" v-model="detail.methods" style="width: 300px;">
<Select placeholder="请选择采购形式" v-model="detail.methods" style="width: 300px;">
<Option v-for="item in purchaseType" :value="item.id" :key="item.id">{{ item.value }}</Option>
</Select>
</Col>
@ -32,9 +32,9 @@
</template>
<template v-slot:modality>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>采购</Col>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>采购</Col>
<Col>
<Select placeholder="请选择采购式" v-model="detail.modality" style="width: 300px;">
<Select placeholder="请选择采购式" v-model="detail.modality" style="width: 300px;">
<Option v-for="item in purchaseWay" :value="item.id" :key="item.id">{{ item.value }}</Option>
</Select>
</Col>
@ -91,7 +91,7 @@
<template v-slot:normalContent>
<Input v-model="planSearch" search enter-button=" " placeholder="搜索预算计划.." @on-search="getBudgets"/>
<xy-table :list="plans" :show-index="false" :table-item="planTable" :height="300" style="margin-top: 10px;">
<xy-table :list="plans" :show-index="false" :table-item="planTable" :height="310" style="margin-top: 10px;" ref="editorPlanTable" @select="selectPlan">
<template v-slot:btns>
<el-table-column label="使用金额" header-align="center">
<template slot-scope="scope">
@ -169,13 +169,7 @@ export default {
{
sortable:false,
width:36,
customFn:(row)=>{
return (
<div>
<Checkbox value={this.isInArray(row.id)} on={{['on-change']:(e)=>this.selectPlan(e,row)}}></Checkbox>
</div>
)
}
type:"selection"
},
{
label:"分类",
@ -209,30 +203,22 @@ export default {
}
},
methods: {
//
isInArray(id){
this.detail.plan.map(item=>{
return item.value.plan_id === id ? true : false
})
},
//
selectPlan(e,row){
if(e){
this.detail.plan.push({
label:row.name,
value:{
plan_id:row.id,
use_money:row.useMoney ?? row.money,
new_money:row.money
selectPlan(sel,row){
if(sel){
this.detail.plan = sel.map(item => {
return {
label:item.name,
value:{
plan_id:item.id,
use_money:item.useMoney ?? item.money,
new_money:item.money
}
}
})
}else{
this.detail.plan.map((item,index)=>{
if(item.value.plan_id === row.id){
this.detail.plan.splice(index,1)
}
})
this.detail.plan = []
}
},
delPlan(val){
@ -247,11 +233,27 @@ export default {
let res = await getBudget({name:this.planSearch,page_size:10,page:this.plansPageIndex})
this.plans = res.data
this.planTotal = res.total
this.toggleSelection(this.detail.plan.map(item => {
return item.value.plan_id
}))
},
planPageChange(e){
this.plansPageIndex = e
this.getBudgets()
},
//
toggleSelection(plans) {
if (plans) {
this.plans.filter(plan => {
return plans.includes(plan.id)
}).map(row => {
this.$refs.editorPlanTable.toggleRowSelection(row)
})
} else {
this.$refs.editorPlanTable.clearSelection()
}
},
async getDetail(id){
let res = await detailContract({id:id})
this.contrantId = res.id
@ -296,10 +298,12 @@ export default {
})
this.$emit('success')
})
}
},
},
mounted() {
}
},
}
</script>

@ -0,0 +1,333 @@
<template>
<div>
<!-- 付款登记-->
<xy-dialog title="付款登记" :is-show.sync="isShowPaymentRegistration" type="form" class="payment-registration" :form="paymentRegistrationForm" :rules="paymentRegistrationRules" @submit="submit">
<template v-slot:extraFormTop>
<div class="payment-registration-row">
<div class="payment-registration-row-title">受款单位</div>
<div class="payment-registration-row-content">受款单位</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>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>申请付款金额</Col>
<Col>
<Input placeholder="请填写付款金额" v-model="paymentRegistrationForm.applyMoney" style="width: 300px;"></Input>
</Col>
</Row>
</template>
<template v-slot:deductionMoney>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>本期扣款金额</Col>
<Col>
<Input placeholder="请填写扣款金额" v-model="paymentRegistrationForm.deductionMoney" style="width: 300px;"></Input>
</Col>
</Row>
</template>
<template v-slot:actMoney>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>实际支付金额</Col>
<Col>
<Input placeholder="请填写实际支付金额" v-model="paymentRegistrationForm.actMoney" style="width: 300px;"></Input>
</Col>
</Row>
</template>
<template v-slot:type>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>款项类型
</Col>
<Col>
<Select placeholder="请选择款项类型" v-model="paymentRegistrationForm.type" style="width: 300px;">
<Option v-for="item in paymentType" :key="item.id" :value="item.id">{{item.value}}</Option>
</Select>
</Col>
</Row>
</template>
<template v-slot:isLast>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>是否最后一笔</Col>
<Col>
<i-switch v-model="paymentRegistrationForm.isLast" @on-change="paymentRegistrationForm.isLast = $event" />
</Col>
</Row>
</template>
<template v-slot:extraFormBottom>
<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"/>
</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,addFundLog} 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:[],
isShowPaymentRegistration:false,
paymentRegistrationForm:{
applyMoney:"",
deductionMoney:"",
actMoney:'',
type:"",
isLast:"",
plan:[]
},
paymentRegistrationRules:{
applyMoney:[
{required:true,message:"必填"}
],
deductionMoney:[
{required:true,message:"必填"}
],
actMoney:[
{required:true,message:"必填"}
],
type:[
{required:true,message:"必选"}
]
},
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'
}
],
}
},
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 this.contract.money/total || 0
},
//
async getContract(info){
this.contract = await detailContract({id:info.id})
this.paymentRegistrationForm.plan = this.contract.plans.map(item=>{
return {
plan_id:item.id,
use_money:item.useMoney ?? item.money,
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
}))
},
//
async getPaymentType(){
const res = await getparameter({number:'payment_type'})
this.paymentType = res.detail
},
submit(){
addFundLog({
contract_id:this.contract.id,
apply_money:this.paymentRegistrationForm.applyMoney,
discount_money:this.paymentRegistrationForm.deductionMoney,
act_money:this.paymentRegistrationForm.actMoney,
type:this.paymentRegistrationForm.type,
is_end:this.paymentRegistrationForm ? 1 : 0,
contract_plan_links:this.paymentRegistrationForm.plan
}).then(res=>{
this.isShowPaymentRegistration = false
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
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 ?? item.money,
new_money:item.money
}
})
}else{
this.paymentRegistrationForm.plan = []
}
},
toggleSelection(plans) {
if (plans) {
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.getPaymentType()
await this.getBudgets()
}
}
</script>
<style scoped lang="scss">
.payment-registration{
&-row{
display: flex;
padding: 6px 0;
&-title{
padding: 0 10px;
}
&-content{
}
}
}
</style>

@ -72,7 +72,6 @@
:parser="value => value.replace(/$s?|(,*)/g, '')"/>
</div>
<Button type="primary" style="margin-left: 10px" @click="isShowPaymentRegistration = true">付款登记</Button>
<Button type="primary" style="margin-left: 10px" @click="isShowAdd = true">新增</Button>
<Button type="primary" style="margin-left: 10px" @click="getContracts"></Button>
<Button type="primary" style="margin-left: 10px" ghost
@ -86,9 +85,18 @@
<template v-slot:btns>
<el-table-column label="操作" fixed="right" width="200" header-align="center">
<template slot-scope="scope">
<Button type="error" size="small" @click="()=>deleteContract(scope.row.id)" ghost>删除</Button>
<Button type="primary" size="small" style="margin-left: 6px;" @click="isShowDetail = true">查看</Button>
<Button type="primary" size="small" style="margin-left: 6px;" @click="$refs['editor'].isShowEditor = true,$refs['editor'].getDetail(scope.row.id)">编辑</Button>
<div class="slot-btns">
<Button class="slot-btns-item" type="primary" size="small" @click="$refs['paymentRegistration'].isShowPaymentRegistration = true,$refs['paymentRegistration'].getContract(scope.row)">付款登记</Button>
<Button class="slot-btns-item" type="primary" size="small" @click="$refs['contractSign'].isShow = true,$refs['contractSign'].contractId = scope.row.id">签订合同</Button>
<Button class="slot-btns-item" type="primary" size="small" @click="test"></Button>
<Button class="slot-btns-item" type="primary" size="small">附件管理</Button>
<Button class="slot-btns-item" type="primary" size="small">请示流程</Button>
<Button class="slot-btns-item" type="primary" size="small">合同会签流程申请</Button>
<Button class="slot-btns-item" type="primary" size="small">采购流程申请</Button>
<Button class="slot-btns-item" type="error" size="small" @click="()=>deleteContract(scope.row.id)" ghost>删除</Button>
<Button class="slot-btns-item" type="primary" size="small" @click="$refs['detailContract'].isShowDetail = true,$refs['detailContract'].getDetail(scope.row.id)">查看</Button>
<Button class="slot-btns-item" type="primary" size="small" @click="$refs['editor'].isShowEditor = true,$refs['editor'].getDetail(scope.row.id)">编辑</Button>
</div>
</template>
</el-table-column>
</template>
@ -98,88 +106,6 @@
<Page :total="total" show-elevator @on-change="pageChange"/>
</div>
<!-- 合同详情-->
<xy-dialog :is-show.sync="isShowDetail" type="normal" title="详情" class="contract-detail">
<template v-slot:normalContent>
<div class="base-info">
<div class="base-info-title">项目基本信息</div>
<div class="base-info-item">
<div class="base-info-item-title">项目名称</div>
<div class="base-info-item-content">项目名称</div>
</div>
<div class="base-info-item">
<div class="base-info-item-title">项目类型</div>
<div class="base-info-item-content">服务</div>
</div>
<div style="display: flex;justify-content: space-between;">
<div class="base-info-item" style="flex-basis: 50%">
<div class="base-info-item-title">采购形式</div>
<div class="base-info-item-content">服务区</div>
</div>
<div class="base-info-item" style="flex-basis: 50%">
<div class="base-info-item-title">采购方式</div>
<div class="base-info-item-content">服务</div>
</div>
</div>
<div class="base-info-item">
<div class="base-info-item-title">项目预算</div>
<div class="base-info-item-content">50</div>
<div class="base-info-item-unit">()</div>
</div>
<div class="base-info-item">
<div class="base-info-item-title">资金渠道</div>
<div class="base-info-item-content">部门预算</div>
</div>
</div>
<div class="link-budget-plan">
<div class="link-budget-plan-title">关联预算计划</div>
<xy-table :height="260" :table-item="linkBudgetPlanTable" :show-index="false" :list="[{}]">
<template v-slot:btns>
<div></div>
</template>
</xy-table>
</div>
<div class="sign-info">
<div class="sign-info-title">签订信息</div>
<div class="sign-info-item">
<div class="sign-info-item-title">合同金额</div>
<div class="sign-info-item-content">50</div>
<div class="sign-info-item-unit"></div>
</div>
<div style="display: flex;justify-content: space-between">
<div class="sign-info-item" style="flex-basis: 50%">
<div class="sign-info-item-title">承包商\供应商</div>
<div class="sign-info-item-content">某个公司</div>
</div>
<div class="sign-info-item" style="flex-basis: 50%">
<div class="sign-info-item-title">执行部门</div>
<div class="sign-info-item-content">信息科</div>
</div>
</div>
</div>
<div class="related-processes">
<div class="related-processes-title">相关流程</div>
<div class="related-processes-item">
<div>采购流程查看</div>
<div>合同会签流程</div>
<div>招标审批流程</div>
</div>
</div>
<div class="journal">
<div class="journal-title">日志</div>
<xy-table :height="240" :table-item="journalTable" :list="[{}]" :show-index="false">
<template v-slot:btns>
<div></div>
</template>
</xy-table>
</div>
</template>
<template v-slot:footerContent>
<div></div>
</template>
</xy-dialog>
<!-- 新增合同 -->
<xy-dialog :is-show.sync="isShowAdd" title="新增合同" type="form" :form="form" :rules="rules" @submit="submit" ref="addContract">
<template v-slot:name>
@ -254,7 +180,7 @@
<div class="contract-add-plan" style="width: 300px;" @click="isShowPlan = true,getBudgets()">
<template v-if="form.plan.length > 0">
<template v-for="item in form.plan">
<Tag closable color="primary" @on-close="delPlan(item,'add')">{{item.label}}</Tag>
<Tag closable color="primary" @on-close="delPlan(item)">{{item.label}}</Tag>
</template>
</template>
<template v-else>
@ -291,83 +217,17 @@
</template>
</xy-dialog>
<!-- 编辑-->
<editor :is-show-editor.sync="isShowEditor" :purchase-type="purchaseType" :purchase-way="purchaseWay" :money-way="moneyWay" ref="editor" @success="getContracts"></editor>
<!-- 付款登记-->
<xy-dialog title="付款登记" :is-show.sync="isShowPaymentRegistration" type="form" class="payment-registration" :form="paymentRegistrationForm" :rules="paymentRegistrationRules">
<template v-slot:extraFormTop>
<div class="payment-registration-row">
<div class="payment-registration-row-title">受款单位</div>
<div class="payment-registration-row-content">受款单位</div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">合同名称</div>
<div class="payment-registration-row-content">合同名称</div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">合同金额</div>
<div class="payment-registration-row-content">100000</div>
</div>
<div style="display: flex">
<div class="payment-registration-row">
<div class="payment-registration-row-title">已付金额</div>
<div class="payment-registration-row-content">20000 </div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">支付占比</div>
<div class="payment-registration-row-content">10%</div>
</div>
<div class="payment-registration-row">
<div class="payment-registration-row-title">已付笔数</div>
<div class="payment-registration-row-content">10</div>
<div class="payment-registration-row-content" style="color: #ff0000;padding-left: 16px;cursor: pointer;">点击查看列表</div>
</div>
</div>
</template>
<template v-slot:applyMoney>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>申请付款金额</Col>
<Col>
<Input placeholder="请填写付款金额" v-model="paymentRegistrationForm.applyMoney" style="width: 300px;"></Input>
</Col>
</Row>
</template>
<template v-slot:deductionMoney>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>本期扣款金额</Col>
<Col>
<Input placeholder="请填写扣款金额" v-model="paymentRegistrationForm.deductionMoney" style="width: 300px;"></Input>
</Col>
</Row>
</template>
<template v-slot:type>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>款项类型
</Col>
<Col>
<Select placeholder="请选择款项类型" v-model="paymentRegistrationForm.type" style="width: 300px;"></Select>
</Col>
</Row>
</template>
<template v-slot:isLast>
<Row>
<Col span="5"><span style="font-weight: 600;padding-right: 4px;color: red;">*</span>是否最后一笔</Col>
<Col>
<i-switch v-model="paymentRegistrationForm.isLast" @on-change="paymentRegistrationForm.isLast = $event" />
</Col>
</Row>
</template>
<template v-slot:extraFormBottom>
<Input search enter-button=" " placeholder="搜索预算计划.." />
<xy-table :list="[{}]" :show-index="false" :table-item="planTable" :height="240" style="margin-top: 10px;">
<template v-slot:btns>
<el-table-column label="使用金额" header-align="center">
<Input />
</el-table-column>
</template>
</xy-table>
</template>
</xy-dialog>
<!-- 查看-->
<detail ref="detailContract"></detail>
<!--付款登记-->
<paymentRegistration ref="paymentRegistration"></paymentRegistration>
<!-- 合同签订-->
<contractSign ref="contractSign"></contractSign>
</div>
</template>
@ -380,9 +240,15 @@ import {parseTime} from "@/utils"
import {Message} from "element-ui";
import editor from "./components/editorContract"
import detail from "./components/detailContract"
import paymentRegistration from "./components/paymentRegistration";
import contractSign from "@/views/contract/components/contractSign";
export default {
components:{
editor
editor,
detail,
paymentRegistration,
contractSign
},
data() {
var planPass = (rule, value, callback) => {
@ -521,78 +387,6 @@ export default {
}
],
//
isShowDetail:false,
linkBudgetPlanTable:[
{
label:"ID",
sortable:false,
width:160
},
{
label:"类型",
width:100,
sortable: false,
customFn:()=>{
return (
<div>
<Tag color="primary">类型一</Tag>
</div>
)
}
},
{
label:"项目",
width: 140,
sortable: false
},
{
label:"金额",
sortable: false
}
],
journalTable:[
{
label:'ID',
sortable:false
},
{
label:"日志类型",
sortable:false
},
{
label:"日志内容",
sortable:false
},
{
label:"操作人",
sortable:false
},
{
label:"时间",
sortable:false
}
],
//
isShowPaymentRegistration:false,
paymentRegistrationForm:{
applyMoney:"",
deductionMoney:"",
type:"",
isLast:""
},
paymentRegistrationRules:{
applyMoney:[
{required:true,message:"必填"}
],
deductionMoney:[
{required:true,message:"必填"}
],
type:[
{required:true,message:"必选"}
]
},
planTable:[
{
sortable:false,
@ -679,6 +473,11 @@ export default {
}
},
methods: {
test(){
let win = window.open('https://www.baidu.com', 'baidu', 'top=100,left=100,width=800,height=400')
},
//
pageChange(e){
this.select.pageIndex = e
@ -840,103 +639,16 @@ export default {
}
}
.payment-registration{
&-row{
display: flex;
padding: 6px 0;
&-title{
padding: 0 10px;
}
&-content{
}
}
}
.contract-detail{
.base-info{
&-title{
font-weight: 600;
padding: 0 10px;
}
&-item{
display: flex;
margin-top: 8px;
&-title{
padding: 0 20px;
}
&-content{
}
&-unit{
margin-left: 20px;
}
}
}
.link-budget-plan{
margin-top: 20px;
&-title{
@extend .base-info-title;
padding-bottom: 10px;
}
}
.sign-info{
&-title{
@extend .link-budget-plan-title;
}
&-item{
@extend .base-info-item;
&-title{
@extend .base-info-item-title;
}
&-content{
@extend .base-info-item-content;
}
&-unit{
@extend .base-info-item-unit;
}
}
}
.related-processes{
margin-top: 20px;
&-title{
@extend .link-budget-plan-title;
}
&-item{
color: red;
cursor: pointer;
display: flex;
&>div{
flex-basis: 25%;
padding: 0 20px;
}
}
}
.journal{
.slot-btns{
display: flex;
flex-wrap: wrap;
align-content: center;
justify-content: flex-start;
margin-top: 20px;
&-title{
@extend .link-budget-plan-title;
}
&-item{
margin: 0 6px 4px 0;
}
}
</style>

@ -10,7 +10,7 @@
<span style="padding: 0 6px;word-break: keep-all;">关键字</span>
<span>
<Input placeholder="请输入关键字" type="date" style="width: 180px"></Input>
<Input placeholder="请输入关键字" style="width: 180px"></Input>
</span>
<Button type="primary" style="margin-left: 10px" ghost>重置</Button>
@ -18,17 +18,70 @@
</slot>
</lx-header>
<xy-table></xy-table>
<xy-table :list="list" :table-item="table"></xy-table>
</div>
</template>
<script>
import {getFundLog} from "@/api/paymentRegistration/fundLog"
import {parseTime} from "@/utils"
export default {
data() {
return {}
return {
list:[],
total:0,
pageIndex:1,
table:[
{
label:"项目名称",
width: 150
},
{
label:"付款申请金额(万元)",
prop:"apply_money",
align:'right',
width: 165
},
{
label:'实际付款金额',
prop:"act_money",
align:'right',
width: 165
},
{
label:"款项类型",
prop:"type",
width: 120
},
{
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: {},
methods: {
async getFundLogs(){
const res = await getFundLog()
this.list = res.data
this.total = res.total
}
},
mounted() {
this.getFundLogs()
}
}
</script>

@ -32,6 +32,7 @@ import LxHeader from '@/components/LxHeader/index.vue'
import Pagination from '@/components/Pagination'
import { adminDepartmentList } from '../../api/system/department.js'
import { adminUserList, getInfo } from '../../api/user.js'
import {getNotice} from "@/api/dashboard/notice"
export default {
name: 'Manage',
components: {
@ -67,6 +68,11 @@ export default {
}).catch(error => {})
},
methods: {
async getNotices(){
const res = await getNotice({page_size:10})
console.log(res)
},
departmentChange(v) {
if (v.length > 0) {
adminUserList({department_id: v[v.length - 1], page_size: 9999}).then(r => {
@ -129,6 +135,9 @@ export default {
}).catch(error => {})
}).catch(() => {});
},
},
mounted() {
//this.getNotices()
}
}
</script>

Loading…
Cancel
Save