Browse Source

查核列表批量编辑

yuwenfen 4 years ago
parent
commit
79a91fa779

+ 260 - 141
pages/editCheckList/editCheckList.vue

@@ -1,47 +1,52 @@
 <template>
 	<view class="check-map-list">
-		<view class="item"
-			v-for="(item, index) in checkList"
-			:key="index">
-			<view class="title-wrap">
-				<text>{{item.deptName}}</text>
-				<view>
-					<image src="../../static/icon-map.png"></image>
-					<text>{{item.deptClassName}}</text>
-				</view>
-			</view>
-			<view class="content">
-				<text>{{item.decs}}</text>
-				<text>
-					要点概览:{{item.checkPointNames}}
-				</text>
-			</view>
-			<view class="footer">
-			 <view class="row" @click="checkEdit(item, index, '指派查核人员')">
-			 	 <text class="label">查核人</text>
-				 <view class="content">
-				 	 <text :class="['base-text', item.empName ? 'black-color' : '']">
-						 {{ item.empName ? item.empName : '选择查核成员'}}
-					 </text>
-				 </view>
-				 <image class="arrow" src="/static/images/icon-more.png"></image>
-			 </view>
-			 <view class="row" @click="checkEdit(item, index, '设置查核时间')">
-			 	 <text class="label">计划时间</text>
-				 <view class="content">
-				 	 <text :class="['base-text', item.startDate ? 'black-color' : '']">
-					   {{ item.startDate ? item.startDate : '选择起始时间' }}
-					 </text>
-				 	 <text class="center-text">至</text>
-					 <text :class="['base-text', item.endDate ? 'black-color' : '']">
-					   {{ item.endDate ? item.endDate : '选择结束时间' }}
-					 </text>
-				 </view>
-				 <image class="arrow" src="/static/images/icon-more.png"></image>
-			 </view>
-			</view>
+    <scroll-view class="scroll-y" scroll-y="true">
+      <view class="item"
+	    	v-for="(item, index) in checkList"
+	    	:key="index">
+	    	<view class="title-wrap">
+	    		<text>{{item.deptName}}</text>
+	    		<view>
+	    			<image src="../../static/icon-map.png"></image>
+	    			<text>{{item.deptClassName}}</text>
+	    		</view>
+	    	</view>
+	    	<view class="content">
+	    		<text>{{item.decs}}</text>
+	    		<text>
+	    			要点概览:{{item.checkPointNames}}
+	    		</text>
+	    	</view>
+	    	<view class="footer">
+	    	 <view class="row" @click="checkEdit(item, index, '指派查核人员')">
+	    	 	 <text class="label">查核人</text>
+	    		 <view class="content">
+	    		 	 <text :class="['base-text', item.empName ? 'black-color' : '']">
+	    				 {{ item.empName ? item.empName : '选择查核成员'}}
+	    			 </text>
+	    		 </view>
+	    		 <image class="arrow" src="/static/images/icon-more.png"></image>
+	    	 </view>
+	    	 <view class="row" @click="checkEdit(item, index, '设置查核时间')">
+	    	 	 <text class="label">计划时间</text>
+	    		 <view class="content">
+	    		 	 <text :class="['base-text', item.startDate ? 'black-color' : '']">
+	    			   {{ item.startDate ? item.startDate : '选择起始时间' }}
+	    			 </text>
+	    		 	 <text class="center-text">至</text>
+	    			 <text :class="['base-text', item.endDate ? 'black-color' : '']">
+	    			   {{ item.endDate ? item.endDate : '选择结束时间' }}
+	    			 </text>
+	    		 </view>
+	    		 <image class="arrow" src="/static/images/icon-more.png"></image>
+	    	 </view>
+	    	</view>
+	    </view>
+    </scroll-view>
+		<view class="null" v-if="checkList.length === 0">暂无数据</view>
+    <view class="fixed-buttom-btn" @click="submit">
+			<text class="btn-text">完成</text>
 		</view>
-		<!-- <view class="null" v-if="checkList.length === 0">暂无数据</view> -->
 	</view>
 </template>
 
@@ -66,62 +71,152 @@
         // 计划开始时间
         startDate: '',
         // 计划结束时间
-        endDate: ''
+        endDate: '',
+        multiple: 'false',
+        planList: []
 			};
 		},
