whx il y a 1 an
Parent
commit
897a347a12
100 fichiers modifiés avec 1144 ajouts et 92 suppressions
  1. 3 0
      virgo.wzfrontend/console/src/assets/scss/index.scss
  2. 11 1
      virgo.wzfrontend/console/src/components/common/listFilter.vue
  3. 45 3
      virgo.wzfrontend/console/src/components/work/bill/common/invoiceForm.vue
  4. 16 5
      virgo.wzfrontend/console/src/components/work/bill/common/recodeForm.vue
  5. 22 5
      virgo.wzfrontend/console/src/components/work/bill/contract/detail.vue
  6. 42 5
      virgo.wzfrontend/console/src/components/work/bill/routine/detail.vue
  7. 81 0
      virgo.wzfrontend/console/src/components/work/invoice/detail.vue
  8. 9 1
      virgo.wzfrontend/console/src/config/field.js
  9. 24 0
      virgo.wzfrontend/console/src/httpApi/invoice.js
  10. 2 2
      virgo.wzfrontend/console/src/router/modules/bill.js
  11. 44 0
      virgo.wzfrontend/console/src/router/modules/invoice.js
  12. 9 2
      virgo.wzfrontend/console/src/views/system/log.vue
  13. 5 4
      virgo.wzfrontend/console/src/views/work/bill/routine/client.vue
  14. 4 3
      virgo.wzfrontend/console/src/views/work/bill/routine/organization.vue
  15. 26 6
      virgo.wzfrontend/console/src/views/work/bill/routine/payment.vue
  16. 0 8
      virgo.wzfrontend/console/src/views/work/invoice/contract.vue
  17. 130 0
      virgo.wzfrontend/console/src/views/work/invoice/contract/client.vue
  18. 130 0
      virgo.wzfrontend/console/src/views/work/invoice/contract/organization.vue
  19. 116 0
      virgo.wzfrontend/console/src/views/work/invoice/contract/payment.vue
  20. 0 8
      virgo.wzfrontend/console/src/views/work/invoice/routine.vue
  21. 130 0
      virgo.wzfrontend/console/src/views/work/invoice/routine/client.vue
  22. 130 0
      virgo.wzfrontend/console/src/views/work/invoice/routine/organization.vue
  23. 116 0
      virgo.wzfrontend/console/src/views/work/invoice/routine/payment.vue
  24. 1 1
      virgo.wzfrontend/src/main/resources/static/index.html
  25. 0 0
      virgo.wzfrontend/src/main/resources/static/static/css/132.62c9bb7a.css
  26. 0 0
      virgo.wzfrontend/src/main/resources/static/static/css/535.62c9bb7a.css
  27. 0 0
      virgo.wzfrontend/src/main/resources/static/static/css/631.52c2cdde.css
  28. 0 0
      virgo.wzfrontend/src/main/resources/static/static/css/649.b6c7aaf0.css
  29. 0 0
      virgo.wzfrontend/src/main/resources/static/static/css/842.b6c7aaf0.css
  30. 0 1
      virgo.wzfrontend/src/main/resources/static/static/css/app.845114dc.css
  31. 1 0
      virgo.wzfrontend/src/main/resources/static/static/css/app.fe59b970.css
  32. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/132-legacy.12094bd2.js
  33. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/135-legacy.cba3ad47.js
  34. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/135.b679c2fb.js
  35. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/162-legacy.84eb54fa.js
  36. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/166-legacy.0f34b03f.js
  37. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/166.2779dfc7.js
  38. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/169-legacy.90c06e0e.js
  39. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/169.2f4f1083.js
  40. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/18-legacy.edf4b0ae.js
  41. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/18.3cfa5af6.js
  42. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/188.b8184868.js
  43. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/191-legacy.32114e31.js
  44. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/191.ed53cec1.js
  45. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/204.336e8366.js
  46. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/245-legacy.1edda36c.js
  47. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/245.4e212f69.js
  48. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/271-legacy.9d0d3c5d.js
  49. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/271.a459d9bd.js
  50. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/293.2b3dbf0d.js
  51. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/293.dce39594.js
  52. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/333-legacy.b1980367.js
  53. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/333.fc4d6d30.js
  54. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/336-legacy.27e217b5.js
  55. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/338.b115f915.js
  56. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/372.f64d30c6.js
  57. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/380-legacy.5208969b.js
  58. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/41-legacy.8ff8d969.js
  59. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/41-legacy.abcd8531.js
  60. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/41.4d794f71.js
  61. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/41.c6337d2f.js
  62. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/433-legacy.82360066.js
  63. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/433.a9c76d27.js
  64. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/453-legacy.2361f352.js
  65. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/51-legacy.01bba7ba.js
  66. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/51.a465106a.js
  67. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/525.894d5a8e.js
  68. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/531-legacy.5916a514.js
  69. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/531.4939dd7c.js
  70. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/535.a104987e.js
  71. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/588-legacy.f191fe8d.js
  72. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/588.89623f9f.js
  73. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/61-legacy.7b3a2693.js
  74. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/61-legacy.9145f269.js
  75. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/61.d9d8a4af.js
  76. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/649-legacy.fc551d84.js
  77. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/72-legacy.7c77afab.js
  78. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/72.7c843716.js
  79. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/729-legacy.a2bea4d1.js
  80. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/729-legacy.b0c25e06.js
  81. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/729.1e01b436.js
  82. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/729.2a0cc8b5.js
  83. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/764-legacy.04808f84.js
  84. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/764-legacy.fe07a6be.js
  85. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/764.d3b139c8.js
  86. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/764.e82fd8ce.js
  87. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/779-legacy.bdac8d3f.js
  88. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/779.98dcb4e1.js
  89. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/807-legacy.e1431519.js
  90. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/821-legacy.80ceadbb.js
  91. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/821.eeb55937.js
  92. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/827.4cf3f62c.js
  93. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/842.4fdc2be8.js
  94. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/850-legacy.fe9abc14.js
  95. 1 1
      virgo.wzfrontend/src/main/resources/static/static/js/850.459c9b83.js
  96. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/896-legacy.e2dc18f8.js
  97. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/896-legacy.fc32dfd8.js
  98. 0 1
      virgo.wzfrontend/src/main/resources/static/static/js/896.24270f3a.js
  99. 1 0
      virgo.wzfrontend/src/main/resources/static/static/js/896.361dc6c6.js
  100. 0 0
      virgo.wzfrontend/src/main/resources/static/static/js/906-legacy.49003b91.js

