sangwenwei 1 年間 前
コミット
3ce1a5da53

+ 8 - 1
src/api/jy/JyFinanceInvoiceService.js

@@ -123,7 +123,14 @@ export default {
 			params: {id: param}
 		})
 
-	}
+	},
+	queryByProjectId: function (projectId) {
+		return request({
+			url: prefix + "/cw_finance/invoice/queryByProjectId",
+			method: "get",
+			params: { projectId: projectId},
+		});
+	},
 
 
 

+ 8 - 0
src/api/jy/PaymentService.js

@@ -67,4 +67,12 @@ export default class PaymentService{
 		});
 	}
 
+	queryByProjectId(id){
+		return request({
+			url: prefix + "/payment/queryByProjectId",
+			method: "get",
+			params: {projectId: id}
+		})
+	}
+
 }

+ 8 - 0
src/api/jy/ReimbursementService.js

@@ -68,4 +68,12 @@ export default class ReimbursementService{
 		});
 	}
 
+	queryByProjectId(id){
+		return request({
+			url: prefix + "/reimbursement/queryByProjectId",
+			method: "get",
+			params: {projectId: id}
+		})
+	}
+
 }

+ 1 - 1
src/views/jy/payment/PaymentDia.vue

@@ -198,7 +198,7 @@
 			<template #footer>
 			<span class="dialog-footer">
 			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
-			  <el-button type="primary" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
 			</span>
 			</template>
 		</el-dialog>

+ 1 - 1
src/views/jy/payment/PaymentForm.vue

@@ -35,7 +35,7 @@
 						</vxe-table-column>
 						<vxe-table-column field="contractNo" align="center" title="合同编号" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input :disabled="true" :readonly="true" placeholder="请填写合同编号" v-model="scope.row.ncontractNo"/>
+								<el-input :disabled="true" :readonly="true" placeholder="请填写合同编号" v-model="scope.row.contractNo"/>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column  field="contractAmount" align="center" title="合同金额" :edit-render="{}">

+ 170 - 0
src/views/jy/project/InvoiceListForm.vue

@@ -0,0 +1,170 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
+				 label-width="160px" @submit.native.prevent>
+			<el-row  :gutter="15">
+				<el-col :span="24">
+					<vxe-table
+						border
+						:footer-method="footerMethod2"
+						show-overflow
+						show-footer
+						ref="baseTable"
+						:key="baseKey"
+						class="vxe-table-element"
+						:data="dataList"
+						style="margin-left: 5em"
+						keep-source
+						highlight-current-row
+					>
+						<vxe-table-column field="no" align="center" title="开票申请编号" :edit-render="{}" show-overflow="title">
+							<template #default="scope">
+								<el-link  type="primary" :underline="false" @click="view(scope.row.id)">{{scope.row.no}}</el-link>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="number" align="center" title="发票号" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column field="billingWorkplaceReal" align="center" title="实际开票单位" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="account" align="center"   title="开票总金额" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="operator" align="center"   title="经办人" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="operatorOffice" align="center"   title="经办人部门" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="billingDate" align="center"   title="开票日期" :edit-render="{}"></vxe-table-column>
+					</vxe-table>
+				</el-col>
+			</el-row>
+
+		</el-form>
+		<InvoiceForm ref="invoiceForm"></InvoiceForm>
+	</div>
+</template>
+
+<script>
+	import financeInvoiceService from '@/api/jy/JyFinanceInvoiceService'
+	import InvoiceForm from '@/views/jy/finance/InvoiceForm'
+	import XEUtils from "xe-utils";
+	export default {
+		props: {
+			businessId: {
+				type: String,
+				default: ''
+			},
+			formReadOnly: {
+				type: Boolean,
+				default: false
+			},
+			status: {
+				type: String,
+				default: ''
+			}
+		},
+		data () {
+			return {
+				title: '',
+				method: '',
+				loading: false,
+				baseKey: '',
+				keyWatch: '',
+				dataList:[]
+			}
+		},
+		created () {
+			console.log('jld ')
+		},
+		mounted () {
+		},
+		activated () {
+		},
+		components: {
+			InvoiceForm
+		},
+		computed: {
+			bus: {
+				get () {
+					return this.businessId
+				},
+				set (val) {
+					this.businessId = val
+				}
+			}
+		},
+		watch: {
+			'keyWatch': {
+				handler (newVal) {
+					if (this.bus) {
+						if (this.bus !== 'false') {
+							this.init('', this.bus)
+						}
+					} else {
+						this.$nextTick(() => {
+							this.$refs.inputForm.resetFields()
+						})
+					}
+				}
+			},
+			'loading': {
+				handler (newVal) {
+					this.$emit('changeLoading', newVal)
+				}
+			}
+		},
+		methods: {
+			getKeyWatch(keyWatch) {
+				this.keyWatch = keyWatch
+			},
+			init(method, id) {
+				this.method = method
+				this.inputForm={
+					id: '',
+				}
+				this.inputForm.id = id
+				this.loading = false
+				this.$nextTick(() => {
+					this.$refs.inputForm.resetFields()
+					this.loading = true
+					financeInvoiceService.queryByProjectId(this.inputForm.id).then((data)=>{
+						console.log('data',data)
+						this.dataList = data
+						this.loading = false
+					})
+				})
+			},
+			close() {
+				this.inputForm = {
+					id: '',
+
+				}
+				this.visible = false
+			},
+			footerMethod2({columns, data}) {
+				const footerData = [
+					columns.map((column, columnIndex) => {
+						if (columnIndex === 0) {
+							return '金额汇总(元)'
+						}
+						if (['account'].includes(column.property)) {
+							// eslint-disable-next-line no-undef
+							this.dataList = XEUtils.sum(data, column.property)
+							return XEUtils.sum(data, column.property)
+						}
+						return null
+					})
+				]
+				return footerData
+			},
+			// 查看
+			view (id) {
+				this.$refs.invoiceForm.init(false,id);
+			},
+
+
+		}
+
+	}
+</script>
+<style scoped>
+	/deep/ .el-input-number .el-input__inner {
+		text-align: left;
+	}
+	/deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
+		font-weight:700;
+	}
+</style>

