Browse Source

bug调整

sangwenwei 1 year ago
parent
commit
f9996dc66a
67 changed files with 3428 additions and 410 deletions
  1. 32 0
      src/api/jy/BorrowService.js
  2. 9 0
      src/api/jy/DriveInfoService.js
  3. 9 0
      src/api/jy/DriveMaintainService.js
  4. 9 0
      src/api/jy/DriveService.js
  5. 9 0
      src/api/jy/EvectionService.js
  6. 9 0
      src/api/jy/GoOutService.js
  7. 9 0
      src/api/jy/HolidayService.js
  8. 9 0
      src/api/jy/InscriptionService.js
  9. 10 0
      src/api/jy/MeetingRoomService.js
  10. 11 1
      src/api/jy/NotifyService.js
  11. 9 0
      src/api/jy/PaymentService.js
  12. 9 0
      src/api/jy/ProjectInfoService.js
  13. 9 0
      src/api/jy/ReimbursementService.js
  14. 9 0
      src/api/jy/SignetService.js
  15. 9 0
      src/api/jy/WorkClientService.js
  16. 9 0
      src/api/jy/WorkContractService.js
  17. 195 0
      src/views/dashboard/widgets/components/MyFlowCopyList.vue
  18. 59 37
      src/views/dashboard/widgets/components/MyNotifyList.vue
  19. 10 0
      src/views/dashboard/widgets/index.vue
  20. 30 1
      src/views/flowable/task/TaskForm.vue
  21. 30 0
      src/views/flowable/task/TaskFormDetail.vue
  22. 31 27
      src/views/home/components/MyNotifyList2.vue
  23. 87 23
      src/views/jy/borrowMoney/BorrowMoneyList.vue
  24. 7 5
      src/views/jy/borrowMoney/RefundForm.vue
  25. 5 0
      src/views/jy/daily/MeetingRoomForm.vue
  26. 46 5
      src/views/jy/daily/MeetingRoomList.vue
  27. 6 6
      src/views/jy/drive/DriveApplyForm.vue
  28. 4 4
      src/views/jy/drive/DriveEditForm.vue
  29. 45 5
      src/views/jy/drive/DriveList.vue
  30. 26 37
      src/views/jy/drive/ProjectForm.vue
  31. 123 0
      src/views/jy/drive/clientUserSelect/AccountantUserIndex.vue
  32. 123 0
      src/views/jy/drive/clientUserSelect/AccountantUserIndex2.vue
  33. 488 0
      src/views/jy/drive/clientUserSelect/AccountantUserSelectDialog.vue
  34. 488 0
      src/views/jy/drive/clientUserSelect/AccountantUserSelectDialog2.vue
  35. 460 0
      src/views/jy/drive/clientUserSelect/UserSelectDialog.vue
  36. 123 0
      src/views/jy/drive/clientUserSelect/index.vue
  37. 42 3
      src/views/jy/driveInfo/DriveInfoList.vue
  38. 42 2
      src/views/jy/driveMaintain/DriveMaintain.vue
  39. 5 5
      src/views/jy/evection/EvectionEditForm.vue
  40. 11 8
      src/views/jy/evection/EvectionForm.vue
  41. 48 11
      src/views/jy/evection/EvectionList.vue
  42. 29 27
      src/views/jy/finance/InvoiceList.vue
  43. 5 5
      src/views/jy/goOut/GoOutEditForm.vue
  44. 7 6
      src/views/jy/goOut/GoOutForm.vue
  45. 46 9
      src/views/jy/goOut/GoOutList.vue
  46. 46 13
      src/views/jy/holiday/HolidayDia.vue
  47. 67 28
      src/views/jy/holiday/HolidayForm.vue
  48. 54 10
      src/views/jy/holiday/HolidayList.vue
  49. 4 4
      src/views/jy/inscription/InscriptionDia.vue
  50. 4 4
      src/views/jy/inscription/InscriptionForm.vue
  51. 42 3
      src/views/jy/inscription/InscriptionList.vue
  52. 1 1
      src/views/jy/monthly/MonthlyList.vue
  53. 44 4
      src/views/jy/notify/MyNotifyList.vue
  54. 6 24
      src/views/jy/notify/NotifyForm.vue
  55. 49 7
      src/views/jy/notify/NotifyList.vue
  56. 3 1
      src/views/jy/notify/NotifyTaskForm.vue
  57. 61 21
      src/views/jy/payment/PaymentList.vue
  58. 0 1
      src/views/jy/project/ProjectDia.vue
  59. 29 3
      src/views/jy/project/ProjectList.vue
  60. 35 2
      src/views/jy/project/ProjectMemberList.vue
  61. 4 4
      src/views/jy/project/ReportsInstanceForm.vue
  62. 20 8
      src/views/jy/reimbursement/ReimbursementForm.vue
  63. 36 34
      src/views/jy/reimbursement/ReimbursementList.vue
  64. 37 4
      src/views/jy/workClientInfo/WorkClientList.vue
  65. 43 2
      src/views/jy/workContractInfo/JyWorkContractList.vue
  66. 11 3
      src/views/materialManagement/userSeal/SignetAddForm.vue
  67. 41 2
      src/views/materialManagement/userSeal/SignetList.vue

+ 32 - 0
src/api/jy/BorrowService.js

@@ -74,4 +74,36 @@ export default class BorrowService{
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/borrow/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+	findByBorId(id){
+		return request({
+			url: prefix + "/borrow/findByBorId",
+			method: "get",
+			params:{id:id}
+		})
+	}
+
+	createRefundData(param){
+		return request({
+			url: prefix + "/borrow/createRefundData",
+			method: "post",
+			data: param,
+		})
+	}
+
+	findByRefundId (id) {
+		return request({
+			url: prefix +'/borrow/findByRefundId',
+			method: 'get',
+			params: {id: id}
+		})
+	}
+
 }

+ 9 - 0
src/api/jy/DriveInfoService.js

@@ -34,6 +34,15 @@ export default class DriveInfoService{
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/driveInfo/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 
 
 }

+ 9 - 0
src/api/jy/DriveMaintainService.js

@@ -49,6 +49,15 @@ export default class DriveMaintainService{
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/driveMaintain/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 
 
 }

+ 9 - 0
src/api/jy/DriveService.js

@@ -73,4 +73,13 @@ export default class DriveService{
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/drive/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 }

+ 9 - 0
src/api/jy/EvectionService.js

@@ -50,4 +50,13 @@ export default class EvectionService{
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/evection/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 }

+ 9 - 0
src/api/jy/GoOutService.js

@@ -50,4 +50,13 @@ export default class GoOutService{
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/goOut/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 }

+ 9 - 0
src/api/jy/HolidayService.js

@@ -58,4 +58,13 @@ export default class HolidayService{
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/holiday/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 }

+ 9 - 0
src/api/jy/InscriptionService.js

@@ -67,4 +67,13 @@ export default class InscriptionService{
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/inscription/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 }

+ 10 - 0
src/api/jy/MeetingRoomService.js

@@ -49,4 +49,14 @@ export default class MeetingRoomService{
 			params: {id: ids}
 		})
 	}
+
+
+	exportFile(params) {
+		return request({
+			url: prefix + "/meetingRoom/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
 }

+ 11 - 1
src/api/jy/NotifyService.js

@@ -21,7 +21,7 @@ export default class NotifyService {
 	close (id) {
 		return request({
 			url:prefix+ '/jy/notify/close',
-			method: 'delete',
+			method: 'get',
 			params: {id: id}
 		})
 	}
@@ -123,4 +123,14 @@ export default class NotifyService {
 			data: inputForm
 		})
 	}
+
+	exportFile(params) {
+		return request({
+			url: prefix + "/jy/notify/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 }

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

@@ -58,4 +58,13 @@ export default class PaymentService{
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/payment/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 }

+ 9 - 0
src/api/jy/ProjectInfoService.js

@@ -259,6 +259,15 @@ export default class ProjectInfoService {
 		});
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/jyProject/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 
 
 

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

@@ -59,4 +59,13 @@ export default class ReimbursementService{
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/reimbursement/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 }

+ 9 - 0
src/api/jy/SignetService.js

@@ -41,6 +41,15 @@ export default class SignetService {
 		})
 	}
 
+	exportFile(params) {
+		return request({
+			url: prefix + "/useSeal/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
 
 
 

+ 9 - 0
src/api/jy/WorkClientService.js

@@ -101,4 +101,13 @@ export default class WorkClientService {
 			params: params,
 		});
 	}
+
+	exportFile(params) {
+		return request({
+			url: prefix + "/JyWorkClientInfo/workClientInfo/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
 }

+ 9 - 0
src/api/jy/WorkContractService.js

@@ -52,4 +52,13 @@ export default class WorkContractService {
 			params: {id: ids}
 		})
 	}
+
+	exportFile(params) {
+		return request({
+			url: prefix + "/jy/workContract/workContractInfo/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
 }

+ 195 - 0
src/views/dashboard/widgets/components/MyFlowCopyList.vue

@@ -0,0 +1,195 @@
+<template>
+	<el-card class="box-card">
+		<template #header>
+			<div class="card-header">
+				<span>抄送事项
+				<el-badge class="mark" v-if="flowCopyCount !== 0" :value="flowCopyCount" :max="99" style="line-height: 0;margin-top: 8px"/>
+				</span>
+				<div style="float:right;">
+					<el-button type="text" @click="refreshList()">刷新</el-button>
+					<el-button type="text" @click="toPendingList()">查看更多</el-button>
+				</div>
+			</div>
+		</template>
+		<el-table :data="dataList" style="width: 100%" height="480">
+			<el-table-column
+				width="200px"
+				label="实例标题"
+				prop="procInsName"
+			></el-table-column>
+			<el-table-column
+				width="200px"
+				label="抄送日期"
+				prop="createTime"
+			></el-table-column>
+			<el-table-column
+				width="200px"
+				label="抄送发起人"
+				prop="createBy.name"
+			></el-table-column>
+			<el-table-column
+				label="操作"
+				width="200px"
+				fixed="right"
+				align="center"
+			>
+				<template #default="scope">
+					<el-button
+						type="primary"
+						text
+						icon="view-filled"
+						@click="detail(scope.row)"
+					>查阅审批</el-button
+					>
+				</template>
+			</el-table-column>
+		</el-table>
+		<vxe-pager
+			background
+			size="small"
+			:current-page="tablePage.currentPage"
+			:page-size="tablePage.pageSize"
+			:total="tablePage.total"
+			:page-sizes="[
+				10,
+				20,
+				100,
+				1000,
+				{ label: '全量数据', value: 1000000 },
+			]"
+			:layouts="[
+				'PrevPage',
+				'JumpNumber',
+				'NextPage',
+				'FullJump',
+				'Sizes',
+				'Total',
+			]"
+			@page-change="currentChangeHandle"
+		>
+		</vxe-pager>
+	</el-card>
+</template>
+
+<script>
+import flowCopyService from "@/api/flowable/flowCopyService";
+import taskService from "@/api/flowable/taskService";
+import pick from "lodash.pick";
+export default {
+	title: "抄送事项",
+	icon: "flowCopy",
+	description: "抄送事项",
+	layout: {
+		w: 6,
+		h: 15,
+	},
+	components: {
+
+	},
+	data() {
+		return {
+			dataList: [],
+			tablePage: {
+				total: 0,
+				currentPage: 1,
+				pageSize: 10,
+				orders: [],
+			},
+			loading: false,
+		};
+	},
+	created () {
+	},
+	computed:{
+		flowCopyCount(){
+			return this.$store.state.global.flowCopyCount
+		},
+	},
+	mounted() {
+		this.refreshList();
+	},
+
+	activated() {
+		this.refreshList();
+	},
+	methods: {
+		// 获取数据列表
+		refreshList() {
+			this.loading = true;
+			flowCopyService
+				.list({
+					current: this.tablePage.currentPage,
+					size: this.tablePage.pageSize,
+					orders: this.tablePage.orders,
+					...this.searchForm,
+				})
+				.then((data) => {
+					this.dataList = data.records;
+					this.tablePage.total = data.total;
+					this.$store.state.global.flowCopyCount = data.total
+					this.loading = false;
+				});
+		},
+		// 当前页
+		currentChangeHandle({ currentPage, pageSize }) {
+			this.tablePage.currentPage = currentPage;
+			this.tablePage.pageSize = pageSize;
+			this.refreshList();
+		},
+		// 排序
+		sortChangeHandle(column) {
+			this.tablePage.orders = [];
+			if (column.order != null) {
+				this.tablePage.orders.push({
+					column: this.$utils.toLine(column.property),
+					asc: column.order === "asc",
+				});
+			}
+			this.refreshList();
+		},
+		// 查看
+		detail(row) {
+			taskService
+				.getTaskDef({
+					procInsId: row.procInsId,
+					procDefId: row.procDefId,
+				})
+				.then((data) => {
+					this.$router.push({
+						path: "/flowable/task/TaskFormDetail",
+						query: {
+							readOnly: true,
+							title: row.procInsName,
+							formTitle: row.procInsName,
+							...pick(
+								data,
+								"formType",
+								"formUrl",
+								"procDefKey",
+								"taskDefKey",
+								"procInsId",
+								"procDefId",
+								"taskId",
+								"status",
+								"title",
+								"businessId"
+							),
+						},
+					});
+				});
+		},
+		resetSearch() {
+			this.$refs.searchForm.resetFields();
+			this.refreshList();
+		},
+		toPendingList () {
+			this.$router.push('/flowable/extension/FlowCopyList')
+		},
+	},
+};
+</script>
+<style scoped>
+.box-card {
+	height: 100%;
+}
+</style>

+ 59 - 37
src/views/dashboard/widgets/components/MyNotifyList.vue

@@ -2,13 +2,20 @@
 	<el-card class="box-card">
 		<template #header>
 			<div class="card-header">
-				<span>公告</span>
+				<span>公告
+				<el-badge class="mark" v-if="backlogCount !== 0" :value="backlogCount" :max="99" style="line-height: 0;margin-top: 8px"/>
+				</span>
+				<div style="float:right;">
+					<el-button type="text" @click="refreshList()">刷新</el-button>
+					<el-button type="text" @click="toPendingList()">查看更多</el-button>
+				</div>
 			</div>
 		</template>
 		<el-table :data="dataList" style="width: 100%" height="480">
-			<el-table-column label="标题" prop="title">
+			<el-table-column label="标题" prop="title" width="100px">
 				<template #default="scope">
 					<el-link
+						width="200px"
 						type="primary"
 						:underline="false"
 						@click="view(scope.row.id)"
@@ -16,7 +23,7 @@
 					>
 				</template>
 			</el-table-column>
-			<el-table-column label="类型" prop="type">
+			<el-table-column label="类型" prop="type" width="100px">
 				<template #default="scope">
 					{{
 						$dictUtils.getDictLabel(
@@ -27,38 +34,38 @@
 					}}
 				</template>
 			</el-table-column>
-			<el-table-column
-				show-overflow-tooltip
-				label="内容"
-				prop="content"
-			></el-table-column>
-			<el-table-column show-overflow-tooltip label="附件" prop="files">
-				<template #default="scope">
-					<el-link
-						:href="item"
-						target="_blank"
-						:key="index"
-						style="margin-right: 8px"
-						v-for="(item, index) in (scope.row.files || '').split(
-							','
-						)"
-					>
-						<el-tag v-if="item">
-							{{
-								decodeURIComponent(
-									item.substring(
-										item.lastIndexOf("&name=") + 6
-									)
-								)
-							}}</el-tag
-						>
-					</el-link>
-				</template>
-			</el-table-column>
+<!--			<el-table-column-->
+<!--				show-overflow-tooltip-->
+<!--				label="内容"-->
+<!--				prop="content"-->
+<!--			></el-table-column>-->
+<!--			<el-table-column show-overflow-tooltip label="附件" prop="files">-->
+<!--				<template #default="scope">-->
+<!--					<el-link-->
+<!--						:href="item"-->
+<!--						target="_blank"-->
+<!--						:key="index"-->
+<!--						style="margin-right: 8px"-->
+<!--						v-for="(item, index) in (scope.row.files || '').split(-->
+<!--							','-->
+<!--						)"-->
+<!--					>-->
+<!--						<el-tag v-if="item">-->
+<!--							{{-->
+<!--								decodeURIComponent(-->
+<!--									item.substring(-->
+<!--										item.lastIndexOf("&name=") + 6-->
+<!--									)-->
+<!--								)-->
+<!--							}}</el-tag-->
+<!--						>-->
+<!--					</el-link>-->
+<!--				</template>-->
+<!--			</el-table-column>-->
 
-			<el-table-column label="查阅状态" prop="status">
+			<el-table-column label="查阅状态" width="100px" prop="status">
 				<template #default="scope">
-					<el-tag type="success" v-if="scope.row.readFlag === '1'">
+					<el-tag type="success"  v-if="scope.row.readFlag === '1'">
 						{{
 							$dictUtils.getDictLabel(
 								"oa_notify_read",
@@ -79,6 +86,7 @@
 				</template>
 			</el-table-column>
 			<el-table-column
+				width="200px"
 				label="发布者"
 				prop="createBy.name"
 			></el-table-column>
@@ -128,8 +136,8 @@
 </template>
 
 <script>
-import NotifyForm from "@/views/notify/NotifyForm.vue";
-import notifyService from "@/api/notify/notifyService";
+import NotifyForm from "@/views/jy/notify/NotifyForm.vue";
+import NotifyService from "@/api/jy/NotifyService";
 export default {
 	title: "我的公告",
 	icon: "tonggao5",
@@ -153,6 +161,15 @@ export default {
 			loading: false,
 		};
 	},
+	NotifyService: null,
+	created () {
+		this.notifyService = new NotifyService()
+	},
+	computed:{
+		backlogCount(){
+			return this.$store.state.global.backlogCount
+		},
+	},
 	mounted() {
 		this.refreshList();
 	},
@@ -164,17 +181,19 @@ export default {
 		// 获取数据列表
 		refreshList() {
 			this.loading = true;
-			notifyService
-				.list({
+			this.notifyService
+				.myNotifyList({
 					current: this.tablePage.currentPage,
 					size: this.tablePage.pageSize,
 					orders: this.tablePage.orders,
 					isSelf: true,
+					isClose: '0',
 					...this.searchForm,
 				})
 				.then((data) => {
 					this.dataList = data.records;
 					this.tablePage.total = data.total;
+					this.$store.state.global.backlogCount = data.total
 					this.loading = false;
 				});
 		},
@@ -203,6 +222,9 @@ export default {
 			this.$refs.searchForm.resetFields();
 			this.refreshList();
 		},
+		toPendingList () {
+			this.$router.push('/jy/notify/MyNotifyList')
+		},
 	},
 };
 </script>

+ 10 - 0
src/views/dashboard/widgets/index.vue

@@ -200,9 +200,19 @@ export default {
 					w: 6,
 					h: 15,
 					i: 1,
+					name: "MyFlowCopyList",
+					moved: false,
+				},
+				{
+					x: 6,
+					y: 9,
+					w: 6,
+					h: 15,
+					i: 1,
 					name: "MyNotifyList",
 					moved: false,
 				},
+
 			],
 			// grid: [],
 			grid: [],

+ 30 - 1
src/views/flowable/task/TaskForm.vue

@@ -110,6 +110,21 @@
 					</vxe-column>
 				</vxe-table>
 			</el-tab-pane>
+			<el-tab-pane label="还款历史" v-if="refundId" name="form-eighth">
+				<vxe-table
+					ref="refundTable"
+					border="inner"
+					:key="111"
+					size="small"
+					class="vxe-table-element"
+					max-height="1000px"
+					:data="refund">
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+					<vxe-column min-width="160" align="center" title="还款金额" field="refundMoney"></vxe-column>
+					<vxe-column min-width="160" align="center" title="还款人" field="createName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="还款时间" field="createTime"></vxe-column>
+				</vxe-table>
+			</el-tab-pane>
 		</el-tabs>
 
 		<el-card
@@ -272,12 +287,15 @@ import { shallowRef } from 'vue'
 import CollectService from '@/api/materialManagement/CollectService'
 import WareHouseService from '@/api/materialManagement/WareHouseService'
 import userService from "@/api/sys/userService";
+import BorrowService from '@/api/jy/BorrowService'
 export default {
 	collectService: null,
 	wareHouseService: null,
+	BorrowService:null,
 	beforeCreate () {
 		this.collectService = new CollectService()
 		this.wareHouseService = new WareHouseService()
+		this.borrowService = new BorrowService()
 	},
 	activated() {
 		this.init();
@@ -424,6 +442,7 @@ export default {
 			this.statusFlag = this.$route.query.statusFlag
 			this.wareHouseId = this.$route.query.wareHouseId
 			this.returnId = this.$route.query.returnId
+			this.refundId = this.$route.query.refundId
 			this.companyName=this.$store.state.user.company.name
 			if (this.commonJS.isEmpty(this.$route.query.isShow)) {
 				this.isShow = 'true'
@@ -1311,6 +1330,14 @@ export default {
 					})
 				}
 			}
+			if (event.props.name === 'form-eighth') {
+				console.log('进来了')
+				if (this.commonJS.isNotEmpty(this.refundId)) {
+					this.borrowService.findByBorId(this.refundId).then((data) => {
+						this.refund = data
+					})
+				}
+			}
 		},
 		// 打开入库修改历史详情页
 		hiDetail (row) {
@@ -1365,11 +1392,13 @@ export default {
 			loading: false,
 			wareHouseId: '',
 			returnId: '',
+			refundId:'',
 			dataListHi: [],
 			dataListHiCollect: [],
 			recordType:'',
 			days:'',
-			companyName:''
+			companyName:'',
+			refund:[]
 		};
 	},
 };

+ 30 - 0
src/views/flowable/task/TaskFormDetail.vue

@@ -150,6 +150,21 @@
 					<vxe-column min-width="160" align="center" title="创建时间" field="createTime"></vxe-column>
 				</vxe-table>
 			</el-tab-pane>
+			<el-tab-pane label="还款历史" v-if="refundId" name="form-nineth">
+				<vxe-table
+					ref="refundTable"
+					border="inner"
+					:key="111"
+					size="small"
+					class="vxe-table-element"
+					max-height="1000px"
+					:data="refund">
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+					<vxe-column min-width="160" align="center" title="还款金额" field="refundMoney"></vxe-column>
+					<vxe-column min-width="160" align="center" title="还款人" field="createName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="还款时间" field="createTime"></vxe-column>
+				</vxe-table>
+			</el-tab-pane>
 		</el-tabs>
 		<WareHouseHi ref="wareHouseHi"></WareHouseHi>
 		<CollectReturnHi ref="collectReturnHi"></CollectReturnHi>
@@ -171,12 +186,15 @@ import CollectReturnHi from '@/views/materialManagement/collect/CollectReturnHiF
 import CollectService from '@/api/materialManagement/CollectService'
 import WareHouseService from '@/api/materialManagement/WareHouseService'
 import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
+import BorrowService from '@/api/jy/BorrowService'
 export default {
 	collectService: null,
 	wareHouseService: null,
+	BorrowService:null,
 	beforeCreate () {
 		this.collectService = new CollectService()
 		this.wareHouseService = new WareHouseService()
+		this.borrowService = new BorrowService()
 	},
 	activated() {
 		this.init();
@@ -257,6 +275,7 @@ export default {
 			this.businessId = this.$route.query.businessId;
 			this.procInsId = this.$route.query.procInsId;
 			this.returnId = this.$route.query.returnId
+			this.refundId = this.$route.query.refundId
 			this.wareHouseId = this.$route.query.wareHouseId
 			this.sigId=this.$route.query.sigId
 			this.formReadOnly = true;
@@ -294,6 +313,15 @@ export default {
 					})
 				}
 			}
+			if (event.props.name === 'form-nineth') {
+				console.log('进来了')
+				if (this.commonJS.isNotEmpty(this.refundId)) {
+					this.borrowService.findByBorId(this.refundId).then((data) => {
+						console.log('data',data)
+						this.refund = data
+					})
+				}
+			}
 		},
 		// 打开入库修改历史详情页
 		hiDetail (row) {
@@ -331,7 +359,9 @@ export default {
 			dataListHi: [],
 			dataListHiCollect: [],
 			sigId:'',
+			refundId:'',
 			sigHiCollect:[],
+			refund:[],
 		};
 	},
 };

+ 31 - 27
src/views/home/components/MyNotifyList2.vue

@@ -4,6 +4,7 @@
 			<div class="card-header">
 				<span>公告</span>
 				<div style="float:right;">
+					<el-button type="text" @click="refreshList()">刷新</el-button>
 					<el-button type="text" @click="toPendingList()">查看更多</el-button>
 				</div>
 			</div>
@@ -52,29 +53,29 @@
 					title="内容"
 					field="content"
 				></vxe-column>
-				<vxe-column show-overflow-tooltip title="附件" prop="files">
-					<template #default="scope">
-						<el-link
-							:href="item"
-							target="_blank"
-							:key="index"
-							style="margin-right: 8px"
-							v-for="(item, index) in (scope.row.files || '').split(
-							','
-						)"
-						>
-							<el-tag v-if="item">
-								{{
-								decodeURIComponent(
-								item.substring(
-								item.lastIndexOf("&name=") + 6
-								)
-								)
-								}}</el-tag
-							>
-						</el-link>
-					</template>
-				</vxe-column>
+<!--				<vxe-column show-overflow-tooltip title="附件" prop="files">-->
+<!--					<template #default="scope">-->
+<!--						<el-link-->
+<!--							:href="item"-->
+<!--							target="_blank"-->
+<!--							:key="index"-->
+<!--							style="margin-right: 8px"-->
+<!--							v-for="(item, index) in (scope.row.files || '').split(-->
+<!--							','-->
+<!--						)"-->
+<!--						>-->
+<!--							<el-tag v-if="item">-->
+<!--								{{-->
+<!--								decodeURIComponent(-->
+<!--								item.substring(-->
+<!--								item.lastIndexOf("&name=") + 6-->
+<!--								)-->
+<!--								)-->
+<!--								}}</el-tag-->
+<!--							>-->
+<!--						</el-link>-->
+<!--					</template>-->
+<!--				</vxe-column>-->
 
 				<vxe-column title="查阅状态" prop="status">
 					<template #default="scope">
