master
271556543@qq.com 4 years ago
parent 6692df3d2d
commit be5db37d00

@ -59,6 +59,10 @@ export default {
default:()=>{
return { width: '100%', marginBottom: "20px"}
}
},
btnWidth:{
type:Number,
default:190
}
},
data() {
@ -106,7 +110,7 @@ export default {
mounted() {
},
render(h) {
let {selectClick,height,createIndexRow,tableStyle,treeProps,showSummary,showHeader,$scopedSlots,showIndex,defaultExpandAll,headerCellStyle,headerRowStyle,rowStyle,cellStyle,indent,tableHeight,tableItem,list,deleteClick,editorClick} = this
let {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 ?
@ -188,7 +192,8 @@ export default {
width={item1.width ?? 'auto'}
min-width={item1.minWidth ?? item1.width}
sortable={item1.sortable ?? true}
type={item1.type ?? ''}>
type={item1.type ?? ''}
formatter={item1.formatter}>
</el-table-column>
)
}
@ -219,7 +224,7 @@ export default {
(<el-table-column
fixed="right"
label="操作"
width="190"
width={btnWidth}
header-align="center"
scopedSlots={{
default( scope ){
@ -256,7 +261,7 @@ export default {
<el-backtop
target=".el-table__body-wrapper"
visibility-height={130}
visibility-height={120}
bottom={68}
right={48}>
</el-backtop>

@ -294,6 +294,12 @@ export default {
prop:'plan_department.name',
width: 180
},
{
label:'金额',
prop:'money',
align:'right',
width: 160
},
{
label:"描述",
prop:'content',

@ -1,28 +1,46 @@
<template>
<div>
<xy-dialog :is-show.sync="isShow" title="合同签订" type="noraml">
<template v-slot:normalContent>
<div class="base-info">
<xy-dialog :is-show.sync="isShow" title="合同签订" type="form" :form="form" :rules="rules" @submit="sign" ok-text="">
<template v-slot:extraFormTop>
<div class="base-info" style="margin-bottom: 20px;">
<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 class="base-info-item">
<div class="base-info-item-title">合同金额</div>
<div class="base-info-item-content">{{contract.money}}</div>
<div class="base-info-item-unit">()</div>
</div>
</template>
<template v-slot:supply>
<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="base-info-item">
<div class="base-info-item-title">承包商\供应商</div>
<div class="base-info-item-content">{{contract.supply || '无'}}</div>
<div class="xy-table-item-content">
<el-input placeholder="请填写承包商\供应商" v-model="form.supply" style="width: 300px;"/>
</div>
<div class="base-info-item">
<div class="base-info-item-title">执行部门</div>
<div class="base-info-item-content">{{contract.carry_department || '无'}}</div>
</div>
</template>
<template v-slot:carryDepartment>
<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.carryDepartment" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot: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 placeholder="请填写合同金额" v-model="form.money" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:extraFormBottom>
<div class="base-info add-plan" style="margin-top: 20px;margin-bottom: 20px">
<div class="base-info-title">付款计划</div>
<Button type="primary" style="margin-left: 50px;" @click="isShowAddPlan = true">新增计划</Button>
@ -31,7 +49,6 @@
<xy-table :list="signList" :table-item="signTable" :show-index="false" :height="240" @delete="deleteContractSign" @editor="(row)=>{$refs['detailContractSign'].planId = row.id;$refs['detailContractSign'].isShow = true}">
</xy-table>
</template>
</xy-dialog>
@ -88,7 +105,7 @@
<script>
import {addContractSign,getContractSign,delContractSign} from "@/api/contractSign/contractSign";
import {detailContract} from "@/api/contract/contract";
import {detailContract,editorContract} from "@/api/contract/contract";
import {Message} from "element-ui";
import {parseTime} from "@/utils"
@ -99,6 +116,23 @@ export default {
},
data() {
return {
form:{
supply:'',
carryDepartment:'',
money:''
},
rules:{
supply:[
{required:true,message:"必填"}
],
carryDepartment:[
{required:true,message:"必填"}
],
money:[
{required:true,message:"必填"}
]
},
isShow:false,
contractId:null,
contract:{},
@ -157,6 +191,24 @@ export default {
}
},
methods: {
//
sign(){
editorContract({
id:this.contractId,
supply:this.form.supply,
carry_department:this.form.carryDepartment,
money:this.form.money,
status:2
}).then(res=>{
this.isShow = false
Message({
type:'success',
message:'操作成功'
})
this.$emit('signSuccess')
})
},
async getContractSignList(){
const res = await getContractSign({contract_id:this.contractId})
this.signList = res.data
@ -230,7 +282,7 @@ export default {
}
.xy-table-item-label{
width: 100px;
width: 140px;
}
.xy-table-item-price{
position: relative;

@ -11,26 +11,26 @@
</div>
<div class="base-info-item">
<div class="base-info-item-title">项目类型</div>
<div class="base-info-item-content">{{detail.type}}</div>
<div class="base-info-item-content">{{typeFormatter(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 class="base-info-item-content">{{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 class="base-info-item-content">{{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 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 class="base-info-item-content">{{detail.money_way.value}}</div>
</div>
</div>
<div class="link-budget-plan">
@ -46,7 +46,7 @@
<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 class="sign-info-item-unit"></div>
</div>
<div style="display: flex;justify-content: space-between">
<div class="sign-info-item" style="flex-basis: 50%">
@ -61,11 +61,7 @@
</div>
<div class="pay-plan">
<div class="pay-plan-title">付款计划</div>
<xy-table :height="240" :list="signPlan" :table-item="planTable" :show-index="false">
<template v-slot:btns>
<div></div>
</template>
</xy-table>
<xy-table :height="240" :list="signPlan" :table-item="planTable" :show-index="false" :btn-width="130" @delete="deletePayPlan" @editor="(row)=>{$refs['detailContractSign'].planId = row.id;$refs['detailContractSign'].isShow = true}"></xy-table>
</div>
<div class="related-processes">
<div class="related-processes-title">相关流程</div>
@ -89,18 +85,26 @@
<div></div>
</template>
</xy-dialog>
<detailContractSign ref="detailContractSign" @editorSuccess="getDetail(id)"></detailContractSign>
</div>
</template>
<script>
import {detailContract} from "@/api/contract/contract";
import {getContractSign} from "@/api/contractSign/contractSign"
import {delContractSign, getContractSign} from "@/api/contractSign/contractSign"
import {parseTime} from "@/utils"
import {Message} from "element-ui";
import detailContractSign from "./detailContractSign"
export default {
components:{
detailContractSign
},
data() {
return {
//
id:'',
detail:null,
isShowDetail:false,
linkBudgetPlanTable:[
@ -197,14 +201,44 @@ export default {
},
methods: {
async getDetail(id){
this.id = id
let res = await detailContract({id:id})
this.detail = res
let plan = await getContractSign({contract_id:id})
this.signPlan = plan.data
},
},
//
deletePayPlan(row){
delContractSign({id:row.id}).then(res=>{
this.getSignPlan()
Message({
type:'success',
message:"操作成功"
})
})
},
},
computed:{
typeFormatter(){
return function (type){
switch (type){
case 1:
return "服务"
break;
case 2:
return "货品"
break;
case 3:
return "工程"
break;
default:
return "未知"
}
}
}
}
}
</script>
@ -280,10 +314,11 @@ export default {
}
&-item{
color: red;
cursor: pointer;
display: flex;
&>div{
cursor: pointer;
flex-basis: 25%;
padding: 0 20px;

@ -53,7 +53,7 @@
<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">
<div class="xy-table-item-content xy-table-item-price-wan">
<el-input placeholder="请填写合同预算价" v-model="detail.price" style="width: 300px;"/>
</div>
</div>
@ -395,4 +395,13 @@ export default {
content:'(元)'
}
}
.xy-table-item-price-wan{
position: relative;
&::after{
position: absolute;
right: 0;
top: 0;
content:'(万元)'
}
}
</style>

@ -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">{{contract.money}} </div>
</div>
<div style="display: flex">
<div class="payment-registration-row">

@ -1,5 +1,5 @@
<template>
<div style="padding: 0 20px;">
<div style="padding: 0 20px;" ref="contractList">
<lx-header icon="md-apps" text="合同列表" style="margin-bottom: 10px; border: 0px; margin-top: 15px">
<div slot="content"></div>
<slot>
@ -81,16 +81,20 @@
<xy-table :table-item="table" :list="list" @editor="" @delete="(row)=>deleteContract(row.id)">
<template v-slot:btns>
<el-table-column label="操作" fixed="right" width="200" header-align="center">
<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 === 1">
<Button class="slot-btns-item" type="primary" size="small" @click="$refs['contractSign'].isShow = true,$refs['contractSign'].contractId = scope.row.id">签订合同</Button>
</template>
<Button class="slot-btns-item" type="primary" size="small">招标文件审查</Button>
<template v-if="scope.row.invite_status === 1">
<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" @click="askProcess(scope.row)"></Button>
<template v-if="scope.row.req_status === 1">
<Button class="slot-btns-item" type="primary" size="small" @click="askProcess(scope.row)"></Button>
</template>
<template v-if="scope.row.join_status === 1">
<Button class="slot-btns-item" type="primary" size="small" @click="signProcess(scope.row)"></Button>
</template>
@ -178,16 +182,6 @@
</div>
</div>
</template>
<template v-slot: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 placeholder="请填写合同金额" :value="form.money" style="width: 300px;" @input="e=>form.money = e"/>
</div>
</div>
</template>
<template v-slot:fundingChannels>
<div class="xy-table-item">
<div class="xy-table-item-label">
@ -200,26 +194,6 @@
</div>
</div>
</template>
<template v-slot:supply>
<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.supply" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:carryDepartment>
<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.carryDepartment" style="width: 300px;"/>
</div>
</div>
</template>
<template v-slot:isBudget>
<div class="xy-table-item">
<div class="xy-table-item-label">
@ -286,7 +260,7 @@
<paymentRegistration ref="paymentRegistration"></paymentRegistration>
<!-- 合同签订-->
<contractSign ref="contractSign"></contractSign>
<contractSign ref="contractSign" @signSuccess="getContracts"></contractSign>
</div>
</template>
@ -303,6 +277,7 @@ import editor from "./components/editorContract"
import detail from "./components/detailContract"
import paymentRegistration from "./components/paymentRegistration";
import contractSign from "@/views/contract/components/contractSign";
import {set} from "@/api/system/role";
export default {
components:{
editor,
@ -387,7 +362,7 @@ export default {
prop:"money_way.value"
},
{
label:"项目预算(元)",
label:"项目预算(元)",
width: 200,
prop:"plan_price",
align:'right',
@ -417,19 +392,87 @@ export default {
multiHd:[
{
label:"请示流程",
width: 200
width: 200,
prop:'req_status',
formatter:(cell,data,value)=>{
switch (value){
case 1:
return "待申请"
break;
case 2:
return "流转中"
break;
case 3:
return "已结办"
break;
default:
return "异常"
break;
}
}
},
{
label:"采购业务审批流程",
width: 200
width: 200,
prop:'purchase_status',
formatter:(cell,data,value)=>{
switch (value){
case 1:
return "待申请"
break;
case 2:
return "流转中"
break;
case 3:
return "已结办"
break;
default:
return "异常"
break;
}
}
},
{
label:"招标审核流程",
width: 200
width: 200,
prop:'invite_status',
formatter:(cell,data,value)=>{
switch (value){
case 1:
return "待申请"
break;
case 2:
return "流转中"
break;
case 3:
return "已结办"
break;
default:
return "异常"
break;
}
}
},
{
label:"合同会签流程",
width: 200
width: 200,
prop:'join_status',
formatter:(cell,data,value)=>{
switch (value){
case 1:
return "待申请"
break;
case 2:
return "流转中"
break;
case 3:
return "已结办"
break;
default:
return "异常"
break;
}
}
}
]
},
@ -438,11 +481,6 @@ export default {
width: 200,
prop:'department.name'
},
{
label:"创建人",
width: 200,
prop:''
},
{
label:"创建信息",
width: 200,
@ -502,10 +540,7 @@ export default {
methods:"",
modality:"",
price:"",
money:'',
fundingChannels:"",
supply:'',
carryDepartment:"",
isBudget:true,
plan:[]
},
@ -547,22 +582,32 @@ export default {
planTotal:0,
plansPageIndex:1,
isShowEditor:false
isShowEditor:false,
}
},
methods: {
//
async bidding(row){
let baseInfo = {
"项目名称":row?.name,
"项目预算(万元)":row?.plan_price
}
let res = await getOatoken()
let url =`${process.env.VUE_APP_OUT_URL}/admin/flow/create/27?oatoken=${res.oatoken}&out_contract_id=${row.id}&contract_json=${JSON.stringify(baseInfo)}`
let bidding = window.open(url,'bidding','top=100,left=100,width=1000,height=600')
},
//
async buyProcess(row){
console.log(row)
let baseInfo = {
"项目名称":row.name,
"采购形式":row.purchase_type.value,
"采购方式":row.purchase_way.value,
"项目名称":row?.name,
"采购形式":row?.purchase_type?.value,
"采购方式":row?.purchase_way?.value,
"项目类型":this.type.filter(item => {
return item.value === row.type
})[0].label,
"项目预算(万元)":row.plan_price/10000,
"资金渠道":row.money_way.value
})[0]?.label,
"项目预算(万元)":row?.plan_price,
"资金渠道":row?.money_way?.value
}
let res = await getOatoken()
let url = `${process.env.VUE_APP_OUT_URL}/admin/flow/create/2?oatoken=${res.oatoken}&out_contract_id=${row.id}&contract_json=${JSON.stringify(baseInfo)}`
@ -571,9 +616,9 @@ export default {
//
async signProcess(row){
let baseInfo = {
"合同名称":row.name,
"执行部门":row.carry_department,
"合同金额(万元)":row.money,
"合同名称":row?.name,
"执行部门":row?.carry_department,
"合同金额(万元)":row?.money,
//"\\":row.supply
}
let res = await getOatoken()
@ -692,9 +737,6 @@ export default {
money_way_id:this.form.fundingChannels,
plan_price:this.form.price,
name:this.form.name,
supply:this.form.supply,
carry_department:this.form.carryDepartment,
money:this.form.money,
contract_plan_links:this.form.plan.map(item=>{
return item.value
})
@ -782,7 +824,7 @@ export default {
position: absolute;
right: 0;
top: 0;
content:'元)'
content:'元)'
}
}
</style>

Loading…
Cancel
Save