+ 182 - 0
src/views/jy/project/PaymentListForm.vue

@@ -0,0 +1,182 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
+				 label-width="160px" @submit.native.prevent>
+			<el-row  :gutter="15">
+				<el-col :span="24">
+					<vxe-table
+						border
+						:footer-method="footerMethod2"
+						show-overflow
+						show-footer
+						ref="baseTable"
+						:key="baseKey"
+						class="vxe-table-element"
+						:data="dataList"
+						style="margin-left: 5em"
+						keep-source
+						highlight-current-row
+					>
+						<vxe-table-column field="no" align="center" title="付款编号" :edit-render="{}" show-overflow="title">
+							<template #default="scope">
+								<el-link  type="primary" :underline="false" @click="view(scope.row.id)">{{scope.row.no}}</el-link>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="paymentLower" align="center" title="付款金额" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column field="refund" align="center" title="冲抵金额" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="finalMoney" align="center"   title="剩余付款金额" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="paymentUser" align="center"   title="付款人" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="paymentOffice" align="center"   title="付款部门" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="paymentTime" align="center"   title="付款时间" :edit-render="{}"></vxe-table-column>
+					</vxe-table>
+				</el-col>
+			</el-row>
+
+		</el-form>
+		<PaymentDia ref="paymentDia"></PaymentDia>
+	</div>
+</template>
+
+<script>
+	import PaymentService from '@/api/jy/PaymentService'
+	import PaymentDia from '@/views/jy/payment/PaymentDia'
+	import XEUtils from "xe-utils";
+	export default {
+		props: {
+			businessId: {
+				type: String,
+				default: ''
+			},
+			formReadOnly: {
+				type: Boolean,
+				default: false
+			},
+			status: {
+				type: String,
+				default: ''
+			}
+		},
+		data () {
+			return {
+				title: '',
+				method: '',
+				loading: false,
+				baseKey: '',
+				keyWatch: '',
+				dataList:[]
+			}
+		},
+		PaymentService:null,
+		created () {
+			console.log('jld ')
+			this.paymentService=new PaymentService()
+		},
+		mounted () {
+		},
+		activated () {
+		},
+		components: {
+			PaymentDia
+		},
+		computed: {
+			bus: {
+				get () {
+					return this.businessId
+				},
+				set (val) {
+					this.businessId = val
+				}
+			}
+		},
+		watch: {
+			'keyWatch': {
+				handler (newVal) {
+					if (this.bus) {
+						if (this.bus !== 'false') {
+							this.init('', this.bus)
+						}
+					} else {
+						this.$nextTick(() => {
+							this.$refs.inputForm.resetFields()
+						})
+					}
+				}
+			},
+			'loading': {
+				handler (newVal) {
+					this.$emit('changeLoading', newVal)
+				}
+			}
+		},
+		methods: {
+			getKeyWatch(keyWatch) {
+				this.keyWatch = keyWatch
+			},
+			init(method, id) {
+				this.method = method
+				this.inputForm={
+					id: '',
+				}
+				this.inputForm.id = id
+				this.loading = false
+				this.$nextTick(() => {
+					this.$refs.inputForm.resetFields()
+					this.loading = true
+					this.paymentService.queryByProjectId(this.inputForm.id).then((data)=>{
+						console.log('data',data)
+						this.dataList = data
+						this.loading = false
+					})
+				})
+			},
+			close() {
+				this.inputForm = {
+					id: '',
+
+				}
+				this.visible = false
+			},
+			footerMethod2({columns, data}) {
+				const footerData = [
+					columns.map((column, columnIndex) => {
+						if (columnIndex === 0) {
+							return '金额汇总(元)'
+						}
+						if (['paymentLower'].includes(column.property)) {
+							// eslint-disable-next-line no-undef
+							this.dataList = XEUtils.sum(data, column.property)
+							return XEUtils.sum(data, column.property)
+						}
+						if (['refund'].includes(column.property)) {
+							// eslint-disable-next-line no-undef
+							this.dataList = XEUtils.sum(data, column.property)
+							return XEUtils.sum(data, column.property)
+						}
+						if (['finalMoney'].includes(column.property)) {
+							// eslint-disable-next-line no-undef
+							this.dataList = XEUtils.sum(data, column.property)
+							return XEUtils.sum(data, column.property)
+						}
+						return null
+					})
+				]
+				return footerData
+			},
+			// 查看
+			view (id) {
+				this.$refs.paymentDia.init('view',id);
+			},
+
+
+		}
+
+	}
+</script>
+<style scoped>
+	/deep/ .el-input-number .el-input__inner {
+		text-align: left;
+	}
+	/deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
+		font-weight:700;
+	}
+</style>