@@ -148,8 +149,8 @@
 </template>
 
 <script>
-	import NotifyForm from "@/views/notify/NotifyForm.vue";
-	import notifyService from "@/api/notify/notifyService";
+	import NotifyForm from "@/views/jy/notify/NotifyForm.vue";
+	import NotifyService from "@/api/jy/NotifyService";
 	export default {
 		components: {
 			NotifyForm,
@@ -169,7 +170,10 @@
 		mounted() {
 			this.refreshList();
 		},
-
+		NotifyService: null,
+		created () {
+			this.notifyService = new NotifyService()
+		},
 		activated() {
 			this.refreshList();
 		},
@@ -177,7 +181,7 @@
 			// 获取数据列表
 			refreshList() {
 				this.loading = true;
-				notifyService
+				this.notifyService
 					.list({
 						current: this.tablePage.currentPage,
 						size: this.tablePage.pageSize,

+ 87 - 23
src/views/jy/borrowMoney/BorrowMoneyList.vue

@@ -5,14 +5,11 @@
 			<el-form-item label="借款编号" prop="no">
 				<el-input v-model="searchForm.no" placeholder="请输入借款编号" clearable></el-input>
 			</el-form-item>
-			<el-form-item label="借款原因" prop="reason">
-				<el-input v-model="searchForm.reason" placeholder="请输入借款原因" clearable></el-input>
-			</el-form-item>
-			<el-form-item v-if="showHideItem" label="借款人" prop="createById">
+			<el-form-item  label="借款人" prop="createById">
 				<UserSelectSignatory style="width: 100%" ref="userSelect2" :limit="1"
 									 :readonly="true" :modelValue="searchForm.createById"
 									 @update:modelValue='(value) => {searchForm.createById = value}'></UserSelectSignatory>			</el-form-item>
-			<el-form-item v-if="showHideItem"  prop="officeId" label="借款人部门">
+			<el-form-item   prop="officeId" label="借款人部门">
 				<SelectTree
 					ref="officeTree"
 					:props="{
@@ -27,6 +24,14 @@
 					:accordion="true"
 					@getValue="(value) => {searchForm.officeId=value}"/>
 			</el-form-item>
+			<el-form-item v-if="showHideItem" label="借款金额" prop="borrowAmounts">
+				<InputNumber :disabled="false" :precision="num"
+							 :value="searchForm.borrowAmounts"
+							 @changefrom="(val) => {searchForm.borrowAmounts[0] = val}"
+							 @changeto="(val) => {searchForm.borrowAmounts[1] = val}"
+				>
+				</InputNumber>
+			</el-form-item>
 			<el-form-item v-if="showHideItem" label="借款时间" prop="createDates">
 				<el-date-picker
 					placement="bottom-start"
@@ -39,15 +44,13 @@
 					end-placeholder="结束日期">
 				</el-date-picker>
 			</el-form-item>
-			<el-form-item v-if="showHideItem" label="借款金额" prop="borrowAmounts">
-				<InputNumber :disabled="false" :precision="num"
-							 :value="searchForm.borrowAmounts"
-							 @changefrom="(val) => {searchForm.borrowAmounts[0] = val}"
-							 @changeto="(val) => {searchForm.borrowAmounts[1] = val}"
-				>
-				</InputNumber>
+			<el-form-item v-if="showHideItem" label="借款原因" prop="reason">
+				<el-input v-model="searchForm.reason" placeholder="请输入借款原因" clearable></el-input>
 			</el-form-item>
 
+
+
+
 			<el-form-item>
 				<el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
 				<el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
@@ -55,7 +58,7 @@
 			</el-form-item>
 		</el-form>
 		<div class="jp-table top" style="">
-			<vxe-toolbar :refresh="{query: refreshList}" custom>
+			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button v-if="hasPermission('borrow:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
 				</template>
@@ -77,11 +80,19 @@
 					resizable
 					height="auto"
 					:loading="loading"
-					ref="clientTable"
+					ref="borrowTable"
 					show-header-overflow
 					show-overflow
 					highlight-hover-row
 					:menu-config="{}"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢借款申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢借款申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					@sort-change="sortChangeHandle"
 					:sort-config="{remote:true}"
 					:data="dataList"
@@ -92,13 +103,13 @@
 							<el-link  type="primary" :underline="false"  @click="view(scope.row)">{{scope.row.no}}</el-link>
 						</template>
 					</vxe-column>
-					<vxe-column min-width="160" align="center" title="借款用途" field="reason"></vxe-column>
-					<vxe-column min-width="160" align="center" title="借款人" field="createName"></vxe-column>
-					<vxe-column min-width="160" align="center" title="借款人部门" field="officeName"></vxe-column>
-					<vxe-column min-width="160" align="center" title="借款时间" field="createTime"></vxe-column>
 					<vxe-column min-width="160" align="center" title="借款金额" field="moneyLower"></vxe-column>
 					<vxe-column min-width="160" align="center" title="对冲金额" field="refundLower"></vxe-column>
 					<vxe-column min-width="160" align="center" title="剩余借款金额" field="finalMoney"></vxe-column>
+					<vxe-column min-width="160" align="center" title="借款人" field="createName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="借款人部门" field="officeName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="借款用途" field="reason"></vxe-column>
+					<vxe-column min-width="160" align="center" title="借款时间" field="createTime"></vxe-column>
 					<vxe-column  min-width="150px" align="center" title="借款状态" field="status" fixed="right">
 						<template #default="scope">
 							<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('program_project_list_info_status_info', scope.row.status, '')" effect="dark" >{{$dictUtils.getDictLabel("program_project_list_info_status", scope.row.status, '未登记')}} </el-button>
@@ -112,19 +123,20 @@
 					<vxe-column title="操作" width="150px" fixed="right" align="center">
 						<template  #default="scope">
 							<div v-if="isAdmin">
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 								<el-button  size="small" text type="primary"  @click="adminEdit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 							</div>
 							<div v-else>
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<el-button v-if="(scope.row.status === '0'||scope.row.status === '1'|| scope.row.status === '3')" size="small" text type="primary"  @click="edit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<!--              当前申请人撤回-->
 								<el-button v-if="scope.row.createById === $store.state.user.id && scope.row.status==='2'" text type="primary" size="small" @click="reback(scope.row)">撤回</el-button>
 
 								<el-button v-if="scope.row.status==='2' && checkIsAudit(scope.row)" text type="primary" size="small" @click="examine(scope.row)">审核</el-button>
 								<el-button v-if="scope.row.status === '4'&&scope.row.createById === $store.state.user.id" text type="primary" size="small" @click="adjust(scope.row)">驳回调整</el-button>
-								<el-button v-if="scope.row.status === '5'&&scope.row.createById === $store.state.user.id" text type="primary" size="small" @click="account(scope.row)">还款申请</el-button>
+								<el-button v-if="scope.row.status === '5'&&scope.row.createById === $store.state.user.id &&(commonJS.isEmpty(scope.row.refundStatus) ||scope.row.refundStatus === '0' || scope.row.refundStatus === '1' || scope.row.refundStatus === '5' || scope.row.refundStatus=== '3')" text type="primary" size="small" @click="addRefund(scope.row)">还款申请</el-button>
 								<el-button v-if="scope.row.createById === $store.state.user.id && scope.row.refundStatus==='2'" text type="primary" size="small" @click="rebackAccount(scope.row)">还款撤回</el-button>
+<!--								<el-button v-if="scope.row.createById === $store.state.user.id && scope.row.refundStatus==='3'" text type="primary" size="small" @click="rebackRequest(scope.row)">取消还款</el-button>-->
 
 								<el-button v-if="scope.row.refundStatus==='2' && checkIsAudit(scope.row)" text type="primary" size="small" @click="examineAccount(scope.row)">还款审核</el-button>
 								<el-button v-if="scope.row.refundStatus === '4'&&scope.row.createById === $store.state.user.id" text type="primary" size="small" @click="adjustAccount(scope.row)">还款驳回调整</el-button>
@@ -220,6 +232,12 @@
 			}
 		},
 		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.borrowTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
 			this.refreshList()
 		},
 		activated () {
@@ -469,6 +487,24 @@
 				}
 				return false
 			},
+
+			async addRefund(row){
+				if (this.commonJS.isEmpty(row.refundId)){
+					this.loading = true
+					let resp = await this.borrowService.createRefundData({id:row.id})
+					if (resp) {
+						this.loading = false
+						row.refundId = resp.refundId
+						this.account(row)
+					} else {
+						this.loading = false
+						this.$message.error('无法还款,联系管理员解决')
+					}
+				}else {
+					this.account (row)
+				}
+			},
+
 			//发起借款归还
 			account (row) {
 				let tabTitle = `发起流程【嘉溢-借款归还】`
@@ -497,6 +533,7 @@
 							businessTable: 'jy_refund',
 							isShow: false,
 							status: status,
+							refundId:row.refundId,
 							routePath: '/jy/borrowMoney/BorrowMoneyList'
 						}
 					})
@@ -505,7 +542,7 @@
 			// 查看修改流程结果
 			detailAccount (row) {
 				if (row.refundStatus !== '0' && row.refundStatus !== '1') {
-					this.borrowService.queryById(row.refundId).then((da)=>{
+					this.borrowService.findByRefundId(row.refundId).then((da)=>{
 						// eslint-disable-next-line eqeqeq
 						taskService.getTaskDef({
 							procInsId: row.procInsIdRefund,
@@ -521,7 +558,8 @@
 									formTitle: '借款归还' + '流程详情',
 									businessId: row.refundId,
 									status: 'reback',
-									method: 'view'
+									method: 'view',
+									refundId:row.refundId
 								}
 							})
 						})
@@ -596,6 +634,32 @@
 				this.$refs.borrowDia.init('edit',row.refundId);
 			},
 
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.borrowService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+
 
 
 

+ 7 - 5
src/views/jy/borrowMoney/RefundForm.vue

@@ -83,7 +83,8 @@
 					procInsId:'',
 					status:'',
 					finalMoney:'',
-					endMoney:''
+					endMoney:'',
+					refundId:''
 				},
 				baseKey: '',
 				keyWatch: '',
@@ -153,7 +154,8 @@
 					procInsId:'',
 					finalMoney:'',
 					moneyLower:'', // 借款金额小写
-					endMoney:''
+					endMoney:'',
+					refundId:''
 				}
 				this.inputForm.id = id
 				this.loading = false