+ 3 - 0
virgo.wzfrontend/console/src/assets/scss/index.scss

@@ -271,6 +271,9 @@
 				width: 0;
 				min-height: 20px;
 				line-height: 20px;
+			}
+			&.hui-detail-item-top{
+				align-items: start;
 			}
 		}
 	}

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

@@ -65,6 +65,12 @@
 				<el-input prefix-icon="el-icon-search" v-model="billRoutine.name" placeholder="请输入账单名称">
 				</el-input>
 			</div>
+		</div>
+		<div class="filter-box" v-if="type === 'invoice'">
+			<div class="filter-item">
+				<el-input prefix-icon="el-icon-search" v-model="invoice.name" placeholder="请输入发票名称">
+				</el-input>
+			</div>
 		</div>
 		<div class="filter-btn">
 			<el-button type="primary" size="medium" @click="submit">查询</el-button>
@@ -110,7 +116,11 @@
 				billRoutine: {
 					name: ''
 				},
-				billRoutineData: {}
+				billRoutineData: {},
+				invoice: {
+					name: ''
+				},
+				invoiceData: {}
 			}
 		},
 		created() {

+ 45 - 3
virgo.wzfrontend/console/src/components/work/bill/common/invoiceForm.vue

@@ -5,6 +5,26 @@
 				<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="invoiceType" :rules="[{required: true, message: '请选择发票类型'}]">
+					<el-select v-model="form.invoiceType" placeholder="请选择发票类型">
+						<el-option :label="item.name" :value="item.id" v-for="(item,index) in $field.field.invoiceType"
+							:key="item.id">
+						</el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="发票代码" prop="code" :rules="[{required: true, message: '请输入发票代码'}]">
+					<el-input type="text" v-model="form.code" placeholder="请输入发票代码"></el-input>
+				</el-form-item>
+				<el-form-item label="发票号码" prop="number" :rules="[{required: true, message: '请输入发票号码'}]">
+					<el-input type="text" v-model="form.number" placeholder="请输入发票号码"></el-input>
+				</el-form-item>
+				<el-form-item label="货物名称" prop="cargoName" :rules="[{required: true, message: '请输入货物名称'}]">
+					<el-input type="text" v-model="form.cargoName" placeholder="请输入货物名称"></el-input>
+				</el-form-item>
+				<el-form-item label="开票日期" prop="date" :rules="[{required: true, message: '请输入开票日期'}]">
+					<el-date-picker v-model="form.date" value-format="yyyy-MM-dd" type="date" placeholder="请选择开票日期">
+					</el-date-picker>
+				</el-form-item>
 				<el-form-item label="发票附件" class="hui-textarea">
 					<upload ref="upload" :list="responsibility" type="insert" accept=".png, .jpg, .jpeg, .pdf"
 						text="上传发票">
@@ -25,29 +45,51 @@
 		insertPaymentInvoice,
 		putPaymentStatus
 	} from '@/httpApi/contract'