+ 43 - 6
src/views/jy/project/ProjectArchiveForm.vue

@@ -93,6 +93,23 @@
 						<el-input :disabled="true" v-model="inputForm.createTime" placeholder="请填写创建时间"></el-input>
 					</el-form-item>
 				</el-col>
+				<el-col :span="12" v-if="isBgs">
+					<el-form-item label="归档盒号" prop="caseNumber"
+								  :rules="[
+								  {required: true, message:'归档盒号不能为空', trigger:'change'}
+
+			 ]">
+						<el-input :disabled="false" v-model="inputForm.caseNumber" placeholder="请填写归档盒号"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12" v-else>
+					<el-form-item label="归档盒号" prop="caseNumber"
+								  :rules="[
+
+			 ]">
+						<el-input :disabled="true" v-model="inputForm.caseNumber" placeholder="请填写归档盒号"></el-input>
+					</el-form-item>
+				</el-col>
 
 			</el-row>
 			<el-row  :gutter="15">
@@ -255,12 +272,13 @@
 					projectId:'',
 					remarks:'',
 					procInsId:'',
-					no:''
+					no:'',
+					caseNumber:''
 				},
 				keyWatch: '',
 				tabName:'',
 				tableData: [],
-
+				isBgs: false
 			}
 		},
 		ProjectInfoService:null,
@@ -338,7 +356,8 @@
 					projectId:'',
 					remarks:'',
 					procInsId:'',
-					no:''
+					no:'',
+					caseNumber:''
 				}
 				this.inputForm.id = id
 				this.visible = true
@@ -378,7 +397,13 @@
 							method = 'view'
 						}
 						console.log('method2',method)
-
+						this.commonApi.getTaskNameByProcInsId(this.inputForm.procInsId).then((data)=> {
+							if (this.commonJS.isNotEmpty(data)) {
+								if (data === '办公室审核') {
+									this.isBgs = true
+								}
+							}
+						})
 						this.projectInfoService.getAttachmentList(data.projectId,this.inputForm.id).then((data) => {
 							this.tableData = data
 						})
@@ -395,7 +420,7 @@
 					id: '',
 					contractName:'',
 					contractAmount:'',
