<template>
|
<div>
|
<div align="left">
|
<!-- 已回款统计 -->
|
<el-form label-width="80px" :inline="true" :label-position="labelPosition" :model="formInline" class="form-inline">
|
<el-form-item label="项目名称">
|
<el-input v-model="formInline.name" placeholder="项目名称"></el-input>
|
</el-form-item>
|
|
<el-form-item label="研究类型分类" label-width="100px">
|
<el-select v-model="formInline.type" placeholder="研究类型分类">
|
<el-option
|
v-for="(item,k) in options_type"
|
:key="k"
|
:label="item"
|
:value="item"
|
></el-option>
|
</el-select>
|
</el-form-item>
|
|
|
<el-form-item label="项目状态">
|
<el-select v-model="formInline.status" placeholder="项目状态">
|
<el-option label="未开始" value="edit"></el-option>
|
<el-option label="进行中" value="working"></el-option>
|
<el-option label="已延期" value="delay"></el-option>
|
<el-option label="已结束" value="finish"></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item >
|
<el-button type="primary" @click="query_">查询</el-button>
|
<el-button type="info" @click="empty_">重置</el-button>
|
</el-form-item>
|
</el-form>
|
</div>
|
|
<div style="width: 100%; text-align: left;">
|
<span>统计开票金额:{{sum_budget}}</span>
|
<span style="margin-left: 32px;">统计已确认金额:{{sum_payMoney}}</span>
|
</div>
|
|
<!-- :summary-method="getSummaries"
|
show-summary -->
|
<el-table
|
highlight-current-row
|
ref="data_table"
|
@current-change="tableChange"
|
v-loading="loading_table"
|
:data="tableData"
|
:header-cell-style="{'width': '100%', 'text-align': 'center'}"
|
:row-class-name="tableRowClassName">
|
<!-- <el-table-column type="index" width="50"> </el-table-column> -->
|
<el-table-column prop="name" label="项目名称" width="120" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="status" label="当前状态" width="100" align="center" :formatter="status_"></el-table-column>
|
<el-table-column prop="type" label="研究类型分类" show-overflow-tooltip width="130"></el-table-column>
|
<el-table-column prop="totalCnt" label="服务项目数" width="100" align="center"></el-table-column>
|
<el-table-column prop="finishCnt" label="已完成项目" width="100" align="center"></el-table-column>
|
<el-table-column prop="delayCnt" label="延期项目" width="100" align="center"></el-table-column>
|
<el-table-column prop="totalBudget" label="合同金额" width="100" align="center"></el-table-column>
|
<el-table-column prop="budget" label="开票金额" width="150" align="center"></el-table-column>
|
<el-table-column prop="payMoney" label="已确认金额" width="150" align="center"></el-table-column>
|
<el-table-column prop="startTime" label="开始时间" width="100" align="center" :formatter="dateFormat_"></el-table-column>
|
<el-table-column prop="endTime" label="结束时间" width="100" align="center" :formatter="dateFormat_" ></el-table-column>
|
<el-table-column prop="desp" label="项目描述" show-overflow-tooltip></el-table-column>
|
|
<el-table-column fixed="right" label="操作" align="center">
|
<template v-slot="{row}">
|
<el-row>
|
<el-button type="primary" size="mini" @click="showDetail(row)">详情</el-button>
|
</el-row>
|
</template>
|
</el-table-column>
|
</el-table>
|
<div style="text-align: right; background-color: #fff;">
|
<el-pagination
|
@current-change="handleCurrentChange"
|
background :current-page="pagenum"
|
:page-sizes="[15]"
|
:page-size="pagesize"
|
layout="total, sizes, prev, pager, next, jumper"
|
:total="total">
|
</el-pagination>
|
</div>
|
|
<el-dialog title="付款详情" v-if="dialog_2" @close="Cancel2" width="70%" top="50px" :visible.sync="dialog_2">
|
<el-table
|
highlight-current-row
|
ref="data_table2"
|
size="small"
|
:data="tableData2"
|
:header-cell-style="{'width': '100%', 'text-align': 'center', 'background-color': 'rgb(247, 248, 249)'}"
|
:row-class-name="tableRowClassName">
|
<el-table-column prop="name" label="项目名称" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="status" label="当前状态" width="100" align="center" :formatter="status_"></el-table-column>
|
<el-table-column prop="totalBudget" label="合同金额" align="center"></el-table-column>
|
<el-table-column prop="budget" label="开票金额总计" align="center"></el-table-column>
|
<el-table-column prop="payMoney" label="已确认金额总计" align="center"></el-table-column>
|
<!-- <el-table-column prop="totalBudget" label="毛利率" align="center"></el-table-column> -->
|
</el-table>
|
|
<div style="width: 100%; text-align: left; margin: 10px;">
|
<el-button type="primary" size="mini" @click="addPhase">新增分期</el-button>
|
</div>
|
|
<!-- @header-click="headerClick" -->
|
<el-table
|
highlight-current-row
|
ref="data_table3"
|
v-loading="loading_table3"
|
size="small"
|
:data="tableData3"
|
:height="300"
|
:header-cell-style="{'width': '100%', 'text-align': 'center', 'background-color': 'rgb(247, 248, 249)'}"
|
:row-class-name="tableRowClassName">
|
<el-table-column prop="orderNo" label="期次" width="80" align="center"></el-table-column>
|
<el-table-column prop="billTime" label="开票日期" width="180" align="center">
|
<template v-slot="{row}">
|
<div>
|
<el-date-picker :disabled="row.checked" style="width: 160px;" size="mini" v-model="row.billTime" type="date" placeholder="选择日期" @change="moneyChange(row)">
|
</el-date-picker>
|
</div>
|
</template>
|
</el-table-column>
|
<el-table-column prop="money" label="开票金额" width="160" align="center">
|
<template v-slot="{row}">
|
<div>
|
<el-input-number :disabled="row.checked" size="mini" v-model="row.money" @change="moneyChange(row)"></el-input-number>
|
</div>
|
</template>
|
</el-table-column>
|
<el-table-column prop="gatherTime" label="收款日期" width="180" align="center">
|
<template v-slot="{row}">
|
<div>
|
<el-date-picker :disabled="row.checked" style="width: 160px;" size="mini" v-model="row.gatherTime" type="date" placeholder="选择日期" @change="moneyChange(row)">
|
</el-date-picker>
|
</div>
|
</template>
|
</el-table-column>
|
<el-table-column prop="checked" label="是否收款" align="center" :formatter="check_"></el-table-column>
|
<el-table-column prop="checkUserName" label="确认人" align="center"></el-table-column>
|
<el-table-column fixed="right" label="确认收款" width="180" align="center">
|
<template v-slot="{row}">
|
<el-row>
|
<el-button :disabled="row.checked" type="primary" size="mini" @click="confirmPhase(row)">确认收款</el-button>
|
<el-button :disabled="row.checked" type="danger" size="mini" @click="removePhase(row)">删除</el-button>
|
</el-row>
|
</template>
|
</el-table-column>
|
|
</el-table>
|
|
<!-- <div ref="z_dialog_buttonList" v-show="dialog_tree_node"
|
@mouseenter="NodePopover_isShow(true)"
|
@mouseleave="NodePopover_isShow(false)"
|
style="position: fixed; left:0px; top:0px; padding: 8px 12px; border: 1px solid rgb(233,233,233); background-color: #fff; z-index: 10;"
|
>
|
<el-row :gutter="20">
|
<el-col :span="24">
|
<el-button style="padding: 8px; border: 0px; width: 100%; text-align: left;" icon="el-icon-delete-solid" @click="removePhase">
|
删 除</el-button>
|
</el-col>
|
</el-row>
|
</div> -->
|
</el-dialog>
|
|
<el-dialog title="添加分期" v-if="dialog_1" @close="closeNewPhase" width="400px" :visible.sync="dialog_1" append-to-body>
|
<el-form ref="formPhase" :model="phaseForm" label-width="80px" size="mini">
|
<el-form-item label="期次">
|
<el-input-number size="mini" v-model="phaseForm.orderNo" style="width: 240px;"></el-input-number>
|
</el-form-item>
|
<el-form-item label="开票时间">
|
<el-date-picker v-model="phaseForm.billTime" type="date" placeholder="选择日期" style="width: 240px;">
|
</el-date-picker>
|
</el-form-item>
|
<el-form-item label="开票金额">
|
<el-input-number size="mini" v-model="phaseForm.money" style="width: 240px;"></el-input-number>
|
</el-form-item>
|
<el-form-item label="收款时间">
|
<el-date-picker v-model="phaseForm.gatherTime" type="date" placeholder="选择日期" style="width: 240px;">
|
</el-date-picker>
|
</el-form-item>
|
</el-form>
|
|
<span slot="footer" class="dialog-footer">
|
<el-button @click="closeNewPhase">取 消</el-button>
|
<el-button :loading="loading_savePhase" type="primary" @click="savePhase">保 存</el-button>
|
</span>
|
</el-dialog>
|
|
</div>
|
</template>
|
|
<script>
|
export default {
|
|
components: {
|
},
|
data() {
|
return {
|
editShow: true,
|
upload_url: "",
|
upload_type: "",
|
upload_headers: {},
|
upload_data: {},
|
options_type:[
|
"Health technology assessment (HTA)",
|
"Clinical practice guideline (CPG)",
|
"Evidence mapping",
|
"Overview of review",
|
"Scoping review",
|
"Rapid review",
|
"Systematic review",
|
"Rapid review",
|
"Randomised controlled trial (RCT)",
|
"Other"
|
],
|
|
pdfUrl: "",
|
currentPage: 1,
|
pageCount: 0,
|
|
loading_table: false,
|
query: "",
|
rowData:undefined,
|
detailData:undefined,
|
dialog_1: false,
|
phaseForm: {},
|
loading_savePhase: false,
|
dialog_tree_node: false,
|
timer: null,
|
fieldObj: null,
|
dialog_2: false,
|
dialog_upload: false,
|
dialog_pdf: false,
|
pagenum: 1,
|
pagesize: 15,
|
total: 0,
|
selected: undefined,
|
labelPosition: "left",
|
tableData: [],
|
tableData2: [],
|
loading_table3: false,
|
tableData3: [],
|
sum_budget: 0,
|
sum_payMoney: 0,
|
userId:"",
|
assign:undefined,
|
formInline: {
|
user: '',
|
region: ''
|
},
|
}
|
},
|
mounted() { //组件配置后,页面显示前。用于加载数据
|
this.getData();
|
//this.userId = localStorage.getItem('userId');
|
//this.assign = localStorage.getItem('assign');
|
|
this.userId = this.$cookies.get('userId');
|
this.assign = this.$cookies.get('assign');
|
},
|
methods: {
|
headerClick(column, event) {
|
this.$message({message:'点击字段', type: 'warning'});
|
|
clearInterval(this.timer);
|
this.enableTimer();
|
this.clientHeight = document.documentElement.clientHeight;
|
let top_ = event.top;
|
let left_ = event.left;
|
|
this.$refs.z_dialog_buttonList.style.top = top_ + "px"; //- el_h/2
|
this.$refs.z_dialog_buttonList.style.left = left_ + 32 + "px";
|
|
this.dialog_tree_node= true;
|
this.fieldObj = column;
|
},
|
|
enableTimer() {
|
this.timer = setInterval(()=>{
|
this.dialog_tree_node = false;
|
clearInterval(this.timer);
|
},1000);
|
},
|
|
NodePopover_isShow(isShow) {
|
if (isShow) {
|
clearInterval(this.timer);
|
this.dialog_tree_node = true;
|
}
|
else {
|
this.enableTimer();
|
}
|
},
|
|
Cancel2() {
|
this.dialog_2 = false;
|
this.query_();
|
},
|
showDetail(row) {
|
if(!row.id){
|
this.$message({message:'请选中一个项目', type: 'warning'});
|
return;
|
}
|
this.tableData2 = [];
|
this.tableData2.push(row);
|
this.getPhase();
|
this.dialog_2 = true;
|
},
|
|
tableChange(val) {
|
if (!val) {
|
val = {};
|
}
|
this.selected = val;
|
this.detailData = val;
|
// this.editShow = true;
|
if (this.selected.userId == this.userId) {
|
this.editShow = true;
|
}else {
|
this.editShow = false;
|
}
|
|
},
|
handleCurrentChange(pageno) {
|
this.pagenum = pageno;
|
this.query_();
|
},
|
empty_() {
|
this.formInline = {};
|
this.query_();
|
},
|
query_() {
|
this.getData(this.formInline);
|
},
|
getData(query) {
|
this.loading_table = true;
|
let pageno = this.pagenum;
|
let url = "/api/scheme/page/" + pageno;
|
|
let params = {
|
pageSize: this.pagesize,
|
isRun: true
|
};
|
if(this.assign == "true") {
|
params.userId = this.userId;
|
}
|
if(query){
|
params.name = query.name;
|
params.status = query.status;
|
params.type = query.type;
|
}
|
this.$axios.get(url, {
|
params
|
})
|
.then(data_ => {
|
window.console.log(data_);
|
let clientHeight = document.documentElement.clientHeight;
|
let tableHeight_ = clientHeight - 60 - 20 - 60 - 62 - 48 - 20;
|
this.$refs.data_table.$el.getElementsByClassName('el-table__body-wrapper')[0].style['height'] = tableHeight_ - 10 + "px";// - header_height
|
this.$refs.data_table.$el.getElementsByClassName('el-table__body-wrapper')[0].style['min-height'] = tableHeight_ - 10 + "px";
|
this.$refs.data_table.$el.getElementsByClassName('el-table__body-wrapper')[0].style['overflow'] = "overlay";
|
|
this.tableData = data_.data.data.datas.records; //给tableData赋值
|
this.total = data_.data.data.datas.total;
|
this.sum_budget = data_.data.data.budget ? data_.data.data.budget : 0;
|
this.sum_payMoney = data_.data.data.payMoney ? data_.data.data.payMoney : 0;
|
|
this.loading_table = false;
|
}).catch(error => {
|
// console.log(error);
|
})
|
},
|
tableRowClassName(row, rowIndex) {
|
if (row.finish) {
|
return 'success-row';
|
} else if(row.delay){
|
return 'warning-row';
|
}
|
return '';
|
},
|
onSubmit() {
|
query_();
|
},
|
|
getSummaries(param) {
|
const { columns, data } = param;
|
const sums = [];
|
columns.forEach((column, index) => {
|
if (index === 0) {
|
sums[index] = '当页统计';
|
return;
|
}
|
const values = data.map(item => Number(item[column.property]));
|
if (!values.every(value => isNaN(value))) {
|
sums[index] = values.reduce((prev, curr) => {
|
const value = Number(curr);
|
if (!isNaN(value)) {
|
return prev + curr;
|
} else {
|
return prev;
|
}
|
}, 0);
|
sums[index] += '';
|
} else {
|
sums[index] = '';
|
}
|
});
|
|
return sums;
|
},
|
|
dateFormat_(row, colum, val ,index) {
|
return this.$moment(val).format('YYYY-MM-DD');
|
|
},
|
status_(row, colum, val ,index) {
|
if(val == "working") {
|
return "进行中";
|
}else if(val == "edit") {
|
return "未开始";
|
}else if(val == "delay") {
|
return "已延期";
|
}else if(val == "finish") {
|
return "已结束";
|
}
|
},
|
|
check_(row, colum, val ,index){
|
if (val) {
|
return "是";
|
}
|
else{
|
return "否";
|
}
|
},
|
finishFotmat(row, colum, val ,index) {
|
if(val) {
|
return "已结束";
|
}else {
|
return "进行中";
|
}
|
},
|
|
getPhase() {
|
let me = this;
|
let url = "/api/scheme/bill/getByParent/" + me.tableData2[0].id;
|
me.loading_table3 = true;
|
me.tableData3 = [];
|
this.getUrl(url, null, function(data_) {
|
me.loading_table3 = false;
|
if (data_.data.data) {
|
me.tableData3 = data_.data.data;
|
}
|
else {
|
me.tableData3 = [];
|
}
|
})
|
me.$emit("refreshDrawer");
|
},
|
|
confirmPhase(row) {
|
let me = this;
|
let url = "/api/scheme/bill/check/" + row.id;
|
|
let params = {
|
user: this.userId
|
}
|
this.getUrl(url, params, function(data_) {
|
me.tableData2[0].payMoney = data_.data.data.payMoney;
|
row.checked = true;
|
me.$emit("refreshDrawer");
|
})
|
},
|
|
removePhase(row) {
|
let me = this;
|
let url = "/api/scheme/bill/delById/" + row.id;
|
|
this.getUrl(url, null, function(data_) {
|
me.tableData2[0].budget = data_.data.data.budget;
|
me.getPhase();
|
})
|
},
|
|
moneyChange(row) {
|
let me = this;
|
let url = "/api/scheme/bill/addOrUpdate";
|
|
let params = {...row};
|
params.parentId = me.tableData2[0].id;
|
this.postUrl(url, params, function(data_) {
|
me.tableData2[0].budget = data_.data.data.budget;
|
})
|
},
|
|
addPhase(row) {
|
this.dialog_1 = true;
|
this.phaseForm = {
|
orderNo: this.tableData3.length + 1
|
};
|
},
|
|
savePhase() {
|
let me = this;
|
let url = "/api/scheme/bill/addOrUpdate";
|
me.loading_savePhase = true;
|
let params = {...this.phaseForm};
|
params.parentId = me.tableData2[0].id;
|
|
this.postUrl(url, params, function(data_) {
|
me.tableData2[0].budget = data_.data.data.budget;
|
me.loading_savePhase = false;
|
me.dialog_1 = false;
|
me.getPhase();
|
})
|
},
|
closeNewPhase() {
|
this.dialog_1 = false;
|
},
|
|
getUrl(url, params, callback){
|
let me = this;
|
this.$axios.get(url,{
|
params: params
|
}).then(data_ => {
|
//console.log(data_);
|
if (callback) {
|
callback(data_);
|
}
|
})
|
.catch(error =>{
|
//console.log(error);
|
})
|
},
|
postUrl(url, params, callback){
|
let me = this;
|
this.$axios.post(url,params)
|
.then(data_ => {
|
//console.log(data_);
|
if (callback) {
|
callback(data_);
|
}
|
})
|
.catch(error =>{
|
//console.log(error);
|
})
|
},
|
|
}
|
}
|
</script>
|
|
<style>
|
.btn-line {
|
margin-bottom: 20px;
|
}
|
.el-table .warning-row {
|
background: oldlace;
|
}
|
|
.el-table .success-row {
|
background: #f0f9eb;
|
}
|
</style>
|