@@ -162,7 +164,7 @@
 					this.loading = true
 					if (this.commonJS.isNotEmpty(this.inputForm.id)) {
 						console.log('this.inputForm.id', this.inputForm.id)
-						this.borrowService.queryById(this.inputForm.id).then((data)=>{
+						this.borrowService.findByRefundId(this.inputForm.id).then((data)=>{
 							this.inputForm = this.recover(this.inputForm, data)
 							this.inputForm.id=data.refundId
 							if (this.commonJS.isEmpty(this.inputForm.createName)){
@@ -186,7 +188,7 @@
 				this.loading = true
 				if (this.commonJS.isNotEmpty(this.inputForm.id)) {
 					this.borrowService.queryById(this.inputForm.id).then((data) => {
-						if (data.refundStatus !== '0' && data.refundStatus !== '1' && data.refundStatus !== '3' && data.refundStatus !== '5') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
+						if (data.refundStatus !== '0' && data.refundStatus !== '1' && data.refundStatus !== '3' && data.refundStatus !== '5' && data.refundStatus !== '' && data.refundStatus !== null && data.refundStatus !== undefined) { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
 							this.loading = false
 							this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
 							throw new Error()
@@ -428,7 +430,7 @@
 				}
 
 				this.inputForm.refund= moneyCNString;
-				this.inputForm.finalMoney=parseFloat(this.inputForm.moneyLower-money)
+				this.inputForm.finalMoney=parseFloat(this.inputForm.endMoney-money)
 				if (this.inputForm.finalMoney <0){
 					this.$message.error("还款金额不正确")
 					throw new Error()

+ 5 - 0
src/views/jy/daily/MeetingRoomForm.vue

@@ -183,6 +183,9 @@
 							this.inputForm.createById=data.createById
 							this.inputForm.createByName=data.createName
 							this.inputForm.duration=String(data.duration)
+							if(this.commonJS.isNotEmpty(this.inputForm.startDate)){
+								this.checkTime()
+							}
 							if (this.commonJS.isEmpty(this.inputForm.createDate)) {
 								this.inputForm.createDate = this.moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
 							}
@@ -283,6 +286,8 @@
 						this.loading = true
 						console.log('form',this.inputForm)
 						this.meetingRoomServie.saveForm(this.inputForm).then((data) => {
+							let processTitle = `${this.$store.state.user.name} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [嘉溢-会议室预约流程]`
+							this.inputForm.title = processTitle
 							callback(data.businessTable, data.businessId, this.inputForm)
 							this.$refs.inputForm.resetFields()
 							this.loading = false

+ 46 - 5
src/views/jy/daily/MeetingRoomList.vue

@@ -41,7 +41,7 @@
 			</el-form-item>
 		</el-form>
 		<div class="jp-table top" style="">
-			<vxe-toolbar :refresh="{query: refreshList}" custom>
+			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button v-if="hasPermission('jy_meeting:info:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
 				</template>
@@ -63,12 +63,20 @@
 					resizable
 					height="auto"
 					:loading="loading"
-					ref="clientTable"
+					ref="roomTable"
 					show-header-overflow
 					show-overflow
 					highlight-hover-row
 					:menu-config="{}"
 					@sort-change="sortChangeHandle"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢会议室预约数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢会议室预约数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					:sort-config="{remote:true}"
 					:data="dataList"
 					:checkbox-config="{}">
@@ -96,8 +104,8 @@
 								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 							</div>
 							<div v-else>
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<el-button v-if="scope.row.status === '1'|| scope.row.status === '3'" size="small" text type="primary"  @click="edit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<!--              当前申请人撤回-->
 								<el-button v-if="scope.row.createById === $store.state.user.id && scope.row.status==='2'" text type="primary" size="small" @click="reback(scope.row)">撤回</el-button>
 
@@ -185,6 +193,12 @@
 			}
 		},
 		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.roomTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
 			this.refreshList()
 		},
 		activated () {
@@ -229,8 +243,8 @@
 			},
 			// 修改
 			edit (row) {
-				let tabTitle = `发起流程【嘉溢-用印流程】`
-				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [嘉溢-用印流程]`
+				let tabTitle = `发起流程【嘉溢-会议室预约流程】`
+				let processTitle = `${this.userName} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [嘉溢-会议室预约流程]`
 				taskService.getTaskDef({ procDefId: this.processDefinitionId,
 					businessId: row.id,
 					businessTable: 'jy_meeting_room',
@@ -481,6 +495,33 @@
 			},
 
 
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.meetingRoomServie.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+
+
 
 		}
 	}

+ 6 - 6
src/views/jy/drive/DriveApplyForm.vue

@@ -38,9 +38,9 @@
 								<el-input :disabled="true" :readonly="true" placeholder="请填写项目编号" v-model="scope.row.no"/>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column  field="projectLeader" align="center" title="项目负责人" :edit-render="{}">
+						<vxe-table-column  field="leader" align="center" title="项目负责人" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.projectLeader"/>
+								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.leader"/>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column field="createTime" align="center" title="创建时间" :edit-render="{}">
@@ -110,7 +110,7 @@
 	import DriveService from '@/api/jy/DriveService'
 	import { ElDatePicker } from 'element-plus';
 	import ProjectForm from './ProjectForm'
-	import UserSelectSignatory from '../workClientInfo/clientUserSelect'
+	import UserSelectSignatory from './clientUserSelect'
 	import UpLoadComponent from '@/views/common/UpLoadComponent'
 	import CommonApi from '@/api/cw/common/CommonApi'
 	export default {
@@ -469,7 +469,7 @@
 				}
 			},
 			openProgramPageForm(rowIndex) {
-				this.$refs.projectForm.init()
+				this.$refs.projectForm.init('2',true)
 				this.programRow = rowIndex
 				console.log('11',this.programRow)
 			},
@@ -482,7 +482,7 @@
 						r.projectId=item.id
 						r.name = item.name
 						r.no = item.no
-						r.projectLeader = item.projectLeader
+						r.leader = item.projectLeader
 						r.createTime = item.createTime
 						console.log('2',this.inputForm.projectList[this.programRow])
 					} else {
@@ -490,7 +490,7 @@
 							projectId: item.id,
 							name: item.name,
 							no: item.no,
-							projectLeader: item.projectLeader,
+							leader: item.projectLeader,
 							createTime: item.createTime,
 						}
 						this.$refs.baseTable.insertAt(r)

+ 4 - 4
src/views/jy/drive/DriveEditForm.vue

@@ -47,9 +47,9 @@
 								<el-input  :readonly="true" placeholder="请填写项目编号" v-model="scope.row.no"/>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column  field="projectLeader" align="center" title="项目负责人" :edit-render="{}">
+						<vxe-table-column  field="leader" align="center" title="项目负责人" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input  placeholder="请填写项目负责人" v-model="scope.row.projectLeader"/>
+								<el-input  placeholder="请填写项目负责人" v-model="scope.row.leader"/>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column field="createTime" align="center" title="创建时间" :edit-render="{}">
@@ -564,7 +564,7 @@
 						r.projectId=item.id
 						r.name = item.name
 						r.no = item.no
-						r.projectLeader = item.projectLeader
+						r.leader = item.projectLeader
 						r.createTime = item.createTime
 						console.log('2',this.inputForm.projectList[this.programRow])
 					} else {
@@ -572,7 +572,7 @@
 							projectId: item.id,
 							name: item.name,
 							no: item.no,
-							projectLeader: item.projectLeader,
+							leader: item.projectLeader,
 							createTime: item.createTime,
 						}
 						this.$refs.baseTable.insertAt(r)

+ 45 - 5
src/views/jy/drive/DriveList.vue

@@ -36,7 +36,7 @@
 			</el-form-item>
 		</el-form>
 		<div class="jp-table top" style="">
-			<vxe-toolbar :refresh="{query: refreshList}" custom>
+			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button v-if="hasPermission('drive:info:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
 				</template>
@@ -58,11 +58,19 @@
 					resizable
 					height="auto"
 					:loading="loading"
-					ref="clientTable"
+					ref="driveApplyTable"
 					show-header-overflow
 					show-overflow
 					highlight-hover-row
 					:menu-config="{}"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢用车申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢用车申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					@sort-change="sortChangeHandle"
 					:sort-config="{remote:true}"
 					:data="dataList"
@@ -199,10 +207,16 @@
 				return this.$store.state.user
 			}
 		},
-		mounted () {
+		activated () {
 			this.refreshList()
 		},
-		activated () {
+		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.driveApplyTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
 			this.refreshList()
 		},
 		methods: {
@@ -585,7 +599,33 @@
 					this.searchForm.projectName=item.name
 				})
 
-			}
+			},
+
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.driveService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
 
 
 

+ 26 - 37
src/views/jy/drive/ProjectForm.vue

@@ -16,16 +16,15 @@
       </div>
 		<!--报告        -->
 		<div v-if="checkType === '2'">
-			<el-form size="large" :inline="true" class="query-form" ref="searchForm" :model="searchForm"
-					 @submit.native.prevent>
+			<el-form :inline="true" class="query-form" ref="searchForm" :model="searchForm" @submit.native.prevent>
 				<!-- 搜索框-->
-				<el-form-item label="项目名称" prop="projectName">
-					<el-input size="large" v-model="searchForm.projectName" placeholder="请输入项目名称" clearable></el-input>
+				<el-form-item label="项目名称" prop="name">
+					<el-input v-model="searchForm.name" placeholder="请输入项目名称" clearable></el-input>
 				</el-form-item>
-				<el-form-item label="报告号" prop="reportNo">
-					<el-input size="large" v-model="searchForm.reportNo" placeholder="请输入报告号" clearable></el-input>
+				<el-form-item label="项目编号" prop="no">
+					<el-input v-model="searchForm.no" placeholder="请输入项目编号" clearable></el-input>
 				</el-form-item>
-				<el-form-item label="报告创建时间" prop="createDates">
+				<el-form-item label="创建时间" prop="createDates">
 					<el-date-picker
 						placement="bottom-start"
 						format="YYYY-MM-DD HH:mm:ss"
@@ -39,8 +38,8 @@
 				</el-form-item>
 
 				<el-form-item>
-					<el-button type="primary" @click="list1()" size="large" icon="el-icon-search">查询</el-button>
-					<el-button @click="resetSearch1()" size="large" icon="el-icon-refresh-right">重置</el-button>
+					<el-button type="primary" @click="list()"  icon="el-icon-search">查询</el-button>
+					<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
 				</el-form-item>
 			</el-form>
 
@@ -50,38 +49,34 @@
 				resizable
 				height="550px"
 				:loading="loading"
-				size="large"
-				ref="projectTable1"
+				ref="projectTable"
 				show-header-overflow
 				show-overflow
 				highlight-hover-row
 				:menu-config="{}"
 				:print-config="{}"
-				@sort-change=""
 				:sort-config="{remote:true}"
-				:data="dataList1"
+				:data="dataList"
 				:row-config="{isCurrent: true}"
 				:checkbox-config="{trigger: 'row'}"
 			>
 				<vxe-column type="seq" width="60" title="序号"></vxe-column>
 				<vxe-column type="checkbox" width="60px"></vxe-column>
-				<vxe-column min-width="230" align="center" title="项目名称" field="projectName" show-overflow="title"></vxe-column>
-				<vxe-column min-width="230" align="center" title="项目编号" field="projectNumber"></vxe-column>
-				<vxe-column min-width="230" align="center" title="报告文号" field="reportNo"></vxe-column>
+				<vxe-column min-width="160" align="center" title="项目名称" field="name" show-overflow="title"></vxe-column>
+				<vxe-column min-width="160" align="center" title="项目编号" field="no"></vxe-column>
 				<vxe-column min-width="160" align="center" title="合同名称" field="contractName"></vxe-column>
-				<vxe-column min-width="160" align="center" title="报告创建人" field="userName"></vxe-column>
-				<vxe-column min-width="160" align="center" title="报告创建时间" field="createTime"></vxe-column>
+				<vxe-column min-width="160" align="center" title="创建人" field="createById"></vxe-column>
+				<vxe-column min-width="160" align="center" title="创建时间" field="createTime"></vxe-column>
 
 			</vxe-table>
 			<vxe-pager
 				background
-				size="large"
-				:current-page="tablePage1.currentPage"
-				:page-size="tablePage1.pageSize"
-				:total="tablePage1.total"
+				:current-page="tablePage.currentPage"
+				:page-size="tablePage.pageSize"
+				:total="tablePage.total"
 				:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
 				:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
-				@page-change="currentChangeHandle1">
+				@page-change="currentChangeHandle">
 			</vxe-pager>
 		</div>
       <div v-if="checkType === '1'" >
@@ -118,7 +113,7 @@
             resizable
             height="550px"
             :loading="loading"
-            ref="projectTable"
+            ref="projectTable1"
             show-header-overflow
             show-overflow
             highlight-hover-row
@@ -130,7 +125,7 @@
             :checkbox-config="{trigger: 'row'}"
           >
             <vxe-column type="seq" width="60" title="序号"></vxe-column>
-            <vxe-column type="checkbox" width="60px"></vxe-column>
+            <vxe-column type="radio" width="60px"></vxe-column>
             <vxe-column min-width="160" align="center" title="项目名称" field="name" show-overflow="title"></vxe-column>
             <vxe-column min-width="160" align="center" title="项目编号" field="no"></vxe-column>
             <vxe-column min-width="160" align="center" title="合同名称" field="contractName"></vxe-column>
@@ -241,7 +236,7 @@
 				} else if (this.checkType === '2') {
 					this.isShow = false
 					this.checkType = '2'
-					this.$message({message: '第一条为报告后面新增只能选择报告', type: 'warning', customClass: 'messageZindex'})
+					// this.$message({message: '第一条为报告后面新增只能选择报告', type: 'warning', customClass: 'messageZindex'})
 				}
 			} else if (isShow === '1') {
 				this.isShow = false
@@ -268,29 +263,23 @@
         let rows
 	    let rowsType
         if (this.checkType === '1') {
-          if (this.commonJS.isEmpty(this.$refs.projectTable.getCheckboxRecords())) {
+          if (this.commonJS.isEmpty(this.$refs.projectTable1.getRadioRecord())) {
             this.$message.error('请至少选择一条数据')
             return
           }
-          if (this.num === false) {
-            if (this.$refs.projectTable.getCheckboxRecords().length > 1) {
-              this.$message.error('最多选择一条数据')
-              return
-            }
-          }
-          rows = this.$refs.projectTable.getCheckboxRecords()
+          rows = this.$refs.projectTable1.getRadioRecord()
         } else if (this.checkType === '2') {
-			if (this.commonJS.isEmpty(this.$refs.projectTable1.getCheckboxRecords())) {
+			if (this.commonJS.isEmpty(this.$refs.projectTable.getCheckboxRecords())) {
 				this.$message.error('请至少选择一条数据')
 				return
 			}
 			if (this.num === false) {
-				if (this.$refs.projectTable1.getCheckboxRecords().length > 1) {
+				if (this.$refs.projectTable.getCheckboxRecords().length > 1) {
 					this.$message.error('最多选择一条数据')
 					return
 				}
 			}
-			rows = this.$refs.projectTable1.getCheckboxRecords()
+			rows = this.$refs.projectTable.getCheckboxRecords()
 		} else {
           if (this.commonJS.isEmpty(this.detail)) {
             this.$message.error('请填写开票详情')

+ 123 - 0
src/views/jy/drive/clientUserSelect/AccountantUserIndex.vue

@@ -0,0 +1,123 @@
+<template>
+	<template v-if="printRead">
+		<label>{{ name }}</label>
+	</template>
+	<template v-else>
+		<el-input
+			placeholder="请选择"
+			readonly
+			:clearable="clearable"
+			:disabled="disabled"
+			style="line-hight: 40px"
+			v-model="name"
+		>
+			<template #append>
+				<el-button
+					:disabled="disabled"
+					:readonly="readonly"
+					@click="showUserSelect"
+					icon="search"
+				></el-button>
+			</template>
+		</el-input>
+		<user-select
+			ref="userSelect"
+			@doSubmit="selectUsersToInput"
+			:tenantId="tenantId"
+			:limit="limit"
+		></user-select>
+	</template>
+</template>
+<script>
+	import userSelect from "./AccountantUserSelectDialog";
+	import userService from "@/api/sys/userService";
+	export default {
+		data() {
+			return {
+				name: "",
+				selectData: [],
+			};
+		},
+		props: {
+			limit: Number,
+			modelValue: { type: String, default: "" },
+			tenantId: { type: String, default: null },
+			printRead: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			clearable: {
+				type: Boolean,
+				default: () => {
+					return true;
+				},
+			},
+			readonly: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			disabled: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+		},
+		components: {
+			userSelect,
+		},
+		watch: {
+			modelValue: {
+				handler(newVal) {
+					this.selectData = [];
+					if (newVal && newVal !== true) {
+						console.log('newVAal', newVal)
+						console.log('进来了')
+						newVal.split(",").forEach((id) => {
+							userService.queryById(id).then((data) => {
+								if (data && data.id !== "") {
+									this.selectData.push(data);
+									this.name = this.selectData
+										.map((user) => {
+											return user.name;
+										})
+										.join(",");
+								}
+							});
+						});
+					} else {
+						this.name = "";
+					}
+				},
+				immediate: true,
+				deep: false,
+			},
+		},
+		methods: {
+			selectUsersToInput(users) {
+				let selectIds = users
+					.map((user) => {
+						return user.id;
+					})
+					.join(",");
+				this.$emit("update:modelValue", selectIds);
+			},
+			showUserSelect() {
+				this.$refs.userSelect.init()
+			},
+		},
+	};
+</script>
+<style>
+	.el-form-item__content .el-input-group {
+		vertical-align: middle;
+	}
+	.el-tag + .el-tag {
+		margin-left: 5px;
+		margin-bottom: 5px;
+	}
+</style>

+ 123 - 0
src/views/jy/drive/clientUserSelect/AccountantUserIndex2.vue

@@ -0,0 +1,123 @@
+<template>
+	<template v-if="printRead">
+		<label>{{ name }}</label>
+	</template>
+	<template v-else>
+		<el-input
+			placeholder="请选择"
+			readonly
+			:clearable="clearable"
+			:disabled="disabled"
+			style="line-hight: 40px"
+			v-model="name"
+		>
+			<template #append>
+				<el-button
+					:disabled="disabled"
+					:readonly="readonly"
+					@click="showUserSelect"
+					icon="search"
+				></el-button>
+			</template>
+		</el-input>
+		<user-select
+			ref="userSelect"
+			@doSubmit="selectUsersToInput"
+			:tenantId="tenantId"
+			:limit="limit"
+		></user-select>
+	</template>
+</template>
+<script>
+	import userSelect from "./AccountantUserSelectDialog2";
+	import userService from "@/api/sys/userService";
+	export default {
+		data() {
+			return {
+				name: "",
+				selectData: [],
+			};
+		},
+		props: {
+			limit: Number,
+			modelValue: { type: String, default: "" },
+			tenantId: { type: String, default: null },
+			printRead: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			clearable: {
+				type: Boolean,
+				default: () => {
+					return true;
+				},
+			},
+			readonly: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			disabled: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+		},
+		components: {
+			userSelect,
+		},
+		watch: {
+			modelValue: {
+				handler(newVal) {
+					this.selectData = [];
+					if (newVal && newVal !== true) {
+						console.log('newVAal', newVal)
+						console.log('进来了')
+						newVal.split(",").forEach((id) => {
+							userService.queryById(id).then((data) => {
+								if (data && data.id !== "") {
+									this.selectData.push(data);
+									this.name = this.selectData
+										.map((user) => {
+											return user.name;
+										})
+										.join(",");
+								}
+							});
+						});
+					} else {
+						this.name = "";
+					}
+				},
+				immediate: true,
+				deep: false,
+			},
+		},
+		methods: {
+			selectUsersToInput(users) {
+				let selectIds = users
+					.map((user) => {
+						return user.id;
+					})
+					.join(",");
+				this.$emit("update:modelValue", selectIds);
+			},
+			showUserSelect() {
+				this.$refs.userSelect.init()
+			},
+		},
+	};
+</script>
+<style>
+	.el-form-item__content .el-input-group {
+		vertical-align: middle;
+	}
+	.el-tag + .el-tag {
+		margin-left: 5px;
+		margin-bottom: 5px;
+	}
+</style>

+ 488 - 0
src/views/jy/drive/clientUserSelect/AccountantUserSelectDialog.vue

@@ -0,0 +1,488 @@
+<template>
+  <div>
+    <el-dialog
+    title="用户选择"
+    width="1000px"
+    :close-on-click-modal="false"
+    :append-to-body="true"
+	draggable
+     class="userDialog"
+    v-model="visible">
+    <el-container style="height: 500px">
+      <el-aside width="200px">
+
+        <el-card class="org">
+          <div slot="header" class="clearfix">
+            <el-input
+              placeholder="请输入组织机构过滤"
+              size="small"
+              v-model="filterText">
+            </el-input>
+          </div>
+           <el-tree
+            :data="officeTreeData"
+            :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+            default-expand-all
+            highlight-current
+            node-key="id"
+            :render-content="renderContent"
+            :filter-node-method="filterNode"
+            :expand-on-click-node="false"
+            @node-click="handleNodeClick"
+            ref="officeTree">
+          </el-tree>
+        </el-card>
+      </el-aside>
+
+    <el-container>
+      <el-header style="text-align: left; font-size: 12px;height:30px">
+        <el-form size="small" :inline="true" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+            <el-form-item prop="loginName">
+              <el-input size="small" v-model="searchForm.loginName" placeholder="登录名" clearable></el-input>
+            </el-form-item>
+
+            <el-form-item>
+              <el-button  type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+              <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+            </el-form-item>
+          </el-form>
+      </el-header>
+
+      <el-main>
+        <el-table
+          :data="dataList"
+          v-loading="loading"
+          size="small"
+          border
+          ref="userTable"
+          @selection-change="selectionChangeHandle"
+          @sort-change="sortChangeHandle"
+          height="calc(100% - 40px)"
+          style="width: 100%;">
+          <el-table-column
+            header-align="center"
+            align="center"
+            v-if="limit <= 1"
+            width="50">
+<!--              <template slot-scope="scope">-->
+<!--                  <el-radio :label="scope.row.id" :value="dataListAllSelections[0]&&dataListAllSelections[0].id" @change.native="getTemplateRow(scope.$index,scope.row)"><span></span></el-radio>-->
+<!--              </template>-->
+			  <template #default="scope">
+				  <el-radio-group v-model="dataListAllSelections[0]" @change.native="getTemplateRow(scope.$index, scope.row)">
+					  <el-radio :label="scope.row">
+						  <template #default="{ label }">
+							  <!-- 将label文本设置为空 -->
+							  <span></span>
+						  </template>
+					  </el-radio>
+				  </el-radio-group>
+			  </template>
+          </el-table-column>
+          <el-table-column
+            type="selection"
+            header-align="center"
+            v-if="limit > 1"
+            align="center"
+            width="50">
+          </el-table-column>
+          <el-table-column
+            prop="photo"
+            header-align="center"
+            align="center"
+            label="头像">
+            <template #default="scope">
+              <img :src="scope.row.photo === ''?'/static/img/avatar.png':scope.row.photo" style="height:35px"/>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="loginName"
+            header-align="center"
+            align="center"
+            sortable="custom"
+            min-width="90"
+            label="登录名">
+          </el-table-column>
+          <el-table-column
+            prop="name"
+            header-align="center"
+            align="真实姓名"
+            sortable="custom"
+            min-width="90"
+            label="用户名">
+          </el-table-column>
+          <el-table-column
+            prop="accountantUserCount"
+            header-align="center"
+            align="center"
+            sortable="custom"
+            min-width="110"
+            label="被选次数">
+
+            <!--用插槽的方法来改变颜色!-->
+            <template #default="scope">
+              <div v-if="scope.row.accountantUserFlag === 0">
+                {{ scope.row.accountantUserCount }}
+              </div>
+              <div v-else :style="{ color: scope.row.accountantUserCount>100 ? 'red' : 'black' }">
+                {{ scope.row.accountantUserCount }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="companyDTO.name"
+            header-align="center"
+            align="center"
+            sortable="custom"
+            min-width="110"
+            label="所属机构">
+          </el-table-column>
+          <el-table-column
+            prop="officeDTO.name"
+            header-align="center"
+            align="center"
+            sortable="custom"
+            min-width="110"
+            label="所属部门">
+          </el-table-column>
+          <el-table-column
+            prop="loginFlag"
+            header-align="center"
+            align="center"
+            min-width="100"
+            label="状态">
+            <template #default="scope">
+              <el-tag v-if="scope.row.loginFlag === '1'" size="small" type="success">正常</el-tag>
+              <el-tag v-else-if="scope.row.loginFlag === '0'" size="small" type="danger">禁用</el-tag>
+            </template>
+          </el-table-column>
+        </el-table>
+        <el-pagination
+          @size-change="sizeChangeHandle"
+          @current-change="currentChangeHandle"
+          :current-page="pageNo"
+          :page-sizes="[5, 10, 50, 100]"
+          :page-size="pageSize"
+          :total="total"
+          layout="total, sizes, prev, pager, next, jumper">
+        </el-pagination>
+      </el-main>
+    </el-container>
+
+    <el-aside width="200px">
+      <el-tag
+        :key="tag.id"
+        v-for="tag in dataListAllSelections"
+        closable
+        :disable-transitions="false"
+        @close="del(tag)">
+        {{tag.name}}
+      </el-tag>
+  </el-aside>
+</el-container>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
+			</span>
+		</template>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+  export default {
+    data () {
+      return {
+        searchForm: {
+          loginName: '',
+          accountantUserCount: '',
+          accountantUserFlag: '',
+          companyDTO: {
+            id: ''
+          },
+          officeDTO: {
+            id: ''
+          },
+          name: ''
+        },
+        filterText: '',
+        dataListAllSelections: [],   // 所有选中的数据包含跨页数据
+        dataListSelections: [],
+        idKey: 'id', // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+        dataList: [],
+        dynamicTags: [],
+        officeTreeData: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orders: [],
+        loading: false,
+        visible: false
+      }
+    },
+    props: {
+      selectData: {
+        type: Array,
+        default: () => { return [] }
+      },
+      limit: {
+        type: Number,
+        default: 999999
+      }
+    },
+    watch: {
+      filterText (val) {
+        this.$refs.officeTree.filter(val)
+      }
+    },
+    methods: {
+      init () {
+        this.visible = true
+        this.$nextTick(() => {
+          this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData))
+          this.refreshTree()
+          this.resetSearch()
+        })
+      },
+      renderContent (h, { node, data, store }) {
+		  return h('span', { class: 'custom-tree-node' }, [
+			  data.type === '1' ? h('i', { class: 'fa fa-sitemap' }) : h('i', { class: 'fa fa-users' }),
+			  h('span', { class: 'text' }, node.label),
+		  ]);
+        // return (
+        //       <span class="custom-tree-node">
+        //         {
+        //           data.type === '1' ? <i class="fa fa-sitemap"></i> : <i class="fa fa-users"></i>
+        //         }
+        //         <span class="text">{node.label}</span>
+        //       </span>
+        // )
+      },
+      getTemplateRow (index, row) {                                 // 获取选中数据
+        this.dataListSelections = [row]
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+           // 设置选中的方法
+      setSelectRow () {
+        console.log('设置选中的方法')
+        if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+          this.$refs.userTable.clearSelection()
+          return
+        }
+                // 标识当前行的唯一键的名称
+        let idKey = this.idKey
+        let selectAllIds = []
+        this.dataListAllSelections.forEach(row => {
+          selectAllIds.push(row[idKey])
+        })
+        this.$refs.userTable.clearSelection()
+        for (var i = 0; i < this.dataList.length; i++) {
+          if (selectAllIds.indexOf(this.dataList[i][idKey]) >= 0) {
+                        // 设置选中,记住table组件需要使用ref="table"
+            this.$refs.userTable.toggleRowSelection(this.dataList[i], true)
+          }
+        }
+      },
+            // 记忆选择核心方法
+      changePageCoreRecordData () {
+                // 标识当前行的唯一键的名称
+        let idKey = this.idKey
+        let that = this
+              // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
+        if (this.dataListAllSelections.length <= 0) {
+          this.dataListSelections.forEach(row => {
+            that.dataListAllSelections.push(row)
+          })
+          return
+        }
+                // 总选择里面的key集合
+        let selectAllIds = []
+        this.dataListAllSelections.forEach(row => {
+          selectAllIds.push(row[idKey])
+        })
+        let selectIds = []
+                // 获取当前页选中的id
+        this.dataListSelections.forEach(row => {
+          selectIds.push(row[idKey])
+                  // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
+          if (selectAllIds.indexOf(row[idKey]) < 0) {
+            that.dataListAllSelections.push(row)
+          }
+        })
+        let noSelectIds = []
+              // 得到当前页没有选中的id
+        this.dataList.forEach(row => {
+          if (selectIds.indexOf(row[idKey]) < 0) {
+            noSelectIds.push(row[idKey])
+          }
+        })
+        noSelectIds.forEach(id => {
+          if (selectAllIds.indexOf(id) >= 0) {
+            for (let i = 0; i < that.dataListAllSelections.length; i++) {
+              if (that.dataListAllSelections[i][idKey] === id) {
+                                // 如果总选择中有未被选中的,那么就删除这条
+                that.dataListAllSelections.splice(i, 1)
+                break
+              }
+            }
+          }
+        })
+      },
+     // 得到选中的所有数据
+      getAllSelectionData () {
+         // 再执行一次记忆勾选数据匹配,目的是为了在当前页操作勾选后直接获取选中数据
+        this.changePageCoreRecordData()
+      },
+      filterNode (value, data) {
+        if (!value) return true
+        return data.name.indexOf(value) !== -1
+      },
+      del (tag) {
+        this.dataListAllSelections.splice(this.dataListAllSelections.indexOf(tag), 1)
+        this.$nextTick(() => {
+          this.setSelectRow()
+        })
+      },
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.searchForm.certType = '6'
+        if (this.commonJS.isEmpty(this.searchForm.officeDTO.id) && this.commonJS.isEmpty(this.searchForm.companyDTO.id)) {
+          this.searchForm.selectAll = 'true'
+        }
+        this.$http({
+          url: '/system-server/sys/user/list',
+          method: 'get',
+          params: {
+            'current': this.pageNo,
+            'size': this.pageSize,
+            'orders': this.orders,
+            ...this.searchForm
+          }
+        }).then((data) => {
+          this.dataList = data.records
+          this.total = data.total
+          this.pageNo = data.current
+          this.loading = false
+          this.$nextTick(() => {
+            this.setSelectRow()
+          })
+        })
+      },
+      refreshTree () {
+        this.$http({
+          url: `/system-server/sys/office/treeDataByUser`,
+          method: 'get'
+        }).then((data) => {
+          this.officeTreeData = data
+        })
+      },
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+       // 排序
+      sortChangeHandle (column) {
+        if (column.prop === 'officeDTO.name') {
+          column.prop = 'o.name'
+        }
+        if (column.prop === 'companyDTO.name') {
+          column.prop = 'c.name'
+        }
+        this.orders = []
+        if (column.order != null) {
+          this.orders.push({column: this.$utils.toLine(column.prop), asc: column.order === 'ascending'})
+        }
+        this.refreshList()
+      },
+      handleNodeClick (data) {
+        if (data.type === '1') {
+          this.searchForm.companyDTO.id = data.id
+          this.searchForm.officeDTO.id = ''
+        } else {
+          this.searchForm.companyDTO.id = ''
+          this.searchForm.officeDTO.id = data.id
+        }
+        this.refreshList()
+      },
+      resetSearch () {
+        this.searchForm.companyDTO.id = ''
+        this.searchForm.officeDTO.id = ''
+        this.$refs.officeTree.setCurrentKey(null)
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      },
+      doSubmit () {
+        console.log('doSubmit')
+        if (this.dataListAllSelections.length === 0) {
+          this.$message.error(`请选择用户`)
+          return
+        }
+        if (this.limit < this.dataListAllSelections.length) {
+          this.$message.error(`你最多只能选择${this.limit}个用户`)
+          return
+        }
+        if (this.dataListAllSelections[0].accountantUserCount >= 100 && this.dataListAllSelections[0].accountantUserFlag === 1) {
+          this.$message.error(`请选择被选次数小于100次的签字注师人员`)
+          return
+        }
+        this.visible = false
+        this.$emit('doSubmit', this.dataListAllSelections)
+      }
+    }
+  }
+</script>
+<style lang="scss">
+.org {
+  height: 100%;
+  .el-card__header {
+    padding: 10px;
+  }
+  .el-card__body {
+    padding: 10px;
+    max-height: 520px;
+    overflow: auto;
+  }
+}
+.userDialog{
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination{
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 488 - 0
src/views/jy/drive/clientUserSelect/AccountantUserSelectDialog2.vue

@@ -0,0 +1,488 @@
+<template>
+  <div>
+    <el-dialog
+      title="用户选择"
+      width="1000px"
+      :close-on-click-modal="false"
+      :append-to-body="true"
+	  draggable
+      class="userDialog"
+      v-model="visible">
+      <el-container style="height: 500px">
+        <el-aside width="200px">
+
+          <el-card class="org">
+            <div slot="header" class="clearfix">
+              <el-input
+                placeholder="请输入组织机构过滤"
+                size="small"
+                v-model="filterText">
+              </el-input>
+            </div>
+            <el-tree
+              :data="officeTreeData"
+              :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+              default-expand-all
+              highlight-current
+              node-key="id"
+              :render-content="renderContent"
+              :filter-node-method="filterNode"
+              :expand-on-click-node="false"
+              @node-click="handleNodeClick"
+              ref="officeTree">
+            </el-tree>
+          </el-card>
+        </el-aside>
+
+        <el-container>
+          <el-header style="text-align: left; font-size: 12px;height:30px">
+            <el-form size="small" :inline="true" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+              <el-form-item prop="loginName">
+                <el-input size="small" v-model="searchForm.loginName" placeholder="登录名" clearable></el-input>
+              </el-form-item>
+
+              <el-form-item>
+                <el-button  type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+                <el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+              </el-form-item>
+            </el-form>
+          </el-header>
+
+          <el-main>
+            <el-table
+              :data="dataList"
+              v-loading="loading"
+              size="small"
+              border
+              ref="userTable"
+              @selection-change="selectionChangeHandle"
+              @sort-change="sortChangeHandle"
+              height="calc(100% - 40px)"
+              style="width: 100%;">
+              <el-table-column
+                header-align="center"
+                align="center"
+                v-if="limit <= 1"
+                width="50">
+<!--                <template #default="scope">-->
+<!--                  <el-radio :label="scope.row.id" :value="dataListAllSelections[0]&&dataListAllSelections[0].id" @change.native="getTemplateRow(scope.$index,scope.row)"><span></span></el-radio>-->
+<!--                </template>-->
+				  <template #default="scope">
+					  <el-radio-group v-model="dataListAllSelections[0]" @change.native="getTemplateRow(scope.$index, scope.row)">
+						  <el-radio :label="scope.row">
+							  <template #default="{ label }">
+								  <!-- 将label文本设置为空 -->
+								  <span></span>
+							  </template>
+						  </el-radio>
+					  </el-radio-group>
+				  </template>
+              </el-table-column>
+              <el-table-column
+                type="selection"
+                header-align="center"
+                v-if="limit > 1"
+                align="center"
+                width="50">
+              </el-table-column>
+              <el-table-column
+                prop="photo"
+                header-align="center"
+                align="center"
+                label="头像">
+                <template #default="scope">
+                  <img :src="scope.row.photo === ''?'/static/img/avatar.png':scope.row.photo" style="height:35px"/>
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="loginName"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="90"
+                label="登录名">
+              </el-table-column>
+              <el-table-column
+                prop="name"
+                header-align="center"
+                align="真实姓名"
+                sortable="custom"
+                min-width="90"
+                label="用户名">
+              </el-table-column>
+              <el-table-column
+                prop="accountantUserCount"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="被选次数">
+
+                <!--用插槽的方法来改变颜色!-->
+                <template #default="scope">
+                  <div v-if="scope.row.accountantUserFlag === 0">
+                    {{ scope.row.accountantUserCount }}
+                  </div>
+                  <div v-else :style="{ color: scope.row.accountantUserCount>100 ? 'red' : 'black' }">
+                    {{ scope.row.accountantUserCount }}
+                  </div>
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="companyDTO.name"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="所属机构">
+              </el-table-column>
+              <el-table-column
+                prop="officeDTO.name"
+                header-align="center"
+                align="center"
+                sortable="custom"
+                min-width="110"
+                label="所属部门">
+              </el-table-column>
+              <el-table-column
+                prop="loginFlag"
+                header-align="center"
+                align="center"
+                min-width="100"
+                label="状态">
+                <template #default="scope">
+                  <el-tag v-if="scope.row.loginFlag === '1'" size="small" type="success">正常</el-tag>
+                  <el-tag v-else-if="scope.row.loginFlag === '0'" size="small" type="danger">禁用</el-tag>
+                </template>
+              </el-table-column>
+            </el-table>
+            <el-pagination
+              @size-change="sizeChangeHandle"
+              @current-change="currentChangeHandle"
+              :current-page="pageNo"
+              :page-sizes="[5, 10, 50, 100]"
+              :page-size="pageSize"
+              :total="total"
+              layout="total, sizes, prev, pager, next, jumper">
+            </el-pagination>
+          </el-main>
+        </el-container>
+
+        <el-aside width="200px">
+          <el-tag
+            :key="tag.id"
+            v-for="tag in dataListAllSelections"
+            closable
+            :disable-transitions="false"
+            @close="del(tag)">
+            {{tag.name}}
+          </el-tag>
+        </el-aside>
+      </el-container>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
+			</span>
+		</template>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+export default {
+  data () {
+    return {
+      searchForm: {
+        loginName: '',
+        accountantUserCount: '',
+        accountantUserFlag: '',
+        companyDTO: {
+          id: ''
+        },
+        officeDTO: {
+          id: ''
+        },
+        name: ''
+      },
+      filterText: '',
+      dataListAllSelections: [],   // 所有选中的数据包含跨页数据
+      dataListSelections: [],
+      idKey: 'id', // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+      dataList: [],
+      dynamicTags: [],
+      officeTreeData: [],
+      pageNo: 1,
+      pageSize: 10,
+      total: 0,
+      orders: [],
+      loading: false,
+      visible: false
+    }
+  },
+  props: {
+    selectData: {
+      type: Array,
+      default: () => { return [] }
+    },
+    limit: {
+      type: Number,
+      default: 999999
+    }
+  },
+  watch: {
+    filterText (val) {
+      this.$refs.officeTree.filter(val)
+    }
+  },
+  methods: {
+    init () {
+      this.visible = true
+      this.$nextTick(() => {
+        this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData))
+        this.refreshTree()
+        this.resetSearch()
+      })
+    },
+    renderContent (h, { node, data, store }) {
+		return h('span', { class: 'custom-tree-node' }, [
+			data.type === '1' ? h('i', { class: 'fa fa-sitemap' }) : h('i', { class: 'fa fa-users' }),
+			h('span', { class: 'text' }, node.label),
+		]);
+      // return (
+      //   <span class="custom-tree-node">
+      //           {
+      //             data.type === '1' ? <i class="fa fa-sitemap"></i> : <i class="fa fa-users"></i>
+      //           }
+      //     <span class="text">{node.label}</span>
+      //         </span>
+      // )
+    },
+    getTemplateRow (index, row) {                                 // 获取选中数据
+      this.dataListSelections = [row]
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 设置选中的方法
+    setSelectRow () {
+      console.log('设置选中的方法')
+      if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+        this.$refs.userTable.clearSelection()
+        return
+      }
+      // 标识当前行的唯一键的名称
+      let idKey = this.idKey
+      let selectAllIds = []
+      this.dataListAllSelections.forEach(row => {
+        selectAllIds.push(row[idKey])
+      })
+      this.$refs.userTable.clearSelection()
+      for (var i = 0; i < this.dataList.length; i++) {
+        if (selectAllIds.indexOf(this.dataList[i][idKey]) >= 0) {
+          // 设置选中,记住table组件需要使用ref="table"
+          this.$refs.userTable.toggleRowSelection(this.dataList[i], true)
+        }
+      }
+    },
+    // 记忆选择核心方法
+    changePageCoreRecordData () {
+      // 标识当前行的唯一键的名称
+      let idKey = this.idKey
+      let that = this
+      // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
+      if (this.dataListAllSelections.length <= 0) {
+        this.dataListSelections.forEach(row => {
+          that.dataListAllSelections.push(row)
+        })
+        return
+      }
+      // 总选择里面的key集合
+      let selectAllIds = []
+      this.dataListAllSelections.forEach(row => {
+        selectAllIds.push(row[idKey])
+      })
+      let selectIds = []
+      // 获取当前页选中的id
+      this.dataListSelections.forEach(row => {
+        selectIds.push(row[idKey])
+        // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
+        if (selectAllIds.indexOf(row[idKey]) < 0) {
+          that.dataListAllSelections.push(row)
+        }
+      })
+      let noSelectIds = []
+      // 得到当前页没有选中的id
+      this.dataList.forEach(row => {
+        if (selectIds.indexOf(row[idKey]) < 0) {
+          noSelectIds.push(row[idKey])
+        }
+      })
+      noSelectIds.forEach(id => {
+        if (selectAllIds.indexOf(id) >= 0) {
+          for (let i = 0; i < that.dataListAllSelections.length; i++) {
+            if (that.dataListAllSelections[i][idKey] === id) {
+              // 如果总选择中有未被选中的,那么就删除这条
+              that.dataListAllSelections.splice(i, 1)
+              break
+            }
+          }
+        }
+      })
+    },
+    // 得到选中的所有数据
+    getAllSelectionData () {
+      // 再执行一次记忆勾选数据匹配,目的是为了在当前页操作勾选后直接获取选中数据
+      this.changePageCoreRecordData()
+    },
+    filterNode (value, data) {
+      if (!value) return true
+      return data.name.indexOf(value) !== -1
+    },
+    del (tag) {
+      this.dataListAllSelections.splice(this.dataListAllSelections.indexOf(tag), 1)
+      this.$nextTick(() => {
+        this.setSelectRow()
+      })
+    },
+    // 获取数据列表
+    refreshList () {
+      this.loading = true
+      this.searchForm.certType = '6'
+      if (this.commonJS.isEmpty(this.searchForm.officeDTO.id) && this.commonJS.isEmpty(this.searchForm.companyDTO.id)) {
+        this.searchForm.selectAll = 'true'
+      }
+      this.$http({
+        url: '/system-server/sys/user/list2',
+        method: 'get',
+        params: {
+          'current': this.pageNo,
+          'size': this.pageSize,
+          'orders': this.orders,
+          ...this.searchForm
+        }
+      }).then((data) => {
+        this.dataList = data.records
+        this.total = data.total
+        this.pageNo = data.current
+        this.loading = false
+        this.$nextTick(() => {
+          this.setSelectRow()
+        })
+      })
+    },
+    refreshTree () {
+      this.$http({
+        url: `/system-server/sys/office/accessTreeData`,
+        method: 'get'
+      }).then((data) => {
+        this.officeTreeData = data
+      })
+    },
+    // 每页数
+    sizeChangeHandle (val) {
+      this.pageSize = val
+      this.pageNo = 1
+      this.refreshList()
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 当前页
+    currentChangeHandle (val) {
+      this.pageNo = val
+      this.refreshList()
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 多选
+    selectionChangeHandle (val) {
+      this.dataListSelections = val
+      this.$nextTick(() => {
+        this.changePageCoreRecordData()
+      })
+    },
+    // 排序
+    sortChangeHandle (column) {
+      if (column.prop === 'officeDTO.name') {
+        column.prop = 'o.name'
+      }
+      if (column.prop === 'companyDTO.name') {
+        column.prop = 'c.name'
+      }
+      this.orders = []
+      if (column.order != null) {
+        this.orders.push({column: this.$utils.toLine(column.prop), asc: column.order === 'ascending'})
+      }
+      this.refreshList()
+    },
+    handleNodeClick (data) {
+      if (data.type === '1') {
+        this.searchForm.companyDTO.id = data.id
+        this.searchForm.officeDTO.id = ''
+      } else {
+        this.searchForm.companyDTO.id = ''
+        this.searchForm.officeDTO.id = data.id
+      }
+      this.refreshList()
+    },
+    resetSearch () {
+      this.searchForm.companyDTO.id = ''
+      this.searchForm.officeDTO.id = ''
+      this.$refs.officeTree.setCurrentKey(null)
+      this.$refs.searchForm.resetFields()
+      this.refreshList()
+    },
+    doSubmit () {
+      console.log('doSubmit')
+      if (this.dataListAllSelections.length === 0) {
+        this.$message.error(`请选择用户`)
+        return
+      }
+      if (this.limit < this.dataListAllSelections.length) {
+        this.$message.error(`你最多只能选择${this.limit}个用户`)
+        return
+      }
+      if (this.dataListAllSelections[0].accountantUserCount >= 100 && this.dataListAllSelections[0].accountantUserFlag === 1) {
+        this.$message.error(`请选择被选次数小于100次的签字注师人员`)
+        return
+      }
+      this.visible = false
+      this.$emit('doSubmit', this.dataListAllSelections)
+    }
+  }
+}
+</script>
+<style lang="scss">
+.org {
+  height: 100%;
+  .el-card__header {
+    padding: 10px;
+  }
+  .el-card__body {
+    padding: 10px;
+    max-height: 520px;
+    overflow: auto;
+  }
+}
+.userDialog{
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination{
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 460 - 0
src/views/jy/drive/clientUserSelect/UserSelectDialog.vue

@@ -0,0 +1,460 @@
+<template>
+	<el-dialog
+		title="用户选择"
+		width="1000px"
+		:close-on-click-modal="false"
+		:append-to-body="true"
+		draggable
+		class="userDialog"
+		v-model="visible">
+		<el-container style="height: 500px">
+			<el-aside width="200px">
+
+				<el-card class="org">
+					<div slot="header" class="clearfix">
+						<el-input
+							placeholder="请输入组织机构过滤"
+							size="small"
+							v-model="filterText">
+						</el-input>
+					</div>
+					<el-tree
+						:data="officeTreeData"
+						:props="{
+						  value: 'id',             // ID字段名
+						  label: 'name',         // 显示名称
+						  children: 'children'    // 子级字段名
+                }"
+						default-expand-all
+						highlight-current
+						node-key="id"
+						:render-content="renderContent"
+						:filter-node-method="filterNode"
+						:expand-on-click-node="false"
+						@node-click="handleNodeClick"
+						ref="officeTree">
+					</el-tree>
+				</el-card>
+			</el-aside>
+
+			<el-container>
+				<el-header style="text-align: left; font-size: 12px;height:30px">
+					<el-form size="small" :inline="true" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+						<el-form-item prop="loginName">
+							<el-input size="small" v-model="searchForm.loginName" placeholder="登录名" clearable></el-input>
+						</el-form-item>
+
+						<el-form-item>
+							<el-button  type="primary" @click="refreshList()" size="small" icon="el-icon-search">查询</el-button>
+							<el-button @click="resetSearch()" size="small" icon="el-icon-refresh-right">重置</el-button>
+						</el-form-item>
+					</el-form>
+				</el-header>
+
+				<el-main>
+					<el-table
+						:data="dataList"
+						v-loading="loading"
+						size="small"
+						border
+						ref="userTable"
+						@selection-change="selectionChangeHandle"
+						@sort-change="sortChangeHandle"
+						height="calc(100% - 40px)"
+						style="width: 100%;">
+						<el-table-column
+							header-align="center"
+							align="center"
+							v-if="limit <= 1"
+							width="50">
+							<template #default="scope">
+								<el-radio-group v-model="dataListAllSelections[0]" @change.native="getTemplateRow(scope.$index, scope.row)">
+									<el-radio :label="scope.row">
+										<template #default="{ label }">
+											<!-- 将label文本设置为空 -->
+											<span></span>
+										</template>
+									</el-radio>
+								</el-radio-group>
+<!--								<el-radio-group :value="dataListAllSelections[0]&&dataListAllSelections[0].id"  @change.native="getTemplateRow(scope.$index, scope.row)">-->
+<!--									<el-radio-->
+<!--										:label="scope.row.id"-->
+<!--										:value="dataListAllSelections[0]&&dataListAllSelections[0].id"-->
+<!--										@change.native="getTemplateRow(scope.$index,scope.row)">-->
+<!--										<span></span>-->
+<!--									</el-radio>-->
+<!--								</el-radio-group>-->
+							</template>
+						</el-table-column>
+						<el-table-column
+							type="selection"
+							header-align="center"
+							v-if="limit > 1"
+							align="center"
+							width="50">
+						</el-table-column>
+						<el-table-column
+							prop="photo"
+							header-align="center"
+							align="center"
+							label="头像">
+							<template #default="scope">
+								<img :src="scope.row.photo === ''?'/static/img/avatar.png':scope.row.photo" style="height:35px"/>
+							</template>
+						</el-table-column>
+						<el-table-column
+							prop="loginName"
+							header-align="center"
+							align="center"
+							sortable="custom"
+							min-width="90"
+							label="登录名">
+						</el-table-column>
+						<el-table-column
+							prop="name"
+							header-align="center"
+							align="真实姓名"
+							sortable="custom"
+							min-width="90"
+							label="用户名">
+						</el-table-column>
+						<el-table-column
+							prop="companyDTO.name"
+							header-align="center"
+							align="center"
+							sortable="custom"
+							min-width="110"
+							label="所属机构">
+						</el-table-column>
+						<el-table-column
+							prop="officeDTO.name"
+							header-align="center"
+							align="center"
+							sortable="custom"
+							min-width="110"
+							label="所属部门">
+						</el-table-column>
+						<el-table-column
+							prop="loginFlag"
+							header-align="center"
+							align="center"
+							min-width="100"
+							label="状态">
+							<template #default="scope">
+								<el-tag v-if="scope.row.loginFlag === '1'" size="small" type="success">正常</el-tag>
+								<el-tag v-else-if="scope.row.loginFlag === '0'" size="small" type="danger">禁用</el-tag>
+							</template>
+						</el-table-column>
+					</el-table>
+					<el-pagination
+						@size-change="sizeChangeHandle"
+						@current-change="currentChangeHandle"
+						:current-page="pageNo"
+						:page-sizes="[5, 10, 50, 100]"
+						:page-size="pageSize"
+						:total="total"
+						layout="total, sizes, prev, pager, next, jumper">
+					</el-pagination>
+				</el-main>
+			</el-container>
+
+			<el-aside width="200px">
+				<el-tag
+					:key="tag.id"
+					v-for="tag in dataListAllSelections"
+					closable
+					:disable-transitions="false"
+					@close="del(tag)">
+					{{tag.name}}
+				</el-tag>
+			</el-aside>
+		</el-container>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
+			</span>
+		</template>
+	</el-dialog>
+</template>
+
+<script>
+  export default {
+    data () {
+      return {
+        searchForm: {
+          loginName: '',
+          companyDTO: {
+            id: ''
+          },
+          officeDTO: {
+            id: ''
+          },
+          name: ''
+        },
+        filterText: '',
+        dataListAllSelections: [],   // 所有选中的数据包含跨页数据
+        dataListSelections: [],
+        idKey: 'id', // 标识列表数据中每一行的唯一键的名称(需要按自己的数据改一下)
+        dataList: [],
+        dynamicTags: [],
+        officeTreeData: [],
+        pageNo: 1,
+        pageSize: 10,
+        total: 0,
+        orders: [],
+        loading: false,
+        visible: false
+      }
+    },
+    props: {
+      selectData: {
+        type: Array,
+        default: () => { return [] }
+      },
+      limit: {
+        type: Number,
+        default: 999999
+      }
+    },
+    watch: {
+      filterText (val) {
+        this.$refs.officeTree.filter(val)
+      }
+    },
+    methods: {
+      init () {
+        this.visible = true
+        this.$nextTick(() => {
+          this.dataListAllSelections = JSON.parse(JSON.stringify(this.selectData))
+          this.refreshTree()
+          this.resetSearch()
+        })
+      },
+      renderContent (h, { node, data, store }) {
+		  return h('span', { class: 'custom-tree-node' }, [
+			  data.type === '1' ? h('i', { class: 'fa fa-sitemap' }) : h('i', { class: 'fa fa-users' }),
+			  h('span', { class: 'text' }, node.label),
+		  ]);
+		  // return (
+        //       <span class="custom-tree-node">
+        //         {
+        //           data.type === '1' ? <i class="fa fa-sitemap"></i> : <i class="fa fa-users"></i>
+        //         }
+        //         <span class="text">{node.label}</span>
+        //       </span>
+        // )
+      },
+      getTemplateRow (index, row) {                                 // 获取选中数据
+        this.dataListSelections = [row]
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+           // 设置选中的方法
+      setSelectRow () {
+        if (!this.dataListAllSelections || this.dataListAllSelections.length <= 0) {
+          this.$refs.userTable.clearSelection()
+          return
+        }
+                // 标识当前行的唯一键的名称
+        let idKey = this.idKey
+        let selectAllIds = []
+        this.dataListAllSelections.forEach(row => {
+          selectAllIds.push(row[idKey])
+        })
+        this.$refs.userTable.clearSelection()
+        for (var i = 0; i < this.dataList.length; i++) {
+          if (selectAllIds.indexOf(this.dataList[i][idKey]) >= 0) {
+                        // 设置选中,记住table组件需要使用ref="table"
+            this.$refs.userTable.toggleRowSelection(this.dataList[i], true)
+          }
+        }
+      },
+            // 记忆选择核心方法
+      changePageCoreRecordData () {
+                // 标识当前行的唯一键的名称
+        let idKey = this.idKey
+        let that = this
+              // 如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
+        if (this.dataListAllSelections.length <= 0) {
+          this.dataListSelections.forEach(row => {
+            that.dataListAllSelections.push(row)
+          })
+          return
+        }
+                // 总选择里面的key集合
+        let selectAllIds = []
+        this.dataListAllSelections.forEach(row => {
+          selectAllIds.push(row[idKey])
+        })
+        let selectIds = []
+                // 获取当前页选中的id
+        this.dataListSelections.forEach(row => {
+          selectIds.push(row[idKey])
+                  // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
+          if (selectAllIds.indexOf(row[idKey]) < 0) {
+            that.dataListAllSelections.push(row)
+          }
+        })
+        let noSelectIds = []
+              // 得到当前页没有选中的id
+        this.dataList.forEach(row => {
+          if (selectIds.indexOf(row[idKey]) < 0) {
+            noSelectIds.push(row[idKey])
+          }
+        })
+        noSelectIds.forEach(id => {
+          if (selectAllIds.indexOf(id) >= 0) {
+            for (let i = 0; i < that.dataListAllSelections.length; i++) {
+              if (that.dataListAllSelections[i][idKey] === id) {
+                                // 如果总选择中有未被选中的,那么就删除这条
+                that.dataListAllSelections.splice(i, 1)
+                break
+              }
+            }
+          }
+        })
+      },
+     // 得到选中的所有数据
+      getAllSelectionData () {
+         // 再执行一次记忆勾选数据匹配,目的是为了在当前页操作勾选后直接获取选中数据
+        this.changePageCoreRecordData()
+      },
+      filterNode (value, data) {
+        if (!value) return true
+        return data.name.indexOf(value) !== -1
+      },
+      del (tag) {
+        this.dataListAllSelections.splice(this.dataListAllSelections.indexOf(tag), 1)
+        this.$nextTick(() => {
+          this.setSelectRow()
+        })
+      },
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        this.searchForm.certType = '6'
+        if (this.commonJS.isEmpty(this.searchForm.officeDTO.id) && this.commonJS.isEmpty(this.searchForm.companyDTO.id)) {
+          this.searchForm.selectAll = 'true'
+        }
+        this.$http({
+          url: '/system-server/sys/user/list4',
+          method: 'get',
+          params: {
+            'current': this.pageNo,
+            'size': this.pageSize,
+            'orders': this.orders,
+            ...this.searchForm,
+          }
+        }).then((data) => {
+          this.dataList = data.records
+          this.total = data.total
+          this.pageNo = data.current
+          this.loading = false
+          this.$nextTick(() => {
+            this.setSelectRow()
+          })
+        })
+      },
+      refreshTree () {
+        this.$http({
+          url: `/system-server/sys/office/treeData`,
+          method: 'get',
+        }).then((data) => {
+          this.officeTreeData = data
+        })
+      },
+      // 每页数
+      sizeChangeHandle (val) {
+        this.pageSize = val
+        this.pageNo = 1
+        this.refreshList()
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+      // 当前页
+      currentChangeHandle (val) {
+        this.pageNo = val
+        this.refreshList()
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+      // 多选
+      selectionChangeHandle (val) {
+        this.dataListSelections = val
+        this.$nextTick(() => {
+          this.changePageCoreRecordData()
+        })
+      },
+       // 排序
+      sortChangeHandle (column) {
+        if (column.prop === 'officeDTO.name') {
+          column.prop = 'o.name'
+        }
+        if (column.prop === 'companyDTO.name') {
+          column.prop = 'c.name'
+        }
+        this.orders = []
+        if (column.order != null) {
+          this.orders.push({column: this.$utils.toLine(column.prop), asc: column.order === 'ascending'})
+        }
+        this.refreshList()
+      },
+      handleNodeClick (data) {
+        if (data.type === '1') {
+          this.searchForm.companyDTO.id = data.id
+          this.searchForm.officeDTO.id = ''
+        } else {
+          this.searchForm.companyDTO.id = ''
+          this.searchForm.officeDTO.id = data.id
+        }
+        this.refreshList()
+      },
+      resetSearch () {
+        this.searchForm.companyDTO.id = ''
+        this.searchForm.officeDTO.id = ''
+        this.$refs.officeTree.setCurrentKey(null)
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      },
+      doSubmit () {
+        if (this.limit < this.dataListAllSelections.length) {
+          this.$message.error(`你最多只能选择${this.limit}个用户`)
+          return
+        }
+        this.visible = false
+        this.$emit('doSubmit', this.dataListAllSelections)
+      }
+    }
+  }
+</script>
+<style lang="scss">
+.org {
+  height: 100%;
+  .el-card__header {
+    padding: 10px;
+  }
+  .el-card__body {
+    padding: 10px;
+    max-height: 520px;
+    overflow: auto;
+  }
+}
+.userDialog{
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+  .el-main {
+    padding: 20px 20px 5px 20px;
+    .el-pagination{
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 123 - 0
src/views/jy/drive/clientUserSelect/index.vue

@@ -0,0 +1,123 @@
+<template>
+	<template v-if="printRead">
+		<label>{{ name }}</label>
+	</template>
+	<template v-else>
+		<el-input
+			placeholder="请选择"
+			readonly
+			:clearable="clearable"
+			:disabled="disabled"
+			style="line-hight: 40px"
+			v-model="name"
+		>
+			<template #append>
+				<el-button
+					:disabled="disabled"
+					:readonly="readonly"
+					@click="showUserSelect"
+					icon="search"
+				></el-button>
+			</template>
+		</el-input>
+		<user-select
+			ref="userSelect"
+			@doSubmit="selectUsersToInput"
+			:tenantId="tenantId"
+			:limit="limit"
+		></user-select>
+	</template>
+</template>
+<script>
+	import userSelect from "./UserSelectDialog";
+	import userService from "@/api/sys/userService";
+	export default {
+		data() {
+			return {
+				name: "",
+				selectData: [],
+			};
+		},
+		props: {
+			limit: Number,
+			modelValue: { type: String, default: "" },
+			tenantId: { type: String, default: null },
+			printRead: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			clearable: {
+				type: Boolean,
+				default: () => {
+					return true;
+				},
+			},
+			readonly: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+			disabled: {
+				type: Boolean,
+				default: () => {
+					return false;
+				},
+			},
+		},
+		components: {
+			userSelect,
+		},
+		watch: {
+			modelValue: {
+				handler(newVal) {
+					this.selectData = [];
+					if (newVal && newVal !== true) {
+						console.log('newVAal', newVal)
+						console.log('进来了')
+						newVal.split(",").forEach((id) => {
+							userService.queryById(id).then((data) => {
+								if (data && data.id !== "") {
+									this.selectData.push(data);
+									this.name = this.selectData
+										.map((user) => {
+											return user.name;
+										})
+										.join(",");
+								}
+							});
+						});
+					} else {
+						this.name = "";
+					}
+				},
+				immediate: true,
+				deep: false,
+			},
+		},
+		methods: {
+			selectUsersToInput(users) {
+				let selectIds = users
+					.map((user) => {
+						return user.id;
+					})
+					.join(",");
+				this.$emit("update:modelValue", selectIds);
+			},
+			showUserSelect() {
+				this.$refs.userSelect.init()
+			},
+		},
+	};
+</script>
+<style>
+	.el-form-item__content .el-input-group {
+		vertical-align: middle;
+	}
+	.el-tag + .el-tag {
+		margin-left: 5px;
+		margin-bottom: 5px;
+	}
+</style>

+ 42 - 3
src/views/jy/driveInfo/DriveInfoList.vue

@@ -14,7 +14,7 @@
 			</el-form-item>
 		</el-form>
 		<div class="jp-table" style="">
-			<vxe-toolbar :refresh="{query: refreshList}" custom>
+			<vxe-toolbar ref="toolbarRef"  :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button  type="primary"  icon="el-icon-plus" @click="add()">新建</el-button>
 <!--					<el-button  type="danger"   icon="el-icon-delete" @click="del()" :disabled="$refs.typeDictTable && $refs.typeDictTable.getCheckboxRecords().length === 0" plain>删除</el-button>-->
@@ -28,11 +28,19 @@
 					height="auto"
 					:loading="loading"
 					size="small"
-					ref="typeDictTable"
+					ref="driveInfoTable"
 					show-header-overflow
 					show-overflow
 					highlight-hover-row
 					:menu-config="{}"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢车辆信息数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢车辆信息数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					@sort-change="sortChangeHandle"
 					:sort-config="{remote:true}"
 					:data="dataList"
@@ -92,6 +100,12 @@
 			DriveInfoAddForm
 		},
 		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.driveInfoTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
 			this.refreshList()
 		},
 		methods: {
@@ -162,7 +176,32 @@
 			resetSearch () {
 				this.$refs.searchForm.resetFields()
 				this.refreshList()
-			}
+			},
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.driveInfoService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
 		}
 	}
 </script>

+ 42 - 2
src/views/jy/driveMaintain/DriveMaintain.vue

@@ -31,7 +31,7 @@
 			</el-form-item>
 		</el-form>
 		<div class="jp-table top" style="">
-			<vxe-toolbar :refresh="{query: refreshList}" custom>
+			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button v-if="hasPermission('drive:info:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
 				</template>
@@ -53,11 +53,19 @@
 					resizable
 					height="auto"
 					:loading="loading"
-					ref="clientTable"
+					ref="driveMaintainTable"
 					show-header-overflow
 					show-overflow
 					highlight-hover-row
 					:menu-config="{}"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢车辆维护数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢车辆维护数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					@sort-change="sortChangeHandle"
 					:sort-config="{remote:true}"
 					:data="dataList"
@@ -175,6 +183,12 @@
 			}
 		},
 		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.driveMaintainTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
 			this.refreshList()
 		},
 		activated () {
@@ -422,6 +436,32 @@
 				this.$refs.driveMaintainDia.init('edit',row.id);
 			},
 
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.driveMaintainService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+
 
 
 

+ 5 - 5
src/views/jy/evection/EvectionEditForm.vue

@@ -47,9 +47,9 @@
 								<el-input  :readonly="true" placeholder="请填写项目编号" v-model="scope.row.no"/>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column  field="projectLeader" align="center" title="项目负责人" :edit-render="{}">
+						<vxe-table-column  field="leader" align="center" title="项目负责人" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input  placeholder="请填写项目负责人" v-model="scope.row.projectLeader"/>
+								<el-input  placeholder="请填写项目负责人" v-model="scope.row.leader"/>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column field="createTime" align="center" title="创建时间" :edit-render="{}">
@@ -504,7 +504,7 @@
 				}
 			},
 			openProgramPageForm(rowIndex) {
-				this.$refs.projectForm.init()
+				this.$refs.projectForm.init('2',true)
 				this.programRow = rowIndex
 				console.log('11',this.programRow)
 			},
@@ -517,7 +517,7 @@
 						r.projectId=item.id
 						r.name = item.name
 						r.no = item.no
-						r.projectLeader = item.projectLeader
+						r.leader = item.projectLeader
 						r.createTime = item.createTime
 						console.log('2',this.inputForm.projectList[this.programRow])
 					} else {
@@ -525,7 +525,7 @@
 							projectId: item.id,
 							name: item.name,
 							no: item.no,
-							projectLeader: item.projectLeader,
+							leader: item.projectLeader,
 							createTime: item.createTime,
 						}
 						this.$refs.baseTable.insertAt(r)

+ 11 - 8
src/views/jy/evection/EvectionForm.vue

@@ -38,9 +38,9 @@
 								<el-input :disabled="true" :readonly="true" placeholder="请填写项目编号" v-model="scope.row.no"/>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column  field="projectLeader" align="center" title="项目负责人" :edit-render="{}">
+						<vxe-table-column  field="leader" align="center" title="项目负责人" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.projectLeader"/>
+								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.leader"/>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column field="createTime" align="center" title="创建时间" :edit-render="{}">
@@ -63,7 +63,7 @@
 			<el-row  :gutter="15">
 				<el-col :span="12">
 					<el-form-item label="出差人员" prop="evectionMen"
-								  :rules="[ {required: true, message:'用车人员不能为空', trigger:'blur'}]">
+								  :rules="[ {required: true, message:'出差人员不能为空', trigger:'change'}]">
 						<UserSelectSignatory style="width: 100%" ref="userSelect2"
 											 :readonly="true" :modelValue="inputForm.evectionMen"
 											 @update:modelValue='(value) => {inputForm.evectionMen = value}'></UserSelectSignatory>					</el-form-item>
@@ -125,7 +125,7 @@
 	import EvectionService from '@/api/jy/EvectionService'
 	import { ElDatePicker } from 'element-plus';
 	import ProjectForm from '../drive/ProjectForm'
-	import UserSelectSignatory from '../workClientInfo/clientUserSelect'
+	import UserSelectSignatory from '../drive/clientUserSelect'
 	import UpLoadComponent from '@/views/common/UpLoadComponent'
 	import CommonApi from '@/api/cw/common/CommonApi'
 	import SelectTree from '@/components/treeSelect/treeSelect.vue'
@@ -297,8 +297,8 @@
 							let param = {status: this.inputForm.status, id: this.inputForm.id}
 							this.inputForm=JSON.stringify(this.inputForm)
 							this.evectionService.updateStatusById(param).then(() => {
-								callback(data.businessTable, data.businessId, this.inputForm)
 								this.loading = false
+								callback(data.businessTable, data.businessId, this.inputForm)
 							}).catch(() => {
 								this.loading = false
 							})
@@ -381,6 +381,9 @@
 					if (valid) {
 						this.loading = true
 						console.log('form',this.inputForm)
+						if (status === 'reapply'){
+							this.inputForm.useDate=[]
+						}
 						this.evectionService.saveForm(this.inputForm).then((data) => {
 							callback(data.businessTable, data.businessId, this.inputForm)
 							this.$refs.inputForm.resetFields()
@@ -478,7 +481,7 @@
 				}
 			},
 			openProgramPageForm(rowIndex) {
-				this.$refs.projectForm.init()
+				this.$refs.projectForm.init('2',true)
 				this.programRow = rowIndex
 				console.log('11',this.programRow)
 			},
@@ -491,7 +494,7 @@
 						r.projectId=item.id
 						r.name = item.name
 						r.no = item.no
-						r.projectLeader = item.projectLeader
+						r.leader = item.projectLeader
 						r.createTime = item.createTime
 						console.log('2',this.inputForm.projectList[this.programRow])
 					} else {
@@ -499,7 +502,7 @@
 							projectId: item.id,
 							name: item.name,
 							no: item.no,
-							projectLeader: item.projectLeader,
+							leader: item.projectLeader,
 							createTime: item.createTime,
 						}
 						this.$refs.baseTable.insertAt(r)

+ 48 - 11
src/views/jy/evection/EvectionList.vue

@@ -3,7 +3,7 @@
 		<el-form :inline="true"  v-if="searchVisible" class="query-form m-b-10" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
 			<!-- 搜索框-->
 			<el-form-item label="关联项目" prop="projectName">
-				<el-input :limit="1" @focus="openProgramPageForm" placeholder="请填写项目名称" :readonly="true" :modelValue="searchForm.projectName"/>
+				<el-input clearable :limit="1" @focus="openProgramPageForm" placeholder="请填写项目名称" :readonly="true" :modelValue="searchForm.projectName"/>
 			</el-form-item>
 			<el-form-item  label="出差人员" prop="evectionMen">
 				<UserSelectSignatory style="width: 100%" ref="userSelect2" :limit="1"
@@ -64,8 +64,8 @@
 				<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
 			</el-form-item>
 		</el-form>
-		<div class="jp-table top" style="">
-			<vxe-toolbar :refresh="{query: refreshList}" custom>
+		<div  class="jp-table top" style="">
+			<vxe-toolbar ref="toolbarRef"  :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button v-if="hasPermission('evection:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
 				</template>
@@ -87,11 +87,19 @@
 					resizable
 					height="auto"
 					:loading="loading"
-					ref="clientTable"
+					ref="evectionTable"
 					show-header-overflow
 					show-overflow
 					highlight-hover-row
 					:menu-config="{}"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢出差申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢出差申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					@sort-change="sortChangeHandle"
 					:sort-config="{remote:true}"
 					:data="dataList"
@@ -117,12 +125,12 @@
 					<vxe-column title="操作" width="150px" fixed="right" align="center">
 						<template  #default="scope">
 							<div v-if="isAdmin">
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 								<el-button  size="small" text type="primary"  @click="adminEdit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 							</div>
 							<div v-else>
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<el-button v-if="(scope.row.status === '0'||scope.row.status === '1'|| scope.row.status === '3')" size="small" text type="primary"  @click="edit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<!--              当前申请人撤回-->
 								<el-button v-if="scope.row.createById === $store.state.user.id && scope.row.status==='2'" text type="primary" size="small" @click="reback(scope.row)">撤回</el-button>
 
@@ -219,6 +227,12 @@
 			}
 		},
 		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.evectionTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
 			this.refreshList()
 		},
 		activated () {
@@ -471,12 +485,35 @@
 			},
 			getProgram(row){
 				console.log('row',row)
-				row.forEach(item=>{
-					this.searchForm.projectId = item.id
-					this.searchForm.projectName=item.name
-				})
+				this.searchForm.projectId = row.id
+				this.searchForm.projectName=row.name
+			},
 
-			}
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.evectionService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
 
 
 

+ 29 - 27
src/views/jy/finance/InvoiceList.vue

@@ -15,6 +15,28 @@
         <el-form-item prop="number" label="发票号">
           <el-input v-model="searchForm.number" placeholder="请输入发票号" clearable></el-input>
         </el-form-item>
+		  <el-form-item prop="reconciliationPeopleName" label="对账人">
+			  <UserSelect :limit='1' :modelValue="searchForm.reconciliationPeopleName" @update:modelValue='(value, label) => {searchForm.reconciliationPeopleName = label}'></UserSelect>
+		  </el-form-item>
+		  <el-form-item v-if="showHideItem" label="经办人" prop="operator">
+			  <UserSelect :limit='1' :modelValue="searchForm.operator" @update:modelValue='(value, label) => {searchForm.operator = label}'></UserSelect>
+		  </el-form-item>
+		  <el-form-item v-if="showHideItem" prop="operatorOffice" label="经办人部门">
+			  <SelectTree
+				  ref="officeTree"
+				  :props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+
+				  :url="`/system-server/sys/office/treeData?type=2`"
+				  :value="searchForm.operatorOffice"
+				  :clearable="true"
+				  :accordion="true"
+				  size="default"
+				  @getValue="(value) => {searchForm.operatorOffice=value}"/>
+		  </el-form-item>
 <!--        <el-form-item prop="programName" label="项目名称">-->
 <!--          <el-input  v-model="searchForm.programName" placeholder="请输入项目名称" clearable @clear="clearProgram">-->
 <!--            <el-button slot="append" @click="openProgramPageForm()" icon="el-icon-search"></el-button>-->
@@ -46,28 +68,7 @@
             clearable>
           </el-input-number>
         </el-form-item>
-        <el-form-item v-if="showHideItem" prop="reconciliationPeopleName" label="对账人">
-          <UserSelect :limit='1' :modelValue="searchForm.reconciliationPeopleName" @update:modelValue='(value, label) => {searchForm.reconciliationPeopleName = label}'></UserSelect>
-        </el-form-item>
-        <el-form-item v-if="showHideItem" label="经办人" prop="operator">
-          <UserSelect :limit='1' :modelValue="searchForm.operator" @update:modelValue='(value, label) => {searchForm.operator = label}'></UserSelect>
-        </el-form-item>
-        <el-form-item v-if="showHideItem" prop="operatorOffice" label="经办人部门">
-          <SelectTree
-            ref="officeTree"
-            :props="{
-                  value: 'id',             // ID字段名
-                  label: 'name',         // 显示名称
-                  children: 'children'    // 子级字段名
-                }"
 
-            :url="`/system-server/sys/office/treeData?type=2`"
-            :value="searchForm.operatorOffice"
-            :clearable="true"
-            :accordion="true"
-			size="default"
-            @getValue="(value) => {searchForm.operatorOffice=value}"/>
-        </el-form-item>
         <el-form-item v-if="showHideItem" prop="billingWorkplaceReal" label="开票单位">
           <el-input v-model="searchForm.billingWorkplaceReal" placeholder="请输入开票单位" clearable></el-input>
         </el-form-item>
@@ -194,8 +195,8 @@
           @sort-change="sortChangeHandle"
           :export-config="{
                     remote: true,
-                    filename: `兴光会计发票数据${moment(new Date()).format('YYYY-MM-DD')}`,
-                    sheetName: `兴光会计发票数据${moment(new Date()).format('YYYY-MM-DD')}`,
+                    filename: `嘉溢会计发票数据${moment(new Date()).format('YYYY-MM-DD')}`,
+                    sheetName: `嘉溢会计发票数据${moment(new Date()).format('YYYY-MM-DD')}`,
                     exportMethod: exportMethod,
                     types: ['xls'],
                     modes: ['current', 'selected', 'all']
@@ -249,12 +250,12 @@
             </template>
 
           </vxe-column>
-          <vxe-column  min-width="110"  align="center" title="状态" field="status" >
+          <vxe-column  min-width="115"  align="center" title="状态" field="status" >
             <template #default="scope">
               <el-button @click="invoiceDetail(scope.row)" :type="$dictUtils.getDictLabel('invoice_status_info', scope.row.status, '')" effect="dark" >{{$dictUtils.getDictLabel("invoice_status", scope.row.status, '')}} </el-button>
             </template>
           </vxe-column>
-          <vxe-column min-width="110" title="操作"  fixed="right" align="center">
+          <vxe-column min-width="215" title="操作"  fixed="right" align="center">
             <template  #default="scope">
               <div v-if="isAdmin">
                 <el-button v-if="(scope.row.status === '5')" text type="primary"  @click="editForm(scope.row.id)">修改</el-button>
@@ -264,7 +265,7 @@
               <el-button v-if="hasPermission('cw_finance:invoice:edit')&&scope.row.createBy.id === $store.state.user.id&&(scope.row.status === '1'||scope.row.status === '3')" text type="primary" @click="invoicePush(scope.row)">修改</el-button>
               <el-button v-if="hasPermission('cw_finance:invoice:edit')&&scope.row.createBy.id === $store.state.user.id&&scope.row.status === '2'" text type="primary"  @click="invoiceReback(scope.row)">撤回</el-button>
               <el-button v-if="hasPermission('cw_finance:invoice:edit:detail')&&scope.row.status === '5'&&scope.row.receivablesStatus !== '1'" text type="primary"  @click="editDetail(scope.row.id)">修改发票明细</el-button>
-              <el-button v-if="hasPermission('cw_finance:invoice:edit:receivables')&&scope.row.status === '5'&&scope.row.receivablesStatus !== '1'" text type="primary"  @click="view(true, scope.row.id)">收款</el-button>
+              <el-button v-if="hasPermission('cw_finance:invoice:edit:receivables')&&scope.row.status === '5'&&scope.row.receivablesStatus !== '1'" text type="primary"  @click="view(true, scope.row)">收款</el-button>
               <el-button v-if="hasPermission('cw_finance:invoice:edit:is_receivables')&&scope.row.status === '5'&&scope.row.receivablesStatus !== '1'" text type="primary"  @click="isReceivables(scope.row)">确认收款</el-button>
               <el-button v-if="hasPermission('cw_finance:invoice:edit:is_receivables')&&scope.row.status === '5'&&scope.row.receivablesStatus === '1'" text type="primary" @click="recallReceivables(scope.row)">撤回收款</el-button>
               <el-button v-if="hasPermission('cw_finance:invoice:edit')&&scope.row.createBy.id === $store.state.user.id&&(scope.row.status === '5'||scope.row.status === '7')" text type="primary"  @click="invoiceInvalidPush(scope.row)">作废</el-button>
@@ -444,14 +445,15 @@
       },
       // 查看 flag为true时,弹窗为收款,其他值为查看发票详情
       view (flag, row) {
+      	console.log('data',row.id)
         this.$refs.invoiceForm.init(flag, row.id)
       },
       // 查看项目数据
       viewProject (row) {
-		console.log(row)
 
       	if (row.recordType=='1'){
 			this.projectInfoService.findById(row.programId).then((data)=>{
+				console.log('data',data)
 				this.$refs.projectForm.init('view', data.id,data.auditId1, data.auditId2, data.auditId3,data.sealId,data.outInstanceId,data.reportsSubmitId,data.archiveId,data.eiaId)
 			})
 		}else if (row.recordType=='2'){

+ 5 - 5
src/views/jy/goOut/GoOutEditForm.vue

@@ -47,9 +47,9 @@
 								<el-input  :readonly="true" placeholder="请填写项目编号" v-model="scope.row.no"/>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column  field="projectLeader" align="center" title="项目负责人" :edit-render="{}">
+						<vxe-table-column  field="leader" align="center" title="项目负责人" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input  placeholder="请填写项目负责人" v-model="scope.row.projectLeader"/>
+								<el-input  placeholder="请填写项目负责人" v-model="scope.row.leader"/>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column field="createTime" align="center" title="创建时间" :edit-render="{}">
@@ -504,7 +504,7 @@
 				}
 			},
 			openProgramPageForm(rowIndex) {
-				this.$refs.projectForm.init()
+				this.$refs.projectForm.init('2',true)
 				this.programRow = rowIndex
 				console.log('11',this.programRow)
 			},
@@ -517,7 +517,7 @@
 						r.projectId=item.id
 						r.name = item.name
 						r.no = item.no
-						r.projectLeader = item.projectLeader
+						r.leader = item.projectLeader
 						r.createTime = item.createTime
 						console.log('2',this.inputForm.projectList[this.programRow])
 					} else {
@@ -525,7 +525,7 @@
 							projectId: item.id,
 							name: item.name,
 							no: item.no,
-							projectLeader: item.projectLeader,
+							leader: item.projectLeader,
 							createTime: item.createTime,
 						}
 						this.$refs.baseTable.insertAt(r)

+ 7 - 6
src/views/jy/goOut/GoOutForm.vue

@@ -38,9 +38,9 @@
 								<el-input :disabled="true" :readonly="true" placeholder="请填写项目编号" v-model="scope.row.no"/>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column  field="projectLeader" align="center" title="项目负责人" :edit-render="{}">
+						<vxe-table-column  field="leader" align="center" title="项目负责人" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.projectLeader"/>
+								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.leader"/>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column field="createTime" align="center" title="创建时间" :edit-render="{}">
@@ -125,7 +125,7 @@
 	import GoOutService from '@/api/jy/GoOutService'
 	import { ElDatePicker } from 'element-plus';
 	import ProjectForm from '../drive/ProjectForm'
-	import UserSelectSignatory from '../workClientInfo/clientUserSelect'
+	import UserSelectSignatory from '../drive/clientUserSelect'
 	import UpLoadComponent from '@/views/common/UpLoadComponent'
 	import CommonApi from '@/api/cw/common/CommonApi'
 	import SelectTree from '@/components/treeSelect/treeSelect.vue'
@@ -383,6 +383,7 @@
 						console.log('form',this.inputForm)
 						this.goOutService.saveForm(this.inputForm).then((data) => {
 							callback(data.businessTable, data.businessId, this.inputForm)
+
 							this.$refs.inputForm.resetFields()
 							this.loading = false
 						}).catch(() => {
@@ -483,7 +484,7 @@
 				}
 			},
 			openProgramPageForm(rowIndex) {
-				this.$refs.projectForm.init()
+				this.$refs.projectForm.init('2',true)
 				this.programRow = rowIndex
 				console.log('11',this.programRow)
 			},
@@ -496,7 +497,7 @@
 						r.projectId=item.id
 						r.name = item.name
 						r.no = item.no
-						r.projectLeader = item.projectLeader
+						r.leader = item.projectLeader
 						r.createTime = item.createTime
 						console.log('2',this.inputForm.projectList[this.programRow])
 					} else {
@@ -504,7 +505,7 @@
 							projectId: item.id,
 							name: item.name,
 							no: item.no,
-							projectLeader: item.projectLeader,
+							leader: item.projectLeader,
 							createTime: item.createTime,
 						}
 						this.$refs.baseTable.insertAt(r)

+ 46 - 9
src/views/jy/goOut/GoOutList.vue

@@ -65,7 +65,7 @@
 			</el-form-item>
 		</el-form>
 		<div class="jp-table top" style="">
-			<vxe-toolbar :refresh="{query: refreshList}" custom>
+			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button v-if="hasPermission('evection:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
 				</template>
@@ -87,11 +87,19 @@
 					resizable
 					height="auto"
 					:loading="loading"
-					ref="clientTable"
+					ref="goOutTable"
 					show-header-overflow
 					show-overflow
 					highlight-hover-row
 					:menu-config="{}"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢出差申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢出差申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					@sort-change="sortChangeHandle"
 					:sort-config="{remote:true}"
 					:data="dataList"
@@ -117,12 +125,12 @@
 					<vxe-column title="操作" width="150px" fixed="right" align="center">
 						<template  #default="scope">
 							<div v-if="isAdmin">
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 								<el-button  size="small" text type="primary"  @click="adminEdit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 							</div>
 							<div v-else>
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<el-button v-if="(scope.row.status === '0'||scope.row.status === '1'|| scope.row.status === '3')" size="small" text type="primary"  @click="edit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<!--              当前申请人撤回-->
 								<el-button v-if="scope.row.createById === $store.state.user.id && scope.row.status==='2'" text type="primary" size="small" @click="reback(scope.row)">撤回</el-button>
 
@@ -219,6 +227,12 @@
 			}
 		},
 		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.goOutTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
 			this.refreshList()
 		},
 		activated () {
@@ -471,12 +485,35 @@
 			},
 			getProgram(row){
 				console.log('row',row)
-				row.forEach(item=>{
-					this.searchForm.projectId = item.id
-					this.searchForm.projectName=item.name
-				})
+				this.searchForm.projectId = row.id
+				this.searchForm.projectName=row.name
+			},
 
-			}
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.goOutService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
 
 
 

+ 46 - 13
src/views/jy/holiday/HolidayDia.vue

@@ -8,13 +8,40 @@
 			@close="close"
 			@keyup.enter.native=""
 			v-model="visible">
-		<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail'"
+		<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'"
 				 label-width="160px" @submit.native.prevent>
 			<el-divider content-position="left"><i class="el-icon-document"></i>
 				基本信息
 			</el-divider>
 			<el-row  :gutter="15">
 				<el-col :span="12">
+					<el-form-item label="请假人" prop="createName"
+								  :rules="[
+								]">
+						<el-input v-model="inputForm.createName" placeholder="请填写请假人" readonly="true" disabled="true"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="请假部门" prop="officeName"
+								  :rules="[
+								  ]">
+						<el-input v-model="inputForm.officeName" placeholder="请填写请假部门" readonly="true" disabled="true"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item prop="type" label="请假类型"
+								  :rules="[ {required: true, message:'请假类型不能为空', trigger:'blur'}]">
+						<el-select v-model="inputForm.type" placeholder="请选择" style="width:100%;">
+							<el-option
+								v-for="item in $dictUtils.getDictList('jy_holiday_type')"
+								:key="item.value"
+								:label="item.label"
+								:value="item.value">
+							</el-option>
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
 					<el-form-item label="开始时间" prop="startDay"
 								  :rules="[
 								  {required: true, message:'开始时间不能为空', trigger:'blur'}]">
@@ -27,7 +54,7 @@
 							placeholder="选择日期"
 							@change="checkTime"
 						/>
-						<el-select v-model="inputForm.beginTime" placeholder="请选择开始时间" @change="checkTime">
+						<el-select v-model="inputForm.beginTime" style="width: 50%" placeholder="请选择开始时间" @change="checkTime">
 							<el-option value="上午" label="上午"></el-option>
 							<el-option value="下午" label="下午"></el-option>
 						</el-select>
@@ -47,23 +74,17 @@
 							:size="default"
 							@change="checkTime"
 						/>
-						<el-select v-model="inputForm.endTime" placeholder="请选择开始时间" @change="checkTime">
+						<el-select v-model="inputForm.endTime" style="width: 50%" placeholder="请选择开始时间" @change="checkTime">
 							<el-option value="上午" label="上午"></el-option>
 							<el-option value="下午" label="下午"></el-option>
 						</el-select>
 					</el-form-item>
 				</el-col>
 				<el-col :span="12">
-					<el-form-item prop="type" label="请假类型"
-								  :rules="[ {required: true, message:'请假类型不能为空', trigger:'blur'}]">
-						<el-select v-model="inputForm.type" @change="checkType" placeholder="请选择" style="width:100%;">
-							<el-option
-								v-for="item in $dictUtils.getDictList('jy_holiday_type')"
-								:key="item.value"
-								:label="item.label"
-								:value="item.value">
-							</el-option>
-						</el-select>
+					<el-form-item label="请假天数" prop="days"
+								  :rules="[
+								  {required: true, message:'结束时间不能为空', trigger:'blur'}]">
+						<el-input v-model="inputForm.days" placeholder="请填写请假天数" readonly="true" disabled="true"></el-input>
 					</el-form-item>
 				</el-col>
 				<el-col :span="24">
@@ -115,6 +136,8 @@
 				loading: false,
 				visible: false,
 				inputForm: {
+					createName:this.$store.state.user.name,
+					officeName:this.$store.state.user.office.name,
 					id: '',
 					startDay:"",
 					beginTime:'',
@@ -190,6 +213,8 @@
 			init(method, id) {
 				this.method = method
 				this.inputForm={
+					createName:'',
+					officeName:'',
 					id: '',
 					startDay:"",
 					beginTime:'',
@@ -206,6 +231,8 @@
 				this.visible = true
 				if (method === 'edit'){
 					this.title = '修改请假信息'
+				}else if (method === 'view'){
+					this.title = '查看请假信息'
 				}
 				this.$nextTick(() => {
 					this.$refs.inputForm.resetFields()
@@ -218,6 +245,12 @@
 							this.days=data.days
 							this.inputForm.files=data.files
 							console.log('s',this.inputForm)
+							if (this.commonJS.isEmpty(this.inputForm.createName)){
+								this.inputForm.createName = this.$store.state.user.name
+							}
+							if (this.commonJS.isEmpty(this.inputForm.officeName)){
+								this.inputForm.officeName = this.$store.state.user.office.name
+							}
 							if (this.status === 'audit' || this.status === 'taskFormDetail') {
 								method = 'view'
 							}

+ 67 - 28
src/views/jy/holiday/HolidayForm.vue

@@ -7,6 +7,33 @@
 			</el-divider>
 			<el-row  :gutter="15">
 				<el-col :span="12">
+					<el-form-item label="请假人" prop="createName"
+								  :rules="[
+								]">
+						<el-input v-model="inputForm.createName" placeholder="请填写请假人" readonly="true" disabled="true"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item label="请假部门" prop="officeName"
+								  :rules="[
+								  ]">
+						<el-input v-model="inputForm.officeName" placeholder="请填写请假部门" readonly="true" disabled="true"></el-input>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
+					<el-form-item prop="type" label="请假类型"
+								  :rules="[ {required: true, message:'请假类型不能为空', trigger:'blur'}]">
+						<el-select v-model="inputForm.type" placeholder="请选择" style="width:100%;">
+							<el-option
+								v-for="item in $dictUtils.getDictList('jy_holiday_type')"
+								:key="item.value"
+								:label="item.label"
+								:value="item.value">
+							</el-option>
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :span="12">
 					<el-form-item label="开始时间" prop="startDay"
 								  :rules="[
 								  {required: true, message:'开始时间不能为空', trigger:'blur'}]">
@@ -19,7 +46,7 @@
 							placeholder="选择日期"
 							@change="checkTime"
 						/>
-						<el-select v-model="inputForm.beginTime" placeholder="请选择开始时间" @change="checkTime">
+						<el-select v-model="inputForm.beginTime" style="width: 50%" placeholder="请选择开始时间" @change="checkTime">
 							<el-option value="上午" label="上午"></el-option>
 							<el-option value="下午" label="下午"></el-option>
 						</el-select>
@@ -39,23 +66,17 @@
 							:size="default"
 							@change="checkTime"
 						/>
-						<el-select v-model="inputForm.endTime" placeholder="请选择开始时间" @change="checkTime">
+						<el-select v-model="inputForm.endTime" style="width: 50%" placeholder="请选择开始时间" @change="checkTime">
 							<el-option value="上午" label="上午"></el-option>
 							<el-option value="下午" label="下午"></el-option>
 						</el-select>
 					</el-form-item>
 				</el-col>
 				<el-col :span="12">
-					<el-form-item prop="type" label="请假类型"
-								  :rules="[ {required: true, message:'请假类型不能为空', trigger:'blur'}]">
-						<el-select v-model="inputForm.type" @change="checkType" placeholder="请选择" style="width:100%;">
-							<el-option
-								v-for="item in $dictUtils.getDictList('jy_holiday_type')"
-								:key="item.value"
-								:label="item.label"
-								:value="item.value">
-							</el-option>
-						</el-select>
+					<el-form-item label="请假天数" prop="days"
+								  :rules="[
+								  {required: true, message:'结束时间不能为空', trigger:'blur'}]">
+						<el-input v-model="inputForm.days" placeholder="请填写请假天数" readonly="true" disabled="true"></el-input>
 					</el-form-item>
 				</el-col>
 				<el-col :span="24">
@@ -100,6 +121,8 @@
 				method: '',
 				loading: false,
 				inputForm: {
+					createName:this.$store.state.user.name,
+					officeName:this.$store.state.user.office.name,
 					id: '',
 					startDay:"",
 					beginTime:'',
@@ -175,6 +198,8 @@
 			init(method, id) {
 				this.method = method
 				this.inputForm={
+					createName:'',
+					officeName:'',
 					id: '',
 					startDay:"",
 					beginTime:'',
@@ -199,6 +224,12 @@
 							this.days=data.days
 							this.inputForm.files=data.files
 							console.log('s',this.inputForm)
+							if (this.commonJS.isEmpty(this.inputForm.createName)){
+								this.inputForm.createName = this.$store.state.user.name
+							}
+							if (this.commonJS.isEmpty(this.inputForm.officeName)){
+								this.inputForm.officeName = this.$store.state.user.office.name
+							}
 							if (this.status === 'audit' || this.status === 'taskFormDetail') {
 								method = 'view'
 							}
@@ -436,17 +467,12 @@
 
 			},
 			checkType(){
-				if (this.commonJS.isEmpty(this.inputForm.startDay) || this.commonJS.isEmpty(this.inputForm.beginTime) || this.commonJS.isEmpty(this.inputForm.endDay) || this.commonJS.isEmpty(this.inputForm.endTime)){
-					this.$message.error('请选择请假时间')
-				}else {
-					if (this.inputForm.type === '1'){
-						this.holidayService.checkType(this.inputForm).then((data)=>{
-							console.log('data',data)
-							this.$message.error(data)
-						})
-					}
+				if (this.inputForm.type === '1'){
+					this.holidayService.checkType(this.inputForm).then((data)=>{
+						console.log('data',data)
+						this.$message.error(data)
+					})
 				}
-
 			},
 			checkTime(){
 				let differenceInDays =''
@@ -457,14 +483,27 @@
 					throw new Error()
 				}
 				differenceInDays= Math.floor((date2 - date1) / (1000 * 60 * 60 * 24));
-				if ((this.inputForm.beginTime === '上午' && this.inputForm.endTime === '下午') ||(this.inputForm.beginTime === '下午' && this.inputForm.endTime === '上午') ){
-					differenceInDays=differenceInDays+1
-				}else if ((this.inputForm.beginTime === '上午' && this.inputForm.endTime === '上午') ||(this.inputForm.beginTime === '下午' && this.inputForm.endTime === '下午')){
-					differenceInDays=differenceInDays+0.5
+				console.log('differenceInDays',differenceInDays)
+				if (differenceInDays === 0 || differenceInDays > 1){
+					if ((this.inputForm.beginTime === '上午' && this.inputForm.endTime === '下午') ||(this.inputForm.beginTime === '下午' && this.inputForm.endTime === '上午') ){
+						differenceInDays=differenceInDays+1
+					}else if ((this.inputForm.beginTime === '上午' && this.inputForm.endTime === '上午') ||(this.inputForm.beginTime === '下午' && this.inputForm.endTime === '下午')){
+						differenceInDays=differenceInDays+0.5
+					}
+				}else if (differenceInDays ===1){
+					if ((this.inputForm.beginTime === '上午' && this.inputForm.endTime === '下午') ){
+						differenceInDays=differenceInDays+1
+					}else if ((this.inputForm.beginTime === '上午' && this.inputForm.endTime === '上午') ||(this.inputForm.beginTime === '下午' && this.inputForm.endTime === '下午')){
+						differenceInDays=differenceInDays+0.5
+					}else if (this.inputForm.beginTime === '下午' && this.inputForm.endTime === '上午'){
+						differenceInDays
+					}
+				}
+				if (this.commonJS.isNotEmpty(this.inputForm.beginTime) && this.commonJS.isNotEmpty(this.inputForm.endTime)){
+					this.inputForm.days = differenceInDays
+					this.checkType()
 				}
 
-				console.log('differenceInDays',differenceInDays)
-				this.inputForm.days = differenceInDays
 			}
 
 		}

+ 54 - 10
src/views/jy/holiday/HolidayList.vue

@@ -53,7 +53,7 @@
 			</el-form-item>
 		</el-form>
 		<div class="jp-table top" style="">
-			<vxe-toolbar :refresh="{query: refreshList}" custom>
+			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button v-if="hasPermission('evection:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
 				</template>
@@ -75,26 +75,38 @@
 					resizable
 					height="auto"
 					:loading="loading"
-					ref="clientTable"
+					ref="holidayTable"
 					show-header-overflow
 					show-overflow
 					highlight-hover-row
 					:menu-config="{}"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢请假申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢请假申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					@sort-change="sortChangeHandle"
 					:sort-config="{remote:true}"
 					:data="dataList"
 					:checkbox-config="{}">
 					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+					<vxe-column min-width="160" align="center" title="请假人" field="createName">
+						<template  #default="scope">
+						<el-link  type="primary" :underline="false"  @click="view(scope.row)">{{scope.row.createName}}</el-link>
+						</template>
+					</vxe-column>
+					<vxe-column min-width="160" align="center" title="请假人部门" field="officeName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="请假日期" field="startDay"></vxe-column>
+					<vxe-column min-width="160" align="center" title="请假天数" field="days"></vxe-column>
 					<vxe-column min-width="160" align="center" title="请假类型" field="type">
 						<template #default="scope">
 							{{ $dictUtils.getDictLabel("jy_holiday_type", scope.row.type, '-') }}
 						</template>
 					</vxe-column>
-					<vxe-column min-width="160" align="center" title="请假日期" field="startDay"></vxe-column>
-					<vxe-column min-width="160" align="center" title="请假时长" field="days"></vxe-column>
-					<vxe-column min-width="160" align="center" title="请假人" field="createName"></vxe-column>
-					<vxe-column min-width="160" align="center" title="请假人部门" field="officeName"></vxe-column>
-					<vxe-column min-width="160" align="center" title="请假时间" field="createTime"></vxe-column>
+					<vxe-column min-width="160" align="center" title="请假发起时间" field="createTime"></vxe-column>
 					<vxe-column  min-width="150px" align="center" title="请假状态" field="status" fixed="right">
 						<template #default="scope">
 							<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('program_project_list_info_status_info', scope.row.status, '')" effect="dark" >{{$dictUtils.getDictLabel("program_project_list_info_status", scope.row.status, '未登记')}} </el-button>
@@ -103,12 +115,12 @@
 					<vxe-column title="操作" width="150px" fixed="right" align="center">
 						<template  #default="scope">
 							<div v-if="isAdmin">
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 								<el-button  size="small" text type="primary"  @click="adminEdit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 							</div>
 							<div v-else>
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<el-button v-if="(scope.row.status === '0'||scope.row.status === '1'|| scope.row.status === '3')" size="small" text type="primary"  @click="edit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<!--              当前申请人撤回-->
 								<el-button v-if="scope.row.createById === $store.state.user.id && scope.row.status==='2'" text type="primary" size="small" @click="reback(scope.row)">撤回</el-button>
 
@@ -200,6 +212,12 @@
 			}
 		},
 		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.holidayTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
 			this.refreshList()
 		},
 		activated () {
@@ -271,7 +289,7 @@
 			},
 			// 查看
 			view (row) {
-				this.$refs.goOutEditForm.init('view',row.id);
+				this.$refs.holidayDia.init('view',row.id);
 
 			},
 			// 查询当前用户是否是管理员用户
@@ -449,6 +467,32 @@
 				this.$refs.holidayDia.init('edit',row.id);
 			},
 
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.holidayService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+
 
 
 

+ 4 - 4
src/views/jy/inscription/InscriptionDia.vue

@@ -46,9 +46,9 @@
 								<el-input :disabled="true" :readonly="true" placeholder="请填写项目编号" v-model="scope.row.no"/>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column  field="projectLeader" align="center" title="项目负责人" :edit-render="{}">
+						<vxe-table-column  field="leader" align="center" title="项目负责人" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.projectLeader"/>
+								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.leader"/>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column field="createTime" align="center" title="创建时间" :edit-render="{}">
@@ -534,7 +534,7 @@
 						r.projectId=item.id
 						r.name = item.name
 						r.no = item.no
-						r.projectLeader = item.projectLeader
+						r.leader = item.projectLeader
 						r.createTime = item.createTime
 						console.log('2',this.inputForm.projectList[this.programRow])
 					} else {
@@ -542,7 +542,7 @@
 							projectId: item.id,
 							name: item.name,
 							no: item.no,
-							projectLeader: item.projectLeader,
+							leader: item.projectLeader,
 							createTime: item.createTime,
 						}
 						this.$refs.baseTable.insertAt(r)

+ 4 - 4
src/views/jy/inscription/InscriptionForm.vue

@@ -38,9 +38,9 @@
 								<el-input :disabled="true" :readonly="true" placeholder="请填写项目编号" v-model="scope.row.no"/>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column  field="projectLeader" align="center" title="项目负责人" :edit-render="{}">
+						<vxe-table-column  field="leader" align="center" title="项目负责人" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.projectLeader"/>
+								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.leader"/>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column field="createTime" align="center" title="创建时间" :edit-render="{}">
@@ -517,7 +517,7 @@
 						r.projectId=item.id
 						r.name = item.name
 						r.no = item.no
-						r.projectLeader = item.projectLeader
+						r.leader = item.projectLeader
 						r.createTime = item.createTime
 						console.log('2',this.inputForm.projectList[this.programRow])
 					} else {
@@ -525,7 +525,7 @@
 							projectId: item.id,
 							name: item.name,
 							no: item.no,
-							projectLeader: item.projectLeader,
+							leader: item.projectLeader,
 							createTime: item.createTime,
 						}
 						this.$refs.baseTable.insertAt(r)

+ 42 - 3
src/views/jy/inscription/InscriptionList.vue

@@ -45,7 +45,7 @@
 			</el-form-item>
 		</el-form>
 		<div class="jp-table top" style="">
-			<vxe-toolbar :refresh="{query: refreshList}" custom>
+			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button v-if="hasPermission('inscription:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
 				</template>
@@ -67,11 +67,19 @@
 					resizable
 					height="auto"
 					:loading="loading"
-					ref="clientTable"
+					ref="inscriptionTable"
 					show-header-overflow
 					show-overflow
 					highlight-hover-row
 					:menu-config="{}"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢文印申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢文印申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					@sort-change="sortChangeHandle"
 					:sort-config="{remote:true}"
 					:data="dataList"
@@ -193,6 +201,12 @@
 			}
 		},
 		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.inscriptionTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
 			this.refreshList()
 		},
 		activated () {
@@ -463,7 +477,32 @@
 						console.log(err.response)
 					}
 				})
-			}
+			},
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.inscriptionService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
 
 
 

+ 1 - 1
src/views/jy/monthly/MonthlyList.vue

@@ -98,8 +98,8 @@
 								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 							</div>
 							<div v-else>
-								<el-button text type="primary" size="small"  @click="del(scope.row.id)">删除</el-button>
 								<el-button  size="small" text type="primary"  @click="edit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small"  @click="del(scope.row.id)">删除</el-button>
 							</div>
 						</template>
 					</vxe-column>

+ 44 - 4
src/views/jy/notify/MyNotifyList.vue

@@ -47,7 +47,7 @@
       </el-form>
        <div class="jp-table top">
 
-         <vxe-toolbar :refresh="{query: refreshList}" custom>
+         <vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
            <template #buttons>
              <el-button type="primary" size="default" @click="readAll()">全部标记已读</el-button>
              <el-button :disabled="$refs.notifyTable && $refs.notifyTable.getCheckboxRecords().length === 0" type="warning" size="default" @click="portionRead()">标记为已读</el-button>
@@ -72,7 +72,14 @@
 			:menu-config="{}"
 			:print-config="{}"
 			:import-config="{}"
-			:export-config="{}"
+			:export-config="{
+									remote: true,
+									filename: `嘉溢公告管理数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢公告管理数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 			@sort-change="sortChangeHandle"
 			:sort-config="{remote:true}"
 			:data="dataList"
@@ -173,7 +180,15 @@
       this.refreshList()
       this.activeName = 'all'
     },
-
+	  mounted () {
+		  this.$nextTick(() => {
+			  // 将表格和工具栏进行关联
+			  const $table = this.$refs.notifyTable;
+			  const $toolbar = this.$refs.toolbarRef;
+			  $table.connect($toolbar);
+		  });
+		  this.refreshList()
+	  },
     methods: {
       // 获取数据列表
       refreshList () {
@@ -268,7 +283,32 @@
           this.searchForm.readFlag = '1'
         }
         this.refreshList()
-      }
+      },
+		// 自定义服务端导出
+		exportMethod ({ options }) {
+			// 传给服务端的参数
+			const params = {
+				'current': this.tablePage.currentPage,
+				'size': this.tablePage.pageSize,
+				'orders': this.tablePage.orders,
+				...this.searchForm,
+				filename: options.filename,
+				sheetName: options.sheetName,
+				isHeader: options.isHeader,
+				original: options.original,
+				mode: options.mode,
+				selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+				exportFields: options.columns.map(column => column.property)
+			}
+			return this.notifyService.exportFile(params).then((res) => {
+				// 将二进制流文件写入excel表,以下为重要步骤
+				this.$utils.downloadExcel(res, options.filename+ ".xls")
+			}).catch(function (err) {
+				if (err.response) {
+					console.log(err.response)
+				}
+			})
+		},
     }
   }
 </script>

+ 6 - 24
src/views/jy/notify/NotifyForm.vue

@@ -60,24 +60,6 @@
 						<el-input size="medium" v-model="inputForm.no" placeholder="请填写文号"     ></el-input>
 					</el-form-item>
 				</el-col>
-				<el-col :span="12" v-if="inputForm.notifyType === '0'">
-					<el-form-item label="通告时间" prop="dates"
-								  :rules="[
-                                {required: true, message:'通告时间不能为空', trigger:'blur'}
-                   ]">
-						<el-date-picker
-							placement="bottom-start"
-							format="YYYY-MM-DD HH:mm:ss"
-							value-format="YYYY-MM-DD HH:mm:ss"
-							v-model="inputForm.dates"
-							type="datetimerange"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-							clearable>
-						</el-date-picker>
-					</el-form-item>
-				</el-col>
 				<el-col :span="12">
 					<el-form-item label="创建人" prop="createBy.name"
 								  :rules="[
@@ -143,7 +125,7 @@
 							<vxe-table-column align="center" field="officeName" title="部门"></vxe-table-column>
 							<vxe-table-column align="center" title="操作" width="100">
 								<template v-slot="scope">
-									<el-button size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'office')">删除</el-button>
+									<el-button :disabled="method==='view' || method === 'read' || status === 'audit' || status === 'taskFormDetail'" size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'office')">删除</el-button>
 								</template>
 							</vxe-table-column>
 						</vxe-table>
@@ -178,7 +160,7 @@
 							<vxe-table-column align="center" field="officeName" title="部门"></vxe-table-column>
 							<vxe-table-column align="center" title="操作" width="100">
 								<template v-slot="scope">
-									<el-button size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'user')">删除</el-button>
+									<el-button :disabled="method==='view' || method === 'read' || status === 'audit' || status === 'taskFormDetail'" size="mini" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'user')">删除</el-button>
 								</template>
 							</vxe-table-column>
 						</vxe-table>
@@ -251,10 +233,10 @@
 		  <el-divider></el-divider>
 		  <div class="tableLine"><span class="midText"><span v-show="inputForm.comments.length>3&&lookMore">还有{{inputForm.comments.length-3}}条评论</span> <el-link style="color: red" type="text" size="mini" v-show="inputForm.comments.length>3&&lookMore" @click="findComment(inputForm.comments.length)"> 查看全部</el-link></span></div>
 	  </div>
-		<div style="margin-top: 30px">
-		  <span slot="footer" class="dialog-footer">
-			  <el-button size="small" @click="close()" icon="el-icon-circle-close">关闭</el-button>
-			  <el-button size="small" v-if="method === 'edit'" type="primary" icon="el-icon-circle-check" @click="doSubmitBefore()">确定</el-button>
+		<div style="margin-top: 20px">
+		  <span slot="footer" class="dialog-footer" style="float: right">
+			  <el-button size="primary" @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button size="primary" v-if="method === 'edit'" type="primary" icon="el-icon-circle-check" @click="doSubmitBefore()">确定</el-button>
 		  </span>
 		</div>
     </el-dialog>

+ 49 - 7
src/views/jy/notify/NotifyList.vue

@@ -15,8 +15,8 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="发布者" prop="createName">
-			<UserSelect :limit='1' v-model="searchForm.createName" @update:modelValue='(value, label) => {searchForm.createById = value}'></UserSelect>
+        <el-form-item label="发布者" prop="createById">
+			<UserSelect :limit='1' v-model="searchForm.createById" @update:modelValue='(value, label) => {searchForm.createById = value}'></UserSelect>
         </el-form-item>
         <el-form-item v-if="showHideItem" label="创建时间" prop="createDates">
           <el-date-picker
@@ -38,7 +38,7 @@
           </el-form-item>
       </el-form>
      <div class="jp-table top">
-      <vxe-toolbar :refresh="{query: refreshList}" custom>
+      <vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
         <template #buttons>
           <el-button v-if="hasPermission('jy_notify:info:add')" type="primary" size="default" icon="el-icon-plus" @click="start()">新建</el-button>
 <!--          <el-button v-if="hasPermission('notify:del')" type="danger"   size="small" icon="el-icon-delete" @click="del()" :disabled="$refs.notifyTable && $refs.notifyTable.getCheckboxRecords().length === 0" plain>删除</el-button>-->
@@ -68,7 +68,14 @@
             :menu-config="{}"
             :print-config="{}"
             :import-config="{}"
-            :export-config="{}"
+			:export-config="{
+									remote: true,
+									filename: `嘉溢公告管理数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢公告管理数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
             @sort-change="sortChangeHandle"
             :sort-config="{remote:true}"
             :data="dataList"
@@ -172,7 +179,7 @@
         searchForm: {
           title: '',
           type: '',
-          createName: '',
+			createById: '',
           createDates: []
         },
         dataList: [],
@@ -196,6 +203,15 @@
     created () {
       this.notifyService = new NotifyService()
     },
+	  mounted () {
+		  this.$nextTick(() => {
+			  // 将表格和工具栏进行关联
+			  const $table = this.$refs.notifyTable;
+			  const $toolbar = this.$refs.toolbarRef;
+			  $table.connect($toolbar);
+		  });
+		  this.refreshList()
+	  },
     activated () {
       this.refreshList()
     },
@@ -309,7 +325,7 @@
       },
       // 查看
       view (id) {
-        this.$refs.notifyForm.init('view', id)
+        this.$refs.notifyForm.init('read', id)
       },
       // 删除
       del (id) {
@@ -433,7 +449,33 @@
             }
           })
         })
-      }
+      },
+
+		// 自定义服务端导出
+		exportMethod ({ options }) {
+			// 传给服务端的参数
+			const params = {
+				'current': this.tablePage.currentPage,
+				'size': this.tablePage.pageSize,
+				'orders': this.tablePage.orders,
+				...this.searchForm,
+				filename: options.filename,
+				sheetName: options.sheetName,
+				isHeader: options.isHeader,
+				original: options.original,
+				mode: options.mode,
+				selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+				exportFields: options.columns.map(column => column.property)
+			}
+			return this.notifyService.exportFile(params).then((res) => {
+				// 将二进制流文件写入excel表,以下为重要步骤
+				this.$utils.downloadExcel(res, options.filename+ ".xls")
+			}).catch(function (err) {
+				if (err.response) {
+					console.log(err.response)
+				}
+			})
+		},
     }
   }
 </script>

+ 3 - 1
src/views/jy/notify/NotifyTaskForm.vue

@@ -98,7 +98,7 @@
             <el-form-item label="内容" prop="content"
                           :rules="[
                    ]">
-              <WangEditor ref="contentEditor" v-model="inputForm.content" @getUrl="(url, lsUrl) => {
+              <WangEditor style="width: 100%" ref="contentEditor" v-model="inputForm.content" @getUrl="(url, lsUrl) => {
                         inputForm.editorFilesDTOList.push({temporaryUrl: lsUrl, url: url})
                         }"/>
             </el-form-item>
@@ -469,6 +469,8 @@
             this.getEditorFilesDTOList()
             this.notifyService.saveForm(this.inputForm).then((data) => {
               this.loading = false
+				let processTitle = `${this.$store.state.user.name} 在 ${this.moment(new Date()).format('YYYY-MM-DD HH:mm')} 发起了 [发起通知]`
+				this.inputForm.title = processTitle
               callback(data.businessTable, data.businessId, this.inputForm)
             }).catch(() => {
               this.loading = false

+ 61 - 21
src/views/jy/payment/PaymentList.vue

@@ -5,14 +5,11 @@
 			<el-form-item label="付款编号" prop="no">
 				<el-input v-model="searchForm.no" placeholder="请输入付款编号" clearable></el-input>
 			</el-form-item>
-			<el-form-item label="付款用途" prop="reason">
-				<el-input v-model="searchForm.reason" placeholder="请输入付款用途" clearable></el-input>
-			</el-form-item>
-			<el-form-item v-if="showHideItem" label="付款人" prop="paymentUser">
+			<el-form-item  label="付款人" prop="paymentUser">
 				<UserSelectSignatory style="width: 100%" ref="userSelect2" :limit="1"
 									 :readonly="true" :modelValue="searchForm.paymentUser"
 									 @update:modelValue='(value) => {searchForm.paymentUser = value}'></UserSelectSignatory>			</el-form-item>
-			<el-form-item v-if="showHideItem"  prop="paymentOffice" label="付款人部门">
+			<el-form-item  prop="paymentOffice" label="付款人部门">
 				<SelectTree
 					ref="officeTree"
 					:props="{
@@ -27,6 +24,14 @@
 					:accordion="true"
 					@getValue="(value) => {searchForm.paymentOffice=value}"/>
 			</el-form-item>
+			<el-form-item v-if="showHideItem" label="付款金额" prop="paymentAmounts">
+				<InputNumber :disabled="false" :precision="num"
+							 :value="searchForm.paymentAmounts"
+							 @changefrom="(val) => {searchForm.paymentAmounts[0] = val}"
+							 @changeto="(val) => {searchForm.paymentAmounts[1] = val}"
+				>
+				</InputNumber>
+			</el-form-item>
 			<el-form-item v-if="showHideItem" label="付款时间" prop="createDates">
 				<el-date-picker
 					placement="bottom-start"
@@ -39,15 +44,10 @@
 					end-placeholder="结束日期">
 				</el-date-picker>
 			</el-form-item>
-			<el-form-item v-if="showHideItem" label="借款金额" prop="paymentAmounts">
-				<InputNumber :disabled="false" :precision="num"
-							 :value="searchForm.paymentAmounts"
-							 @changefrom="(val) => {searchForm.paymentAmounts[0] = val}"
-							 @changeto="(val) => {searchForm.paymentAmounts[1] = val}"
-				>
-				</InputNumber>
-			</el-form-item>
 
+			<el-form-item v-if="showHideItem" label="付款用途" prop="reason">
+				<el-input v-model="searchForm.reason" placeholder="请输入付款用途" clearable></el-input>
+			</el-form-item>
 			<el-form-item>
 				<el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
 				<el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
@@ -55,7 +55,7 @@
 			</el-form-item>
 		</el-form>
 		<div class="jp-table top" style="">
-			<vxe-toolbar :refresh="{query: refreshList}" custom>
+			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button v-if="hasPermission('borrow:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
 				</template>
@@ -77,12 +77,20 @@
 					resizable
 					height="auto"
 					:loading="loading"
-					ref="clientTable"
+					ref="paymentTable"
 					show-header-overflow
 					show-overflow
 					highlight-hover-row
 					:menu-config="{}"
 					@sort-change="sortChangeHandle"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢付款申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢付款申请数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					:sort-config="{remote:true}"
 					:data="dataList"
 					:checkbox-config="{}">
@@ -92,13 +100,14 @@
 							<el-link  type="primary" :underline="false"  @click="view(scope.row)">{{scope.row.no}}</el-link>
 						</template>
 					</vxe-column>
-					<vxe-column min-width="160" align="center" title="付款用途" field="reason"></vxe-column>
-					<vxe-column min-width="160" align="center" title="付款人" field="paymentUser"></vxe-column>
-					<vxe-column min-width="160" align="center" title="付款人部门" field="paymentOffice"></vxe-column>
-					<vxe-column min-width="160" align="center" title="付款时间" field="paymentTime"></vxe-column>
 					<vxe-column min-width="160" align="center" title="付款金额" field="paymentLower"></vxe-column>
 					<vxe-column min-width="160" align="center" title="对冲金额" field="refund"></vxe-column>
 					<vxe-column min-width="160" align="center" title="剩余付款金额" field="finalMoney"></vxe-column>
+					<vxe-column min-width="160" align="center" title="付款人" field="paymentUser"></vxe-column>
+					<vxe-column min-width="160" align="center" title="付款人部门" field="paymentOffice"></vxe-column>
+					<vxe-column min-width="160" align="center" title="付款用途" field="reason"></vxe-column>
+					<vxe-column min-width="160" align="center" title="付款时间" field="paymentTime"></vxe-column>
+
 					<vxe-column  min-width="150px" align="center" title="付款状态" field="status" fixed="right">
 						<template #default="scope">
 							<el-button @click="detail(scope.row)" :type="$dictUtils.getDictLabel('program_project_list_info_status_info', scope.row.status, '')" effect="dark" >{{$dictUtils.getDictLabel("program_project_list_info_status", scope.row.status, '未登记')}} </el-button>
@@ -107,12 +116,12 @@
 					<vxe-column title="操作" width="150px" fixed="right" align="center">
 						<template  #default="scope">
 							<div v-if="isAdmin">
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 								<el-button  size="small" text type="primary"  @click="adminEdit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='5'" @click="del(scope.row.id)">删除</el-button>
 							</div>
 							<div v-else>
-								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<el-button v-if="(scope.row.status === '0'||scope.row.status === '1'|| scope.row.status === '3')" size="small" text type="primary"  @click="edit(scope.row)">修改</el-button>
+								<el-button text type="primary" size="small" v-if="scope.row.status==='0' || scope.row.status==='1'|| scope.row.status==='3'" @click="del(scope.row.id)">删除</el-button>
 								<!--              当前申请人撤回-->
 								<el-button v-if="scope.row.createById === $store.state.user.id && scope.row.status==='2'" text type="primary" size="small" @click="reback(scope.row)">撤回</el-button>
 
@@ -209,6 +218,12 @@
 			}
 		},
 		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.paymentTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
 			this.refreshList()
 		},
 		activated () {
@@ -455,6 +470,31 @@
 			adminEdit(row){
 				this.$refs.paymentDia.init('edit',row.id);
 			},
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.paymentService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
 
 
 

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

@@ -897,7 +897,6 @@
 			}
 			if (paneName === 'reportIssuance') {
 				if (this.commonJS.isNotEmpty(this.sealId)) {
-					console.log('建立了')
 					this.$refs.signetAddForm.init('view', this.sealId)
 				}
 			}

File diff suppressed because it is too large
+ 29 - 3
src/views/jy/project/ProjectList.vue


+ 35 - 2
src/views/jy/project/ProjectMemberList.vue

@@ -27,7 +27,7 @@
       </el-form-item>
     </el-form>
     <div class="jp-table top" style="">
-      <vxe-toolbar :refresh="{query: refreshList}"  ref="toolbarRef" custom>
+      <vxe-toolbar :refresh="{query: refreshList}"  ref="toolbarRef" export  custom>
         <template #buttons>
           <!--          <el-button v-if="hasPermission('cwProjectRecords:add')" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>-->
           <!--          <el-button v-if="hasPermission('klg:question:del')" type="danger" icon="el-icon-delete" @click="del()" :disabled="$refs.questionsTable && $refs.questionsTable.getCheckboxRecords().length === 0" plain>删除</el-button>-->
@@ -56,6 +56,14 @@
           highlight-hover-row
           :menu-config="{}"
           @sort-change="sortChangeHandle"
+		  :export-config="{
+									remote: true,
+									filename: `嘉溢项目组成员管理数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢项目组成员管理数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
           :sort-config="{remote:true}"
           :data="dataList"
           :checkbox-config="{}">
@@ -241,7 +249,32 @@
       resetSearch () {
         this.$refs.searchForm.resetFields()
         this.refreshList()
-      }
+      },
+		// 自定义服务端导出
+		exportMethod ({ options }) {
+			// 传给服务端的参数
+			const params = {
+				'current': this.tablePage.currentPage,
+				'size': this.tablePage.pageSize,
+				'orders': this.tablePage.orders,
+				...this.searchForm,
+				filename: options.filename,
+				sheetName: options.sheetName,
+				isHeader: options.isHeader,
+				original: options.original,
+				mode: options.mode,
+				selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+				exportFields: options.columns.map(column => column.property)
+			}
+			return this.projectInfoService.exportFile(params).then((res) => {
+				// 将二进制流文件写入excel表,以下为重要步骤
+				this.$utils.downloadExcel(res, options.filename+ ".xls")
+			}).catch(function (err) {
+				if (err.response) {
+					console.log(err.response)
+				}
+			})
+		},
     }
   }
 </script>