-					primarkLinkman:'',
+					primaryLinkman:'',
 					contractTypeFirst:'',
 					contractType:'',
 					projectName:'',
@@ -404,9 +429,13 @@
 					projectLeader:'',
 					createByName:'',
 					createTime:'',
-					remarks:'',
 					fileList:[],
 					status:'',
+					projectId:'',
+					remarks:'',
+					procInsId:'',
+					no:'',
+					caseNumber:''
 				}
 				this.$refs.inputForm.resetFields()
 				this.visible = false
@@ -488,6 +517,7 @@
 				} else if (status === 'agree') {
 					// 审核同意
 
+
 				}
 				this.$refs['inputForm'].validate((valid) => {
 					if (valid) {
@@ -503,6 +533,13 @@
 								}
 							}
 						})
+						if (this.inputForm.status === '5'){
+							if (this.commonJS.isEmpty(this.inputForm.caseNumber)){
+								this.loading = false
+								this.$message.error('归档盒号为空,请输入')
+								throw new Error('归档盒号为空,请输入')
+							}
+						}
 						this.projectInfoService.saveFormArchive(this.inputForm).then((data) => {
 							this.inputForm.id = data.businessId
 							let processTitle = `${this.inputForm.createByName} 发起了${this.inputForm.projectName} - ${this.inputForm.no} ` + `[嘉溢-项目归档]`

+ 31 - 1
src/views/jy/project/ProjectDia.vue

@@ -316,6 +316,15 @@
 			  <el-tab-pane label="环评资质" name="eia" >
 					  <ProjectEiaForm ref="projectEiaForm" :formReadOnly="true"></ProjectEiaForm>
 			  </el-tab-pane>
+			  <el-tab-pane label="付款核算" v-if="hasPermission('finance:info:view')" name="payment" >
+					  <PaymentListForm ref="paymentListForm" :formReadOnly="true"></PaymentListForm>
+			  </el-tab-pane>
+			  <el-tab-pane label="报销核算" v-if="hasPermission('finance:info:view')" name="reimbursement" >
+					  <ReimbursementListForm ref="reimbursementListForm" :formReadOnly="true"></ReimbursementListForm>
+			  </el-tab-pane>
+			  <el-tab-pane label="发票核算" v-if="hasPermission('finance:info:view')" name="invoice" >
+					  <InvoiceListForm ref="invoiceListForm" :formReadOnly="true"></InvoiceListForm>
+			  </el-tab-pane>
 		  </el-tabs>
 		  <template #footer>
 			<span class="dialog-footer">
@@ -346,6 +355,9 @@
 	import ReportsInstanceForm from './ReportsInstanceForm'
 	import ProjectArchiveForm from './ProjectArchiveForm'
 	import ProjectEiaForm from './ProjectEiaForm'
+	import PaymentListForm from "./PaymentListForm";
+	import ReimbursementListForm from "./ReimbursementListForm";
+	import InvoiceListForm from "./InvoiceListForm";
   export default {
     props: {
       businessId: {
@@ -443,7 +455,10 @@
 		OutInstanceForm,
 		ReportsInstanceForm,
 		ProjectArchiveForm,
-		ProjectEiaForm
+		ProjectEiaForm,
+		PaymentListForm,
+		ReimbursementListForm,
+		InvoiceListForm
     },
     methods: {
 		getKeyWatch (keyWatch) {
@@ -925,6 +940,21 @@
 					this.$refs.projectEiaForm.init('view', this.eiaId)
 				}
 			}
+			if (paneName === 'payment') {
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					this.$refs.paymentListForm.init('view', this.inputForm.id)
+				}
+			}
+			if (paneName === 'reimbursement') {
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					this.$refs.reimbursementListForm.init('view', this.inputForm.id)
+				}
+			}
+			if (paneName === 'invoice') {
+				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
+					this.$refs.invoiceListForm.init('view', this.inputForm.id)
+				}
+			}
 		}
     }
   }

+ 4 - 2
src/views/jy/project/ProjectEiaForm.vue

@@ -387,7 +387,7 @@
 					id: '',
 					contractName:'',
 					contractAmount:'',
-					primarkLinkman:'',
+					primaryLinkman:'',
 					contractTypeFirst:'',
 					contractType:'',
 					projectName:'',