-    onLoad({ situationId, checkId, checkGroupId, startDate, endDate }){
+    onLoad({ situationId, checkId, checkGroupId, startDate, endDate, multiple }){
       console.log(99999)
       this.getCheckList(checkId);
-      this.checkGroupId = checkGroupId;
-      this.situationId = situationId;
-      this.checkId = checkId;
+      this.checkGroupId = checkGroupId ? +checkGroupId : 0;
+      this.situationId = situationId ? +situationId : 0;
+      this.checkId = checkId ? +checkId : 0;
       this.startDate = startDate;
       this.endDate = endDate;
+      this.multiple = multiple;
     },
 		methods: {
-      checkEdit(data, index, title) {
-        if(data.startDate){ // 分配开始时间有,需要与当前时间做对比
-          this.$store.dispatch({
-            type: "commActions",
-            key: "getDateStr" ,
-          }).then((dateStr) => {
-            if(dateStr) {
-              if (moment(data.startDate).valueOf() > moment(dateStr).valueOf()) { // 弹窗提示
-                uni.showModal({
-                  content: '因查核计划已开始,故不可修改',
-                  showCancel: false
-                });
-              }else {
-                this.gotoAllocationPerson(data, index, title);
-              }
+      // 完成
+      submit() {
+        // baseEmpList: 第一次计划修改的数据; changePlanList: 批量分配,记录第一次计划修改数据的信息;  multipleEmpList: 批量修改的数据
+        let baseEmpList = [], changePlanList = [], multipleEmpList = [];
+        // planStartTimestamp: 开始计划时间戳;
+        let planStartTimestamp = this.dateToTimestamp(this.startDate);
+        this.checkList.map((item, i) => {
+          const {checkId, deptId, empId, empName, startDate, endDate} = item;
+          if(empId || empName || startDate || endDate){
+            baseEmpList.push({
+              checkId,
+              deptId,
+              empId,
+              empName,
+              startDate: startDate || '',
+              endDate: endDate || ''
+            });
+            if(this.multiple === 'true'){ // 批量分配
+              changePlanList.push({
+                index: i, // 第一次计划修改的下标
+                baseEmpListIndex: baseEmpList.length -1,
+                startDiffTimestamp: startDate ? this.dateToTimestamp(startDate) - planStartTimestamp : 0, // 开始时间差
+                endDifTimestamp: endDate ? this.dateToTimestamp(endDate) - planStartTimestamp : 0 // 结束时间差
+              });
             }
-          });
-        }else {// 跳转编辑页面
-          this.gotoAllocationPerson(data, index, title);
+          }
+        });
+        console.log(1, this.checkList)
+        if(this.multiple === 'true') { // 批量分配
+          this.$store.dispatch({
+		      	type: 'planList/commActions',
+		      	payload: {
+		      		key: 'planList',
+		      		data:{situationId: this.situationId}
+		      	}
+		      }).then((planList) => {
+            (planList || []).map(((planItem, planI) => {
+               if(planI != 0){ // 过滤掉第一条
+                 // 计划开始时间戳
+                 let planStartTimestamp = planItem.startDate ? this.dateToTimestamp(planItem.startDate + ' 00:00') : 0;
+                 // 计划结束时间戳
+                 let planEndTimestamp = planItem.endDate ? this.dateToTimestamp(planItem.endDate + ' 23:59') : 0;
+
+                 planItem.empList && planItem.empList.map((empItem, empI) => {
+                   // 当前分配明细
+                   let currentEmp = changePlanList.find(item => item.index === empI);
+                   if(currentEmp){
+                     const { baseEmpListIndex, startDiffTimestamp, endDifTimestamp } = currentEmp;
+                     const { empId, empName } = baseEmpList[baseEmpListIndex] || {};
+                     multipleEmpList.push({
+                       empId,
+                       empName,
+                       checkId: empItem.checkId,
+                       deptId: empItem.deptId,
+                       startDate: (planStartTimestamp && startDiffTimestamp)
+                         ? this.getDateStr(planStartTimestamp, planEndTimestamp, startDiffTimestamp, planItem.endDate)
+                         : '',
+                       endDate: (planStartTimestamp && endDifTimestamp)
+                         ? this.getDateStr(planStartTimestamp, planEndTimestamp, endDifTimestamp, planItem.endDate)
+                         : ''
+                     });
+                   }
+                })
+               }
+            }))
+            multipleEmpList = [...baseEmpList, ...multipleEmpList];
+            console.log('批量',multipleEmpList )
+            this.batchDistribute(multipleEmpList);
+          })
+        }else { // 单个分配
+          this.batchDistribute(baseEmpList);
         }
       },
-			// 打开人员列表页面
-			gotoAllocationPerson(data, index, title) {
-        let details = {
-          index, // 修改的下标
-          title, // 标题
-          situationId: this.situationId,
-          checkId: this.checkId,
-          checkGroupId: this.checkGroupId,
-          planStartDate: this.startDate + ' 00:00',
-          planEndDate: this.endDate + ' 23:59',
-          empId: data.empId,
-          empName: data.empName,
-          startDate: data.startDate,
-          endDate: data.endDate
+      /**
+       * 获取时间字符串
+       * @param {Number} startTimestamp 计划开始时间戳
+			 * @param {Number} endTimestamp 计划结束时间戳
+			 * @param {Number} diffTimestamp 第一次计划中的时间差
+			 * @param {String} endDateStr 计划结束时间字符串
+       */
+      getDateStr(startTimestamp, endTimestamp, diffTimestamp, endDateStr) {
+        if((startTimestamp + diffTimestamp) > endTimestamp){ // 超出计划结束时间, 则取计划结束时间
+          return endDateStr;
+        }else {
+          return moment(startTimestamp + diffTimestamp).format('YYYY-MM-DD HH:mm');
+        }
+      },
+      // 分配单位查核人员
+      batchDistribute(empList) {
+        this.$store.dispatch({
+          type: 'editCheckList/commActions',
+          key: "batchDistribute",
+          data: { empList }
+        }).then(data => {
+          if(data){
+            uni.redirectTo({
+              url: `/pages/planList/planList?situationId=${this.situationId}&checkGroupId=${this.checkGroupId}`
+            });
+          }
+        });
+      },
+      // 日期时间转换为时间戳
+      dateToTimestamp(dataStr) {
+        return dataStr ? moment(dataStr).valueOf() : 0
+      },
+      checkEdit(data, index, title) {
+        if(data.completeState){ // 计划已开始, 不能编辑查核人和计划时间
+          uni.showModal({
+            content: '因查核计划已开始,故不可修改',
+            showCancel: false
+          });
+        }else {// 跳转编辑页面
+          const { empId, empName, startDate, endDate } = data;
+          let details = {
+            index, // 修改的下标
+            title, // 标题
+            empId,
+            empName,
+            startDate,
+            endDate,
+            situationId: this.situationId, //  情境id (批量修改有,不然为0)
+            checkId: this.checkId, // 查核id
+            checkGroupId: this.checkGroupId, //查核组id
+            planStartDate: this.startDate, // 计划开始时间
+            planEndDate: this.endDate // 计划结束时间
+          }
+          uni.navigateTo({
+			  	  url: `/pages/allocationPerson/allocationPerson?details=${encodeURIComponent(JSON.stringify(details))}`
+			  	});
         }
-        uni.navigateTo({
-				   url: `/pages/allocationPerson/allocationPerson?details=${encodeURIComponent(JSON.stringify(details))}`
-				});
-			},
-			// 打开日期选择页面
-			openDatePickPage(data) {
-
       },
       // 获取查核列表
       getCheckList(checkId) {
@@ -130,79 +225,103 @@
           key: "getCheckList",
           data: { checkId }
         }).then(data => {
-          this.$store.commit({
-            type: 'editCheckList/comChangeState',
-            key: 'checkList',
-            data: data || []
-          })
+          this.$store.dispatch({
+            type: "commActions",
+            key: "getDateStr",
+          }).then((dateStr) => {
+            if (dateStr) {
+              this.$store.commit({
+                type: 'editCheckList/comChangeState',
+                key: 'checkList',
+                data: (data || []).map(item => {
+                  if (item.startDate && moment(item.startDate).valueOf() < moment(dateStr).valueOf()) {
+                    return {
+                      ...item,
+                      completeState: true // true:说明计划已开始, 不能编辑查核人和计划时间
+                    }
+                  }else {
+                    return item
+                  }
+                })
+              });
+            }
+          });
         });
       },
-      // 获取当前时间
-      getDateStr() {
+      // 获取计划列表
+      getPlanList() {
         this.$store.dispatch({
-          type: "commActions",
-           key: "getDateStr" ,
-        }).then((data) => {
-          if (data) {
-            console.log(8, data)
-          }
-        });
-      },
+		    	type: 'planList/commActions',
+		    	payload: {
+		    		key: 'planList',
+		    		data:{
+		    			situationId: this.situationId
+		    		}
+		    	}
+		    }).then((data) => {
+          this.planList = data || [];
+        })
+      }
 		}
 	}
 </script>
 
 <style lang="less">
 	.check-map-list {
-		padding: 25rpx;
+    height: 100%;
 
-		.footer {
+    .scroll-y {
+			height: calc(100% - 87.5rpx);
+      padding-top: 25rpx;
 
-			.row {
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				border-top: 1px solid #DADEE6;
-				height: 62.5rpx;
-				padding: 0 25rpx;
-				font-size: 22.5rpx;
+      .footer {
 
-				.label {
-					color: #525866;
-					width: 93.75rpx;
-				}
+	    	.row {
+	    		display: flex;
+	    		align-items: center;
+	    		justify-content: space-between;
+	    		border-top: 1px solid #DADEE6;
+	    		height: 62.5rpx;
+	    		padding: 0 25rpx;
+	    		font-size: 22.5rpx;
 
-				.content {
-					display: flex;
-					flex-direction: row;
-					align-items: center;
-					flex: 1;
-					height: 100%;
-					padding: 0 25rpx;
+	    		.label {
+	    			color: #525866;
+	    			width: 93.75rpx;
+	    		}
 
-					.base-text {
-						flex: 1;
-						line-height: 62.5rpx;
-						color: #B8BECC;
-						font-weight: normal;
-					}
+	    		.content {
+	    			display: flex;
+	    			flex-direction: row;
+	    			align-items: center;
+	    			flex: 1;
+	    			height: 100%;
+	    			padding: 0 25rpx;
 
-					.center-text {
-						padding: 0 25rpx;
-						color: #292C33;
-					}
+	    			.base-text {
+	    				flex: 1;
+	    				line-height: 62.5rpx;
+	    				color: #B8BECC;
+	    				font-weight: normal;
+	    			}
 
-					.black-color {
-						color: #292C33;
-					}
-				}
+	    			.center-text {
+	    				padding: 0 25rpx;
+	    				color: #292C33;
+	    			}
 
-				.arrow {
-					width: 12.5rpx;
-					height: 21.25rpx;
-				}
-			}
-		}
+	    			.black-color {
+	    				color: #292C33;
+	    			}
+	    		}
+
+	    		.arrow {
+	    			width: 12.5rpx;
+	    			height: 21.25rpx;
+	    		}
+	    	}
+	    }
+    }
 
 		.null {
 			text-align: center;

+ 6 - 1
pages/editCheckList/server.js

@@ -8,9 +8,14 @@ const requestList = {
   },
   // 分配单位查核人员
   batchDistribute: {
-    method: 'GET',
+    method: 'POST',
     url: 'plan/batchDistribute'
   },
+	//计划列表
+	planList:{
+		method:'GET',
+		url: 'plan/list'
+	}
 };
 
 export const commServer = (key, data) => {

+ 5 - 5
pages/planList/components/modal.vue

@@ -21,11 +21,10 @@
 		methods: {
 			show(){
 				this.showModal=true;
-			},	
+			},
 			hide(){
 				this.showModal=false;
-			},
-			
+			}
 		},
 	}
 </script>
