whx 1 年之前
父節點
當前提交
9771085100
共有 85 個文件被更改,包括 1264 次插入121 次删除
  1. 11 1
      virgo.wzfrontend/console/src/components/common/listFilter.vue
  2. 122 0
      virgo.wzfrontend/console/src/components/work/bill/routine/detail.vue
  3. 146 0
      virgo.wzfrontend/console/src/components/work/bill/routine/edit.vue
  4. 0 1
      virgo.wzfrontend/console/src/components/work/contract/common/selectTemplate.vue
  5. 14 5
      virgo.wzfrontend/console/src/components/work/contract/list/edit.vue
  6. 0 2
      virgo.wzfrontend/console/src/components/work/contract/template/fieldForm.vue
  7. 59 0
      virgo.wzfrontend/console/src/httpApi/bill.js
  8. 1 1
      virgo.wzfrontend/console/src/layout/components/subMenu.vue
  9. 41 7
      virgo.wzfrontend/console/src/router/modules/bill.js
  10. 7 0
      virgo.wzfrontend/console/src/views/system/log.vue
  11. 14 59
      virgo.wzfrontend/console/src/views/work/bill/contract.vue
  12. 151 0
      virgo.wzfrontend/console/src/views/work/bill/contract/organization.vue
  13. 137 0
      virgo.wzfrontend/console/src/views/work/bill/contract/payment.vue
  14. 146 0
      virgo.wzfrontend/console/src/views/work/bill/routine/client.vue
  15. 146 0
      virgo.wzfrontend/console/src/views/work/bill/routine/organization.vue
  16. 168 0
      virgo.wzfrontend/console/src/views/work/bill/routine/payment.vue
  17. 41 12
      virgo.wzfrontend/console/src/views/work/contract/client.vue
  18. 1 1
      virgo.wzfrontend/console/src/views/work/contract/list.vue
  19. 8 0
      virgo.wzfrontend/console/src/views/work/invoice/contract.vue
  20. 8 0
      virgo.wzfrontend/console/src/views/work/invoice/routine.vue
  21. 1 1
      virgo.wzfrontend/src/main/resources/static/index.html
  22. 0 0
      virgo.wzfrontend/src/main/resources/static/static/css/336.62c9bb7a.css
  23. 0 0
      virgo.wzfrontend/src/main/resources/static/static/css/453.b6c7aaf0.css
  24. 0 0
      virgo.wzfrontend/src/main/resources/static/static/css/827.b6c7aaf0.css
  25. 0 0
      virgo.wzfrontend/src/main/resources/static/static/css/857.52c2cdde.css
  26. 0 1
      virgo.wzfrontend/src/main/resources/static/static/css/933.52c2cdde.css
  27. 0 0
      virgo.wzfrontend/src/main/resources/static/static/css/956.62c9bb7a.css
  28. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/112.07d98df5.js
  29. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/135-legacy.cba3ad47.js
  30. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/135.b679c2fb.js
  31. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/166-legacy.e94d6543.js
  32. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/166.717564ef.js
  33. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/18-legacy.edf4b0ae.js
  34. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/18.3cfa5af6.js
  35. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/188.b8184868.js
  36. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/191-legacy.24ac21ac.js
  37. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/191.7c06989f.js
  38. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/204.336e8366.js
  39. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/239-legacy.8d0ab73a.js
  40. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/239.57989d95.js
  41. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/245-legacy.7954939b.js
  42. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/245.9a90e5ff.js
  43. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/254-legacy.9b93fd12.js
  44. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/289-legacy.0feb0292.js
  45. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/289.614531db.js
  46. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/293.305a97b0.js
  47. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/293.dce39594.js
  48. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/314.d6a1fc4e.js
  49. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/336-legacy.27e217b5.js
  50. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/380-legacy.5208969b.js
  51. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/41-legacy.8ff8d969.js
  52. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/41.4d794f71.js
  53. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/433-legacy.82360066.js
  54. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/433.a9c76d27.js
  55. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/453-legacy.2361f352.js
  56. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/454-legacy.883c431c.js
  57. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/486.d72033b6.js
  58. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/51-legacy.b2533985.js
  59. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/51.bdab8a90.js
  60. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/525.e2f8bc1f.js
  61. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/535-legacy.8f6a6f3f.js
  62. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/61-legacy.04d89f2f.js
  63. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/61.aac0e827.js
  64. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/729-legacy.a2bea4d1.js
  65. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/729.1e01b436.js
  66. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/764-legacy.fe07a6be.js
  67. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/764.d3b139c8.js
  68. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/779-legacy.bdac8d3f.js
  69. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/779.98dcb4e1.js
  70. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/807-legacy.e1431519.js
  71. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/827.4cf3f62c.js
  72. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/850-legacy.9d10e393.js
  73. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/850.f1ff0134.js
  74. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/896-legacy.7370765f.js
  75. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/896-legacy.e2dc18f8.js
  76. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/896.24270f3a.js
  77. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/896.c5cc17b4.js
  78. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/906-legacy.a7b6f43f.js
  79. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/919-legacy.32a3e3e2.js
  80. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/919-legacy.c0a94619.js
  81. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/956.b3e9ff16.js
  82. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/app-legacy.329b889f.js
  83. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/app-legacy.9a49d203.js
  84. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/app.9d4283da.js
  85. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/app.ae74846a.js

+ 11 - 1
virgo.wzfrontend/console/src/components/common/listFilter.vue

@@ -60,6 +60,12 @@
 				</el-input>
 			</div>
 		</div>
+		<div class="filter-box" v-if="type === 'billRoutine'">
+			<div class="filter-item">
+				<el-input prefix-icon="el-icon-search" v-model="billRoutine.name" placeholder="请输入账单名称">
+				</el-input>
+			</div>
+		</div>
 		<div class="filter-btn">
 			<el-button type="primary" size="medium" @click="submit">查询</el-button>
 			<el-button size="medium" @click="resetForm">重置</el-button>
@@ -100,7 +106,11 @@
 				billContract: {
 					contractCode: ''
 				},