+	import {
+		updatePayment
+	} from '@/httpApi/bill'
 	export default {
-		props: ['paymentId'],
+		props: ['itemId', 'type'],
 		data() {
 			return {
 				form: {
 					name: '',
+					invoiceType: 1,
+					code: '',
+					number: '',
+					date: '',
+					cargoName: '',
 					data: '{}'
 				},
 				responsibility: []
 			}
 		},
 		created() {
-			this.form['paymentId'] = this.paymentId;
+			this.form[this.type + 'Id'] = this.itemId;
+			if (this.type === 'payment') {
+				this.form['cargoName'] = '房租';
+				this.form['type'] = 1;
+			} else {
+				this.form['type'] = 2;
+			}
 		},
 		methods: {
 			submit() {
 				this.$refs.form.validate((valid) => {
 					if (valid) {
+						if (this.$refs.upload.fileList.length === 0) return this.$message.warning('请上传发票');
 						let postData = JSON.parse(JSON.stringify(this.form));
 						postData['attachment'] = JSON.stringify(this.$refs.upload.fileList);
 						insertPaymentInvoice(postData).then(res => {
 							if (res.state) {
-								putPaymentStatus(this.paymentId, 2);
+								if (this.type === 'payment') {
+									putPaymentStatus(this.itemId, 2);
+								} else {
+									updatePayment({
+										id: this.itemId,
+										status: 2
+									})
+								}
 								this.$message.success('操作成功');
 								this.$emit('callback', 'init');
 							}

+ 16 - 5
virgo.wzfrontend/console/src/components/work/bill/common/recodeForm.vue

@@ -2,8 +2,8 @@
 	<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 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="回执单" class="hui-textarea">
 					<upload ref="upload" :list="responsibility" type="insert" accept=".png, .jpg, .jpeg, .pdf"
@@ -25,8 +25,11 @@
 		insertPaymentRecord,
 		putPaymentStatus
 	} from '@/httpApi/contract'
+	import {
+		updatePayment
+	} from '@/httpApi/bill'
 	export default {
-		props: ['paymentId'],
+		props: ['itemId', 'type'],
 		data() {
 			return {
 				form: {
@@ -37,17 +40,25 @@
 			}
 		},
 		created() {
-			this.form['paymentId'] = this.paymentId;
+			this.form[this.type + 'Id'] = this.itemId;
 		},
 		methods: {
 			submit() {
 				this.$refs.form.validate((valid) => {
 					if (valid) {
+						if (this.$refs.upload.fileList.length === 0) return this.$message.warning('请上传回执单');
 						let postData = JSON.parse(JSON.stringify(this.form));
 						postData['attachment'] = JSON.stringify(this.$refs.upload.fileList);
 						insertPaymentRecord(postData).then(res => {
 							if (res.state) {
-								putPaymentStatus(this.paymentId, 1);
+								if (this.type === 'payment') {
+									putPaymentStatus(this.itemId, 1);
+								} else {
+									updatePayment({
+										id: this.itemId,
+										status: 1
+									})
+								}
 								this.$message.success('操作成功');
 								this.$emit('callback', 'init');
 							}

+ 22 - 5
virgo.wzfrontend/console/src/components/work/bill/contract/detail.vue

@@ -39,7 +39,7 @@
 						<div class="hui-detail-label">付款名称</div>
 						<div class="hui-detail-value">{{item.name}}</div>
 					</div>
-					<div class="hui-detail-item">
+					<div class="hui-detail-item hui-detail-item-top">
 						<div class="hui-detail-label">回执单</div>
 						<div class="hui-detail-value">
 							<upload ref="upload" :list="item.attachment ? JSON.parse(item.attachment) : []"
@@ -51,11 +51,27 @@
 				<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-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-label">发票类型</div>
+						<div class="hui-detail-value">{{$field.findTypeName('invoiceType',item.type)}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">发票代码</div>
+						<div class="hui-detail-value">{{item.code}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">发票号码</div>
+						<div class="hui-detail-value">{{item.number}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">货物名称</div>
+						<div class="hui-detail-value">{{item.cargoName}}</div>
+					</div>
+					<div class="hui-detail-item hui-detail-item-top">
+						<div class="hui-detail-label">发票附件</div>
 						<div class="hui-detail-value">
 							<upload ref="upload" :list="item.attachment ? JSON.parse(item.attachment) : []"
 								type="preview">
@@ -74,8 +90,9 @@
 			</el-button>
 		</div>
 		<el-dialog title="新增" :visible.sync="visible" width="900px" :append-to-body="true">
-			<recode-form v-if="visible && type === 'record'" @callback="callback" :paymentId="detailId"></recode-form>
-			<invoice-form v-if="visible && type === 'invoice'" @callback="callback" :paymentId="detailId">
+			<recode-form v-if="visible && type === 'record'" @callback="callback" :itemId="detailId" type="payment">
+			</recode-form>
+			<invoice-form v-if="visible && type === 'invoice'" @callback="callback" :itemId="detailId" type="payment">
 			</invoice-form>
 		</el-dialog>
 	</div>

+ 42 - 5
virgo.wzfrontend/console/src/components/work/bill/routine/detail.vue

@@ -27,9 +27,10 @@
 					<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 class="hui-tag hui-tag-success" v-else-if="detail.status === 2">已付款</div>
+							<div class="hui-tag hui-tag-info" v-else-if="detail.status === 3">待付款</div>
+							<div class="hui-tag hui-tag-info" v-else>待发送</div>
 						</div>
 					</div>
 				</div>
@@ -39,7 +40,7 @@
 						<div class="hui-detail-label">付款名称</div>
 						<div class="hui-detail-value">{{item.name}}</div>
 					</div>
-					<div class="hui-detail-item">
+					<div class="hui-detail-item hui-detail-item-top">
 						<div class="hui-detail-label">回执单</div>
 						<div class="hui-detail-value">
 							<upload ref="upload" :list="item.attachment ? JSON.parse(item.attachment) : []"
@@ -51,11 +52,27 @@
 				<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-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-label">发票类型</div>
+						<div class="hui-detail-value">{{$field.findTypeName('invoiceType',item.type)}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">发票代码</div>
+						<div class="hui-detail-value">{{item.code}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">发票号码</div>
+						<div class="hui-detail-value">{{item.number}}</div>
+					</div>
+					<div class="hui-detail-item">
+						<div class="hui-detail-label">货物名称</div>
+						<div class="hui-detail-value">{{item.cargoName}}</div>
+					</div>
+					<div class="hui-detail-item hui-detail-item-top">
+						<div class="hui-detail-label">发票附件</div>
 						<div class="hui-detail-value">
 							<upload ref="upload" :list="item.attachment ? JSON.parse(item.attachment) : []"
 								type="preview">
@@ -65,6 +82,22 @@
 				</div>
 			</div>
 		</div>
+		<div class="hui-drawer-submit" v-if="detail.status === 3 || detail.status === 1">
+			<el-button size="medium" type="primary" @click="paymentOperation('record')" v-if="detail.status === 3">
+				账单付款
+			</el-button>
+			<el-button size="medium" type="primary" @click="paymentOperation('invoice')" v-if="detail.status === 1">
+				账单发票
+			</el-button>
+		</div>
+		<el-dialog title="新增" :visible.sync="visible" width="900px" :append-to-body="true">
+			<recode-form v-if="visible && type === 'record'" @callback="callback" :itemId="detailId"
+				type="paymentOrdinary">
+			</recode-form>
+			<invoice-form v-if="visible && type === 'invoice'" @callback="callback" :itemId="detailId"
+				type="paymentOrdinary">
+			</invoice-form>
+		</el-dialog>
 	</div>
 </template>
 
@@ -73,6 +106,8 @@
 		getPaymentDetailById
 	} from '@/httpApi/bill'
 	import upload from '@/components/common/upload'
+	import recodeForm from '@/components/work/bill/common/recodeForm';
+	import invoiceForm from '@/components/work/bill/common/invoiceForm';
 	export default {
 		props: ['detailId'],
 		data() {
@@ -113,6 +148,8 @@
 			}
 		},
 		components: {
+			recodeForm,
+			invoiceForm,
 			upload
 		},
 	}

+ 81 - 0
virgo.wzfrontend/console/src/components/work/invoice/detail.vue

@@ -0,0 +1,81 @@
+<template>
+	<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">{{$field.findTypeName('invoiceType',detail.invoiceType)}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">发票代码</div>
+				<div class="hui-detail-value">{{detail.code}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">发票号码</div>
+				<div class="hui-detail-value">{{detail.number}}</div>
+			</div>
+			<div class="hui-detail-item">
+				<div class="hui-detail-label">货物名称</div>
+				<div class="hui-detail-value">{{detail.cargoName}}</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>
+		<div class="hui-detail-title">发票附件</div>
+		<div class="hui-detail-content hui-detail-image">
+			<upload ref="upload" :list="detail.attachment ? JSON.parse(detail.attachment) : []" type="preview">
+			</upload>
+		</div>
+	</div>
+</template>
+
+<script>
+	import {
+		getInvoiceDetailById
+	} from '@/httpApi/invoice'
+	import upload from '@/components/common/upload'
+	export default {
+		props: ['detailId'],
+		data() {
+			return {
+				detail: {
+					name: '',
+					type: 1,
+					code: '',
+					number: '',
+					date: '',
+					cargoName: '',
+					data: '{}'
+				}
+			}
+		},
+		created() {
+			if (this.detailId) this.init();
+		},
+		methods: {
+			init() {
+				getInvoiceDetailById(this.detailId).then(res => {
+					if (res.state) {
+						this.detail = res.data;
+					}
+				})
+			}
+		},
+		components: {
+			upload
+		},
+	}
+</script>
+<style lang="scss">
+
+</style>

+ 9 - 1
virgo.wzfrontend/console/src/config/field.js

@@ -164,6 +164,13 @@ const preferentialRentFreeWay = [{
 	id: 1,
 	name: '免租期划入租期'
 }]
+const invoiceType = [{
+	id: 1,
+	name: '增值税普通发票'
+}, {
+	id: 2,
+	name: '增值税电子普通发票'
+}]
 const findItem = (type, id) => {
 	return eval(type).find(node => node.id == id) || {
 		id: 0,
@@ -187,7 +194,8 @@ export default {
 		earnestMoneyType,
 		currencyType,
 		preferentialType,
-		preferentialRentFreeWay
+		preferentialRentFreeWay,
+		invoiceType
 	},
 	findTypeName(type, id) {
 		return findItem(type, id).name;

+ 24 - 0
virgo.wzfrontend/console/src/httpApi/invoice.js

@@ -0,0 +1,24 @@
+import request from '@/axios'
+/* 
+ * 分页获取发票列表
+ * 
+ * 
+ */
+export function getInvoiceListByPage(data) {
+	return request({
+		url: `/api/payment/invoice/${data.currPage}/${data.pageSize}`,
+		method: 'post',
+		data: data
+	})
+}
+/* 
+ * 通过id获取发票详情
+ * 
+ * 
+ */
+export function getInvoiceDetailById(id) {
+	return request({
+		url: `/api/payment/invoice/${id}/`,
+		method: 'get',
+	})
+}

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

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

+ 44 - 0
virgo.wzfrontend/console/src/router/modules/invoice.js

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

+ 9 - 2
virgo.wzfrontend/console/src/views/system/log.vue

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

+ 5 - 4
virgo.wzfrontend/console/src/views/work/bill/routine/client.vue

@@ -33,9 +33,9 @@
 						<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 class="hui-tag hui-tag-warning" v-if="scope.row.status === 1">付款中</div>
+									<div class="hui-tag hui-tag-success" v-else-if="scope.row.status === 2">已付款</div>
+									<div class="hui-tag hui-tag-info" v-else-if="scope.row.status === 3">待付款</div>
 								</div>
 							</template>
 						</el-table-column>
@@ -107,7 +107,8 @@
 					currPage: this.currPage,
 					pageSize: this.pageSize,
 					projectId: this.$store.getters.project.id,
-					payClientId: this.payClientId
+					payClientId: this.payClientId,
+					statusList: [1, 2, 3]
 				}
 				postData = Object.assign(postData, this.filterOption);
 				getPaymentListByPage(postData).then(res => {

+ 4 - 3
virgo.wzfrontend/console/src/views/work/bill/routine/organization.vue

@@ -33,9 +33,9 @@
 						<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-warning" v-if="scope.row.status === 1">付款中</div>
 									<div class="hui-tag hui-tag-success" v-else-if="scope.row.status === 2">已付款</div>
+									<div class="hui-tag hui-tag-info" v-else-if="scope.row.status === 3">待付款</div>
 								</div>
 							</template>
 						</el-table-column>
@@ -107,7 +107,8 @@
 					currPage: this.currPage,
 					pageSize: this.pageSize,
 					projectId: this.$store.getters.project.id,
-					payMerchantId: this.payMerchantId
+					payMerchantId: this.payMerchantId,
+					statusList: [1, 2, 3]
 				}
 				postData = Object.assign(postData, this.filterOption);
 				getPaymentListByPage(postData).then(res => {

+ 26 - 6
virgo.wzfrontend/console/src/views/work/bill/routine/payment.vue

@@ -36,22 +36,28 @@
 						<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-warning" v-if="scope.row.status === 1">付款中</div>
 									<div class="hui-tag hui-tag-success" v-else-if="scope.row.status === 2">已付款</div>
+									<div class="hui-tag hui-tag-info" v-else-if="scope.row.status === 3">待付款</div>
+									<div class="hui-tag hui-tag-info" v-else>待发送</div>
 								</div>
 							</template>
 						</el-table-column>
-						<el-table-column label="操作" width="150">
+						<el-table-column label="操作" width="220">
 							<template slot-scope="scope">
 								<div class="hui-table-operation">
+									<span class="table-operation" @click="sendItem(scope.row)" v-if="!scope.row.status">
+										发送客户
+									</span>
 									<span class="table-operation" @click="detailItem(scope.row)">
 										详情
 									</span>
-									<span class="table-operation" @click="updateItem(scope.row)">
+									<span class="table-operation" @click="updateItem(scope.row)"
+										v-if="!scope.row.status">
 										编辑
 									</span>
-									<span class="table-operation" @click="deleteItem(scope.row)">
+									<span class="table-operation" @click="deleteItem(scope.row)"
+										v-if="!scope.row.status">
 										删除
 									</span>
 								</div>
@@ -84,7 +90,8 @@
 	import listFilter from '@/components/common/listFilter'
 	import {
 		getPaymentListByPage,
-		deletePaymentById
+		deletePaymentById,
+		updatePayment
 	} from '@/httpApi/bill'
 	export default {
 		data() {
@@ -137,6 +144,19 @@
 				this.isUpdate = true;
 				this.visible = true;
 			},
+			sendItem(item) {
+				this.$confirm('确定要删除发送该账单给客户?', () => {
+					updatePayment({
+						id: item.id,
+						status: 3
+					}).then(res => {
+						if (res.state) {
+							this.init();
+							this.$message.success('操作成功');
+						}
+					})
+				});
+			},
 			detailItem(item) {
 				this.detailId = item.id;
 				this.drawer = true;

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

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

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

@@ -0,0 +1,130 @@
+<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="invoice" type="invoice" @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="发票类型" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{$field.findTypeName('invoiceType',scope.row.invoiceType)}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="发票代码" prop="code"></el-table-column>
+						<el-table-column label="发票号码" prop="number"></el-table-column>
+						<el-table-column label="货物名称" prop="cargoName"></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/invoice/detail'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		bindProjectDetail
+	} from '@/httpApi/organization'
+	import {
+		getInvoiceListByPage
+	} from '@/httpApi/invoice'
+	export default {
+		data() {
+			return {
+				tableData: [],
+				currPage: 1,
+				pageSize: 10,
+				totalCount: 0,
+				detailId: '',
+				filterOption: {},
+				drawer: false,
+				clientId: ''
+			}
+		},
+		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.clientId = res.data[0].clientId;
+					this.init();
+				}
+			})
+		},
+		methods: {
+			init() {
+				let postData = {
+					currPage: this.currPage,
+					pageSize: this.pageSize,
+					projectId: this.$store.getters.project.id,
+					payClientId: this.clientId,
+					type: 1
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getInvoiceListByPage(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>

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

@@ -0,0 +1,130 @@
+<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="invoice" type="invoice" @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="发票类型" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{$field.findTypeName('invoiceType',scope.row.invoiceType)}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="发票代码" prop="code"></el-table-column>
+						<el-table-column label="发票号码" prop="number"></el-table-column>
+						<el-table-column label="货物名称" prop="cargoName"></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/invoice/detail'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		bindProjectDetail
+	} from '@/httpApi/organization'
+	import {
+		getInvoiceListByPage
+	} from '@/httpApi/invoice'
+	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,
+					type: 1
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getInvoiceListByPage(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>

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

@@ -0,0 +1,116 @@
+<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="invoice" type="invoice" @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="发票类型" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{$field.findTypeName('invoiceType',scope.row.invoiceType)}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="发票代码" prop="code"></el-table-column>
+						<el-table-column label="发票号码" prop="number"></el-table-column>
+						<el-table-column label="货物名称" prop="cargoName"></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/invoice/detail'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		getInvoiceListByPage
+	} from '@/httpApi/invoice'
+	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,
+					type: 1
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getInvoiceListByPage(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>

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

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

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

@@ -0,0 +1,130 @@
+<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="invoice" type="invoice" @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="发票类型" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{$field.findTypeName('invoiceType',scope.row.invoiceType)}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="发票代码" prop="code"></el-table-column>
+						<el-table-column label="发票号码" prop="number"></el-table-column>
+						<el-table-column label="货物名称" prop="cargoName"></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/invoice/detail'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		getInvoiceListByPage
+	} from '@/httpApi/invoice'
+	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,
+					type: 2
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getInvoiceListByPage(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>

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

@@ -0,0 +1,130 @@
+<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="invoice" type="invoice" @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="发票类型" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{$field.findTypeName('invoiceType',scope.row.invoiceType)}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="发票代码" prop="code"></el-table-column>
+						<el-table-column label="发票号码" prop="number"></el-table-column>
+						<el-table-column label="货物名称" prop="cargoName"></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/invoice/detail'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		getInvoiceListByPage
+	} from '@/httpApi/invoice'
+	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,
+					type: 2
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getInvoiceListByPage(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>

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

@@ -0,0 +1,116 @@
+<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="invoice" type="invoice" @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="发票类型" prop="code" width="200">
+							<template slot-scope="scope">
+								<span>{{$field.findTypeName('invoiceType',scope.row.type)}}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="发票代码" prop="code"></el-table-column>
+						<el-table-column label="发票号码" prop="number"></el-table-column>
+						<el-table-column label="货物名称" prop="cargoName"></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/invoice/detail'
+	import listFilter from '@/components/common/listFilter'
+	import {
+		getInvoiceListByPage
+	} from '@/httpApi/invoice'
+	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,
+					type: 2
+				}
+				postData = Object.assign(postData, this.filterOption);
+				getInvoiceListByPage(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>

Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/index.html


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


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


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


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


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


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/css/app.845114dc.css


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/css/app.fe59b970.css


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/132-legacy.12094bd2.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/135-legacy.cba3ad47.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/135.b679c2fb.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/162-legacy.84eb54fa.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/166-legacy.0f34b03f.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/166.2779dfc7.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/169-legacy.90c06e0e.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/169.2f4f1083.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/18-legacy.edf4b0ae.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/18.3cfa5af6.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/188.b8184868.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/191-legacy.32114e31.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/191.ed53cec1.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/204.336e8366.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/245-legacy.1edda36c.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/245.4e212f69.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/271-legacy.9d0d3c5d.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/271.a459d9bd.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/293.2b3dbf0d.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/293.dce39594.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/333-legacy.b1980367.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/333.fc4d6d30.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/336-legacy.27e217b5.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/338.b115f915.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/372.f64d30c6.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/380-legacy.5208969b.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/41-legacy.8ff8d969.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/41-legacy.abcd8531.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/41.4d794f71.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/41.c6337d2f.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/433-legacy.82360066.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/433.a9c76d27.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/453-legacy.2361f352.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/51-legacy.01bba7ba.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/51.a465106a.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/525.894d5a8e.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/531-legacy.5916a514.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/531.4939dd7c.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/535.a104987e.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/588-legacy.f191fe8d.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/588.89623f9f.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/61-legacy.7b3a2693.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/61-legacy.9145f269.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/61.d9d8a4af.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/649-legacy.fc551d84.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/72-legacy.7c77afab.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/72.7c843716.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/729-legacy.a2bea4d1.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/729-legacy.b0c25e06.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/729.1e01b436.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/729.2a0cc8b5.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/764-legacy.04808f84.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/764-legacy.fe07a6be.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/764.d3b139c8.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/764.e82fd8ce.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/779-legacy.bdac8d3f.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/779.98dcb4e1.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/807-legacy.e1431519.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/821-legacy.80ceadbb.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/821.eeb55937.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/827.4cf3f62c.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/842.4fdc2be8.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/850-legacy.fe9abc14.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 1
virgo.wzfrontend/src/main/resources/static/static/js/850.459c9b83.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/896-legacy.e2dc18f8.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/896-legacy.fc32dfd8.js


Fichier diff supprimé car celui-ci est trop grand
+ 0 - 1
virgo.wzfrontend/src/main/resources/static/static/js/896.24270f3a.js


Fichier diff supprimé car celui-ci est trop grand
+ 1 - 0
virgo.wzfrontend/src/main/resources/static/static/js/896.361dc6c6.js


+ 0 - 0
virgo.wzfrontend/src/main/resources/static/static/js/906-legacy.49003b91.js


Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff