Bläddra i källkod

cpa功能调整

wangqiang 1 år sedan
förälder
incheckning
ca8d0497ce
26 ändrade filer med 1879 tillägg och 212 borttagningar
  1. 6 0
      src/api/program/ProgramProjectListInfoService.js
  2. 4 2
      src/views/cw/invoice/InvoiceForm.vue
  3. 2 0
      src/views/cw/invoice/InvoiceFormTask.vue
  4. 2 2
      src/views/cw/invoice/InvoiceList.vue
  5. 1 1
      src/views/cw/projectRecords/ProjectMembersEditForm.vue
  6. 1 1
      src/views/cw/projectRecords/ProjectRecordsTaskForm.vue
  7. 5 3
      src/views/cw/reportManagement/ReportManagementAddForm.vue
  8. 6 3
      src/views/cw/reportManagement/ReportManagementForm.vue
  9. 1 1
      src/views/cw/workClientInfo/WorkClientBillingChooseRadio.vue
  10. 123 0
      src/views/cw/workClientInfo/clientUserSelect/AccountantUserIndex.vue
  11. 123 0
      src/views/cw/workClientInfo/clientUserSelect/AccountantUserIndex2.vue
  12. 488 0
      src/views/cw/workClientInfo/clientUserSelect/AccountantUserSelectDialog.vue
  13. 488 0
      src/views/cw/workClientInfo/clientUserSelect/AccountantUserSelectDialog2.vue
  14. 1 0
      src/views/cw/workContract/ContractFilePaperForm.vue
  15. 2 2
      src/views/cw/workContract/ContractRegistration.vue
  16. 8 2
      src/views/cw/workContract/CwWorkContractBorrowForm.vue
  17. 189 0
      src/views/dashboard/widgets/components/MyNoticePageList.vue
  18. 15 45
      src/views/dashboard/widgets/components/MyNotifyList.vue
  19. 237 0
      src/views/flowable/task/NoticePageList.vue
  20. 17 8
      src/views/program/registered/ProjectArchiveForm.vue
  21. 3 3
      src/views/program/registered/ProjectArchiveFormDialog.vue
  22. 1 0
      src/views/program/registered/ProjectForm.vue
  23. 121 121
      src/views/program/registered/ProjectFormUpdate.vue
  24. 9 3
      src/views/program/registered/ProjectList.vue
  25. 23 11
      src/views/program/registered/ProjectThreeAuditForm.vue
  26. 3 4
      src/views/program/registered/ProjectThreeAuditFormDialog.vue

+ 6 - 0
src/api/program/ProgramProjectListInfoService.js