-				billContractData: {}
+				billContractData: {},
+				billRoutine: {
+					name: ''
+				},
+				billRoutineData: {}
 			}
 		},
 		created() {

+ 122 - 0
virgo.wzfrontend/console/src/components/work/bill/routine/detail.vue

@@ -0,0 +1,122 @@
+<template>
+	<div class="hui-flex">
+		<div class="hui-flex-box">
+			<div class="hui-detail">
+				<div class="hui-detail-title">基础信息</div>
+				<div class="hui-detail-content">
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">账单名称</div>
+						<div class="hui-detail-value">{{detail.name}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">提醒日期</div>
+						<div class="hui-detail-value">{{detail.reminderDate}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">账单金额</div>
+						<div class="hui-detail-value">{{detail.amount + '元'}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">收款方</div>
+						<div class="hui-detail-value">{{detail.organizationName}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">付款方</div>
+						<div class="hui-detail-value">{{detail.payMerchantName || detail.payClientName}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">状态</div>
+						<div class="hui-detail-value">
+							<div class="hui-tag hui-tag-info" v-if="!detail.status">待付款</div>
+							<div class="hui-tag hui-tag-warning" v-if="detail.status === 1">付款中</div>
+							<div class="hui-tag hui-tag-success" v-if="detail.status === 2">已付款</div>
+						</div>
+					</div>
+				</div>
+				<div class="hui-detail-title" v-if="detail.paymentRecordList.length > 0">付款记录</div>
+				<div class="hui-detail-content" v-for="(item,index) in detail.paymentRecordList">
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">付款名称</div>
+						<div class="hui-detail-value">{{item.name}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">回执单</div>
+						<div class="hui-detail-value">
+							<upload ref="upload" :list="item.attachment ? JSON.parse(item.attachment) : []"
+								type="preview">
+							</upload>
+						</div>
+					</div>
+				</div>
+				<div class="hui-detail-title" v-if="detail.paymentInvoiceList.length > 0">发票记录</div>
+				<div class="hui-detail-content" v-for="(item,index) in detail.paymentInvoiceList">
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">付款名称</div>
+						<div class="hui-detail-value">{{item.name}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">回执单</div>
+						<div class="hui-detail-value">
+							<upload ref="upload" :list="item.attachment ? JSON.parse(item.attachment) : []"
+								type="preview">
+							</upload>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import {
+		getPaymentDetailById
+	} from '@/httpApi/bill'
+	import upload from '@/components/common/upload'
+	export default {
+		props: ['detailId'],
+		data() {
+			return {
+				detail: {
+					phase: '-',
+					amount: '-',
+					startDate: '-',
+					endDate: '-',
+					paymentRecordList: [],
+					paymentInvoiceList: []
+				},
+				visible: false,
+				type: ''
+			}
+		},
+		created() {
+			if (this.detailId) this.init();
+		},
+		methods: {
+			init() {
+				getPaymentDetailById(this.detailId).then(res => {
+					if (res.state) {
+						this.detail = res.data
+					}
+				})
+			},
+			paymentOperation(type) {
+				this.type = type;
+				this.visible = true;
+			},
+			callback(type) {
+				if (type === 'init') {
+					this.init();
+					this.$emit('reload');
+				}
+				this.visible = false;
+			}
+		},
+		components: {
+			upload
+		},
+	}
+</script>
+<style lang="scss">
+
+</style>

+ 146 - 0
virgo.wzfrontend/console/src/components/work/bill/routine/edit.vue

@@ -0,0 +1,146 @@
+<template>
+	<div class="hui-flex hui-dialog">
+		<div class="hui-flex-box hui-dialog-content">
+			<el-form ref="form" label-position="top" :model="form">
+				<el-form-item label="账单名称" prop="name" :rules="[{required: true, message: '请输入账单名称'}]">
+					<el-input type="text" v-model="form.name" placeholder="请输入账单名称"></el-input>
+				</el-form-item>
+				<el-form-item label="账单金额(元)" prop="amount" :rules="[{required: true, message: '请输入账单金额'}]">
+					<el-input type="number" v-model="form.amount" placeholder="请输入账单金额"></el-input>
+				</el-form-item>
+				<el-form-item label="提醒日期" prop="reminderDate" :rules="[{required: true, message: '请选择提醒日期'}]">
+					<el-date-picker v-model="form.reminderDate" value-format="yyyy-MM-dd" type="date"
+						placeholder="请选择提醒日期">
+					</el-date-picker>
+				</el-form-item>
+				<el-form-item label="租客类型">
+					<el-select v-model="form.tenantType" placeholder="请选择租客类型" @change="changeTenantType">
+						<el-option label="企业" :value="1"></el-option>
+						<el-option label="客户" :value="2"></el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="企业" v-if="form.tenantType === 1" prop="payMerchantId"
+					:rules="[{required: true, message: '请选择企业'}]">
+					<el-select v-model="form.payMerchantId" placeholder="请选择企业">
+						<el-option :label="item.name" :value="item.id" v-for="(item,index) in merchantList"
+							:key="index">
+						</el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="客户" v-else-if="form.tenantType === 2" prop="payClientId"
+					:rules="[{required: true, message: '请选择客户'}]">
+					<el-select v-model="form.payClientId" placeholder="请选择客户">
+						<el-option :label="item.name" :value="item.id" v-for="(item,index) in clientList" :key="index">
+						</el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="账单描述" class="hui-textarea">
+					<el-input type="textarea" v-model="form.data" placeholder="请输入账单描述" resize="none">
+					</el-input>
+				</el-form-item>
+			</el-form>
+		</div>
+		<div class="hui-dialog-submit">
+			<el-button size="medium" @click="$emit('callback')">取 消</el-button>
+			<el-button size="medium" type="primary" @click="submit">保 存</el-button>
+		</div>
+	</div>
+</template>
+
+<script>
+	import {
+		getOrganizationList,
+	} from '@/httpApi/business'
+	import {
+		getCustomerListByPage
+	} from '@/httpApi/crm'
+	import {
+		insertPayment,
+		updatePayment,
+		getPaymentDetailById
+	} from '@/httpApi/bill'
+	export default {
+		props: ['isUpdate', 'detailId'],
+		data() {
+			return {
+				form: {
+					name: '',
+					amount: '',
+					reminderDate: '',
+					type: 1,
+					tenantType: 1,
+					payMerchantId: '',
+					payClientId: '',
+					data: ''
+				},
+				merchantList: [],
+				clientList: [],
+			}
+		},
+		created() {
+			if (!this.isUpdate) {
+				this.form['organizationId'] = this.$store.getters.organization.id;
+				this.form['projectId'] = this.$store.getters.project.id;
+			} else {
+				getPaymentDetailById(this.detailId).then(res => {
+					if (res.state) {
+						this.form = res.data;
+					}
+				})
+			}
+			this.merchant();
+			this.client();
+		},
+		methods: {
+			merchant() {
+				getOrganizationList({
+					organizationId: this.$store.getters.organization.id,
+					status: 1
+				}).then(res => {
+					if (res.state) {
+						this.merchantList = res.data;
+					}
+				})
+			},
+			client() {
+				getCustomerListByPage({
+					currPage: 1,
+					pageSize: 100,
+					organizationId: this.$store.getters.organization.id,
+					status: 2
+				}).then(res => {
+					if (res.state) {
+						this.clientList = res.data.dataList;
+					}
+				})
+			},
+			changeTenantType() {
+				this.form.payMerchantId = '';
+				this.form.payClientId = '';
+			},
+			submit() {
+				this.$refs.form.validate((valid) => {
+					if (valid) {
+						this.form['amount'] = parseInt(this.form.amount);
+						if (this.isUpdate) {
+							updatePayment(this.form).then(this.successFunc);
+						} else {
+							insertPayment(this.form).then(this.successFunc);
+						}
+					} else {
+						return false;
+					}
+				});
+			},
+			successFunc(res) {
+				if (res.state) {
+					this.$message.success('操作成功');
+					this.$emit('callback', 'init');
+				}
+			}
+		},
+	}
+</script>
+
+<style>
+</style>

+ 0 - 1
virgo.wzfrontend/console/src/components/work/contract/common/selectTemplate.vue

@@ -248,7 +248,6 @@
 				}
 			},
 			callback(type) {
-				if (type === 'init') this.init();
 				this.fieldShow = false;
 			}
 		},

+ 14 - 5
virgo.wzfrontend/console/src/components/work/contract/list/edit.vue

@@ -41,7 +41,7 @@
 					<div class="hui-chart-title">租客信息</div>
 					<div class="contract-from">
 						<el-form-item label="租客类型">
-							<el-select v-model="form.tenantType" placeholder="请选择租客类型">
+							<el-select v-model="form.tenantType" placeholder="请选择租客类型" @change="changeTenantType">
 								<el-option label="企业" :value="1"></el-option>
 								<el-option label="客户" :value="2"></el-option>
 							</el-select>
@@ -140,8 +140,10 @@
 				<div class="contract-box" v-for="(clause,index) in clauseList" :key="clause.id">
 					<div class="hui-chart-title">
 						<span>{{clause.name}}</span>
-						<el-button type="primary" size="mini" icon="el-icon-plus"
-							@click="insertClause(clause.id)">{{clause.name}}</el-button>
+						<el-button type="primary" size="mini" icon="el-icon-plus" @click="insertClause(clause.id)"
+							v-if="clause.id !== 1">
+							{{clause.name}}
+						</el-button>
 					</div>
 					<div class="contract-from">
 						<clause :ref="'clause' + item.id " :type="item.type"
@@ -275,6 +277,7 @@
 		},
 		created() {
 			this.organization = this.$store.getters.organization;
+			this.form['projectId'] = this.$store.getters.project.id;
 			this.form['organizationId'] = this.organization.id;
 			this.form['organizationName'] = this.organization.name;
 			this.merchant();
@@ -338,13 +341,19 @@
 					}
 				})
 			},
+			changeTenantType() {
+				this.form.merchantId = '';
+				this.form.merchantName = '';
+				this.form.clientId = '';
+				this.form.clientName = '';
+			},
 			changeMerchant() {
 				let data = this.merchantList.find(node => node.id == this.form.merchantId);
 				this.form.corporation = data.legalPerson;
 				this.form.merchantName = data.name;
 			},
 			changeClinet() {
-				let data = this.clientList.find(node => node.id == this.form.merchantId);
+				let data = this.clientList.find(node => node.id == this.form.clientId);
 				this.form.clientName = data.name;
 			},
 			changeInvestmentPromotion() {
@@ -397,7 +406,7 @@
 					endDate = this.returnDate(data.endDate);
 				let obj = {
 					partya: data.organizationName,
-					partyb: data.merchantName,
+					partyb: data.merchantName || data.clientName,
 					signyear: signingDate.year,
 					signmonth: signingDate.month,
 					signday: signingDate.day,

+ 0 - 2
virgo.wzfrontend/console/src/components/work/contract/template/fieldForm.vue

@@ -81,8 +81,6 @@
 			submit() {
 				this.$refs.fieldForm.validate((valid) => {
 					if (valid) {
-						console.log(this.fieldForm);
-						return;
 						if (this.fieldData.id) {
 							updateFieldData({
 								id: this.fieldData.id,

+ 59 - 0
virgo.wzfrontend/console/src/httpApi/bill.js

@@ -0,0 +1,59 @@
+import request from '@/axios'
+/* 
+ * 新增账单
+ * 
+ * 
+ */
+export function insertPayment(data) {
+	return request({
+		url: `/api/payment/ordinary`,
+		method: 'post',
+		data: data
+	})
+}
+/* 
+ * 分页获取账单
+ * 
+ * 
+ */
+export function getPaymentListByPage(data) {
+	return request({
+		url: `/api/payment/ordinary/${data.currPage}/${data.pageSize}`,
+		method: 'post',
+		data: data
+	})
+}
+/* 
+ * 通过id获取账单详情
+ * 
+ * 
+ */
+export function getPaymentDetailById(id) {
+	return request({
+		url: `/api/payment/ordinary/${id}`,
+		method: 'get'
+	})
+}
+/* 
+ * 更新账单
+ * 
+ * 
+ */
+export function updatePayment(data) {
+	return request({
+		url: `/api/payment/ordinary`,
+		method: 'put',
+		data: data
+	})
+}
+/* 
+ * 删除账单
+ * 
+ * 
+ */
+export function deletePaymentById(id) {
+	return request({
+		url: `/api/payment/ordinary/${id}`,
+		method: 'delete'
+	})
+}

+ 1 - 1
virgo.wzfrontend/console/src/layout/components/subMenu.vue

@@ -11,7 +11,7 @@
 					</template>
 					<sub-menu :menuData="item.children" :menuIndex="menuIndex+1"></sub-menu>
 				</el-submenu>
-				<el-menu-item :index="item.index" v-else :key="index">
+				<el-menu-item :index="item.index" v-else :key="index" :name="item.index">
 					<i v-if="item.iconClass" :class="item.iconClass + ' icon'"></i>
 					<span slot="title" class="menu-title">{{item.title}}</span>
 				</el-menu-item>

+ 41 - 7
virgo.wzfrontend/console/src/router/modules/bill.js

@@ -1,10 +1,44 @@
-const bill = [{
-	path: 'bill/contract',
-	component: () => import('@/views/work/bill/contract'),
-	name: '合同账单',
+const business = [{
+	path: 'bill/contract/payment',
+	component: () => import('@/views/work/bill/contract/payment'),
+	name: '合同账单-收款账单',
 	meta: {
-		title: '合同账单'
+		title: '合同账单-收款账单'
+	}
+}, {
+	path: 'bill/contract/organization',
+	component: () => import('@/views/work/bill/contract/organization'),
+	name: '合同账单-公司付款',
+	meta: {
+		title: '合同账单-公司付款'
+	}
+}, {
+	path: 'bill/contract/client',
+	component: () => import('@/views/work/bill/contract/client'),
+	name: '合同账单-个人付款',
+	meta: {
+		title: '合同账单-个人付款'
+	}
+}, {
+	path: 'bill/routine/payment',
+	component: () => import('@/views/work/bill/routine/payment'),
+	name: '常规账单-收款账单',
+	meta: {
+		title: '常规账单-收款账单'
+	}
+}, {
+	path: 'bill/routine/organization',
+	component: () => import('@/views/work/bill/routine/organization'),
+	name: '常规账单-公司付款',
+	meta: {
+		title: '常规账单-公司付款'
+	}
+}, {
+	path: 'bill/routine/client',
+	component: () => import('@/views/work/bill/routine/client'),
+	name: '常规账单-个人付款',
+	meta: {
+		title: '常规账单-个人付款'
 	}
 }]
-
-export default bill;
+export default business;

+ 7 - 0
virgo.wzfrontend/console/src/views/system/log.vue

@@ -61,6 +61,13 @@
 					<div class="log-item">2、新增账单付款记录、发票记录附件下载的功能。</div>
 				</div>
 			</el-timeline-item>
+			<el-timeline-item timestamp="2024-06-16" placement="top">
+				<div class="log-box">
+					<div class="log-item">1、更改账单管理-合同账单分类展示。</div>
+					<div class="log-item">2、新增账单管理-常规账单功能,包含收款账单、企业付款、个人付款。</div>
+					<div class="log-item">3、新增账单管理-常规账单按名称搜索的功能。</div>
+				</div>
+			</el-timeline-item>
 		</el-timeline>
 	</div>
 </template>

+ 14 - 59
virgo.wzfrontend/console/src/views/work/bill/contract.vue

@@ -2,10 +2,7 @@
 	<div class="hui-flex hui-content">
 		<div class="hui-flex">
 			<div class="hui-content-title">
-				<div :class="'hui-title-item'+ (titleId === item.id ? ' active':'')" v-for="(item,index) in titleList"
-					:key="item.id" @click="changeTitle(item.id)">
-					{{item.name}}
-				</div>
+				<div class="hui-title-item active">个人付款账单</div>
 			</div>
 			<div class="hui-flex-box hui-flex hui-table">
 				<list-filter ref="billContract" type="billContract" @filter="filterInit"></list-filter>
@@ -93,37 +90,29 @@
 				detailId: '',
 				filterOption: {},
 				drawer: false,
-				titleList: [{
-					id: 1,
-					name: '企业收款账单'
-				}, {
-					id: 2,
-					name: '企业付款账单'
-				}, {
-					id: 3,
-					name: '个人付款账单'
-				}],
-				titleId: 1,
-				merchantId: '',
 				clientId: ''
 			}
 		},
 		created() {
-			this.init();
+			bindProjectDetail({
+				userId: this.$store.getters.user.userId,
+				projectId: this.$store.getters.project.id,
+				identityId: 1
+			}).then(res => {
+				if (res.state) {
+					if (res.data.length == 0) return;
+					this.clientId = res.data[0].clientId;
+					this.init();
+				}
+			})
 		},
 		methods: {
 			init() {
 				let postData = {
 					currPage: this.currPage,
 					pageSize: this.pageSize,
-					projectId: this.$store.getters.project.id
-				}
-				if (this.titleId === 1) {
-					postData['organizationId'] = this.$store.getters.organization.id;
-				} else if (this.titleId === 2) {
-					postData['payMerchantId'] = this.merchantId;
-				} else {
-					postData['payClientId'] = this.clientId;
+					projectId: this.$store.getters.project.id,
+					payClientId: this.clientId
 				}
 				postData = Object.assign(postData, this.filterOption);
 				getPaymentListByPage(postData).then(res => {
@@ -133,40 +122,6 @@
 					}
 				})
 			},
-			changeTitle(id) {
-				this.titleId = id;
-				this.currPage = 1;
-				this.tableData = [];
-				this.$refs.billContract.resetField();
-				this.filterOption = {};
-				if (this.titleId === 2 && !this.merchantId) {
-					bindProjectDetail({
-						bindOrganizationId: this.$store.getters.organization.id,
-						projectId: this.$store.getters.project.id,
-						identityId: 4
-					}).then(res => {
-						if (res.state) {
-							if (res.data.length == 0) return;
-							this.merchantId = res.data[0].merchantId;
-							this.init();
-						}
-					})
-				} else if (this.titleId === 3 && !this.clientId) {
-					bindProjectDetail({
-						userId: this.$store.getters.user.userId,
-						projectId: this.$store.getters.project.id,
-						identityId: 1
-					}).then(res => {
-						if (res.state) {
-							if (res.data.length == 0) return;
-							this.clientId = res.data[0].clientId;
-							this.init();
-						}
-					})
-				} else {
-					this.init();
-				}
-			},
 			filterInit(option) {
 				this.filterOption = option;
 				this.currPage = 1;

+ 151 - 0
virgo.wzfrontend/console/src/views/work/bill/contract/organization.vue

@@ -0,0 +1,151 @@
+<template>
+	<div class="hui-flex hui-content">
+		<div class="hui-flex">
+			<div class="hui-content-title">
+				<div class="hui-title-item active">公司付款账单</div>
+			</div>
+			<div class="hui-flex-box hui-flex hui-table">
+				<list-filter ref="billContract" type="billContract" @filter="filterInit"></list-filter>
+				<div class="hui-flex-box">
+					<el-table :data="tableData" row-key="id" border height="100%">
+						<el-table-column label="序号" width="50">
+							<template slot-scope="scope">
+								<div style="text-align: center;">{{scope.$index + 1}}</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="合同编码" prop="contractCode"></el-table-column>
+						<el-table-column label="账单期数" prop="code" width="100">
+							<template slot-scope="scope">
+								<span>{{'第' + scope.row.phase + '期'}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="账单日期" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{scope.row.startDate}}至{{scope.row.endDate}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="金额">
+							<template slot-scope="scope">
+								<span>{{scope.row.amount + '元'}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="收款方" prop="organizationName"></el-table-column>
+						<el-table-column label="付款方">
+							<template slot-scope="scope">
+								<span> {{scope.row.payMerchantName || scope.row.payClientName}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="状态" width="80">
+							<template slot-scope="scope">
+								<div class="hui-table-tag">
+									<div class="hui-tag hui-tag-info" v-if="!scope.row.status">待付款</div>
+									<div class="hui-tag hui-tag-warning" v-else-if="scope.row.status === 1">付款中</div>
+									<div class="hui-tag hui-tag-success" v-else-if="scope.row.status === 2">已付款</div>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="操作" width="80">
+							<template slot-scope="scope">
+								<div class="hui-table-operation">
+									<span class="table-operation" @click="detailItem(scope.row)">
+										详情
+									</span>
+								</div>
+							</template>
+						</el-table-column>
+						<template slot="empty">
+							<empty description="暂无数据"></empty>
+						</template>
+					</el-table>
+				</div>
+				<div class="hui-content-pagination">
+					<el-pagination :page-size="pageSize" :pager-count="9" layout="prev, pager, next" :total="totalCount"
+						@current-change="currentChange">
+					</el-pagination>
+				</div>
+			</div>
+		</div>
+		<el-drawer title="账单详情" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<detail v-if="drawer" :detailId="detailId" @reload="init"></detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import detail from '@/components/work/bill/contract/detail'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		bindProjectDetail
+	} from '@/httpApi/organization'
+	import {
+		getPaymentListByPage
+	} from '@/httpApi/contract'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				detailId: '',
+				filterOption: {},
+				drawer: false,
+				merchantId: ''
+			}
+		},
+		created() {
+			bindProjectDetail({
+				bindOrganizationId: this.$store.getters.organization.id,
+				projectId: this.$store.getters.project.id,
+				identityId: 4
+			}).then(res => {
+				if (res.state) {
+					if (res.data.length == 0) return;
+					this.merchantId = res.data[0].merchantId;
+					this.init();
+				}
+			})
+		},
+		methods: {
+			init() {
+				let postData = {
+					currPage: this.currPage,
+					pageSize: this.pageSize,
+					projectId: this.$store.getters.project.id,
+					payMerchantId: this.merchantId
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getPaymentListByPage(postData).then(res => {
+					if (res.state) {
+						this.tableData = res.data.dataList;
+						this.totalCount = res.data.totalCount;
+					}
+				})
+			},
+			filterInit(option) {
+				this.filterOption = option;
+				this.currPage = 1;
+				this.init();
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			detailItem(item) {
+				this.detailId = item.id;
+				this.drawer = true;
+			},
+			callback(type) {
+				if (type === 'init') this.init();
+				this.type = 'list';
+			}
+		},
+		components: {
+			detail,
+			listFilter
+		},
+	}
+</script>
+
+<style>
+</style>

+ 137 - 0
virgo.wzfrontend/console/src/views/work/bill/contract/payment.vue

@@ -0,0 +1,137 @@
+<template>
+	<div class="hui-flex hui-content">
+		<div class="hui-flex">
+			<div class="hui-content-title">
+				<div class="hui-title-item active">收款账单列表</div>
+			</div>
+			<div class="hui-flex-box hui-flex hui-table">
+				<list-filter ref="billContract" type="billContract" @filter="filterInit"></list-filter>
+				<div class="hui-flex-box">
+					<el-table :data="tableData" row-key="id" border height="100%">
+						<el-table-column label="序号" width="50">
+							<template slot-scope="scope">
+								<div style="text-align: center;">{{scope.$index + 1}}</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="合同编码" prop="contractCode"></el-table-column>
+						<el-table-column label="账单期数" prop="code" width="100">
+							<template slot-scope="scope">
+								<span>{{'第' + scope.row.phase + '期'}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="账单日期" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{scope.row.startDate}}至{{scope.row.endDate}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="金额">
+							<template slot-scope="scope">
+								<span>{{scope.row.amount + '元'}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="收款方" prop="organizationName"></el-table-column>
+						<el-table-column label="付款方">
+							<template slot-scope="scope">
+								<span> {{scope.row.payMerchantName || scope.row.payClientName}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="状态" width="80">
+							<template slot-scope="scope">
+								<div class="hui-table-tag">
+									<div class="hui-tag hui-tag-info" v-if="!scope.row.status">待付款</div>
+									<div class="hui-tag hui-tag-warning" v-else-if="scope.row.status === 1">付款中</div>
+									<div class="hui-tag hui-tag-success" v-else-if="scope.row.status === 2">已付款</div>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="操作" width="80">
+							<template slot-scope="scope">
+								<div class="hui-table-operation">
+									<span class="table-operation" @click="detailItem(scope.row)">
+										详情
+									</span>
+								</div>
+							</template>
+						</el-table-column>
+						<template slot="empty">
+							<empty description="暂无数据"></empty>
+						</template>
+					</el-table>
+				</div>
+				<div class="hui-content-pagination">
+					<el-pagination :page-size="pageSize" :pager-count="9" layout="prev, pager, next" :total="totalCount"
+						@current-change="currentChange">
+					</el-pagination>
+				</div>
+			</div>
+		</div>
+		<el-drawer title="账单详情" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<detail v-if="drawer" :detailId="detailId" @reload="init"></detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import detail from '@/components/work/bill/contract/detail'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		getPaymentListByPage
+	} from '@/httpApi/contract'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				detailId: '',
+				filterOption: {},
+				drawer: false,
+			}
+		},
+		created() {
+			this.init();
+		},
+		methods: {
+			init() {
+				let postData = {
+					currPage: this.currPage,
+					pageSize: this.pageSize,
+					projectId: this.$store.getters.project.id,
+					organizationId: this.$store.getters.organization.id
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getPaymentListByPage(postData).then(res => {
+					if (res.state) {
+						this.tableData = res.data.dataList;
+						this.totalCount = res.data.totalCount;
+					}
+				})
+			},
+			filterInit(option) {
+				this.filterOption = option;
+				this.currPage = 1;
+				this.init();
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			detailItem(item) {
+				this.detailId = item.id;
+				this.drawer = true;
+			},
+			callback(type) {
+				if (type === 'init') this.init();
+				this.type = 'list';
+			}
+		},
+		components: {
+			detail,
+			listFilter
+		},
+	}
+</script>
+
+<style>
+</style>

+ 146 - 0
virgo.wzfrontend/console/src/views/work/bill/routine/client.vue

@@ -0,0 +1,146 @@
+<template>
+	<div class="hui-flex hui-content">
+		<div class="hui-flex">
+			<div class="hui-content-title">
+				<div class="hui-title-item active">个人付款账单</div>
+			</div>
+			<div class="hui-flex-box hui-flex hui-table">
+				<list-filter ref="billContract" type="billRoutine" @filter="filterInit"></list-filter>
+				<div class="hui-flex-box">
+					<el-table :data="tableData" row-key="id" border height="100%">
+						<el-table-column label="序号" width="50">
+							<template slot-scope="scope">
+								<div style="text-align: center;">{{scope.$index + 1}}</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="账单名称" prop="name"></el-table-column>
+						<el-table-column label="金额">
+							<template slot-scope="scope">
+								<span>{{scope.row.amount + '元'}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="收款方" prop="organizationName"></el-table-column>
+						<el-table-column label="付款方">
+							<template slot-scope="scope">
+								<span> {{scope.row.payMerchantName || scope.row.payClientName}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="提醒日期" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{scope.row.reminderDate}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="状态" width="80">
+							<template slot-scope="scope">
+								<div class="hui-table-tag">
+									<div class="hui-tag hui-tag-info" v-if="!scope.row.status">待付款</div>
+									<div class="hui-tag hui-tag-warning" v-else-if="scope.row.status === 1">付款中</div>
+									<div class="hui-tag hui-tag-success" v-else-if="scope.row.status === 2">已付款</div>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="操作" width="150">
+							<template slot-scope="scope">
+								<div class="hui-table-operation">
+									<span class="table-operation" @click="detailItem(scope.row)">
+										详情
+									</span>
+								</div>
+							</template>
+						</el-table-column>
+						<template slot="empty">
+							<empty description="暂无数据"></empty>
+						</template>
+					</el-table>
+				</div>
+				<div class="hui-content-pagination">
+					<el-pagination :page-size="pageSize" :pager-count="9" layout="prev, pager, next" :total="totalCount"
+						@current-change="currentChange">
+					</el-pagination>
+				</div>
+			</div>
+		</div>
+		<el-drawer title="账单详情" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<detail v-if="drawer" :detailId="detailId" @reload="init"></detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import detail from '@/components/work/bill/routine/detail'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		getPaymentListByPage
+	} from '@/httpApi/bill'
+	import {
+		bindProjectDetail
+	} from '@/httpApi/organization'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				detailId: '',
+				filterOption: {},
+				drawer: false,
+				payClientId: ''
+			}
+		},
+		created() {
+			bindProjectDetail({
+				userId: this.$store.getters.user.userId,
+				projectId: this.$store.getters.project.id,
+				identityId: 1
+			}).then(res => {
+				if (res.state) {
+					if (res.data.length == 0) return;
+					this.payClientId = res.data[0].clientId;
+					this.init();
+				}
+			})
+		},
+		methods: {
+			init() {
+				let postData = {
+					currPage: this.currPage,
+					pageSize: this.pageSize,
+					projectId: this.$store.getters.project.id,
+					payClientId: this.payClientId
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getPaymentListByPage(postData).then(res => {
+					if (res.state) {
+						this.tableData = res.data.dataList;
+						this.totalCount = res.data.totalCount;
+					}
+				})
+			},
+			filterInit(option) {
+				this.filterOption = option;
+				this.currPage = 1;
+				this.init();
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			detailItem(item) {
+				this.detailId = item.id;
+				this.drawer = true;
+			},
+			callback(type) {
+				if (type === 'init') this.init();
+				this.visible = false;
+			}
+		},
+		components: {
+			detail,
+			listFilter
+		},
+	}
+</script>
+
+<style>
+</style>

+ 146 - 0
virgo.wzfrontend/console/src/views/work/bill/routine/organization.vue

@@ -0,0 +1,146 @@
+<template>
+	<div class="hui-flex hui-content">
+		<div class="hui-flex">
+			<div class="hui-content-title">
+				<div class="hui-title-item active">公司付款账单</div>
+			</div>
+			<div class="hui-flex-box hui-flex hui-table">
+				<list-filter ref="billContract" type="billRoutine" @filter="filterInit"></list-filter>
+				<div class="hui-flex-box">
+					<el-table :data="tableData" row-key="id" border height="100%">
+						<el-table-column label="序号" width="50">
+							<template slot-scope="scope">
+								<div style="text-align: center;">{{scope.$index + 1}}</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="账单名称" prop="name"></el-table-column>
+						<el-table-column label="金额">
+							<template slot-scope="scope">
+								<span>{{scope.row.amount + '元'}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="收款方" prop="organizationName"></el-table-column>
+						<el-table-column label="付款方">
+							<template slot-scope="scope">
+								<span> {{scope.row.payMerchantName || scope.row.payClientName}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="提醒日期" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{scope.row.reminderDate}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="状态" width="80">
+							<template slot-scope="scope">
+								<div class="hui-table-tag">
+									<div class="hui-tag hui-tag-info" v-if="!scope.row.status">待付款</div>
+									<div class="hui-tag hui-tag-warning" v-else-if="scope.row.status === 1">付款中</div>
+									<div class="hui-tag hui-tag-success" v-else-if="scope.row.status === 2">已付款</div>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="操作" width="150">
+							<template slot-scope="scope">
+								<div class="hui-table-operation">
+									<span class="table-operation" @click="detailItem(scope.row)">
+										详情
+									</span>
+								</div>
+							</template>
+						</el-table-column>
+						<template slot="empty">
+							<empty description="暂无数据"></empty>
+						</template>
+					</el-table>
+				</div>
+				<div class="hui-content-pagination">
+					<el-pagination :page-size="pageSize" :pager-count="9" layout="prev, pager, next" :total="totalCount"
+						@current-change="currentChange">
+					</el-pagination>
+				</div>
+			</div>
+		</div>
+		<el-drawer title="账单详情" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<detail v-if="drawer" :detailId="detailId" @reload="init"></detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import detail from '@/components/work/bill/routine/detail'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		getPaymentListByPage
+	} from '@/httpApi/bill'
+	import {
+		bindProjectDetail
+	} from '@/httpApi/organization'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				detailId: '',
+				filterOption: {},
+				drawer: false,
+				payMerchantId: ''
+			}
+		},
+		created() {
+			bindProjectDetail({
+				bindOrganizationId: this.$store.getters.organization.id,
+				projectId: this.$store.getters.project.id,
+				identityId: 4
+			}).then(res => {
+				if (res.state) {
+					if (res.data.length == 0) return;
+					this.payMerchantId = res.data[0].merchantId;
+					this.init();
+				}
+			})
+		},
+		methods: {
+			init() {
+				let postData = {
+					currPage: this.currPage,
+					pageSize: this.pageSize,
+					projectId: this.$store.getters.project.id,
+					payMerchantId: this.payMerchantId
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getPaymentListByPage(postData).then(res => {
+					if (res.state) {
+						this.tableData = res.data.dataList;
+						this.totalCount = res.data.totalCount;
+					}
+				})
+			},
+			filterInit(option) {
+				this.filterOption = option;
+				this.currPage = 1;
+				this.init();
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			detailItem(item) {
+				this.detailId = item.id;
+				this.drawer = true;
+			},
+			callback(type) {
+				if (type === 'init') this.init();
+				this.visible = false;
+			}
+		},
+		components: {
+			detail,
+			listFilter
+		},
+	}
+</script>
+
+<style>
+</style>

+ 168 - 0
virgo.wzfrontend/console/src/views/work/bill/routine/payment.vue

@@ -0,0 +1,168 @@
+<template>
+	<div class="hui-flex hui-content">
+		<div class="hui-flex">
+			<div class="hui-content-title">
+				<div class="hui-title-item active">收款账单列表</div>
+			</div>
+			<div class="hui-flex-box hui-flex hui-table">
+				<list-filter ref="billContract" type="billRoutine" @filter="filterInit"></list-filter>
+				<div class="hui-content-insert">
+					<el-button type="primary" size="medium" @click="insertItem">新增账单</el-button>
+				</div>
+				<div class="hui-flex-box">
+					<el-table :data="tableData" row-key="id" border height="100%">
+						<el-table-column label="序号" width="50">
+							<template slot-scope="scope">
+								<div style="text-align: center;">{{scope.$index + 1}}</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="账单名称" prop="name"></el-table-column>
+						<el-table-column label="金额">
+							<template slot-scope="scope">
+								<span>{{scope.row.amount + '元'}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="收款方" prop="organizationName"></el-table-column>
+						<el-table-column label="付款方">
+							<template slot-scope="scope">
+								<span> {{scope.row.payMerchantName || scope.row.payClientName}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="提醒日期" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{scope.row.reminderDate}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="状态" width="80">
+							<template slot-scope="scope">
+								<div class="hui-table-tag">
+									<div class="hui-tag hui-tag-info" v-if="!scope.row.status">待付款</div>
+									<div class="hui-tag hui-tag-warning" v-else-if="scope.row.status === 1">付款中</div>
+									<div class="hui-tag hui-tag-success" v-else-if="scope.row.status === 2">已付款</div>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="操作" width="150">
+							<template slot-scope="scope">
+								<div class="hui-table-operation">
+									<span class="table-operation" @click="detailItem(scope.row)">
+										详情
+									</span>
+									<span class="table-operation" @click="updateItem(scope.row)">
+										编辑
+									</span>
+									<span class="table-operation" @click="deleteItem(scope.row)">
+										删除
+									</span>
+								</div>
+							</template>
+						</el-table-column>
+						<template slot="empty">
+							<empty description="暂无数据"></empty>
+						</template>
+					</el-table>
+				</div>
+				<div class="hui-content-pagination">
+					<el-pagination :page-size="pageSize" :pager-count="9" layout="prev, pager, next" :total="totalCount"
+						@current-change="currentChange">
+					</el-pagination>
+				</div>
+			</div>
+		</div>
+		<el-dialog :title="isUpdate?'编辑':'新增'" :visible.sync="visible" width="900px" :append-to-body="true">
+			<edit v-if="visible" @callback="callback" :isUpdate="isUpdate" :detailId="detailId"></edit>
+		</el-dialog>
+		<el-drawer title="账单详情" :visible.sync="drawer" :size="400" :append-to-body="true">
+			<detail v-if="drawer" :detailId="detailId" @reload="init"></detail>
+		</el-drawer>
+	</div>
+</template>
+
+<script>
+	import detail from '@/components/work/bill/routine/detail'
+	import edit from '@/components/work/bill/routine/edit'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		getPaymentListByPage,
+		deletePaymentById
+	} from '@/httpApi/bill'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				detailId: '',
+				isUpdate: false,
+				filterOption: {},
+				drawer: false,
+				visible: false
+			}
+		},
+		created() {
+			this.init();
+		},
+		methods: {
+			init() {
+				let postData = {
+					currPage: this.currPage,
+					pageSize: this.pageSize,
+					projectId: this.$store.getters.project.id,
+					organizationId: this.$store.getters.organization.id
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getPaymentListByPage(postData).then(res => {
+					if (res.state) {
+						this.tableData = res.data.dataList;
+						this.totalCount = res.data.totalCount;
+					}
+				})
+			},
+			filterInit(option) {
+				this.filterOption = option;
+				this.currPage = 1;
+				this.init();
+			},
+			currentChange(currPage) {
+				this.currPage = currPage;
+				this.init();
+			},
+			insertItem() {
+				this.isUpdate = false;
+				this.visible = true;
+			},
+			updateItem(item) {
+				this.detailId = item.id;
+				this.isUpdate = true;
+				this.visible = true;
+			},
+			detailItem(item) {
+				this.detailId = item.id;
+				this.drawer = true;
+			},
+			deleteItem(item) {
+				this.$confirm('确定要删除该账单?', () => {
+					deletePaymentById(item.id).then(res => {
+						if (res.state) {
+							this.init();
+							this.$message.success('操作成功');
+						}
+					})
+				});
+			},
+			callback(type) {
+				if (type === 'init') this.init();
+				this.visible = false;
+			}
+		},
+		components: {
+			detail,
+			listFilter,
+			edit
+		},
+	}
+</script>
+
+<style>
+</style>

+ 41 - 12
virgo.wzfrontend/console/src/views/work/contract/client.vue

@@ -71,7 +71,7 @@
 				</div>
 			</div>
 			<edit v-if="type === 'edit'" class="hui-flex-box" @callback="callback" :detailId="detail.id"></edit>
-			<detail v-else class="hui-flex-box" @callback="callback" :detailId="detail.id"></detail>
+			<detail ref="detail" v-else class="hui-flex-box" @callback="callback" :detailId="detail.id"></detail>
 		</div>
 	</div>
 </template>
@@ -83,7 +83,9 @@
 	import {
 		getContractListByPage,
 		deleteContractById,
-		updateContract
+		updateContract,
+		archivedDocument,
+		paymentGenerate
 	} from '@/httpApi/contract'
 	import {
 		bindProjectDetail
@@ -151,17 +153,44 @@
 			},
 			sureConcart() {
 				this.$confirm('是否确定合同无误,确定后账单将自动生成?', () => {
-					updateContract({
-						id: this.detail.id,
-						status: 2
-					}).then(res => {
-						if (res.state) {
-							this.$message({
-								type: 'success',
-								message: '操作成功'
+					this.$loading.open();
+					let documentList = this.detail.document ? JSON.parse(this.detail.document) : [];
+					let promise = [];
+					for (let i = 0; i < documentList.length; i++) {
+						promise.push(new Promise((resolve, reject) => {
+							archivedDocument(documentList[i].id, this.$store.getters
+								.project.name).then(res => {
+								if (res.state) {
+									resolve(true)
+								} else {
+									reject(false)
+								}
 							})
-							this.detail['status'] = 2;
-						}
+						}))
+					}
+					promise.push(new Promise((resolve, reject) => {
+						paymentGenerate(this.detail.id).then(res => {
+							if (res.state) {
+								resolve(true)
+							} else {
+								reject(false)
+							}
+						})
+					}))
+					Promise.all(promise).then(res => {
+						this.$loading.close();
+						updateContract({
+							id: this.detail.id,
+							status: 2
+						})
+						this.$message({
+							type: 'success',
+							message: '操作成功'
+						})
+						this.$refs.detail.init();
+						this.detail['status'] = 2;
+					}).catch(error => {
+						this.$loading.close();
 					})
 				});
 			},

+ 1 - 1
virgo.wzfrontend/console/src/views/work/contract/list.vue

@@ -36,7 +36,7 @@
 						<el-table-column label="运营跟进人" prop="operatorName" width="100"></el-table-column>
 						<el-table-column label="状态" width="100">
 							<template slot-scope="scope">
-								<div class="hui-table-operation" v-if="scope.row.status === 0">
+								<div class="hui-table-operation" v-if="!scope.row.status">
 									<span class="table-operation" @click="sendItem(scope.row)">
 										发送租客
 									</span>

+ 8 - 0
virgo.wzfrontend/console/src/views/work/invoice/contract.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 8 - 0
virgo.wzfrontend/console/src/views/work/invoice/routine.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/index.html


virgo.wzfrontend/src/main/resources/static/static/css/112.62c9bb7a.css → virgo.wzfrontend/src/main/resources/static/static/css/336.62c9bb7a.css


virgo.wzfrontend/src/main/resources/static/static/css/454.b6c7aaf0.css → virgo.wzfrontend/src/main/resources/static/static/css/453.b6c7aaf0.css


virgo.wzfrontend/src/main/resources/static/static/css/486.b6c7aaf0.css → virgo.wzfrontend/src/main/resources/static/static/css/827.b6c7aaf0.css


virgo.wzfrontend/src/main/resources/static/static/css/314.52c2cdde.css → virgo.wzfrontend/src/main/resources/static/static/css/857.52c2cdde.css


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/css/933.52c2cdde.css


virgo.wzfrontend/src/main/resources/static/static/css/535.62c9bb7a.css → virgo.wzfrontend/src/main/resources/static/static/css/956.62c9bb7a.css


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/112.07d98df5.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/135-legacy.cba3ad47.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/135.b679c2fb.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/166-legacy.e94d6543.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/166.717564ef.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/18-legacy.edf4b0ae.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/18.3cfa5af6.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/188.b8184868.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/191-legacy.24ac21ac.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/191.7c06989f.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/204.336e8366.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/239-legacy.8d0ab73a.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/239.57989d95.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/245-legacy.7954939b.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/245.9a90e5ff.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/254-legacy.9b93fd12.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/289-legacy.0feb0292.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/289.614531db.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/293.305a97b0.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/293.dce39594.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/314.d6a1fc4e.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/336-legacy.27e217b5.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/380-legacy.5208969b.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/41-legacy.8ff8d969.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/41.4d794f71.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/433-legacy.82360066.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/433.a9c76d27.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/453-legacy.2361f352.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/454-legacy.883c431c.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/486.d72033b6.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/51-legacy.b2533985.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/51.bdab8a90.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/525.e2f8bc1f.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/535-legacy.8f6a6f3f.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/61-legacy.04d89f2f.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/61.aac0e827.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/729-legacy.a2bea4d1.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/729.1e01b436.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/764-legacy.fe07a6be.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/764.d3b139c8.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/779-legacy.bdac8d3f.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/779.98dcb4e1.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/807-legacy.e1431519.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/827.4cf3f62c.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/850-legacy.9d10e393.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/850.f1ff0134.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/896-legacy.7370765f.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/896-legacy.e2dc18f8.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/896.24270f3a.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/896.c5cc17b4.js


文件差異過大導致無法顯示
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/906-legacy.a7b6f43f.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/919-legacy.32a3e3e2.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/919-legacy.c0a94619.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/956.b3e9ff16.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/app-legacy.329b889f.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/app-legacy.9a49d203.js


文件差異過大導致無法顯示
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/app.9d4283da.js


文件差異過大導致無法顯示
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/app.ae74846a.js