@@ -396,9 +396,11 @@
 					projectLeader:'',
 					createByName:'',
 					createTime:'',
-					remarks:'',
 					fileList:[],
 					status:'',
+					projectId:'',
+					remarks:'',
+					no:''
 				}
 				this.$refs.inputForm.resetFields()
 				this.visible = false

+ 5 - 5
src/views/jy/project/ProjectForm.vue

@@ -827,7 +827,7 @@
 					contractId: '', // 合同id
 					contractName: '', // 合同名称
 					client: '', // 委托方
-					clientName: '', // 委托方名称
+					primaryLinkman: '', // 委托方名称
 					contractNo: '', // 合同金额
 					contractType: '', // 合同类别
 					name: '', // 项目名称
@@ -837,15 +837,15 @@
 					processDefinitionId: '', // 流程信息
 					members: [], // 成员列表
 					files: [], // 附件信息
-					contractStatus: '',//合同情况
+					contractStatus: '1',//合同情况
 					contractType:'',//合同类型(小类)
 					contractTypeFirst:'', //合同类型(大类)
 					buildPlace:'', // 建设地点
-					createByName:'', //创建人
-					createDate:'', //创建时间
+					createByName:this.$store.state.user.name, //创建人
+					createDate: this.moment(new Date()).format('YYYY-MM-DD HH:mm:ss'), //创建时间
 					projectOverview:'', //工程概况
 					special:'', //特殊要求
-					projectLeader:'', //项目负责人
+					projectLeader:this.$store.state.user.id, //项目负责人
 					clientList:[], //委托方联系人
 					files: [], // 附件信息
 				}

+ 175 - 0
src/views/jy/project/ReimbursementListForm.vue

@@ -0,0 +1,175 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
+				 label-width="160px" @submit.native.prevent>
+			<el-row  :gutter="15">
+				<el-col :span="24">
+					<vxe-table
+						border
+						:footer-method="footerMethod2"
+						show-overflow
+						show-footer
+						ref="baseTable"
+						:key="baseKey"
+						class="vxe-table-element"
+						:data="dataList"
+						style="margin-left: 5em"
+						keep-source
+						highlight-current-row
+					>
+						<vxe-table-column field="no" align="center" title="报销编号" :edit-render="{}" show-overflow="title">
+							<template #default="scope">
+								<el-link  type="primary" :underline="false" @click="view(scope.row.id)">{{scope.row.no}}</el-link>
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="applyType" align="center" title="报销类型" :edit-render="{}">
+							<template #default="scope">
+								{{$dictUtils.getDictLabel('jy_apply', scope.row.applyType, '')}}
+							</template>
+						</vxe-table-column>
+						<vxe-table-column field="typeName" align="center" title="报销类别" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="number" align="center"   title="报销金额" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="createName" align="center"   title="经办人" :edit-render="{}"></vxe-table-column>
+						<vxe-table-column   field="createTime" align="center"   title="报销时间" :edit-render="{}"></vxe-table-column>
+					</vxe-table>
+				</el-col>
+			</el-row>
+
+		</el-form>
+		<InfoForm ref="infoForm" @refreshDataList="refreshList"></InfoForm>
+	</div>
+</template>
+
+<script>
+	import ReimbursementService from '@/api/jy/ReimbursementService'
+	import InfoForm from '@/views/jy/reimbursement/InfoForm'
+	import XEUtils from "xe-utils";
+	export default {
+		props: {
+			businessId: {
+				type: String,
+				default: ''
+			},
+			formReadOnly: {
+				type: Boolean,
+				default: false
+			},
+			status: {
+				type: String,
+				default: ''
+			}
+		},
+		data () {
+			return {
+				title: '',
+				method: '',
+				loading: false,
+				baseKey: '',
+				keyWatch: '',
+				dataList:[]
+			}
+		},
+		ReimbursementService:null,
+		created () {
+			console.log('jld ')
+			this.reimbursementService=new ReimbursementService()
+		},
+		mounted () {
+		},
+		activated () {
+		},
+		components: {
+			InfoForm
+		},
+		computed: {
+			bus: {
+				get () {
+					return this.businessId
+				},
+				set (val) {
+					this.businessId = val
+				}
+			}
+		},
+		watch: {
+			'keyWatch': {
+				handler (newVal) {
+					if (this.bus) {
+						if (this.bus !== 'false') {
+							this.init('', this.bus)
+						}
+					} else {
+						this.$nextTick(() => {
+							this.$refs.inputForm.resetFields()
+						})
+					}
+				}
+			},
+			'loading': {
+				handler (newVal) {
+					this.$emit('changeLoading', newVal)
+				}
+			}
+		},
+		methods: {
+			getKeyWatch(keyWatch) {
+				this.keyWatch = keyWatch
+			},
+			init(method, id) {
+				this.method = method
+				this.inputForm={
+					id: '',
+				}
+				this.inputForm.id = id
+				this.loading = false
+				this.$nextTick(() => {
+					this.$refs.inputForm.resetFields()
+					this.loading = true
+					this.reimbursementService.queryByProjectId(this.inputForm.id).then((data)=>{
+						console.log('data',data)
+						this.dataList = data
+						this.loading = false
+					})
+				})
+			},
+			close() {
+				this.inputForm = {
+					id: '',
+
+				}
+				this.visible = false
+			},
+			footerMethod2({columns, data}) {
+				const footerData = [
+					columns.map((column, columnIndex) => {
+						if (columnIndex === 0) {
+							return '金额汇总(元)'
+						}
+						if (['number'].includes(column.property)) {
+							// eslint-disable-next-line no-undef
+							this.dataList = XEUtils.sum(data, column.property)
+							return XEUtils.sum(data, column.property)
+						}
+						return null
+					})
+				]
+				return footerData
+			},
+			// 查看
+			view (id) {
+				this.$refs.infoForm.init('view',id);
+			},
+
+
+		}
+
+	}
+</script>
+<style scoped>
+	/deep/ .el-input-number .el-input__inner {
+		text-align: left;
+	}
+	/deep/ .vxe-footer--row .vxe-footer--column:nth-child(1) .vxe-cell--item {
+		font-weight:700;
+	}
+</style>