+ 4 - 4
src/views/jy/project/ReportsInstanceForm.vue

@@ -38,9 +38,9 @@
 								<el-input :disabled="true" :readonly="true" placeholder="请填写项目编号" v-model="scope.row.no"/>
 							</template>
 						</vxe-table-column>
-						<vxe-table-column field="projectLeader" align="center" title="项目负责人" :edit-render="{}">
+						<vxe-table-column field="leader" align="center" title="项目负责人" :edit-render="{}">
 							<template v-slot:edit="scope">
-								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.projectLeader"/>
+								<el-input :disabled="true" placeholder="请填写项目负责人" v-model="scope.row.leader"/>
 							</template>
 						</vxe-table-column>
 						<vxe-table-column field="createTime" align="center" title="创建时间" :edit-render="{}">
@@ -443,7 +443,7 @@
 						r.projectId=item.id
 						r.name = item.name
 						r.no = item.no
-						r.projectLeader = item.projectLeader
+						r.leader = item.projectLeader
 						r.createTime = item.createTime
 						console.log('2',this.inputForm.projectList[this.programRow])
 					} else {
@@ -451,7 +451,7 @@
 							projectId: item.id,
 							name: item.name,
 							no: item.no,
-							projectLeader: item.projectLeader,
+							leader: item.projectLeader,
 							createTime: item.createTime,
 						}
 						this.$refs.baseTable.insertAt(r)