@@ -2,6 +2,12 @@ import request from '@/utils/httpRequest'
 import { ASSESS_PATH as prefix } from "../AppPath";
 
 export default class ProgramProjectListInfoService {
+	getOverArchiveFlag () {
+		return request({
+			url: prefix + "/program/projectList/getOverArchiveFlag",
+			method: "get",
+		})
+	}
   list (params) {
     return request({
       url: prefix + '/program/projectList/list',

+ 4 - 2
src/views/cw/invoice/InvoiceForm.vue

@@ -654,7 +654,7 @@
           billingPeopleId: this.$store.state.user.id,
           billingDate: '',
           collectDate: '',
-          billingPeopleReal: this.$store.state.user.id,
+          billingPeopleReal: '',
           reconciliationPeople: '',
           reconciliationArea: '',
           remarks: '',
@@ -737,7 +737,7 @@
           billingPeopleId: this.$store.state.user.id,
           billingDate: '',
           collectDate: '',
-          billingPeopleReal: this.$store.state.user.id,
+          billingPeopleReal: '',
           reconciliationPeople: '',
           reconciliationArea: '',
           remarks: '',
@@ -768,6 +768,7 @@
           financeInvoiceService.queryById(this.inputForm.id).then((data) => {
             this.inputForm = this.recover(this.inputForm, data)
             this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+			  console.log('this.inputForm ', this.inputForm)
             if (!this.commonJS.isEmpty(this.inputForm.billingWorkplaceRealId)) {
               this.bankList = []
               workClientService.queryById(this.inputForm.billingWorkplaceRealId).then((data) => {
@@ -781,6 +782,7 @@
                 }
               })
             }
+			  console.log('billingPeopleReal', this.inputForm.billingPeopleReal)
             if (this.commonJS.isEmpty(this.inputForm.financeInvoiceReceivablesDTOList) || this.inputForm.financeInvoiceReceivablesDTOList.length === 0) {
               this.inputForm.financeInvoiceReceivablesDTOList = []
             }

+ 2 - 0
src/views/cw/invoice/InvoiceFormTask.vue

@@ -836,6 +836,7 @@
             this.$refs.uploadComponent.clearUpload()
             this.inputForm = this.recover(this.inputForm, data)
             this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+			  console.log('this.inputForm', this.inputForm)
             if (!this.commonJS.isEmpty(this.inputForm.billingWorkplaceRealId)) {
               this.bankList = []
               workClientService.queryById(this.inputForm.billingWorkplaceRealId).then((data) => {
@@ -865,6 +866,7 @@
             if (this.commonJS.isEmpty(this.inputForm.billingPeopleId)) {
               this.inputForm.billingPeopleId = this.$store.state.user.id
             }
+            console.log('billingPeopleReal', this.inputForm.billingPeopleReal)
             if (this.commonJS.isEmpty(this.inputForm.billingPeopleReal)) {
               this.inputForm.billingPeopleReal = this.$store.state.user.id
             }

+ 2 - 2
src/views/cw/invoice/InvoiceList.vue

@@ -41,10 +41,10 @@
           </el-input-number>
         </el-form-item>
         <el-form-item v-if="showHideItem" prop="reconciliationPeopleName" label="对账人">
-          <UserSelect :limit='1' :userName="searchForm.reconciliationPeopleName" @getValue='(value, label) => {searchForm.reconciliationPeopleName = label}'></UserSelect>
+          <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' :userName="searchForm.operator" @getValue='(value, label) => {searchForm.operator = label}'></UserSelect>
+          <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

+ 1 - 1
src/views/cw/projectRecords/ProjectMembersEditForm.vue

@@ -33,7 +33,7 @@
                   <el-form-item label="现场负责人" prop="projectLeaderId"
                                 :rules="[
                    ]">
-                    <UserSelect :disabled="true" :limit='1' :value="inputForm.projectLeaderId" @getValue='(value) => {inputForm.projectLeaderId = value}'></UserSelect>
+                    <UserSelect :disabled="true" :limit='1' :modelValue="inputForm.projectLeaderId" @update:modelValue='(value) => {inputForm.projectLeaderId = value}'></UserSelect>
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">

+ 1 - 1
src/views/cw/projectRecords/ProjectRecordsTaskForm.vue

@@ -228,7 +228,7 @@
                   <el-form-item label="现场负责人" prop="projectLeaderId"
                                 :rules="[
                    ]">
-                    <UserSelect size="medium" :readonly="true" :disabled="status === 'audit' || status === 'taskFormDetail'" :limit='1' :value="inputForm.projectLeaderId" @getValue='(value) => {inputForm.projectLeaderId = value}'></UserSelect>
+                    <UserSelect size="medium" :readonly="true" :disabled="status === 'audit' || status === 'taskFormDetail'" :limit='1' :modelValue="inputForm.projectLeaderId" @update:modelValue='(value) => {inputForm.projectLeaderId = value}'></UserSelect>
                   </el-form-item>
                 </el-col>
                 <el-col :span="12">

+ 5 - 3
src/views/cw/reportManagement/ReportManagementAddForm.vue

@@ -109,7 +109,7 @@
                             // {required: true, message:'签字注师2不能为空', trigger:'change'}
                    ]">
               <!--                <el-input v-model="inputForm.signatureAnnotator2" placeholder="请填写签字注师2" clearable></el-input>-->
-              <UserSelect style="width: 100%" ref="userSelect2" :disabled="status === 'audit' || status === 'taskFormDetail'" :readonly="true" :limit='1' :modelValue="inputForm.signatureAnnotator2" @update:modelValue='(value) => {changeSignatory2(value)}'></UserSelect>
+              <UserSelect2 style="width: 100%" ref="userSelect2" :disabled="status === 'audit' || status === 'taskFormDetail'" :readonly="true" :limit='1' :modelValue="inputForm.signatureAnnotator2" @update:modelValue='(value) => {changeSignatory2(value)}'></UserSelect2>
             </el-form-item>
           </el-col>
 
@@ -129,7 +129,7 @@
                               // {required: true, message:'签字注师2不能为空', trigger:'blur'}
                    ]">
               <!--                <el-input v-model="inputForm.signatureAnnotator2" placeholder="请填写签字注师2" clearable></el-input>-->
-              <UserSelect style="width: 100%" ref="userSelect2" :disabled="status === 'audit' || status === 'taskFormDetail'" :readonly="true" :limit='1' :modelValue="inputForm.signatureAnnotator2" @update:modelValue='(value) => {changeSignatory2(value)}'></UserSelect>
+              <UserSelect2 style="width: 100%" ref="userSelect2" :disabled="status === 'audit' || status === 'taskFormDetail'" :readonly="true" :limit='1' :modelValue="inputForm.signatureAnnotator2" @update:modelValue='(value) => {changeSignatory2(value)}'></UserSelect2>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -529,7 +529,8 @@
   // import UpLoadComponent from '@/views/common/UpLoadComponentV2.1'
   import UpLoadComponent from '@/views/common/UpLoadComponent'
   import SelectTree from '@/components/treeSelect/treeSelect.vue'
-  import UserSelect from '../workClientInfo/clientUserSelect'
+  import UserSelect from '../workClientInfo/clientUserSelect/AccountantUserIndex'
+  import UserSelect2 from '../workClientInfo/clientUserSelect/AccountantUserIndex2'
   import UserSelectAll from '@/components/userSelect'
   import projectReportService from '@/api/cw/reportManagement/ProjectReportService'
   import EnterpriseSearchService from '@/api/cw/common/EnterpriseSearchService'
@@ -645,6 +646,7 @@
       UpLoadComponent,
       SelectTree,
       UserSelect,
+	  UserSelect2,
       ReportServiceUnitForm,
       ProjectRecoredChooseCom,
       UserSelectAll

+ 6 - 3
src/views/cw/reportManagement/ReportManagementForm.vue

@@ -113,7 +113,7 @@
                               :rules="[
                    ]">
                   <!--                <el-input v-model="inputForm.signatureAnnotator2" placeholder="请填写签字注师2" clearable></el-input>-->
-                  <UserSelect style="width: 100%" ref="userSelect2" :disabled="method === 'view'" :readonly="true" :limit='1' :modelValue="inputForm.signatureAnnotator2" @update:modelValue='(value) => {changeSignatory2(value)}'></UserSelect>
+                  <UserSelect2 style="width: 100%" ref="userSelect2" :disabled="method === 'view'" :readonly="true" :limit='1' :modelValue="inputForm.signatureAnnotator2" @update:modelValue='(value) => {changeSignatory2(value)}'></UserSelect2>
                 </el-form-item>
               </el-col>
 
@@ -132,7 +132,7 @@
                               {required: true, message:'签字注师2不能为空', trigger:'blur'}
                    ]">
                   <!--                <el-input v-model="inputForm.signatureAnnotator2" placeholder="请填写签字注师2" clearable></el-input>-->
-                  <UserSelect style="width: 100%" ref="userSelect2" :disabled="method === 'view'" :readonly="true" :limit='1' :modelValue="inputForm.signatureAnnotator2" @update:modelValue='(value) => {changeSignatory2(value)}'></UserSelect>
+                  <UserSelect2 style="width: 100%" ref="userSelect2" :disabled="method === 'view'" :readonly="true" :limit='1' :modelValue="inputForm.signatureAnnotator2" @update:modelValue='(value) => {changeSignatory2(value)}'></UserSelect2>
                 </el-form-item>
               </el-col>
               <el-col :span="12">
@@ -897,7 +897,9 @@
   import ReportReviewService from '@/api/cw/reportManagement/ReportReviewService'
   import UpLoadComponent from '@/views/common/UpLoadComponentV2.1'
   import SelectTree from '@/components/treeSelect/treeSelect.vue'
-  import UserSelect from '../workClientInfo/clientUserSelect'
+  // import UserSelect from '../workClientInfo/clientUserSelect'
+  import UserSelect from '../workClientInfo/clientUserSelect/AccountantUserIndex'
+  import UserSelect2 from '../workClientInfo/clientUserSelect/AccountantUserIndex2'
   import UserSelectAll from '@/components/userSelect'
   // import WorkClientChooseForm from '../workClientInfo/WorkClientChooseForm'
   // import WorkContractChooseCom from '../projectRecords/WorkContractChooseCom'
@@ -1037,6 +1039,7 @@
       UpLoadComponent,
       SelectTree,
       UserSelect,
+	  UserSelect2,
       // WorkClientChooseForm,
       // WorkContractChooseCom,
       UpLoadComponentDialog,

+ 1 - 1
src/views/cw/workClientInfo/WorkClientBillingChooseRadio.vue

@@ -117,7 +117,7 @@
         this.dataList = []
         this.loading = true
         this.searchForm.clientId = this.clientId
-        workClientService.getBillingListByClientId(this.searchForm).then(({data}) => {
+        workClientService.getBillingListByClientId(this.searchForm).then((data) => {
           this.dataList = data
           this.loading = false
         })

+ 123 - 0
src/views/cw/workClientInfo/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/cw/workClientInfo/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/cw/workClientInfo/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/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 () {
+        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/cw/workClientInfo/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/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 () {
+      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>

+ 1 - 0
src/views/cw/workContract/ContractFilePaperForm.vue

@@ -550,6 +550,7 @@
         this.showViewer = false
       },
       init (method, id) {
+      	console.log('this.businessId', this.businessId)
       	console.log('this.$store.state.user.office.name', this.$store.state.user.office.name)
         // console.log(method)
         // console.log('id', id)

+ 2 - 2
src/views/cw/workContract/ContractRegistration.vue

@@ -214,7 +214,7 @@
               <!--合同借用-->
               <el-button v-if="hasPermission('cw:workContract:borrow') && scope.row.status === '5' && scope.row.filedPaperType === '5' && (scope.row.borrowType === undefined || scope.row.borrowType === '0' || scope.row.borrowType === '1')" text type="primary" size="small" @click="borrow(scope.row)">借用</el-button>
               <!--借用撤回-->
-              <el-button v-if="hasPermission('cw:workContract:back') && scope.row.status === '5' && scope.row.filedPaperType === '5' && scope.row.borrowType === '2'" text type="primary" size="small" @click="rebackBorrow(scope.row)">撤回借用申请</el-button>
+              <el-button v-if="hasPermission('cw:workContract:back') && scope.row.status === '5' && scope.row.filedPaperType === '5' && scope.row.borrowType === '2' && (scope.row.borrowUserId === $store.state.user.id)" text type="primary" size="small" @click="rebackBorrow(scope.row)">撤回借用申请</el-button>
               <!--借用归还-->
               <el-button v-if="hasPermission('cw:workContract:reture') && scope.row.status === '5' && scope.row.filedPaperType === '5'  && scope.row.borrowType === '5'" text type="primary" size="small" @click="retureBorrow(scope.row)">归还合同</el-button>
 
@@ -362,7 +362,7 @@
       },
       // 获取数据列表
       refreshList () {
-        // console.log('user', this.user)
+        console.log('user', this.$store.state.user.id)
         this.loading = true
 			contractInfoService
 				.list({

+ 8 - 2
src/views/cw/workContract/CwWorkContractBorrowForm.vue

@@ -212,7 +212,10 @@
               if (this.commonJS.isEmpty(data.id)) {
                 contractInfoService.findById(this.inputForm.id).then((data) => {
                   this.inputForm = this.recover(this.inputForm, data)
-                  this.inputForm.borrowName = this.userName
+					if (this.commonJS.isEmpty(this.inputForm.borrowName)){
+						this.inputForm.borrowName = this.userName
+					}
+                  // this.inputForm.borrowName = this.userName
                   this.inputForm.borrowData = this.moment(new Date()).format('YYYY-MM-DD')
                   this.$refs.uploadFile.newUpload('view', data.contractProperList, 'cwWorkContract', null, null, null, null, false)
                   this.$refs.archiveFile.newUpload('view', data.contractInfoList, 'cwWorkContract', null, null, null, null, false)
@@ -227,7 +230,10 @@
                   this.$refs.archiveFile.newUpload('view', data.contractInfoList, 'cwWorkContract', null, null, null, null, false)
                 })
                 this.inputForm = this.recover(this.inputForm, data)
-                this.inputForm.borrowName = this.userName
+				  if (this.commonJS.isEmpty(this.inputForm.borrowName)){
+					  this.inputForm.borrowName = this.userName
+				  }
+                // this.inputForm.borrowName = this.userName
                 // this.inputForm.borrowData = new Date()
 				  this.inputForm.borrowData = this.moment(new Date()).format('YYYY-MM-DD')
                 this.loading = false

+ 189 - 0
src/views/dashboard/widgets/components/MyNoticePageList.vue

@@ -0,0 +1,189 @@
+<template>
+	<el-card class="box-card">
+		<template #header>
+			<div class="card-header">
+				<span>我的通知</span>
+				<el-button type="text" style="float:right" @click="toPendingList()">更多>></el-button>
+			</div>
+		</template>
+		<el-table :data="dataList" style="width: 100%" height="480">
+			<el-table-column label="实例标题" prop="title">
+				<template #default="scope">
+					<el-link  type="primary" :underline="false" @click="todo(scope.row)">{{scope.row.title}}</el-link>
+				</template>
+			</el-table-column>
+			<el-table-column
+				show-overflow-tooltip
+				label="流程名称"
+				prop="taskName"
+			></el-table-column>
+			<el-table-column
+				show-overflow-tooltip
+				label="流程发起人"
+				prop="createUser"
+			></el-table-column>
+			<el-table-column
+				show-overflow-tooltip
+				label="创建时间"
+				prop="createTime"
+			></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>
+	<WareHouseHistoryPopup ref="wareHouseHistoryPopup"></WareHouseHistoryPopup>
+</template>
+
+<script>
+	import WareHouseHistoryPopup from '@/views/materialManagement/wareHouseSummary/WareHouseHistoryPopup'
+// import notifyService from "@/api/notify/notifyService";
+import noticeService from '@/api/flowable/NoticeService'
+import taskService from "@/api/flowable/taskService";
+	import pick from "lodash.pick";
+export default {
+	title: "我的通知",
+	icon: "tongzhi",
+	description: "我的通知",
+	layout: {
+		w: 6,
+		h: 15,
+	},
+	components: {
+		WareHouseHistoryPopup,
+	},
+	data() {
+		return {
+			dataList: [],
+			typeList: [],
+			searchForm: {
+				title: '',
+				taskName: ''
+			},
+			tablePage: {
+				total: 0,
+				currentPage: 1,
+				pageSize: 10,
+				orders: []
+			},
+			loading: false,
+			visible: false,
+			currentTask: null,
+			processInstanceId: ''
+		};
+	},
+	mounted() {
+		this.refreshList();
+	},
+
+	activated() {
+		this.refreshList();
+	},
+	methods: {
+		todo (row) {
+			// console.log('row', row)
+			if (row.taskName === '库存提醒') {
+				// console.log('测试进来了')
+				this.$refs.wareHouseHistoryPopup.init(row.defId)
+				this.inputForm = {
+					id: row.id
+				}
+				noticeService.stockUpdate(this.inputForm)
+				this.resetSearch()
+			} else {
+				this.inputForm = {
+					taskId: '',
+					noticeId: ''
+				}
+				console.log('进来了+++', row.taskId)
+				taskService.getTaskDef({
+					procInsId: row.taskId,
+					procDefId: row.defId
+				}).then((data) => {
+					this.inputForm.taskId = row.taskId
+					this.inputForm.noticeId = row.noticeName
+					noticeService.update(this.inputForm)
+					// this.$router.push({
+					// 	path: '/flowable/task/TaskForm',
+					// 	query: {
+					// 		isShow: false,
+					// 		formReadOnly: true,
+					// 		formTitle: `${row.title}`,
+					// 		num: 2,
+					// 		title: `审批【${row.taskName || ''}】`,
+					// 		...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId')
+					// 	}
+					// })
+					this.$router.push({
+					  path: '/flowable/task/TaskFormDetail',
+					  query: {
+						  ...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+						  isShow: 'false',
+						  readOnly: true,
+						title: `审批【${row.taskName || ''}】`,
+						formTitle: `${row.title}`,
+						businessId: data.businessId,
+						  status: 'reback'
+					  }
+					})
+				})
+			}
+		},
+		// 获取数据列表
+		refreshList() {
+			this.loading = true
+			noticeService.list({
+				current: this.tablePage.currentPage,
+				size: this.tablePage.pageSize,
+				orders: this.tablePage.orders,
+				isSelf: true,
+				...this.searchForm
+			}).then((data) => {
+				this.dataList = data.records
+				this.tablePage.total = data.total
+				this.loading = false
+			})
+		},
+		// 当前页
+		currentChangeHandle({ currentPage, pageSize }) {
+			this.tablePage.currentPage = currentPage;
+			this.tablePage.pageSize = pageSize;
+			this.refreshList();
+		},
+		resetSearch() {
+			this.$refs.searchForm.resetFields();
+			this.refreshList();
+		},
+		toPendingList () {
+			// this.$router.push('./PendingList')
+			this.$router.push('/flowable/task/NoticePageList')
+		},
+	},
+};
+</script>
+<style scoped>
+	.box-card {
+		height: 100%;
+	}
+</style>

+ 15 - 45
src/views/dashboard/widgets/components/MyNotifyList.vue

@@ -11,7 +11,7 @@
 					<el-link
 						type="primary"
 						:underline="false"
-						@click="view(scope.row)"
+						@click="view(scope.row.id)"
 						>{{ scope.row.title }}</el-link
 					>
 				</template>
@@ -93,7 +93,7 @@
 						type="primary"
 						text
 						icon="view-filled"
-						@click="view(scope.row)"
+						@click="view(scope.row.id)"
 						>查看</el-button
 					>
 				</template>
@@ -125,26 +125,21 @@
 		</vxe-pager>
 	</el-card>
 	<NotifyForm ref="notifyForm" @refreshDataList="refreshList"></NotifyForm>
-	<WareHouseHistoryPopup ref="wareHouseHistoryPopup"></WareHouseHistoryPopup>
 </template>
 
 <script>
-	import WareHouseHistoryPopup from '@/views/materialManagement/wareHouseSummary/WareHouseHistoryPopup'
 import NotifyForm from "@/views/notify/NotifyForm.vue";
-// import notifyService from "@/api/notify/notifyService";
-import noticeService from '@/api/flowable/NoticeService'
-import taskService from "@/api/flowable/taskService";
+import notifyService from "@/api/notify/notifyService";
 export default {
-	title: "公告",
+	title: "我的公告",
 	icon: "tonggao5",
-	description: "公告",
+	description: "我的公告",
 	layout: {
 		w: 6,
 		h: 15,
 	},
 	components: {
 		NotifyForm,
-		WareHouseHistoryPopup,
 	},
 	data() {
 		return {
@@ -169,26 +164,14 @@ export default {
 		// 获取数据列表
 		refreshList() {
 			this.loading = true;
-			// notifyService
-			// 	.list({
-			// 		current: this.tablePage.currentPage,
-			// 		size: this.tablePage.pageSize,
-			// 		orders: this.tablePage.orders,
-			// 		isSelf: true,
-			// 		...this.searchForm,
-			// 	})
-			// 	.then((data) => {
-			// 		this.dataList = data.records;
-			// 		this.tablePage.total = data.total;
-			// 		this.loading = false;
-			// 	});
-			taskService.list({
-				current: this.tablePage.currentPage,
-				size: this.tablePage.pageSize,
-				orders: this.tablePage.orders,
-				isSelf: true,
-				...this.searchForm,
-			})
+			notifyService
+				.list({
+					current: this.tablePage.currentPage,
+					size: this.tablePage.pageSize,
+					orders: this.tablePage.orders,
+					isSelf: true,
+					...this.searchForm,
+				})
 				.then((data) => {
 					this.dataList = data.records;
 					this.tablePage.total = data.total;
@@ -213,21 +196,8 @@ export default {
 			this.refreshList();
 		},
 		// 查看
-		view(row) {
-			if (row.taskName === '库存提醒') {
-				// console.log('测试进来了')
-				this.$refs.wareHouseHistoryPopup.init(row.defId)
-				this.inputForm = {
-					id: row.id
-				}
-				noticeService.stockUpdate(this.inputForm).then((data) => {
-					this.refreshList()
-				})
-
-			} else {
-				this.$refs.notifyForm.init("read", row.id);
-			}
-
+		view(id) {
+			this.$refs.notifyForm.init("read", id);
 		},
 		resetSearch() {
 			this.$refs.searchForm.resetFields();

+ 237 - 0
src/views/flowable/task/NoticePageList.vue

@@ -0,0 +1,237 @@
+<template>
+  <div class="page">
+
+    <el-form :inline="true"  class="query-form" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+      <el-form-item label="标题" prop="title">
+        <el-input v-model="searchForm.title"></el-input>
+      </el-form-item>
+      <el-form-item label="流程名称" prop="taskName">
+        <el-input v-model="searchForm.taskName"></el-input>
+      </el-form-item>
+      <el-form-item>
+        <el-button  type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
+        <el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+      <div class="jp-table">
+        <vxe-toolbar :refresh="{query: refreshList}" custom>
+          <template #buttons>
+            <el-button type="primary" @click="readAll()">全部标记已读</el-button>
+            <el-button :disabled="$refs.todoTable && $refs.todoTable.getCheckboxRecords().length === 0" type="warning" @click="portionRead()">标记为已读</el-button>
+          </template>
+        </vxe-toolbar>
+
+		  <el-tabs v-model="type" type="card" @tab-click="handleClick">
+			  <el-tab-pane :key="index" v-for="(item,index) in typeList" :label="item.value" :name="item.value" :value="item.id"></el-tab-pane>
+		  </el-tabs>
+
+        <div style="height: calc(100% - 80px);">
+            <vxe-table
+              border="inner"
+              auto-resize
+              resizable
+              height="auto"
+              :loading="loading"
+              ref="todoTable"
+              show-header-overflow
+              show-overflow
+              highlight-hover-row
+              :menu-config="{}"
+              :print-config="{}"
+              :import-config="{}"
+              :export-config="{}"
+              :data="dataList"
+              :checkbox-config="{}">
+              <vxe-column type="seq" width="60" title="序号"></vxe-column>
+              <vxe-column type="checkbox"  width="60px"></vxe-column>
+              <vxe-column  title="实例标题" field="title" >
+                <template #default="scope">
+                  <el-link  type="primary" :underline="false" @click="todo(scope.row)">{{scope.row.title}}</el-link>
+                </template>
+              </vxe-column>
+              <vxe-column  title="流程名称" field="taskName" > </vxe-column>
+              <vxe-column  title="流程发起人" field="createUser" ></vxe-column>
+              <vxe-column
+                field="createTime"
+                title="创建时间">
+              </vxe-column>
+              <vxe-column  title="读取状态" field="type" ></vxe-column>
+            </vxe-table>
+            <vxe-pager
+              background
+              :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>
+        </div>
+      </div>
+       <el-dialog
+        title="查看进度"
+        :close-on-click-modal="true"
+        :visible.sync="visible"
+		draggable
+        width="70%"
+        height="600px">
+          <flow-chart ref="preview" :processInstanceId="processInstanceId"></flow-chart>
+        </el-dialog>
+    <WareHouseHistoryPopup ref="wareHouseHistoryPopup"></WareHouseHistoryPopup>
+  </div>
+</template>
+
+<script>
+  import WareHouseHistoryPopup from '@/views/materialManagement/wareHouseSummary/WareHouseHistoryPopup'
+  import taskService from '@/api/flowable/taskService'
+  import noticeService from '@/api/flowable/noticeService'
+  import pick from 'lodash.pick'
+  export default {
+    data () {
+      return {
+        dataList: [],
+        typeList: [],
+        searchForm: {
+          title: '',
+          taskName: ''
+        },
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        loading: false,
+        visible: false,
+        currentTask: null,
+        processInstanceId: ''
+      }
+    },
+    created () {
+      this.typeList = [
+        {id: '0', value: '未读'},
+        {id: '1', value: '已读'}
+      ]
+    },
+    activated () {
+      this.refreshList()
+    },
+    components: {
+      WareHouseHistoryPopup
+    },
+    methods: {
+      // 获取数据列表
+      refreshList () {
+        this.loading = true
+        if (this.commonJS.isEmpty(this.searchForm.type)) {
+          this.searchForm.type = '0'
+        }
+        noticeService.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.loading = false
+        })
+      },
+      // 当前页
+      currentChangeHandle ({ currentPage, pageSize }) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.refreshList()
+      },
+      todo (row) {
+        // console.log('row', row)
+        if (row.taskName === '库存提醒') {
+          // console.log('测试进来了')
+          this.$refs.wareHouseHistoryPopup.init(row.defId)
+          this.inputForm = {
+            id: row.id
+          }
+          noticeService.stockUpdate(this.inputForm)
+          this.resetSearch()
+        } else {
+          this.inputForm = {
+            taskId: '',
+            noticeId: ''
+          }
+          taskService.getTaskDef({
+            procInsId: row.taskId,
+            procDefId: row.defId
+          }).then((data) => {
+            this.inputForm.taskId = row.taskId
+            this.inputForm.noticeId = row.noticeName
+            noticeService.update(this.inputForm)
+            this.$router.push({
+              path: '/flowable/task/TaskForm',
+              query: {
+                isShow: false,
+                formReadOnly: true,
+                formTitle: `${row.title}`,
+                num: 2,
+                title: `审批【${row.taskName || ''}】`,
+                ...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title', 'businessId')
+              }
+            })
+          })
+        }
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.refreshList()
+      },
+      handleClick (tab) {
+        const val = tab.index
+        this.searchForm.type = val
+        this.refreshList()
+      },
+
+      // 全部已读
+      readAll () {
+        this.$confirm(`确定将全部信息标记为已读吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          noticeService.readAll().then((data) => {
+            this.loading = false
+            this.$message({
+              message: data,
+              type: 'success',
+              duration: 1500
+            })
+            this.refreshList()
+          })
+        })
+      },
+
+      // 部分已读
+      portionRead (id) {
+        let ids = id || this.$refs.todoTable.getCheckboxRecords().map(item => {
+          return item.id
+        }).join(',')
+        this.$confirm(`确定将选定信息标记为已读吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          this.loading = true
+          noticeService.portionRead(ids).then((data) => {
+            this.loading = false
+            this.$message({
+              message: data,
+              type: 'success',
+              duration: 1500
+            })
+            this.refreshList()
+          })
+        })
+      }
+    }
+  }
+</script>

+ 17 - 8
src/views/program/registered/ProjectArchiveForm.vue

@@ -200,7 +200,6 @@
             <el-col :span="12">
               <el-form-item label="租金评估(万元)" prop="rentEvaluation"
                             :rules="[
-                        {required: true, message:'租金评估不能为空', trigger:'blur'}
                  ]">
                 <el-input-number
                   v-model="inputForm.rentEvaluation"
@@ -257,6 +256,15 @@
               </el-form-item>
             </el-col>
 
+			  <el-col :span="12" v-if="inputForm.programProjectListInfo.projectMould === '1'">
+				  <el-form-item label="租金类型" prop="rentType"
+								:rules=" [
+                        {required: true, message:'租金类型不能为空', trigger:'blur'}
+                        ]" >
+					  <el-input v-model="inputForm.rentType" maxlength="64" placeholder="请填写租金类型"   clearable  ></el-input>
+				  </el-form-item>
+			  </el-col>
+
             <el-col :span="12">
               <el-form-item label="租金类型" prop="rentType"
                             :rules=" [
@@ -858,13 +866,14 @@
         }
         this.$refs['inputForm'].validate((valid) => {
           if (valid) {
-            if (this.commonJS.isEmpty(this.inputForm.waystEvaluation) &&
-              this.commonJS.isEmpty(this.inputForm.fixedAssetsEvaluation) &&
-              this.commonJS.isEmpty(this.inputForm.netAssetsEvaluation)) {
-              this.loading = false
-              this.$message.error('废旧物资评估值(万元)、固定资产评估值(万元)、净资产评估值,至少要填写一个!')
-              throw new Error()
-            }
+			  if (this.commonJS.isEmpty(this.inputForm.waystEvaluation) &&
+				  this.commonJS.isEmpty(this.inputForm.fixedAssetsEvaluation) &&
+				  this.commonJS.isEmpty(this.inputForm.rentEvaluation) &&
+				  this.commonJS.isEmpty(this.inputForm.netAssetsEvaluation)) {
+				  this.loading = false
+				  this.$message.error('废旧物资评估值(万元)、固定资产评估值(万元)、净资产评估值、租金评估,至少要填写一个!')
+				  throw new Error()
+			  }
             this.loading = true
             this.inputForm.reportFileList = this.$refs.uploadComponentReport.getDataList()
             this.inputForm.explainFileList = this.$refs.uploadComponentExplain.getDataList()

+ 3 - 3
src/views/program/registered/ProjectArchiveFormDialog.vue

@@ -119,7 +119,7 @@
                             :rules=" [
                         {required: true, message:'签字评估师1不能为空', trigger:'blur'},{required: true, message:'签字评估师1不能为空', trigger:'change'}
                         ]" >
-                <UserSelect size="large" :disabled="formReadOnly" :readonly="true" :limit='1' :value="inputForm.signatureEvaluatorFirst" @getValue='(value) => {inputForm.signatureEvaluatorFirst = value}'></UserSelect>
+                <UserSelect size="large" :disabled="formReadOnly" :readonly="true" :limit='1' :modelValue="inputForm.signatureEvaluatorFirst" @update:modelValue='(value) => {inputForm.signatureEvaluatorFirst = value}'></UserSelect>
               </el-form-item>
             </el-col>
 
@@ -129,7 +129,7 @@
                             :rules=" [
                         {required: true, message:'签字评估师2不能为空', trigger:'blur'},{required: true, message:'签字评估师2不能为空', trigger:'change'}
                         ]" >
-                <UserSelect size="large" :disabled="formReadOnly" :readonly="true" :limit='1' :value="inputForm.signatureEvaluatorSecond" @getValue='(value) => {inputForm.signatureEvaluatorSecond = value}'></UserSelect>
+                <UserSelect size="large" :disabled="formReadOnly" :readonly="true" :limit='1' :modelValue="inputForm.signatureEvaluatorSecond" @update:modelValue='(value) => {inputForm.signatureEvaluatorSecond = value}'></UserSelect>
               </el-form-item>
             </el-col>
             <el-col :span="12">
@@ -268,7 +268,7 @@
                             :rules=" [
                         {required: true, message:'当前处理人不能为空', trigger:'blur'},{required: true, message:'当前处理人不能为空', trigger:'change'}
                         ]" >
-                <UserSelect size="large" :disabled="formReadOnly" :readonly="true" :limit='1' :value="inputForm.currentDisposePerson" @getValue='(value) => {inputForm.currentDisposePerson = value}'></UserSelect>
+                <UserSelect size="large" :disabled="formReadOnly" :readonly="true" :limit='1' :modelValue="inputForm.currentDisposePerson" @update:modelValue='(value) => {inputForm.currentDisposePerson = value}'></UserSelect>
               </el-form-item>
             </el-col>
 

+ 1 - 0
src/views/program/registered/ProjectForm.vue

@@ -805,6 +805,7 @@
       this.programProjectListInfoService = new ProgramProjectListInfoService()
     },
     components: {
+		// ProjectThreeAuditForm: () => import('./ProjectThreeAuditForm'),
       ContractForm,
       SelectUserTree,
       UpLoadComponent,

+ 121 - 121
src/views/program/registered/ProjectFormUpdate.vue

@@ -519,61 +519,61 @@
           </el-button>
         </el-divider>
         <el-row  :gutter="15" >
-          <vxe-table
-            border
-            show-overflow
-            ref="clientTable"
-            class="vxe-table-element"
-            :data="inputForm.clientList"
-            style="margin-left: 5em"
-            @cell-click=""
-            @edit-closed=""
-            highlight-current-row
-            :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '#'}"
-          >
-            <vxe-table-column field="contacts" title="联系人" :edit-render="{}" align="center">
-              <template v-slot:edit="scope">
-                <el-input :disabled="true" v-model="scope.row.contacts" ></el-input>
-              </template>
-            </vxe-table-column>
-            <vxe-table-column field="clientType" title="人员类型" :edit-render="{name: '$select', options: clientTypes}" align="center">
-              <template v-slot:edit="scope">
-                <vxe-select v-model="scope.row.clientType"  transfer>
-                  <vxe-option
-                    v-for="item in clientTypes"
-                    :key="item.value"
-                    :value="item.value"
-                    :label="item.label">
-                  </vxe-option>
-                </vxe-select>
-              </template>
-            </vxe-table-column>
-            <vxe-table-column field="linkMobilePhoneFirst" title="联系方式1" :edit-render="{}" align="center">
-              <template v-slot:edit="scope">
-                <el-input :disabled="true" v-model="scope.row.linkMobilePhoneFirst" ></el-input>
-              </template>
-            </vxe-table-column>
-            <vxe-table-column field="linkMobilePhoneSecoed" title="联系方式2" :edit-render="{}" align="center">
-              <template v-slot:edit="scope">
-                <el-input :disabled="true" v-model="scope.row.linkMobilePhoneSecoed" ></el-input>
-              </template>
-            </vxe-table-column>
-            <vxe-table-column field="job" title="职位" :edit-render="{}" align="center">
-              <template v-slot:edit="scope">
-                <el-input v-model="scope.row.job" ></el-input>
-              </template>
-            </vxe-table-column>
-            <vxe-table-column field="remarks" title="备注" :edit-render="{}" align="center">
-              <template v-slot:edit="scope">
-                <el-input v-model="scope.row.remarks" ></el-input>
-              </template>
-            </vxe-table-column>
-            <vxe-table-column title="操作" width="100" align="center">
-              <template v-slot="scope">
-                <el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'client')">删除</el-button>
-              </template>
-            </vxe-table-column>
-          </vxe-table>
+          <el-col :span="24">
+			  <vxe-table
+				  border
+				  show-overflow
+				  ref="clientTable"
+				  class="vxe-table-element"
+				  :data="inputForm.clientList"
+				  style="margin-left: 5em"
+				  highlight-current-row
+				  :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '#'}"
+			  >
+				  <vxe-table-column field="contacts" title="联系人" :edit-render="{}" align="center">
+					  <template v-slot:edit="scope">
+						  <el-input :disabled="true" v-model="scope.row.contacts" ></el-input>
+					  </template>
+				  </vxe-table-column>
+				  <vxe-table-column field="clientType" title="人员类型" :edit-render="{name: '$select', options: clientTypes}" align="center">
+					  <template v-slot:edit="scope">
+						  <vxe-select v-model="scope.row.clientType"  transfer>
+							  <vxe-option
+								  v-for="item in clientTypes"
+								  :key="item.value"
+								  :value="item.value"
+								  :label="item.label">
+							  </vxe-option>
+						  </vxe-select>
+					  </template>
+				  </vxe-table-column>
+				  <vxe-table-column field="linkMobilePhoneFirst" title="联系方式1" :edit-render="{}" align="center">
+					  <template v-slot:edit="scope">
+						  <el-input :disabled="true" v-model="scope.row.linkMobilePhoneFirst" ></el-input>
+					  </template>
+				  </vxe-table-column>
+				  <vxe-table-column field="linkMobilePhoneSecoed" title="联系方式2" :edit-render="{}" align="center">
+					  <template v-slot:edit="scope">
+						  <el-input :disabled="true" v-model="scope.row.linkMobilePhoneSecoed" ></el-input>
+					  </template>
+				  </vxe-table-column>
+				  <vxe-table-column field="job" title="职位" :edit-render="{}" align="center">
+					  <template v-slot:edit="scope">
+						  <el-input v-model="scope.row.job" ></el-input>
+					  </template>
+				  </vxe-table-column>
+				  <vxe-table-column field="remarks" title="备注" :edit-render="{}" align="center">
+					  <template v-slot:edit="scope">
+						  <el-input v-model="scope.row.remarks" ></el-input>
+					  </template>
+				  </vxe-table-column>
+				  <vxe-table-column title="操作" width="100" align="center">
+					  <template v-slot="scope">
+						  <el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'client')">删除</el-button>
+					  </template>
+				  </vxe-table-column>
+			  </vxe-table>
+		  </el-col>
         </el-row>
 
 
@@ -584,72 +584,72 @@
           </el-button>
         </el-divider>
         <el-row  :gutter="15">
-          <vxe-table
-            border
-            show-overflow
-            show-footer
-            :footer-method="footerMethod"
-            ref="memberTable"
-            class="vxe-table-element"
-            :data="inputForm.members"
-            style="margin-left: 5em"
-            :key="memberKey"
-            @cell-click=""
-            @edit-closed=""
-            highlight-current-row
-            :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: false, icon: '#'}"
-          >
-            <vxe-table-column field="name"  title="姓名" :edit-render="{name: '$input'}" align="center">
-              <template v-slot:edit="scope">
-                <vxe-input v-model="scope.row.name" :disabled="commonJS.isNotEmpty(scope.row.userId)"  style="width: 100%" class="my-search">
-                  <template #suffix>
-<!--                    <i class="el-icon-search" @click="openUserSearch(scope.$rowIndex)"></i>-->
-                    <vxe-button  @click="openUserSearch(scope.$rowIndex)" type="text" content="" icon="el-icon-search" ></vxe-button>
-                  </template>
-                </vxe-input>
-              </template>
-            </vxe-table-column>
-            <vxe-table-column field="workHours" title="预计工时(时)" :edit-render="{name: '$input'}" align="center">
-              <template v-slot:edit="scope">
-                <vxe-input
-                  v-model="scope.row.workHours"
-                  type="float"
-                  digits="1"
-                  placeholder="请输入预计工时(时)"
-                  clearable>
-                </vxe-input>
-              </template>
-            </vxe-table-column>
-            <vxe-table-column align="center" field="type" title="人员类型" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_type')}">
-              <template v-slot:edit="scope">
-                <vxe-select v-model="scope.row.type" placeholder="请选择人员类型" clearable style="width: 100%;" transfer>
-                  <vxe-option
-                    v-for="item in $dictUtils.getDictList('program_registered_member_type')"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value">
-                  </vxe-option>
-                </vxe-select>
-              </template>
-            </vxe-table-column>
-            <vxe-table-column align="center" field="job" title="项目职务" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_position')}">
-              <template v-slot:edit="scope">
-                <vxe-select v-model="scope.row.job" placeholder="请选择项目职务" clearable style="width: 100%;" transfer>
-                  <vxe-option
-                    v-for="item in $dictUtils.getDictList('program_registered_member_position')"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value">
-                  </vxe-option>
-                </vxe-select>
-              </template>
-            </vxe-table-column>
-            <vxe-table-column title="操作" width="100" align="center">
-              <template v-slot="scope">
-                <el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'member')">删除</el-button>
-              </template>
-            </vxe-table-column>
-          </vxe-table>
+          <el-col :span="24">
+			  <vxe-table
+				  border
+				  show-overflow
+				  show-footer
+				  :footer-method="footerMethod"
+				  ref="memberTable"
+				  class="vxe-table-element"
+				  :data="inputForm.members"
+				  style="margin-left: 5em"
+				  :key="memberKey"
+				  highlight-current-row
+				  :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: false, icon: '#'}"
+			  >
+				  <vxe-table-column field="name"  title="姓名" :edit-render="{name: '$input'}" align="center">
+					  <template v-slot:edit="scope">
+						  <vxe-input v-model="scope.row.name" :disabled="commonJS.isNotEmpty(scope.row.userId)"  style="width: 100%" class="my-search">
+							  <template #suffix>
+								  <!--                    <i class="el-icon-search" @click="openUserSearch(scope.$rowIndex)"></i>-->
+								  <vxe-button  @click="openUserSearch(scope.$rowIndex)" type="text" content="" icon="el-icon-search" ></vxe-button>
+							  </template>
+						  </vxe-input>
+					  </template>
+				  </vxe-table-column>
+				  <vxe-table-column field="workHours" title="预计工时(时)" :edit-render="{name: '$input'}" align="center">
+					  <template v-slot:edit="scope">
+						  <vxe-input
+							  v-model="scope.row.workHours"
+							  type="float"
+							  digits="1"
+							  placeholder="请输入预计工时(时)"
+							  clearable>
+						  </vxe-input>
+					  </template>
+				  </vxe-table-column>
+				  <vxe-table-column align="center" field="type" title="人员类型" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_type')}">
+					  <template v-slot:edit="scope">
+						  <vxe-select v-model="scope.row.type" placeholder="请选择人员类型" clearable style="width: 100%;" transfer>
+							  <vxe-option
+								  v-for="item in $dictUtils.getDictList('program_registered_member_type')"
+								  :key="item.value"
+								  :label="item.label"
+								  :value="item.value">
+							  </vxe-option>
+						  </vxe-select>
+					  </template>
+				  </vxe-table-column>
+				  <vxe-table-column align="center" field="job" title="项目职务" :edit-render="{name: '$select', options: $dictUtils.getDictList('program_registered_member_position')}">
+					  <template v-slot:edit="scope">
+						  <vxe-select v-model="scope.row.job" placeholder="请选择项目职务" clearable style="width: 100%;" transfer>
+							  <vxe-option
+								  v-for="item in $dictUtils.getDictList('program_registered_member_position')"
+								  :key="item.value"
+								  :label="item.label"
+								  :value="item.value">
+							  </vxe-option>
+						  </vxe-select>
+					  </template>
+				  </vxe-table-column>
+				  <vxe-table-column title="操作" width="100" align="center">
+					  <template v-slot="scope">
+						  <el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'member')">删除</el-button>
+					  </template>
+				  </vxe-table-column>
+			  </vxe-table>
+		  </el-col>
         </el-row>
       </el-form>
       <!--        附件-->

+ 9 - 3
src/views/program/registered/ProjectList.vue

@@ -54,6 +54,7 @@
       <vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" export custom>
         <template #buttons>
           <el-button v-if="hasPermission('program:registered:add')" type="primary" icon="el-icon-plus" @click="start()">新建</el-button>
+<!--          <el-button v-if="hasPermission('program:registered:add') && overArchiveFlag === 0" type="primary" icon="el-icon-plus" @click="start()">新建</el-button>-->
           <el-button v-if="hasPermission('program:registered:del')" type="danger"   icon="el-icon-delete" @click="deleteAll()" :disabled="$refs.typeDictTable && $refs.typeDictTable.getCheckboxRecords().length === 0" plain>删除</el-button>
         </template>
       </vxe-toolbar>
@@ -133,7 +134,7 @@
           </vxe-column>
           <vxe-column min-width="120" align="center" title="项目归档" field="archiveStatus">
             <template #default="scope">
-              <el-button @click="archiveDetail(scope.row)" :type="$dictUtils.getDictLabel('program_project_list_info_status_info', scope.row.archiveStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("program_project_list_info_status", scope.row.archiveStatus, '未登记')}} </el-button>
+              <el-button @click="archiveDetail(scope.row)" :type="$dictUtils.getDictLabel('program_project_list_info_status_info', scope.row.archiveStatus, '')" effect="dark" >{{$dictUtils.getDictLabel("program_project_archive_list_info_status", scope.row.archiveStatus, '未登记')}} </el-button>
             </template>
           </vxe-column>
           <vxe-column title="操作" min-width="200px" fixed="right" align="center">
@@ -247,7 +248,6 @@
   import ProofreadForm from './ProofreadForm'
   import ProofreadBrowseForm from './ProofreadBrowseForm'
   import WorkContractForm2 from '@/views/workContract/WorkContractForm2'
-  import SelectUserTree from '@/views/utils/treeUserSelect'
   import pick from 'lodash.pick'
   import taskService from '@/api/flowable/taskService'
   import processService from '@/api/flowable/processService'
@@ -258,6 +258,7 @@
   export default {
     data () {
       return {
+		  overArchiveFlag: '',
         applyUserName: '',
         showHideItem: false,
         showHideIcon: 'el-icon-arrow-down',
@@ -312,7 +313,6 @@
     components: {
       ProjectForm,
       WorkContractForm2,
-      SelectUserTree,
       ProofreadForm,
       ProofreadBrowseForm,
       ProjectFormUpdate,
@@ -381,6 +381,12 @@
           this.tablePage.total = data.total
           this.loading = false
         })
+		  // 获取当前人是否存在超期未归档项目数据信息
+		  this.programProjectListInfoService.getOverArchiveFlag().then(({data}) => {
+			  if (this.commonJS.isNotEmpty(data)) {
+				  this.overArchiveFlag = data
+			  }
+		  })
         // 获取当前登录人的所属项目id集合
         this.programProjectListInfoService.getHaveProjectIds().then((data) => {
           if (this.commonJS.isNotEmpty(data)) {

+ 23 - 11
src/views/program/registered/ProjectThreeAuditForm.vue

@@ -5,9 +5,16 @@
         <el-row type="flex" justify="end">
           <el-button @click="downloadFirstAuditTpl">下载</el-button>
         </el-row>
-        <el-divider content-position="left"><i class="el-icon-document"></i> 项目校审</el-divider>
       </div>
-      <el-form size="large" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'"
+		<el-divider content-position="left" v-if="commonJS.isEmpty(tabName) && (inputForm.auditLevel === '1' || inputForm.auditLevel === '2' || inputForm.auditLevel === '3')">
+			<el-link
+				@click="viewProjectInfo(inputForm.programId)" type="primary" style="font-weight: bold;"><i class="el-icon-document"></i>
+				项目信息
+			</el-link>
+
+		</el-divider>
+		<el-divider content-position="left" v-else><i class="el-icon-document"></i> 项目校审</el-divider>
+		<el-form size="large" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
                label-width="125px" @submit.native.prevent>
           <el-row  :gutter="15">
             <el-col :span="12">
@@ -36,7 +43,7 @@
               <el-form-item label="专业评估人员" prop="auditPeopleList"
                             :rules="[{required: true, message: '专业评估人员不能为空', trigger: 'blur'},{required: true, message: '专业评估人员不能为空', trigger: 'change'}]"
               >
-                <UserSelect :disabled="status === 'audit' || status === 'taskFormDetail'" :readonly="true" :limit="10" :modelValue="inputForm.auditPeopleList" @update:modelValue='(value) => {inputForm.auditPeopleList = value}'></UserSelect>
+                <UserSelect :disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" :readonly="true" :limit="10" :modelValue="inputForm.auditPeopleList" @update:modelValue='(value) => {inputForm.auditPeopleList = value}'></UserSelect>
               </el-form-item>
             </el-col>
             <el-col :span="12">
@@ -64,7 +71,7 @@
               <el-form-item label="选择项目审核人" prop="auditPeople"
                             :rules="[{required: true, message: '审批人不能为空', trigger: 'blur'},{required: true, message: '审批人不能为空', trigger: 'change'}]"
               >
-                <UserSelect :disabled="status === 'audit' || status === 'taskFormDetail'"
+                <UserSelect :disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'"
 							:readonly="true" :limit="1"
 							:modelValue="inputForm.auditPeople"
 							@update:modelValue='(value) => {inputForm.auditPeople = value}'>
@@ -117,19 +124,19 @@
             </el-col>
 			  <el-col :span="24">
             <el-form size="large" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"
-                     label-width="125px" @submit.native.prevent :disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'">
+                     label-width="125px" @submit.native.prevent >
               <el-col :span="24">
                 <el-form-item label="执行人员保留意见" prop="retainOpinion"
                               :rules="[
                  ]">
-                  <el-input type="textarea" :rows="5" maxlength="500" v-model="inputForm.retainOpinion" placeholder="请填写执行人员保留意见"     ></el-input>
+                  <el-input type="textarea" :disabled="status === 'taskFormDetail' || method === 'view'" :rows="5" maxlength="500" v-model="inputForm.retainOpinion" placeholder="请填写执行人员保留意见"     ></el-input>
                 </el-form-item>
               </el-col>
               <el-col :span="24">
                 <el-form-item label="审核人员审核未修改意见" prop="changeOpinion"
                               :rules="[
                  ]">
-                  <el-input type="textarea" :rows="5"  maxlength="500" v-model="inputForm.changeOpinion" placeholder="请填写审核人员审核未修改意见"     ></el-input>
+                  <el-input type="textarea" :disabled="status === 'taskFormDetail' || method === 'view'" :rows="5"  maxlength="500" v-model="inputForm.changeOpinion" placeholder="请填写审核人员审核未修改意见"     ></el-input>
                 </el-form-item>
               </el-col>
             </el-form>
@@ -143,6 +150,7 @@
 
     </div>
     <ProjectThreeAuditFormDialog ref="threeAuditDetail"></ProjectThreeAuditFormDialog>
+	  <ProjectForm  ref="projectFormView"></ProjectForm>
   </div>
 </template>
 
@@ -150,10 +158,10 @@
   import UpLoadComponent from '@/views/common/UpLoadComponent'
   import UserSelect from '@/components/userSelect'
   import SelectUserTree from '@/views/utils/treeUserSelect'
-  import RosterSelectForm from '@/views/common/RosterSelectForm'
   import ProgramProjectListInfoService from '@/api/program/ProgramProjectListInfoService'
   import WangEditor from '@/components/editor/WangEditorNoMenu'
   import ProjectThreeAuditFormDialog from './ProjectThreeAuditFormDialog'
+
   export default {
     props: {
       businessId: {
@@ -239,8 +247,8 @@
       }
     },
     components: {
+		ProjectForm: () => import('./ProjectForm.vue'),
       UpLoadComponent,
-      RosterSelectForm,
       UserSelect,
       WangEditor,
       SelectUserTree,
@@ -286,7 +294,7 @@
         this.$nextTick(() => {
           this.$refs.inputForm.resetFields()
           this.loading = true
-			if (method === 'view' || this.status === 'audit' || this.status === 'taskFormDetail') {
+			if (method === 'view' || this.status === 'taskFormDetail') {
 				// 禁用富文本
 				this.$refs.contents1Editor.disable()
 				this.$refs.contents2Editor.disable()
@@ -638,7 +646,11 @@
       // 打开校审明细页面
       openAuditDetail (programId, auditLevel) {
         this.$refs.threeAuditDetail.init(programId, auditLevel)
-      }
+      },
+		// 查看
+		viewProjectInfo (projectId) {
+			this.$refs.projectFormView.init('view', projectId, 'auditId1', 'auditId2', 'auditId3', 'archiveId')
+		}
     }
   }
 </script>

+ 3 - 4
src/views/program/registered/ProjectThreeAuditFormDialog.vue

@@ -38,7 +38,7 @@
               <el-form-item label="专业评估人员" prop="auditPeopleList"
                             :rules="[{required: true, message: '专业评估人员不能为空', trigger: 'blur'},{required: true, message: '专业评估人员不能为空', trigger: 'change'}]"
               >
-                <UserSelect size="large" :disabled="true" :readonly="true" :limit='10' :value="inputForm.auditPeopleList" @getValue='(value) => {inputForm.auditPeopleList = value}'></UserSelect>
+                <UserSelect size="large" :disabled="true" :readonly="true" :limit='10' :modelValue="inputForm.auditPeopleList" @update:modelValue='(value) => {inputForm.auditPeopleList = value}'></UserSelect>
               </el-form-item>
             </el-col>
             <el-col :span="12">
@@ -66,7 +66,7 @@
               <el-form-item label="选择项目审核人" prop="auditPeople"
                             :rules="[{required: true, message: '审批人不能为空', trigger: 'blur'},{required: true, message: '审批人不能为空', trigger: 'change'}]"
               >
-                <UserSelect size="large" :disabled="true" :readonly="true" :limit='1' :value="inputForm.auditPeople" @getValue='(value) => {inputForm.auditPeople = value}'></UserSelect>
+                <UserSelect size="large" :disabled="true" :readonly="true" :limit='1' :modelValue="inputForm.auditPeople" @update:modelValue='(value) => {inputForm.auditPeople = value}'></UserSelect>
               </el-form-item>
             </el-col>
           </el-row>
@@ -151,7 +151,6 @@
   import UpLoadComponent from '@/views/common/UpLoadComponent'
   import UserSelect from '@/components/userSelect'
   import SelectUserTree from '@/views/utils/treeUserSelect'
-  import RosterSelectForm from '@/views/common/RosterSelectForm'
   import ProgramProjectListInfoService from '@/api/program/ProgramProjectListInfoService'
   import WangEditor from '@/components/editor/WangEditorNoMenu'
   export default {
@@ -206,7 +205,6 @@
     },
     components: {
       UpLoadComponent,
-      RosterSelectForm,
       UserSelect,
       WangEditor,
       SelectUserTree
@@ -283,6 +281,7 @@
                 }
               })
               this.inputForm.auditPeopleList = p
+				console.log('this.inputForm.auditPeopleList', this.inputForm.auditPeopleList)
             } else {
               this.inputForm.auditPeopleList = ''
             }