@@ -42,11 +41,12 @@
 			height: 317.5rpx;
 			width: 562.5rpx;
 			background: #FFFFFF;
-			border-radius: 24px;
+      border-radius: 24px;
+      overflow: hidden;
 			position: fixed;
 			top: 441.25rpx;
 			left: 93.75rpx;
-			
+
 			.pic{
 				height: 80rpx;
 				width: 80rpx;

+ 7 - 4
pages/planList/planList.vue

@@ -55,7 +55,8 @@
 					this.planList=data.map((item,index)=>{
 						if(item.empList.length!=item.toDistribute){
 							this.firstFlag=0;
-						}
+            }
+            this.compareTime(item.startDate);
 						return {
 							id:item.id,
 							name:item.name,
@@ -87,14 +88,16 @@
       },
     	/**
 			* 跳转页面-查核列表
-			* @param {Boolean} type 是否批量编辑
+			* @param {Boolean} multiple 是否批量编辑
 			* @param {Number} checkId 查核id
 			*/
-			gotoCheckList(type, currentObj){
+			gotoCheckList(multiple, currentObj){
         const { id, startDate, endDate } = currentObj;
+        let _startDate = startDate ? startDate + ' 00:00' : ''; // 计划开始时间
+        let _endDate = endDate ? endDate + ' 23:59' : ''; // 计划结束时间
 				//跳转到查核列表
 				uni.navigateTo({
-					url: `/pages/editCheckList/editCheckList?situationId=${type ? this.situationID : 0}&checkId=${id}&checkGroupId=${this.checkGroupId}&startDate=${startDate}&endDate=${endDate}`
+					url: `/pages/editCheckList/editCheckList?situationId=${this.situationID}&checkId=${id}&checkGroupId=${this.checkGroupId}&startDate=${_startDate}&endDate=${_endDate}&multiple=${multiple}`
 				});
 			}
 		},