+ 20 - 8
src/views/jy/reimbursement/ReimbursementForm.vue

@@ -245,6 +245,21 @@
 							  .replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3').replace(/^0+/, '0')"></el-input>
 								</template>
 							</vxe-table-column>
+							<vxe-table-column field="receiptNumber" title="收据张数" :edit-render="{}">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.receiptNumber" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column field="days" title="出差天数" :edit-render="{}">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.days" oninput ="value=value.replace(/\D|^0/g,'')" maxlength="10"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column field="content" title="内容" :edit-render="{}">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.content" ></el-input>
+								</template>
+							</vxe-table-column>
 							<vxe-table-column title="操作" width="100">
 								<template v-slot="scope">
 									<el-button size="small" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'others')">删除</el-button>
@@ -323,7 +338,7 @@
 							</vxe-table-column>
 							<vxe-table-column title="操作" width="100">
 								<template v-slot="scope">
-									<el-button size="small" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'report_detail')">删除</el-button>
+									<el-button size="small" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'project')">删除</el-button>
 								</template>
 							</vxe-table-column>
 						</vxe-table>
@@ -570,7 +585,8 @@
 					purchaseNo: '',
 					tradeTotalPrice: '',
 					purchaseId: '',
-					departmentName: ''
+					departmentName: '',
+					department:''
 				}
 				if (method === 'add') {
 					this.title = `新建报销类型`
@@ -584,12 +600,13 @@
 					this.loading = true
 					this.$refs.inputForm.resetFields()
 					this.reimbursementService.findById(this.inputForm.id).then((data) => {
-						console.log('data',data)
+
 						this.$refs.uploadComponent.clearUpload()
 						if (this.status === 'audit' || this.status === 'taskFormDetail') {
 							method = 'view'
 						}
 						this.inputForm = this.recover(this.inputForm, data)
+						console.log('data',this.inputForm)
 						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
 						if (this.commonJS.isEmpty(this.inputForm.department)) {
 							this.inputForm.department = this.$store.state.user.office.id
@@ -1283,11 +1300,6 @@
 									this.loading = false
 									throw new Error('报销详情第' + k + '行请选择项目详情')
 								}
-								if (this.commonJS.isEmpty(this.inputForm.infoProjects[j].reportNumber)) {
-									this.$message.error('报销详情第' + k + '行请选择报告号')
-									this.loading = false
-									throw new Error('报销详情第' + k + '行请选择报告号')
-								}
 								if (this.commonJS.isEmpty(this.inputForm.infoProjects[j].number)) {
 									this.$message.error('报销详情第' + k + '行请输入费用')
 									this.loading = false

+ 36 - 34
src/views/jy/reimbursement/ReimbursementList.vue

@@ -2,35 +2,14 @@
 	<div class="page">
 		<el-form :inline="true" class="query-form m-b-10" v-if="searchVisible" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
 			<!-- 搜索框-->
-			<el-form-item label="报销时间" prop="dates">
-				<el-date-picker
-					style=""
-					placement="bottom-start"
-					value-format="YYYY-MM-DD h:m:s"
-					v-model="searchForm.dates"
-					type="datetimerange"
-					range-separator="至"
-					start-placeholder="开始日期"
-					end-placeholder="结束日期">
-				</el-date-picker>
-			</el-form-item>
-			<el-form-item v-if="showHideItem" label="经办人" prop="handled">
+
+			<el-form-item label="经办人" prop="handled">
 				<UserSelect :limit='1' :modelValue="searchForm.handled" @update:modelValue='(value, label) => {searchForm.handled = value}'></UserSelect>
 			</el-form-item>
-			<el-form-item v-if="showHideItem" label="报销人" prop="reimBy">
+			<el-form-item label="报销人" prop="reimBy">
 				<UserSelect :limit='1' :modelValue="searchForm.reimBy" @update:modelValue='(value, label) => {searchForm.reimBy = value}'></UserSelect>
 			</el-form-item>
-			<el-form-item v-if="showHideItem" label="报销状态" prop="status">
-				<el-select v-model="searchForm.status" placeholder="请选择" style="width:100%;">
-					<el-option
-						v-for="item in $dictUtils.getDictList('status')"
-						:key="item.value"
-						:label="item.label"
-						:value="item.value">
-					</el-option>
-				</el-select>
-			</el-form-item>
-			<el-form-item v-if="showHideItem" label="报销部门" prop="department">
+			<el-form-item label="报销部门" prop="department">
 				<SelectTree
 					ref="officeTree"
 					:props="{
@@ -45,6 +24,34 @@
 					size="default"
 					@getValue="(value,label) => {searchForm.department=label}"/>
 			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报销金额" prop="amounts">
+				<InputNumber :disabled="false" :precision="num" :value="searchForm.amounts"
+							 @changefrom="(val)=>{searchForm.amounts[0]=val}"
+							 @changeto="(val)=>{searchForm.amounts[1]=val}"
+				></InputNumber>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报销状态" prop="status">
+				<el-select v-model="searchForm.status" placeholder="请选择" style="width:100%;">
+					<el-option
+						v-for="item in $dictUtils.getDictList('status')"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+					</el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报销时间" prop="dates">
+				<el-date-picker
+					style=""
+					placement="bottom-start"
+					value-format="YYYY-MM-DD h:m:s"
+					v-model="searchForm.dates"
+					type="datetimerange"
+					range-separator="至"
+					start-placeholder="开始日期"
+					end-placeholder="结束日期">
+				</el-date-picker>
+			</el-form-item>
 			<el-form-item v-if="showHideItem" label="报销类型" prop="applyType">
 				<el-select v-model="searchForm.applyType" placeholder="请选择报销类型">
 					<el-option
@@ -70,12 +77,7 @@
 					size="default"
 					@getValue="(value, label) => {searchForm.remiType=label}"/>
 			</el-form-item>
-			<el-form-item v-if="showHideItem" label="报销金额" prop="amounts">
-				<InputNumber :disabled="false" :precision="num" :value="searchForm.amounts"
-							 @changefrom="(val)=>{searchForm.amounts[0]=val}"
-							 @changeto="(val)=>{searchForm.amounts[1]=val}"
-				></InputNumber>
-			</el-form-item>
+
 
 			<el-form-item>
 				<el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
@@ -116,8 +118,8 @@
 					:sort-config="{remote:true}"
 					:export-config="{
                     remote: true,
-                    filename: `会计报销数据${moment(new Date()).format('YYYY-MM-DD')}`,
-                    sheetName: `会计报销数据${moment(new Date()).format('YYYY-MM-DD')}`,
+                    filename: `嘉溢报销数据${moment(new Date()).format('YYYY-MM-DD')}`,
+                    sheetName: `嘉溢报销数据${moment(new Date()).format('YYYY-MM-DD')}`,
                     exportMethod: exportMethod,
                     types: ['xlsx'],
                     modes: ['current', 'selected', 'all']
@@ -497,7 +499,7 @@
 					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
 					exportFields: options.columns.map(column => column.property)
 				}
-				return this.reimbursementApprovalService.exportFile(params).then((res) => {
+				return this.reimbursementService.exportFile(params).then((res) => {
 					// 将二进制流文件写入excel表,以下为重要步骤
 					this.$utils.downloadExcel(res, options.filename)
 				}).catch(function (err) {

+ 37 - 4
src/views/jy/workClientInfo/WorkClientList.vue

@@ -97,7 +97,7 @@
       </el-form>
 
      <div class="jp-table">
-        <vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" custom>
+        <vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
           <template #buttons>
             <el-button v-if="hasPermission('jy_work_client:info:add')" type="primary"  icon="el-icon-plus" @click="add()">新建</el-button>
             <el-button v-if="hasPermission('jy_work_client:info:del')" type="danger"   icon="el-icon-delete" @click="del()" :disabled="$refs.workClientTable && $refs.workClientTable.getCheckboxRecords().length === 0" plain>删除</el-button>
@@ -118,6 +118,14 @@
                 :menu-config="{}"
                 :print-config="{}"
                 @sort-change="sortChangeHandle"
+				:export-config="{
+									remote: true,
+									filename: `嘉溢成员管理数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢成员管理数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
                 :sort-config="{remote:true}"
                 :data="dataList"
                 :checkbox-config="{}">
@@ -155,8 +163,8 @@
                 <vxe-column title="操作" width="120px" fixed="right" align="center">
                     <template  #default="scope">
 <!--                      <el-button v-if="hasPermission('sys:work_client:view')" text type="primary" icon="el-icon-view" @click="view(scope.row.id)">查看</el-button>-->
-                      <el-button v-if="hasPermission('jy_work_client:info:edit') && scope.row.createFlag === '1'" text type="primary"   @click="edit(scope.row.id)">修改</el-button>
-                      <el-button v-if="hasPermission('jy_work_client:info:edit')  && scope.row.createFlag === '1'" text type="primary"    @click="del(scope.row.id)">删除</el-button>
+                      <el-button v-if="hasPermission('jy_work_client:info:edit') " text type="primary"   @click="edit(scope.row.id)">修改</el-button>
+                      <el-button v-if="hasPermission('jy_work_client:info:edit') " text type="primary"    @click="del(scope.row.id)">删除</el-button>
                     </template>
                 </vxe-column>
             </vxe-table>
@@ -333,7 +341,32 @@
         this.applyUserName = ''
         this.$refs.searchForm.resetFields()
         this.refreshList()
-      }
+      },
+		// 自定义服务端导出
+		exportMethod ({ options }) {
+			// 传给服务端的参数
+			const params = {
+				'current': this.tablePage.currentPage,
+				'size': this.tablePage.pageSize,
+				'orders': this.tablePage.orders,
+				...this.searchForm,
+				filename: options.filename,
+				sheetName: options.sheetName,
+				isHeader: options.isHeader,
+				original: options.original,
+				mode: options.mode,
+				selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+				exportFields: options.columns.map(column => column.property)
+			}
+			return this.workClientService.exportFile(params).then((res) => {
+				// 将二进制流文件写入excel表,以下为重要步骤
+				this.$utils.downloadExcel(res, options.filename+ ".xls")
+			}).catch(function (err) {
+				if (err.response) {
+					console.log(err.response)
+				}
+			})
+		},
     }
   }
 </script>

+ 43 - 2
src/views/jy/workContractInfo/JyWorkContractList.vue

@@ -81,7 +81,7 @@
 		</el-form>
 
 		<div class="jp-table">
-			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" custom>
+			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
 				<template #buttons>
 					<el-button v-if="hasPermission('jy_work_contract:info:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
 <!--					<el-button v-if="hasPermission('jy_work_contract:info:del')" type="danger"   icon="el-icon-delete" @click="del()" :disabled="$refs.workContractTable && $refs.workContractTable.getCheckboxRecords().length === 0" plain>删除</el-button>-->
@@ -102,6 +102,14 @@
 					:menu-config="{}"
 					:print-config="{}"
 					@sort-change="sortChangeHandle"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢合同数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢合同数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
 					:sort-config="{remote:true}"
 					:data="dataList"
 					:checkbox-config="{}">
@@ -257,7 +265,15 @@
 				return this.$store.state.user
 			}
 		},
-
+		mounted() {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.workContractTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
+			this.refreshList();
+		},
 		methods: {
 			showHide () {
 				if (this.showHideItem === false) {
@@ -671,6 +687,31 @@
 					})
 				})
 			},
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.workContractService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
 		}
 	}
 </script>

+ 11 - 3
src/views/materialManagement/userSeal/SignetAddForm.vue

@@ -1,6 +1,6 @@
 <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'"
+		<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail' || method==='view'"
 				 label-width="160px" @submit.native.prevent>
 			<el-divider content-position="left"><i class="el-icon-document"></i>
 				<span style="color: red;border-top: 20px">*</span>关联项目
@@ -75,7 +75,7 @@
 				<el-col :span="12">
 					<el-form-item label="用印类型" prop="types"
 								  :rules="[
-							 {required: true, message:'用印类型不能为空', trigger:'blur'}
+							 {required: true, message:'用印类型不能为空', trigger:'change'}
 							]">
 						<el-cascader :disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'"   style="width: 100%" v-model="inputForm.types" :options="typeData" @change="handleChange" placeholder="请选择"  clearable />
 					</el-form-item>
@@ -249,6 +249,7 @@
 							this.inputForm.projectList=list
 							this.inputForm.types=data.types
 							this.inputForm.createById=data.createById
+							console.log('types',this.inputForm)
 							if (this.commonJS.isEmpty(this.inputForm.createDate)) {
 								this.inputForm.createDate = this.moment(new Date()).format('YYYY-MM-DD')
 							}
@@ -313,6 +314,7 @@
 			},
 			reapplyForm(callback) {
 				this.loading = true
+				console.log('this.inputForm.types',this.inputForm.types)
 				this.signetService.queryById(this.inputForm.id).then((data) => {
 					if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
 						this.loading = false
@@ -370,9 +372,14 @@
 					if (valid) {
 						this.loading = true
 						this.inputForm.files = this.$refs.uploadComponent.getDataList()
-						// this.inputForm=JSON.stringify(this.inputForm)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						if (this.commonJS.isNotEmpty(this.inputForm.no)){
+							this.inputForm.types=[]
+						}
 						this.signetService.saveForm(this.inputForm).then((data) => {
 							this.inputForm.id = data.businessId
+							let processTitle = `${this.$store.state.user.name} 发起了 ${data.no} ` + `[嘉溢-用印申请]`
+							this.inputForm.title = processTitle
 							console.log('data22', data)
 							callback(data.businessTable, data.businessId, this.inputForm)
 							this.$refs.inputForm.resetFields()
@@ -404,6 +411,7 @@
 					types:[], //用印类型
 					number:'', //用印份数
 					projectId:'',
+					procInsId: '',
 				}
 				this.visible = false
 			},

+ 41 - 2
src/views/materialManagement/userSeal/SignetList.vue

@@ -46,7 +46,7 @@
       </el-form-item>
     </el-form>
     <div class="jp-table top" style="">
-      <vxe-toolbar :refresh="{query: refreshList}" custom>
+      <vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
         <template #buttons>
           <el-button v-if="hasPermission('material:info:add')" :disabled="isAdmin" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
         </template>
@@ -74,6 +74,14 @@
           highlight-hover-row
           :menu-config="{}"
           @sort-change="sortChangeHandle"
+		  :export-config="{
+									remote: true,
+									filename: `嘉溢用印数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢用印数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
           :sort-config="{remote:true}"
           :data="dataList"
           :checkbox-config="{}">
@@ -215,6 +223,12 @@ export default {
       }
     },
     mounted () {
+		this.$nextTick(() => {
+			// 将表格和工具栏进行关联
+			const $table = this.$refs.clientTable;
+			const $toolbar = this.$refs.toolbarRef;
+			$table.connect($toolbar);
+		});
       this.refreshList()
     },
     activated () {
@@ -523,7 +537,32 @@ export default {
 		//查看项目信息
 		openProject(row){
 			this.$refs.projectDia.init('view', row.id,row.auditId1, row.auditId2, row.auditId3,row.sealId,row.outInstanceId,row.reportsSubmitId,row.archiveId,row.eiaId)
-		}
+		},
+		// 自定义服务端导出
+		exportMethod ({ options }) {
+			// 传给服务端的参数
+			const params = {
+				'current': this.tablePage.currentPage,
+				'size': this.tablePage.pageSize,
+				'orders': this.tablePage.orders,
+				...this.searchForm,
+				filename: options.filename,
+				sheetName: options.sheetName,
+				isHeader: options.isHeader,
+				original: options.original,
+				mode: options.mode,
+				selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+				exportFields: options.columns.map(column => column.property)
+			}
+			return this.signetService.exportFile(params).then((res) => {
+				// 将二进制流文件写入excel表,以下为重要步骤
+				this.$utils.downloadExcel(res, options.filename+ ".xls")
+			}).catch(function (err) {
+				if (err.response) {
+					console.log(err.response)
+				}
+			})
+		},
     }
   }
 </script>