+ 3 - 3
src/views/jy/reimbursement/ReimbursementForm.vue

@@ -141,7 +141,7 @@
 							show-overflow
 							:footer-method="footerMethod"
 							ref="detailTablePayment"
-							:key="detailKeyContract"
+							:key="detailKeyPayment"
 							class="vxe-table-element"
 							:data="inputForm.infoPayments"
 							style="margin-left: 5em"
@@ -474,7 +474,7 @@
 				loading: false,
 				indexRow: '',
 				detailKey: '',
-				detailKeyContract: '',
+				detailKeyPayment: '',
 				detailKeyReport: '',
 				detailKeyOthers: '',
 				detailKeyProject: '',
@@ -717,7 +717,7 @@
 					}
 					this.$refs.detailTablePayment.insertAt(d)
 					this.inputForm.infoPayments.push(d)
-					this.amountKey = Math.random()
+					this.detailKeyPayment = Math.random()
 				}
 				if (type === 'others') {
 					let d = {

+ 113 - 1
src/views/sys/user/UserForm.vue

@@ -454,6 +454,63 @@
 					</el-form-item>
 				</el-col>
 			</el-row>
+			<el-divider content-position="left"
+			><el-icon><EditPen /></el-icon> 手签章</el-divider
+			>
+			<el-row :gutter="15">
+				<el-col :span="12">
+						<!--<el-upload
+							class="avatar-uploader"
+							:action="`${$http.BASE_URL}/public-modules-server/oss/file/webUpload/upload`"
+							:show-file-list="false"
+							:on-success="handleAvatarSuccess"
+						>
+							<img v-if="imageUrl" :src="imageUrl" class="avatar" />
+							<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
+						</el-upload>-->
+						<el-upload :action="`${$http.BASE_URL}/public-modules-server/oss/file/webUpload/upload`"
+								   :limit="limitNum"
+								   :disabled="hideUploadEdit"
+								   list-type="picture-card"
+								   :auto-upload="true"
+								   :on-success="handleUploadSuccess"
+								   :file-list="fileList"
+						>
+							<el-icon><Plus /></el-icon>
+
+							<template #file="{ file }">
+								<div>
+									<img class="el-upload-list__item-thumbnail" :src="file.url" alt="" />
+									<span class="el-upload-list__item-actions">
+										  <span
+											  class="el-upload-list__item-preview"
+											  @click="handlePictureCardPreview(file)"
+										  >
+											<el-icon><zoom-in /></el-icon>
+										  </span>
+										  <span
+											  class="el-upload-list__item-delete"
+											  @click="handleDownload(file)"
+										  >
+											<el-icon><Download /></el-icon>
+										  </span>
+										  <span
+											  v-if="!testDisabledFlag"
+											  class="el-upload-list__item-delete"
+											  @click="handleRemove(file,fileList)"
+										  >
+											<el-icon><Delete /></el-icon>
+										  </span>
+									</span>
+								</div>
+							</template>
+						</el-upload>
+						<el-dialog v-model="dialogVisible">
+							<img w-full :src="inputForm.handSignatureUrl" alt="Preview Image" :style="{ maxWidth: '100%', maxHeight: '100%' }"/>
+						</el-dialog>
+				</el-col>
+			</el-row>
+
 		</el-form>
 
 		<!-- <template #footer>
@@ -485,17 +542,26 @@ import userService from "@/api/sys/userService";
 import postService from "@/api/sys/postService";
 import roleService from "@/api/sys/roleService";
 import officeService from "@/api/sys/officeService";
+import OSSSerivce, {
+	httpRequest,
+	fileName,
+	toHref,
+} from '@/api/sys/OSSService'
 export default {
 	data() {
 		return {
 			visible: false,
 			loading: false,
+			dialogVisible: false,
 			title: "",
 			method: "",
 			roleList: [],
 			postList: [],
 			companyTreeData: [],
 			officeTreeData: [],
+			limitNum: 1,
+			hideUploadEdit: false, //控制上传点击
+			fileList: [],
 			inputForm: {
 				id: "",
 				tenantDTO: {
@@ -528,9 +594,13 @@ export default {
 				confirmNewPassword: "",
 				sign: "", // 签名
 				remarks: "", // 备注
+				handSignatureUrl:"",//手签章
 			},
 		};
 	},
+	created () {
+		this.ossService = new OSSSerivce()
+	},
 	components: {
 		SelectTree
 	},
@@ -545,6 +615,8 @@ export default {
 				this.title = "查看用户";
 			}
 			this.visible = true;
+			this.hideUploadEdit =false
+			this.dialogVisible =false
 			this.$nextTick(() => {
 				if (this.$refs.inputForm !== undefined) {
 					this.$refs.inputForm.resetFields();
@@ -555,9 +627,20 @@ export default {
 				if (method === "edit" || method === "view") {
 					// 修改或者查看
 					let p = userService.queryById(this.inputForm.id);
-					this.initTenant(p).then((data) => {
+					this.initTenant(p).then(async (data) => {
 						this.inputForm = this.recover(this.inputForm, data);
 						this.inputForm.oldLoginName = this.inputForm.loginName;
+						this.fileList = []
+						if (this.commonJS.isNotEmpty(this.inputForm.handSignatureUrl)){
+							await this.ossService.getTemporaryUrl(this.inputForm.handSignatureUrl).then((data) => {
+								console.log('data',data)
+									let file = {
+										url: data
+									}
+									this.hideUploadEdit = true, //控制上传点击
+									this.fileList.push(file)
+								})
+						}
 					});
 				} else {
 					this.initTenant();
@@ -692,6 +775,35 @@ export default {
 				callback();
 			}
 		},
+		handleUploadSuccess(response, file,fileList) {
+			return this.handleAvatarSuccess(response,file,fileList,null,'front')
+		},
+		handlePictureCardPreview(file) {
+			this.inputForm.handSignatureUrl = file.url
+			this.dialogVisible = true;
+		},
+		handleDownload(file) {
+			let file2 = {
+				url: this.inputForm.handSignatureUrl
+			}
+			toHref(file2)
+		},
+		handleRemove(file, fileList) {
+			this.hideUploadEdit = false
+			// 如果需要删除图片信息,可以根据file或其他标识从相应的数据结构中删除信息
+			const fileIndex = this.fileList.indexOf(file);
+			if (fileIndex !== -1) {
+				this.fileList.splice(fileIndex, 1); // 从fileList中删除该图片信息
+			}
+		},
+		handleAvatarSuccess (res, file, fileList, index, val) {
+			console.log('res',res)
+			if (val === 'front') {
+				this.inputForm.handSignatureUrl = "/"+res.url
+			}
+			this.hideUploadEdit = true
+			this.$forceUpdate()
+		},
 	},
 };
 </script>