Procházet zdrojové kódy

积分事件添加默认时间查询

manywhy před 2 dny
rodič
revize
5e500d17f5
44 změnil soubory, kde provedl 11863 přidání a 1897 odebrání
  1. 1 0
      package.json
  2. 1 1
      src/api/axios.js
  3. 1 1
      src/components/UserImage.vue
  4. 258 193
      src/components/applicationIntegrationPopup.vue
  5. 1011 0
      src/components/bonusPointsPopup copy.vue
  6. 211 219
      src/components/bonusPointsPopup.vue
  7. 1 1
      src/home.vue
  8. 211 144
      src/index.vue
  9. 1 0
      src/store/index.js
  10. 31 0
      src/utils/jsencrypt.js
  11. 2 1
      src/views/abPoint/award_punish.vue
  12. 121 111
      src/views/award/grantAward.vue
  13. 88 64
      src/views/common/rewardTaskDetailsPopup.vue
  14. 86 78
      src/views/common/taskDetailsPopup.vue
  15. 187 152
      src/views/ranking/integral_event.vue
  16. 79 0
      src/views/set/categoryFinder.js
  17. 0 1
      src/views/set/check.vue
  18. 4 4
      src/views/set/framework.vue
  19. 0 2
      src/views/set/initialPoint.vue
  20. 2 3
      src/views/set/jurisdiction.vue
  21. 2 2
      src/views/set/log.vue
  22. 5 0
      src/views/set/rule.vue
  23. 3 3
      src/views/set/screenSet.vue
  24. 460 53
      src/views/set/systemLayout.vue
  25. 3 3
      src/views/set/voluntarilyPoint.vue
  26. 91 0
      src/views/subassembly/set/buy.vue
  27. 249 0
      src/views/subassembly/set/check.vue
  28. 1503 0
      src/views/subassembly/set/framework.vue
  29. 88 0
      src/views/subassembly/set/initialPoint.vue
  30. 1538 0
      src/views/subassembly/set/jurisdiction.vue
  31. 436 0
      src/views/subassembly/set/log.vue
  32. 1460 0
      src/views/subassembly/set/rule.vue
  33. 103 0
      src/views/subassembly/set/rule2.vue
  34. 1245 0
      src/views/subassembly/set/screenSet.vue
  35. 537 0
      src/views/subassembly/set/systemLayout.vue
  36. 988 0
      src/views/subassembly/set/voluntarilyPoint.vue
  37. 41 34
      src/views/task/allTask.vue
  38. 36 45
      src/views/task/get_task.vue
  39. 31 28
      src/views/task/myExamine.vue
  40. 127 103
      src/views/task/my_issue.vue
  41. 40 48
      src/views/task/my_task.vue
  42. 53 45
      src/views/workbench/approval_batch.vue
  43. 414 437
      src/views/workbench/integral_review.vue
  44. 114 121
      src/views/workbench/review.vue

+ 1 - 0
package.json

@@ -27,6 +27,7 @@
     "qrcodejs2": "0.0.2",
     "vconsole": "^3.3.4",
     "vue": "^2.6.11",
+    "jsencrypt": "^3.2.2",
     "vue-count-to": "^1.0.13",
     "vue-json-excel": "^0.3.0",
     "vue-router": "^3.2.0",

+ 1 - 1
src/api/axios.js

@@ -82,7 +82,7 @@ service.interceptors.response.use(
 			// })
 			return Promise.reject(error.message)
 		}else if(error.message=='timeout of 20000ms exceeded'){
-			if(url=='/api/integral/review/a/entry'||url=='/api/integral/point/entry'){
+			if(url=='/api/integral/review/a/entry' || url=='/api/integral/point/entry'){
 				let sum=0;
 				if(data){
 					sum=data.items.length*data.members.length

+ 1 - 1
src/components/UserImage.vue

@@ -44,7 +44,7 @@
       return {
         imgUrl: "",
         name: "",
-		employeeMap:this.$getCache("userList")
+		    employeeMap:this.$getCache("userList")
       }
     },
 	watch:{

+ 258 - 193
src/components/applicationIntegrationPopup.vue

@@ -1,56 +1,50 @@
 <template>
 	<div>
 		<!-- 奖扣ab分弹窗 -->
-		<el-dialog :title="title" :visible.sync="visible" top="3%" :close-on-click-modal="false" :before-close="closeDialog2" width="700px">
+		<el-dialog :title="title" :visible.sync="visible" top="3%" :close-on-click-modal="false"
+			:before-close="closeDialog2" width="700px">
 			<div>
 				<el-form :model="dialogData" ref="dialogData" label-width="100px" v-loading="loading">
 					<div v-for="(item, index) in dialogData.items" :key="index" @click="setIndex(index)">
 						<div class="title flex-box-ce flex-d-center">
 							<span class="span">申请明细({{ index + 1 }})</span>
-							<el-link type="danger" v-show="index > 0 || dialogData.items.length > 1" @click="delItem(index)">删除</el-link>
+							<el-link type="danger" v-show="index > 0 || dialogData.items.length > 1"
+								@click="delItem(index)">删除</el-link>
 						</div>
-						<el-form-item label="奖扣对象" :prop="'items.' + index + '.employeeName'" :rules="[{ required: true, message: '请选择奖扣对象', trigger: 'change' }]">
+						<el-form-item label="奖扣对象" :prop="'items.' + index + '.employeeName'"
+							:rules="[{ required: true, message: '请选择奖扣对象', trigger: 'change' }]">
 							<div class="width_400">
-								<el-input auto-complete="off" v-model="item.employeeName" placeholder="请选择奖扣对象"></el-input>
-								<div @click="item.show_employee_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+								<el-input auto-complete="off" v-model="item.employeeName"
+									placeholder="请选择奖扣对象"></el-input>
+								<div @click="item.show_employee_selector = true"
+									style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;">
+								</div>
 							</div>
-							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_employee_selector" append-to-body :before-close="handleClose">
-								<EmployeeSelector
-									v-if="item.show_employee_selector"
-									ref="employee"
-									:multi="false"
-									:user_no_select="false"
-									:selected="item.employee_selected"
-									@confirm="employee_confirm"
-								/>
+							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_employee_selector"
+								append-to-body :before-close="handleClose">
+								<EmployeeSelector v-if="item.show_employee_selector" ref="employee" :multi="false"
+									:user_no_select="false" :selected="item.employee_selected"
+									@confirm="employee_confirm" />
 								<span slot="footer" class="dialog-footer">
 									<el-button @click="item.show_employee_selector = false">取 消</el-button>
 									<el-button type="primary" @click="submitMembers('employee')">确 定</el-button>
 								</span>
 							</el-dialog>
 						</el-form-item>
-						<el-form-item label="指定规则"><el-switch v-model="item.rule_switch" @change="switchChange(index, item.rule_switch)" :disabled="ruleOnoff"></el-switch></el-form-item>
-						<el-form-item
-							label="选择规则"
-							v-if="item.rule_switch"
+						<el-form-item label="指定规则">
+							<el-switch v-model="item.rule_switch" @change="switchChange(index, item.rule_switch)"
+								:disabled="ruleOnoff"></el-switch>
+						</el-form-item>
+						<el-form-item label="选择规则" v-if="item.rule_switch"
 							:prop="'items.' + index + '.rule_item_list_value'"
-							:rules="[{ required: true, message: '请选择规则', trigger: 'change' }]"
-						>
-							<el-cascader
-								v-model="item.rule_item_list_value"
-								ref="ruleItem"
-								class="width_400"
-								:popper-class="'itemClass'"
-								:options="rule_item_list"
-								@change="ruleItemChange"
-								:show-all-levels="false"
-								filterable
-								@expand-change="setIndex(index)"
-								clearable
-								:props="{ children: 'child', label: 'name', value: 'id' }"
-							></el-cascader>
+							:rules="[{ required: true, message: '请选择规则', trigger: 'change' }]">
+							<el-cascader v-model="item.rule_item_list_value" ref="ruleItem" class="width_400"
+								:popper-class="'itemClass'" :options="rule_item_list" @change="ruleItemChange"
+								:show-all-levels="false" filterable @expand-change="setIndex(index)" clearable
+								:props="{ children: 'child', label: 'name', value: 'id' }"></el-cascader>
 						</el-form-item>
 
+
 						<el-form-item v-if="item.rule_switch && item.rule_id">
 							<div style="line-height: 24px;" v-show="item.rule_item_details.range_type == 1">
 								{{ item.rule_item_details.min_point }}
@@ -63,68 +57,104 @@
 							<div style="line-height: 24px;">{{ item.rule_item_details.name }}</div>
 						</el-form-item>
 
-						<el-form-item label="发生时间" :prop="'items.' + index + '.event_time'" :rules="[{ required: true, message: '请选择时间', trigger: 'blur' }]">
-							<el-date-picker
-							    :clearable="false"
-								v-model="item.event_time"
-								:picker-options="pickerBeginDateBefore"
-								type="date"
-								placeholder="请选择时间"
-								value-format="yyyy-MM-dd"
-							></el-date-picker>
+						
+
+						<!-- <template v-if="item.rule_switch && item.rule_id">
+							<el-form-item v-show="item.rule_item_details.range_type == 1" label="填写分数"
+								:prop="'items.' + index + '.point'" :rules="[
+	{ required: true, message: '请填写分数', trigger: 'blur' },
+									{
+										validator: (rule, value, callback) => {
+											if (value === null || value === '') {
+												callback(new Error('请输入分数'))
+											} else if (value > item.rule_item_details.min_point) {
+												callback(new Error(`分数范围 > ${item.rule_item_details.min_point}`))
+											} else {
+												callback() // 通过校验
+											}
+										},
+										trigger: 'blur'
+									}
+								]">
+								<el-input type="number" v-model="item.point" placeholder="请填写分数"
+									style="width: 200px;"></el-input>
+							</el-form-item>
+
+							<el-form-item v-show="item.rule_item_details.range_type == 2" label="填写分数"
+								:prop="'items.' + index + '.point'" :rules="[
+									{ required: true, message: '请填写分数', trigger: 'blur' },
+									{
+										validator: (rule, value, callback) => {
+											if (value === null || value === '') {
+												callback(new Error('请输入分数'))
+											} else if (value > item.rule_item_details.min_point && value < item.rule_item_details.max_point) {
+												callback(new Error(`分数范围 ${item.rule_item_details.min_point} ~ ${item.rule_item_details.max_point}`))
+											} else {
+												callback() // 通过校验
+											}
+										},
+										trigger: 'blur'
+									}
+								]">
+								<el-input type="number" v-model="item.point" placeholder="请填写分数"
+									style="width: 200px;"></el-input>
+							</el-form-item>
+						</template> -->
+
+
+
+						<el-form-item v-if="item.rule_switch && item.rule_id && item.rule_item_details.range_type == 2"
+							label="填写分数" :prop="'items.' + index + '.point'" :rules="[
+							{ required: true, message: '请填写分数', trigger: 'blur' },
+						]">
+							<el-input-number v-model="item.point" placeholder="请填写分数"
+								:max="item.rule_item_details.max_point" :min="item.rule_item_details.min_point"
+								style="width:200px">
+							</el-input-number>
+							<!-- <el-input type="number" v-model="item.point" placeholder="请填写分数"
+								style="width: 200px;"></el-input> -->
+						</el-form-item>
+
+						<el-form-item label="发生时间" :prop="'items.' + index + '.event_time'"
+							:rules="[{ required: true, message: '请选择时间', trigger: 'blur' }]">
+							<el-date-picker :clearable="false" v-model="item.event_time"
+								:picker-options="pickerBeginDateBefore" type="date" placeholder="请选择时间"
+								value-format="yyyy-MM-dd"></el-date-picker>
 						</el-form-item>
 
-						<el-form-item
-							label="事件内容"
-							:prop="'items.' + index + '.remark'"
-							:rules="[{ required: true, message: '请输入事件内容', trigger: 'blur' }, { min: 3, max: 300, message: '长度在 3 到 300 个字符', trigger: 'blur' }]"
-						>
-							<el-input type="textarea" placeholder="请输入事件内容"  clearable maxlength="300" show-word-limit rows="4" v-model="item.remark" ></el-input>
-							<el-button @click="item.remark=''" type="danger" plain size="mini" style="position: absolute;right: 0px;bottom: -30px;z-index: 99999;">清空</el-button>
+						<el-form-item label="事件内容" :prop="'items.' + index + '.remark'"
+							:rules="[{ required: true, message: '请输入事件内容', trigger: 'blur' }, { min: 3, max: 300, message: '长度在 3 到 300 个字符', trigger: 'blur' }]">
+							<el-input type="textarea" placeholder="请输入事件内容" clearable maxlength="300" show-word-limit
+								rows="4" v-model="item.remark"></el-input>
+							<el-button @click="item.remark = ''" type="danger" plain size="mini"
+								style="position: absolute;right: 0px;bottom: -30px;z-index: 99999;">清空</el-button>
 						</el-form-item>
 
 						<el-form-item label="图片" label-width="100px">
-							  <upload
-								:headers="$xtoken"
-								:action="$action"
-								:limit="3"
-								list_type="picture-card"
-								:accept="$acceptImg"
-								:multiple="true"
-								ref="clearPicture"
-								:show-file-list="true"
-								:file-list="item.fileList"
-								:on-success="handleFilesSuccess"
-								:on-preview="onFilePreView"
-								:before-upload="beforeUpload"
-								:on-remove="onFileRemove"
-							  >
+							<upload :headers="$xtoken" :action="$action" :limit="3" list_type="picture-card"
+								:accept="$acceptImg" :multiple="true" ref="clearPicture" :show-file-list="true"
+								:file-list="item.fileList" :on-success="handleFilesSuccess" :on-preview="onFilePreView"
+								:before-upload="beforeUpload" :on-remove="onFileRemove">
 								<i class="el-icon-plus"></i>
 							</upload>
 						</el-form-item>
 
-						<el-form-item
-							v-loading.lock="fullscreenLoading"
-							label="审批人"
+						<el-form-item v-loading.lock="fullscreenLoading" label="审批人"
 							:prop="'items.' + index + '.approvalName'"
-							:rules="[{ required: true, message: '请选择审批人', trigger: 'blur' }]"
-						>
+							:rules="[{ required: true, message: '请选择审批人', trigger: 'blur' }]">
 							<div class="width_400">
-									<el-input auto-complete="off" v-model="item.approvalName" placeholder="请选择审批人"></el-input>
-									<div @click="approval_selected_null(item)" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+								<el-input auto-complete="off" v-model="item.approvalName"
+									placeholder="请选择审批人"></el-input>
+								<div @click="approval_selected_null(item)"
+									style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;">
+								</div>
 							</div>
-							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_approval_selector" append-to-body :before-close="handleClose">
-								<EmployeeSelector
-									:can_select_employee="true"
-									v-if="item.show_approval_selector"
-									ref="approval"
-									:multi="false"
-									:employee_list="item.approval_employee_list"
-									:user_no_select="false"
-									:isCreatorSelect="true"
-									:selected="item.approval_selected"
-									@confirm="approval_confirm"
-								/>
+							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_approval_selector"
+								append-to-body :before-close="handleClose">
+								<EmployeeSelector :can_select_employee="true" v-if="item.show_approval_selector"
+									ref="approval" :multi="false" :employee_list="item.approval_employee_list"
+									:user_no_select="false" :isCreatorSelect="true" :selected="item.approval_selected"
+									@confirm="approval_confirm" />
 								<span slot="footer" class="dialog-footer">
 									<el-button @click="item.show_approval_selector = false">取 消</el-button>
 									<el-button type="primary" @click="submitApproval('approval')">确 定</el-button>
@@ -132,42 +162,52 @@
 							</el-dialog>
 						</el-form-item>
 					</div>
-					<el-form-item style="margin-bottom: 0;"><div>如需录入多条,请点击“增加一条”</div></el-form-item>
-					<el-form-item style="margin-bottom: 0;"><el-button type="primary" plain @click="addItem">+ 增加一条</el-button></el-form-item>
+					<el-form-item style="margin-bottom: 0;">
+						<div>如需录入多条,请点击“增加一条”</div>
+					</el-form-item>
+					<el-form-item style="margin-bottom: 0;"><el-button type="primary" plain @click="addItem">+
+							增加一条</el-button></el-form-item>
 					<el-form-item style="text-align: right; margin-bottom: 0;">
 						<el-button @click="closeDialog2('dialogData')">取 消</el-button>
-						<el-button :disabled="btn_loading" :loading="btn_loading" type="primary" @click="subData('dialogData')">确 认</el-button>
+						<el-button :disabled="btn_loading" :loading="btn_loading" type="primary"
+							@click="subData('dialogData')">确
+							认</el-button>
 					</el-form-item>
 				</el-form>
 			</div>
 		</el-dialog>
 
-		<el-dialog :title="'提交结果'" :visible.sync="error_list_show" :before-close="closeDialog2" :append-to-body="true" width="700px">
+		<el-dialog :title="'提交结果'" :visible.sync="error_list_show" :before-close="closeDialog2" :append-to-body="true"
+			width="700px">
 			<el-table :data="error_list">
 				<el-table-column prop="target" label="员工"></el-table-column>
 				<el-table-column prop="status" label="处理状态">
 					<template slot-scope="scope">
-						<span :style="'color:' + (scope.row.status == 0 ? '#f70000' : '#47bf47')">{{ scope.row.status == 0 ? '申请失败' : '申请成功' }}</span>
+						<span :style="'color:' + (scope.row.status == 0 ? '#f70000' : '#47bf47')">{{ scope.row.status ==
+							0 ? '申请失败' : '申请成功' }}</span>
 					</template>
 				</el-table-column>
 				<el-table-column prop="remark" label="备注信息"></el-table-column>
 			</el-table>
 		</el-dialog>
-		
-		<el-dialog title="提交结果" :visible.sync="isResult"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+
+		<el-dialog title="提交结果" :visible.sync="isResult" width="800" :close-on-click-modal="false"
+			:close-on-press-escape="false" :show-close="false">
 			<div class="" v-if="!isShowError">
-				<div style="text-align: center;margin-bottom: 10px;" class="red" v-if="isShowError2">{{errorMsg}}</div>
+				<div style="text-align: center;margin-bottom: 10px;" class="red" v-if="isShowError2">{{ errorMsg }}
+				</div>
 				<el-progress :text-inside="true" :stroke-width="24" :percentage="percentage"></el-progress>
-				<div class="orange" style="text-align: center;padding-top: 10px;" v-if="config.event_review_status&&config.event_apply_review">复核开启后,积分需管理员复核后才计入排名和统计</div>
+				<div class="orange" style="text-align: center;padding-top: 10px;"
+					v-if="config.event_review_status && config.event_apply_review">复核开启后,积分需管理员复核后才计入排名和统计</div>
 				<div style="margin-top: 20px;border: 1px solid #f1f1f1;">
 					<div class="flex-box-ce results" style="font-weight: 600;">
-						<div  style="border-right: 1px solid #f1f1f1;width: 50px;">序号</div>
+						<div style="border-right: 1px solid #f1f1f1;width: 50px;">序号</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
 						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">申请内容</div>
-						<div class="flex-2" >处理结果</div>
+						<div class="flex-2">处理结果</div>
 					</div>
 					<div class="flex-box-ce results" v-for="(item, index) in results" :key="index">
-						<div  style="border-right: 1px solid #f1f1f1;width: 50px;">{{results.length-index}}</div>
+						<div style="border-right: 1px solid #f1f1f1;width: 50px;">{{ results.length - index }}</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.target }}</div>
 						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.remark }}</div>
 						<div class="flex-2 green" v-if="item.status == 1">{{ item.msg }}</div>
@@ -175,24 +215,29 @@
 					</div>
 				</div>
 				<span slot="footer">
-					<div class="flex-box-end" style="margin-top: 20px;" v-show="isShowError2&&results.length!=resultList.length"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
-					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length==resultList.length">
+					<div class="flex-box-end" style="margin-top: 20px;"
+						v-show="isShowError2 && results.length != resultList.length"><el-button type="primary"
+							@click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length == resultList.length">
 						<el-button type="primary" @click="isResult = false" size="small">确 定</el-button>
 					</div>
 				</span>
 			</div>
 			<div v-else>
-				<div style="text-align: center;" class="red">{{errorMsg}}</div>
+				<div style="text-align: center;" class="red">{{ errorMsg }}</div>
 				<span slot="footer">
-					<div class="flex-box-end" style="margin-top: 20px;"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;"><el-button type="primary"
+							@click="isResult = false" size="small">确 定</el-button></div>
 				</span>
 			</div>
 		</el-dialog>
-		
+
 		<!-- 缓存的奖扣 -->
-		<el-dialog title="网络中断申请列表" :visible.sync="isShowBreak"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+		<el-dialog title="网络中断申请列表" :visible.sync="isShowBreak" width="800" :close-on-click-modal="false"
+			:close-on-press-escape="false" :show-close="false">
 			<div>
-				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;" class="scroll-bar">
+				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;"
+					class="scroll-bar">
 					<div class="flex-box-ce results" style="font-weight: 600;">
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">分类</div>
@@ -224,10 +269,11 @@
 				</span>
 			</div>
 		</el-dialog>
-	
+
 	</div>
 </template>
 
+
 <script>
 import moment from 'moment';
 import EmployeeSelector from '@/components/EmployeeSelector';
@@ -302,7 +348,9 @@ export default {
 						// 规则分类 与 规则细则 名称
 						rule_list_value: null,
 						rule_item_list_value: null,
-						rule_item_details: { range_type: '' }
+						rule_item_details: { range_type: '' },
+
+						point: 0
 					}
 				]
 			},
@@ -315,26 +363,26 @@ export default {
 			btn_loading: false,
 			itemIndex: 0,
 			fullscreenLoading: false, //选择审批人时需要,获取奖扣对象的上级
-			LocalValObj: { id: '', name: '' } ,//当前录入的审批人缓存
-			
+			LocalValObj: { id: '', name: '' },//当前录入的审批人缓存
+
 			// 长连接结果
 			results: [], //提交的返回结果集合
 			isResult: false,
 			percentage: 0,
-			resultList:[],//要发送数据的集合
-			resultIndex:0,
-			isShowError:false,
-			isShowError2:false,
-			errorMsg:'服务器繁忙,请稍后再试',
-			breakList:[],
-			isShowBreak:false,
-			config:{},
+			resultList: [],//要发送数据的集合
+			resultIndex: 0,
+			isShowError: false,
+			isShowError2: false,
+			errorMsg: '服务器繁忙,请稍后再试',
+			breakList: [],
+			isShowBreak: false,
+			config: {},
 		};
 	},
 	components: { EmployeeSelector, upload },
 	async mounted() {
-		this.config=this.$store.state.config;
-		
+		this.config = this.$store.state.config;
+
 		this.user_info = this.$getUserData();
 		var reviewerObj = await this.getLocalVal(this.user_info.id);
 		this.LocalValObj = reviewerObj ? reviewerObj : { id: '', name: '' };
@@ -345,22 +393,22 @@ export default {
 			this.dialogData.items[0].reviewer_id = this.LocalValObj.id;
 			this.dialogData.items[0].approvalName = this.LocalValObj.name;
 		}
-		if(this.isBreak){
-			let data=this.$getCache('apply_list');
-			data.forEach(item=>{
-				item.name=this.$getCache('userList')[item.employee_id]?this.$getCache('userList')[item.employee_id].name:'--';
-				item.reviewer_name=this.$getCache('userList')[item.reviewer_id]?this.$getCache('userList')[item.reviewer_id].name:'--';
+		if (this.isBreak) {
+			let data = this.$getCache('apply_list');
+			data.forEach(item => {
+				item.name = this.$getCache('userList')[item.employee_id] ? this.$getCache('userList')[item.employee_id].name : '--';
+				item.reviewer_name = this.$getCache('userList')[item.reviewer_id] ? this.$getCache('userList')[item.reviewer_id].name : '--';
 			})
-			this.breakList=data;
-			this.isShowBreak=true;
+			this.breakList = data;
+			this.isShowBreak = true;
 		}
 	},
-	watch:{
-		isResult(val){
-			if(!val){
-				this.isShowError=false;
+	watch: {
+		isResult(val) {
+			if (!val) {
+				this.isShowError = false;
 				this.isShowBreak = false;
-				this.errorMsg='服务器繁忙,请稍后再试';
+				this.errorMsg = '服务器繁忙,请稍后再试';
 				this.$refs['dialogData'].resetFields();
 				this.closeDialog();
 				this.closeDialog2();
@@ -369,48 +417,48 @@ export default {
 		}
 	},
 	methods: {
-		setIndex(index){
-		  if(index==this.itemIndex){
-		    return false
-		  }
-		  this.itemIndex = index;
+		setIndex(index) {
+			if (index == this.itemIndex) {
+				return false
+			}
+			this.itemIndex = index;
 		},
 		// 关闭缓存弹窗
-		colseBreak(){
+		colseBreak() {
 			this.isShowBreak = false;
-			this.breakList=[];
+			this.breakList = [];
 			this.$removeCache('apply_list');
 			this.closeDialog();
 			this.closeDialog2();
 		},
 		// 提交缓存申请
-		submitBreak(){
+		submitBreak() {
 			this.$removeCache('apply_list');
-			this.resultList=JSON.parse(JSON.stringify(this.breakList));
-			this.resultIndex=0;
-			this.percentage=0;
-			this.results=[];
-			this.isResult=true;
+			this.resultList = JSON.parse(JSON.stringify(this.breakList));
+			this.resultIndex = 0;
+			this.percentage = 0;
+			this.results = [];
+			this.isResult = true;
 			this.opneWebSocket()
 		},
-		
+
 		//获取缓存起来的审批人
 		getLocalVal(id) {
-			return new Promise((resolve, reject) =>{
+			return new Promise((resolve, reject) => {
 				let obj;
-				this.$axios('get', '/api/employee/info', { id: id }).then(res =>{
-					if(res.data.code == 1){
+				this.$axios('get', '/api/employee/info', { id: id }).then(res => {
+					if (res.data.code == 1) {
 						let data = res.data.data;
-						if(data.employee_detail.superior_list && data.employee_detail.superior_id != 0){
+						if (data.employee_detail.superior_list && data.employee_detail.superior_id != 0) {
 							obj = data.employee_detail.superior_list.filter(x => x.id == data.employee_detail.superior_id)[0];
-							if(obj.id == this.user_info.id){
+							if (obj.id == this.user_info.id) {
 								obj = this.$getCache(id)
 							}
-						}else{
+						} else {
 							obj = this.$getCache(id);
 						}
 					}
-				}).finally(_ =>{
+				}).finally(_ => {
 					resolve(obj)
 				})
 			})
@@ -448,8 +496,8 @@ export default {
 			});
 		},
 		handleFilesSuccess(response, file, fileList) {
-			let fileListData=fileList.filter(e=>{
-			  return e.url
+			let fileListData = fileList.filter(e => {
+				return e.url
 			})
 			this.dialogData.items[this.itemIndex].fileList = fileListData;
 			this.dialogData.items[this.itemIndex].files = [];
@@ -464,7 +512,7 @@ export default {
 				this.$message.error('请先选择奖扣对象');
 			} else {
 				this.fullscreenLoading = true;
-				this.getEmployeeList(item.employee_id, function(res) {
+				this.getEmployeeList(item.employee_id, function (res) {
 					if (res.length > 0) {
 						item.approval_employee_list = res;
 						item.show_approval_selector = true;
@@ -514,7 +562,7 @@ export default {
 		// 规则细则变化关闭down
 		ruleItemChange(value) {
 			const item = this.dialogData.items[this.itemIndex];
-			if(value.length>0){
+			if (value.length > 0) {
 				let ruleItemDetail = null;
 				this.flatteningIntegralRules.forEach(element => {
 					if (element.id == value[value.length - 1]) {
@@ -524,19 +572,24 @@ export default {
 				item.rule_item_details = ruleItemDetail;
 				item.remark = ruleItemDetail.name;
 				item.rule_id = ruleItemDetail.pid;
+				if (item.rule_id) {
+					if (ruleItemDetail.range_type == 1 || ruleItemDetail.range_type == 2)
+						item.point = item.rule_item_details.min_point
+				}
 				item.pt_id = ruleItemDetail.pt_id;
 				item.item_id = value[value.length - 1];
 				item.item_name = ruleItemDetail.name;
 				this.$refs.ruleItem.dropDownVisible = false;
-			}else{
+			} else {
+				item.point = 0
 				item.rule_id = '';
-				item.pt_id="";
+				item.pt_id = "";
 				item.item_id = '';
-				item.remark =  '';
-				item.item_name =  '';
+				item.remark = '';
+				item.item_name = '';
 				item.rule_item_list_value = '';
 				item.rule_item_details = { range_type: '' };
-			}	
+			}
 		},
 		// 递归判断列表,把最后的child设为undefined
 		getTreeData(data) {
@@ -611,7 +664,7 @@ export default {
 				employeeName: this.user_info.name,
 				employee_selected: { dept: [], employee: [{ id: this.user_info.id, img_url: this.user_info.img_url, name: this.user_info.name }] },
 				show_employee_selector: false,
-
+				point: 0,
 				// 审批人信息
 				reviewer_id: this.LocalValObj.id,
 				approvalName: this.LocalValObj.name,
@@ -680,7 +733,7 @@ export default {
 				}
 			});
 		},
-		closeDialog2(){
+		closeDialog2() {
 			this.$emit('update:visible', false);
 		},
 		// 提交数据
@@ -691,6 +744,7 @@ export default {
 					rule_id: element.rule_id || 0,
 					employee_id: element.employee_id,
 					item_id: element.item_id || 0,
+					point: element.point,
 					item_name: element.item_name,
 					remark: element.remark,
 					event_time: element.event_time,
@@ -715,33 +769,33 @@ export default {
 				.finally(() => {
 					this.btn_loading = false;
 					data.items.forEach(element => {
-						this.$setCache(element.employee_id,{ id: element.reviewer_id, name: element.approvalName });
+						this.$setCache(element.employee_id, { id: element.reviewer_id, name: element.approvalName });
 					});
 				});
 		},
-		webSocket(data){
-			data.items.forEach(item=>{
-				item.type='point_apply';
-				this.$setCache(item.employee_id,{ id: item.reviewer_id, name: item.approvalName });
+		webSocket(data) {
+			data.items.forEach(item => {
+				item.type = 'point_apply';
+				this.$setCache(item.employee_id, { id: item.reviewer_id, name: item.approvalName });
 			})
-			this.resultList=data.items;
-			this.resultIndex=0;
-			this.percentage=0;
-			this.results=[];
-			this.isResult=true;
+			this.resultList = data.items;
+			this.resultIndex = 0;
+			this.percentage = 0;
+			this.results = [];
+			this.isResult = true;
 			this.opneWebSocket()
 		},
 		opneWebSocket() {
-			let wsData=this.resultList;
-			if(wsData[this.resultIndex]){
-				this.$socketApiTow.sendData(wsData[this.resultIndex],this.onmessageWS)
-			}else{
-				console.log(this.results)
+			let wsData = this.resultList;
+			if (wsData[this.resultIndex]) {
+				this.$socketApiTow.sendData(wsData[this.resultIndex], this.onmessageWS)
+			} else {
+				// console.log(this.results)
 			}
-			
+
 		},
-		onmessageWS(e){
-			if(e.type=='point_apply'){
+		onmessageWS(e) {
+			if (e.type == 'point_apply') {
 				this.results.push(e.result);
 				this.resultIndex++;
 				this.opneWebSocket();
@@ -753,15 +807,15 @@ export default {
 				}
 			}
 			// 中途断开
-			if(e.type=='break'){
-				let wsData=this.resultList;
-				this.errorMsg=e.msg
-				this.$setCache('apply_list',wsData.slice(this.resultIndex,wsData.length));
+			if (e.type == 'break') {
+				let wsData = this.resultList;
+				this.errorMsg = e.msg
+				this.$setCache('apply_list', wsData.slice(this.resultIndex, wsData.length));
 				this.isShowError2 = true;
 			}
 			// 连接不上
-			if(e.type=='error'){
-				this.errorMsg=e.msg
+			if (e.type == 'error') {
+				this.errorMsg = e.msg
 				this.isShowError = true;
 			}
 		},
@@ -773,8 +827,9 @@ export default {
 				item.rule_id = '';
 				item.item_id = '';
 				item.rule_item_list_value = '';
-				item.remark =  '';
+				item.remark = '';
 				item.rule_item_details = { range_type: '' };
+				item.point = 0
 			} else {
 				item.rule_id = '';
 				item.rule_list_value = '';
@@ -797,39 +852,49 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
-::v-deep .el-input__count{
-  right: 70px;
-  bottom: -36px;
-}	
-.title{
+::v-deep .el-input__count {
+	right: 70px;
+	bottom: -36px;
+}
+
+.title {
 	background-color: #f4f9fd;
 	border: 1px solid #e4f0fc;
 	padding-right: 10px;
 	margin-bottom: 16px;
 }
-.title .span{
+
+.title .span {
 	line-height: 36px;
 	width: 100px;
 	text-align: right;
 	font-weight: 700;
 }
-.width_400{
+
+
+.width_400 {
 	width: 400px;
 	position: relative;
-}	
+}
+
 .itemClass .el-cascader-menu .el-cascader-menu__wrap li.el-cascader-node {
 	height: auto;
 	max-width: 500px;
+
 	.el-cascader-node__label {
 		white-space: initial;
 		overflow: initial;
 		text-overflow: initial;
 	}
+
 }
+
+
 .results {
 	border-bottom: 1px solid #f1f1f1;
 	text-align: center;
 }
+
 .results div {
 	padding: 10px;
 }

+ 1011 - 0
src/components/bonusPointsPopup copy.vue

@@ -0,0 +1,1011 @@
+<template>
+	<div>
+		<!-- 奖扣ab分弹窗 -->
+		<el-dialog :title="title" :visible.sync="visible" top="3%" :close-on-click-modal="false" @open="initData" :before-close="closePopup" width="700px">
+			<div>
+				<el-form :model="dialogData" ref="dialogData" label-width="100px" v-loading="loading">
+					<el-form-item label="奖扣对象" prop="members" :rules="[{ required: true, message: '请选择奖扣对象', trigger: 'change' }]">
+						<div class="width_400">
+							<el-input auto-complete="off" v-model="employeeName" placeholder="请选择奖扣对象" ></el-input>
+							<div @click="noPersonnelListTips" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+						</div>
+						<slot></slot>
+					</el-form-item>
+					<div v-for="(item, index) in dialogData.items" :key="index" @click.stop="setIndex(index)">
+						<div class="title flex-box-ce flex-d-center">
+							<span class="span">录入明细({{ index + 1 }})</span>
+							<el-link type="danger" v-show="index > 0 || dialogData.items.length > 1" @click="delItem(index)">删除</el-link>
+						</div>
+
+						<el-form-item label="指定规则">
+							<el-switch :disabled="ruleOnoff" @change="switchChange(index, item.rule_switch)" v-model="item.rule_switch"></el-switch>
+						</el-form-item>
+						<el-form-item
+							label="选择分类"
+							v-if="!item.rule_switch"
+							:prop="'items.' + index + '.rule_list_value'"
+							:rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]"
+						>
+							<el-cascader
+								v-model="item.rule_list_value"
+								:ref="'ruleCascader'+index"
+								:popper-class="'ruleClass'"
+								filterable
+								class="width_400"
+								@expand-change="setIndex(index)"
+								clearable
+								:options="rule_list"
+								@change="ruleChange"
+								:props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"
+							></el-cascader>
+						</el-form-item>
+						<el-form-item
+							label="选择规则11"
+							v-if="item.rule_switch"
+							:prop="'items.' + index + '.rule_item_list_value'"
+							:rules="[{ required: true, message: '请选择规则', trigger: 'blur' }]"
+						>
+							<el-cascader
+								v-if="showCascader"
+								v-model="item.rule_item_list_value"
+								ref="ruleItem"
+								class="width_400"
+								:popper-class="'itemClass'"
+								filterable
+								clearable
+								@expand-change="setIndex(index)"
+								:options="rule_item_list"
+								:show-all-levels="false"
+								:props="{ children: 'child', label: 'name', value: 'id' }"
+							></el-cascader>
+						</el-form-item>
+
+						<el-form-item>
+							<div style="line-height: 24px;" v-show="item.rule_item_details.range_type == 1">
+								{{ item.rule_item_details.min_point }}
+								<span class="blue">{{ $getTypsName(ptid) }}</span>
+							</div>
+							<div style="line-height: 24px;" v-show="item.rule_item_details.range_type == 2">
+								{{ item.rule_item_details.min_point }} ~ {{ item.rule_item_details.max_point }}
+								<span class="blue">{{ $getTypsName(ptid) }}</span>
+							</div>
+							<div style="line-height: 24px;">{{ item.rule_item_details.name }}</div>
+						</el-form-item>
+						
+						<el-form-item label="积分" :prop="'items.' + index + '.point'" :rules="[{ required: true, message: '请输入分值', trigger: 'blur' }]">
+							<el-input-number style="width: 220px;" v-if="item.rule_item_details.range_type == 2" :min="item.min" :max="item.max" v-model.number="item.point"></el-input-number>
+							<el-input-number style="width: 220px;" v-else :disabled="item.rule_item_details.range_type == 1" v-model.number="item.point"></el-input-number>
+						</el-form-item>
+
+						<el-form-item label="发生时间" :prop="'items.' + index + '.event_time'" :rules="[{ required: true, message: '请选择时间', trigger: 'blur' }]">
+							<el-date-picker
+								:clearable="false"
+								v-model="item.event_time"
+								:picker-options="pickerBeginDateBefore"
+								type="date"
+								placeholder="请选择时间"
+								value-format="yyyy-MM-dd"
+							></el-date-picker>
+						</el-form-item>
+						<el-form-item label="发放奖票">
+							<template slot="label">
+								<el-tooltip  effect="dark" placement="top">
+								  <div slot="content">选择递交审批人时,发放奖票将失效,由审批上级来发放奖票</div>
+								  <span>发放奖票<i style="padding-left: 5px;font-size: 16px;" class="el-icon-question fontColorD"></i></span>
+								</el-tooltip>
+							</template>
+							<el-switch  :disabled="item.approvalName? true:false" :active-value="1" :inactive-value="0" v-model="item.ticket_count"></el-switch>
+						</el-form-item>
+						<el-form-item
+							label="事件内容"
+							:prop="'items.' + index + '.remark'"
+							:rules="[{ required: true, message: '请输入事件内容', trigger: 'blur' }, { min: 2, max: 300, message: '长度在 2 到 300 个字符', trigger: 'blur' }]"
+						>
+							<el-input type="textarea" placeholder="请输入事件内容"  clearable maxlength="300" show-word-limit rows="4" v-model="item.remark" ></el-input>
+							<el-button @click="item.remark=''" type="danger" plain size="mini" style="position: absolute;right: 0px;bottom: -30px;z-index: 99999;">清空</el-button>
+						</el-form-item>
+
+						<el-form-item label="图片">
+							  <upload
+								:headers="$xtoken"
+								:action="$action"
+								:limit="3"
+								list_type="picture-card"
+								:accept="$acceptImg"
+								:multiple="true"
+								ref="clearPicture"
+								:show-file-list="true"
+								:file-list="item.fileList"
+								:on-success="handleFilesSuccess"
+								:on-preview="onFilePreView"
+								:before-upload="beforeUpload"
+								:on-remove="onFileRemove"
+							  >
+								<i class="el-icon-plus"></i>
+							</upload>
+						</el-form-item>
+						<el-form-item label="递交审批" v-if="$getUserData().is_creator == 0">
+							<div class="width_400">
+								<el-input auto-complete="off" v-model="item.approvalName" placeholder="请选择审批人"></el-input>
+								<div @click="item.show_approval_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+							</div>
+							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_approval_selector" append-to-body :before-close="handleClose">
+								<EmployeeSelector
+									v-if="item.show_approval_selector"
+									ref="superior"
+									:multi="false"
+									:isCreatorSelect="true"
+									:user_no_select="false"
+									:employee_list="superior_list"
+									:selected="item.approval_selected"
+									@confirm="approval_confirm"
+								/>
+								<span slot="footer" class="dialog-footer">
+									<el-button @click="item.show_approval_selector = false">取 消</el-button>
+									<el-button type="primary" @click="submitEmployee('superior')">确 定</el-button>
+								</span>
+							</el-dialog>
+						</el-form-item>
+					</div>
+					<el-form-item style="margin-bottom: 0;"><div>如需录入多条,请点击“增加一条”</div></el-form-item>
+					<el-form-item style="margin-bottom: 0;"><el-button type="primary" plain @click="addItem">+ 增加一条</el-button></el-form-item>
+					<el-form-item style="text-align: right; margin-bottom: 0;">
+						<el-button @click="closeDialog('dialogData')" :disabled="btn_loading">取 消</el-button>
+						<el-button type="primary" @click="subData('dialogData')" :disabled="btn_loading" :loading="btn_loading">确 认</el-button>
+					</el-form-item>
+				</el-form>
+			</div>
+			<el-dialog title="选择人员" width="640px" :visible.sync="show_employee_selector" append-to-body :before-close="handleClose">
+				<EmployeeSelector
+					v-if="show_employee_selector"
+					ref="members"
+					:isChecKedAll="false"
+					:isCreatorSelect="true"
+					:user_no_select="false"
+					:max="30"
+					:employee_list="manage_scope"
+					:selected="employee_selected"
+					@confirm="move_employee_confirm"
+				/>
+				<span slot="footer" class="dialog-footer">
+					<el-button @click="show_employee_selector = false">取 消</el-button>
+					<el-button type="primary" @click="submitMembers()">确 定</el-button>
+				</span>
+			</el-dialog>
+		</el-dialog>
+
+		<el-dialog :title="'提交结果'" :visible.sync="error_list_show" :append-to-body="true" width="700px">
+			<el-table :data="error_list">
+				<el-table-column prop="target" label="员工"></el-table-column>
+				<el-table-column prop="point" label="积分">
+					<template slot-scope="scope">
+						<span>
+							{{ scope.row.point }}
+							<span>{{ integralType == 2 ? 'A分' : 'B分' }}</span>
+						</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="status" label="处理状态">
+					<template slot-scope="scope">
+						<span :style="'color:' + (scope.row.status == 0 ? '#f70000' : '#47bf47')">{{ scope.row.msg }}</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="remark" label="备注信息"></el-table-column>
+			</el-table>
+		</el-dialog>
+	
+		<el-dialog title="提交结果" :visible.sync="isResult"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+			<div v-if="!isShowError">
+				<div style="text-align: center;margin-bottom: 10px;" class="red" v-if="isShowError2">{{errorMsg}}</div>
+				<el-progress :text-inside="true" :stroke-width="24" :percentage="percentage"></el-progress>
+				<div class="orange" style="text-align: center;padding-top: 10px;" v-if="config.event_review_status&&config.event_entry_review">复核开启后,积分需管理员复核后才计入排名和统计</div>
+				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;" class="scroll-bar">
+					<div class="flex-box-ce results" style="font-weight: 600;">
+						<div style="border-right: 1px solid #f1f1f1;width: 50px;">序号</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">事件内容</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">积分</div>
+						<div class="flex-2" >处理结果</div>
+					</div>
+					<div class="flex-box-ce results" v-for="(item, index) in results" :key="index">
+						<div style="border-right: 1px solid #f1f1f1;width: 50px;">{{results.length-index}}</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.target }}</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.source_msg.remark }}</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
+							{{ item.point>0? '+'+item.point:item.point }} 
+							<span>{{ item.source_msg.pt_id==3? 'B分':'A分' }}</span>
+						</div>
+						<div class="flex-2" v-if="item.status == 1">
+							<span v-if="item.msg=='奖扣成功'" class="green">{{ item.msg }}</span>
+							<span v-else class="blue">{{ item.msg }}</span>	
+						</div>
+						<div class="flex-2 red" v-else>{{ item.msg }}</div>
+					</div>
+				</div>
+				<span slot="footer">
+					<div class="flex-box-end" style="margin-top: 20px;" v-show="isShowError2&&results.length!=resultList.length"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length==resultList.length"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+				</span>
+			</div>
+			<div v-else>
+				<div style="text-align: center;" class="red">{{errorMsg}}</div>
+				<span slot="footer">
+					<div class="flex-box-end" style="margin-top: 20px;"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+				</span>
+			</div>
+		</el-dialog>
+		<!-- 缓存的奖扣 -->
+		<el-dialog title="网络中断奖扣列表" :visible.sync="isShowBreak"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+			<div>
+				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;" class="scroll-bar">
+					<div class="flex-box-ce results" style="font-weight: 600;">
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">分类</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">规则</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">事件内容</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">积分</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">递交人员</div>
+					</div>
+					<div class="flex-box-ce results" v-for="(item, index) in breakList" :key="index">
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.name }}</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
+							<span v-if="item.rule_name">{{ item.rule_name }}</span>
+							<span v-else>--</span>
+						</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
+							<span v-if="item.item_name">{{ item.item_name }}</span>
+							<span v-else>--</span>
+						</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.remark }}</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.point }} 
+							<span>{{ item.pt_id==3? 'B分':'A分' }}</span>
+						</div>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.reviewer_name }}</div>
+					</div>
+				</div>
+				<span slot="footer">
+					<div class="flex-box-end" style="margin-top: 20px;">
+						<el-button type="primary" @click="colseBreak()" size="small">取 消</el-button>
+						<el-button type="primary" @click="submitBreak()" size="small">再次提交</el-button>
+					</div>
+				</span>
+			</div>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import moment from 'moment';
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import upload from '@/components/upload';
+export default {
+	name: 'bonusPointsForm',
+	// 数据
+	model: {
+		prop: 'list',
+		event: 'value'
+	},
+	props: {
+		title: {
+			type: String,
+			default: ''
+		},
+		visible: {
+			type: Boolean,
+			default: false
+		},
+		isBreak: { //是否打开缓存的未完成奖扣
+			type: Boolean,
+			default: false
+		},
+		refresh: {
+			type: String,
+			default: ''
+		},
+		integralType: {
+			type: Number,
+			default: 0
+			// 1 是绩效分 , 2 是A分 , 3 是B分
+		},
+		ruleOnoff: {
+			type: Boolean,
+			default: false
+			//true:选择规则; false:选择分类
+		}
+	},
+	data() {
+		return {
+			showCascader: false,
+			pickerBeginDateBefore: {
+				disabledDate(time) {
+					return time.getTime() > Date.now();
+				}
+			},
+			btn_loading: false,
+			loading: false,
+			dialogData: {
+				members: [],
+				items: [
+					{
+						ticket_count:0,//奖票
+						rule_switch: true,
+						rule_id: '',
+						item_id: '',
+						point: '0',
+						remark: '',
+						event_time: moment().format('YYYY-MM-DD'),
+						approval: '',
+						approval_not_select: [],
+						pt_id: this.integralType,
+						// 积分填写限制
+						pointShow: 1,
+						max: 0,
+						min: 0,
+
+						// 审批人信息
+						reviewer_id: '',
+						approvalName: '',
+						approval_not_select: [],
+						approval_selected: { dept: [], employee: [] },
+						show_approval_selector: false,
+
+						// 附件
+						fileList: [],
+						files: [],
+						// 规则分类 与 规则细则 名称
+						rule_list_value: null,
+						rule_item_list_value: null,
+						// 规则细则详情
+						rule_item_details: { range_type: '' }
+					}
+				]
+			},
+			// 奖扣对象名称
+			employeeName: '',
+			employee_not_select: [],
+			employee_selected: { dept: [], employee: [] },
+			manage_scope: [], //下属人员
+			superior_list: [], //上级人员
+			show_employee_selector: false,
+			// 规则分类
+			rule_list: [],
+			// 规则细则
+			rule_item_list: [],
+			flatteningIntegralRules: null,
+			ptid: 0,
+			itemIndex: 0,
+
+			// 错误提示
+			error_list: [], //错误信息数组
+			error_list_show: false ,//错误信息弹窗
+			
+			// 长连接结果
+			results: [], //提交的返回结果集合
+			isResult: false,
+			percentage: 0,
+			resultList:[],//要发送数据的集合
+			resultIndex:0,
+			isShowError:false,
+			isShowError2:false,
+			errorMsg:'服务器繁忙,请稍后再试',
+			breakList:[],
+			isShowBreak:false,
+			config:{},
+		};
+	},
+	components: { EmployeeSelector, upload },
+	watch: {
+		isBreak(){
+			let data=this.$getCache('award_punish').obj;
+			data.forEach(item=>{
+				item.name=this.$getCache('userList')[item.employee_id]?this.$getCache('userList')[item.employee_id].name:'--';
+				item.reviewer_name=this.$getCache('userList')[item.reviewer_id]?this.$getCache('userList')[item.reviewer_id].name:'--';
+			})
+			this.breakList=data;
+			this.isShowBreak=true;
+		},
+		integralType(val) {
+			this.dialogData.items[0].pt_id = val;
+			this.ptid = val;
+			
+		},
+		'dialogData.members'(val) {
+			if (val.length == 0) {
+				this.employeeName = '';
+				this.employee_selected = { dept: [], employee: [] };
+			}
+		},
+		isResult(val){
+			if(!val){
+				this.isShowError = false;
+				this.isShowBreak = false;
+				this.$refs['dialogData'].resetFields();
+				this.$emit('update:refresh',this.$moment().format().valueOf());
+				this.closePopup();
+				this.errorMsg='服务器繁忙,请稍后再试';
+				this.$socketApiTow.closewebsocket();
+			}
+		},
+	},
+	mounted() {
+		var that = this;
+		this.config=this.$store.state.config;
+		this.getUserDetail(function(data) {
+			that.manage_scope = data.manage_scope;
+			that.superior_list = data.superior_list;
+		});
+	},
+	methods: {
+
+		initData() {
+			this.getRuleData();
+			this.getRuleItemData();
+		},
+
+		setIndex(index){
+		  if(index==this.itemIndex){
+		    return false
+		  }
+		  this.itemIndex = index;
+		},
+		// 关闭缓存弹窗
+		colseBreak(){
+			this.isShowBreak = false;
+			this.breakList=[];
+			this.$removeCache('award_punish');
+			this.$emit('update:refresh',this.$moment().format().valueOf());
+			this.closePopup();
+		},
+		// 提交缓存奖扣
+		submitBreak(){
+			this.$removeCache('award_punish');
+			this.resultList=JSON.parse(JSON.stringify(this.breakList));
+			this.resultIndex=0;
+			this.percentage=0;
+			this.results=[];
+			this.isResult=true;
+			this.opneWebSocket()
+		},
+		getUserDetail(func) {
+			this.$axios('get', '/api/employee/detail').then(res => {
+				this.$setUserData(res.data.data.user);
+				func(res.data.data.user.employee_detail);
+			});
+		},
+		submitEmployee(name) {
+			this.$refs[name][0].confirm(); //调用组件的confirm();
+		},
+		submitMembers() {
+			this.$refs.members.confirm(); //调用组件的confirm();
+		},
+		//关闭
+		handleClose(done) {
+			done();
+		},
+		// 附件上传
+		beforeUpload(file) {
+			const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
+			const isLt2M = file.size / 1024 / 1024 < 5;
+			if (!isJPG) {
+				this.$message.error('上传图只能是 JPEG,PNG,JPG 格式!');
+			}
+			if (!isLt2M) {
+				this.$message.error('上传图片大小不能超过 5MB!');
+			}
+			return isJPG && isLt2M;
+		},
+		onFilePreView(file) {
+			if (file.response) {
+				window.open(file.response.url, '_blank');
+			}
+		},
+		onFileRemove(file, fileList) {
+			this.dialogData.items[this.itemIndex].fileList = fileList;
+			this.dialogData.items[this.itemIndex].files = [];
+			fileList.forEach((element, index) => {
+				this.dialogData.items[this.itemIndex].files.push(element.url);
+			});
+		},
+		handleFilesSuccess(response, file, fileList) {
+			let fileListData=fileList.filter(e=>{
+			  return e.url
+			})
+			this.dialogData.items[this.itemIndex].fileList = fileListData;
+			this.dialogData.items[this.itemIndex].files = [];
+			fileListData.forEach((element, index) => {
+				this.dialogData.items[this.itemIndex].files.push(element.url);
+			});
+		},
+
+		// 没有人员提示
+		noPersonnelListTips() {
+			this.show_employee_selector = true;
+		},
+		// 当switch 改变了
+		switchChange(index, value) {
+			this.itemIndex = index;
+			const item = this.dialogData.items[this.itemIndex];
+			if (!value) {
+				item.remark = '';
+				item.rule_id = '';
+				item.item_id = '';
+				item.rule_item_list_value = '';
+				item.rule_item_details = { range_type: '' };
+				item.max = 0;
+				item.min = 0;
+				item.point = '0';
+			} else {
+				item.rule_id = '';
+				item.rule_list_value = '';
+			}
+		},
+		// 选择奖扣对象
+		move_employee_confirm(data) {
+			this.employee_selected = { dept: [], employee: [] };
+			this.employeeName = '';
+			this.dialogData.members = [];
+			if (data.employee !== null && data.employee.length != 0) {
+				let nameArr = [];
+				data.employee.forEach(element => {
+					this.employeeName += element.name + ',';
+					this.employee_selected = data;
+					this.dialogData.members.push(element.id);
+				});
+			}
+			this.show_employee_selector = false;
+		},
+		// 获取规则类型
+		getRuleData() {
+			let data = { cycle_type: '1', pt_id: this.integralType };
+			this.$axios('get', '/api/integral/rule/trees', data).then(res => {
+				if (res.data.code == 1) {
+					this.rule_list = this.getTreeData(res.data.data.rule_tree);
+				}
+			});
+		},
+
+		// 获取规则细则
+		getRuleItemData() {
+			let data = { cycle_type: '1', pt_id: this.integralType };
+			this.$axios('get', '/api/integral/rule/trees', data, 'v2').then(res => {
+				if (res.data.code == 1) {
+					const resultData = res.data.data;
+					this.rule_item_list = resultData.tree;
+					// 数据更新后强制重渲染
+					this.showCascader = false
+					this.$nextTick(() => {
+						this.showCascader = true
+						this.$nextTick(() => {
+							this.$refs.cascader?.computePresentText()
+						})
+					})
+					this.flatteningIntegralRules = this.getItemDetail(this.rule_item_list);
+					this.loading = false;
+				}
+			});
+		},
+
+		// 规则细则变化关闭down
+		ruleItemChange(value) {
+			const item = this.dialogData.items[this.itemIndex];
+			if (value.length > 0) {
+				let ruleItemDetails = null;
+				this.flatteningIntegralRules.forEach(element => {
+					if (element.id == value[value.length - 1]) {
+						ruleItemDetails = { ...element };
+					}
+				});
+				item.rule_item_details = ruleItemDetails;
+				item.remark = ruleItemDetails.name;
+				item.rule_id = ruleItemDetails.pid;
+				item.item_id = value[value.length - 1];
+				item.max = ruleItemDetails.max_point * 1;
+				item.min = ruleItemDetails.min_point * 1;
+				item.point = ruleItemDetails.min_point;
+			} else {
+				item.remark = '';
+				item.rule_id = '';
+				item.item_id = '';
+				item.rule_item_list_value = '';
+				item.rule_item_details = { range_type: '' };
+				item.max = 0;
+				item.min = 0;
+				item.point = '0';
+			}
+		},
+		// 规则分类变化关闭dewn
+		ruleChange(value) {
+			const item = this.dialogData.items[this.itemIndex];
+			if (value.length > 0) {
+				const user_info = this.$getUserData();
+				let ruleCascader='ruleCascader'+this.itemIndex;
+				user_info.point_config.point_limit.forEach(element => {
+					if (this.ptid == this.integralType) {
+						item.max = element.point * 1;
+						item.min = element.point * -1;
+					}
+				});
+				this.$refs.[ruleCascader][0].dropDownVisible = false;
+				item.rule_id = value[value.length - 1];
+				item.rule_name = this.$refs.[ruleCascader][0].getCheckedNodes()[0].label;
+			} else {
+				item.rule_id = '';
+				item.rule_list_value = '';
+				item.rule_name='';
+			}
+		},
+		// 递归判断列表,把最后的child设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i].child.length < 1) {
+					// child若为空数组,则将child设为undefined
+					data[i].child = undefined;
+				} else {
+					// child若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i].child);
+				}
+			}
+			return data;
+		},
+
+		getItemDetail(arr) {
+			let result = [];
+			for (const item of arr) {
+				var res = JSON.parse(JSON.stringify(item)); // 先克隆一份数据作为第一层级的填充
+				delete res['child'];
+				result.push(res);
+				if (item.child instanceof Array && item.child.length > 0) {
+					// 如果当前child为数组并且长度大于0,才可进入getItemDetail()方法
+					result = result.concat(this.getItemDetail(item.child));
+				}
+			}
+			return result;
+		},
+		// 加一条
+		addItem() {
+			if (this.dialogData.items.length == 10) {
+				this.$message({
+					type: 'warning',
+					message: '一次只能添加10条奖扣'
+				});
+				return false;
+			}
+			this.dialogData.items.push({
+				ticket_count:0,//奖票
+				rule_switch: true,
+				rule_id: '',
+				item_id: '',
+				point: '0',
+				remark: '',
+				event_time: moment().format('YYYY-MM-DD'),
+				approval: '',
+				approval_not_select: [],
+				pt_id: this.integralType,
+
+				// 积分填写限制
+				pointShow: 1,
+				max: 0,
+				min: 0,
+
+				// 审批人信息
+				reviewer_id: '',
+				approvalName: '',
+				approval_not_select: [],
+				approval_selected: { dept: [], employee: [] },
+				show_approval_selector: false,
+
+				// 附件
+				fileList: [],
+				files: [],
+
+				// 规则分类 与 规则细则 名称
+				rule_list_value: null,
+				rule_item_list_value: null,
+
+				// 规则细则详情
+				rule_item_details: { range_type: '' }
+			});
+		},
+		closeDialog(formName) {
+			this.dialogData.items.forEach(element => {
+				element.rule_item_details = { range_type: '' };
+			});
+			this.$refs[formName].resetFields();
+			this.closePopup();
+		},
+		delItem(index) {
+			this.$confirm('你确定要删除奖扣明细' + parseInt(index + 1) + '吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.dialogData.items.splice(index, 1);
+				this.$message({
+					type: 'success',
+					message: '删除成功!'
+				});
+			});
+		},
+		subData(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					this.save();
+				}
+			});
+		},
+		// 提交数据
+		save() {
+			let data = {
+				members: this.dialogData.members,
+				items: []
+			};
+			const user_info = this.$getUserData();
+			const index = user_info.point_config.point_limit.findIndex(o => o.pt_id === this.integralType);
+			let employeePointLimitMin = null;
+			let employeePointLimitMax = null;
+			user_info.point_config.point_limit.forEach(element => {
+				if (this.ptid == this.integralType) {
+					employeePointLimitMax = element.point * 1;
+					employeePointLimitMin = element.point * 1;
+				}
+			});
+			const ruleLimitCheck = user_info.site_config.rule_limit_check;
+			let maxPointPermission = 0;
+			let creator = user_info.employee_detail.role_list.findIndex(item => item.name == 'creator') >= 0;
+			if (user_info.point_config.point_limit.length > 0) {
+				maxPointPermission = parseInt(user_info.point_config.point_limit[index].point);
+			} else {
+				if (creator) {
+					maxPointPermission = -1;
+				}
+			}
+			try {
+				if (index < 0 || user_info.is_creator === 1) {
+					this.dialogData.items.forEach((element, i) => {
+						data.items.push({
+							rule_id: element.rule_id || 0,
+							item_id: element.item_id || 0,
+							point: element.point,
+							remark: element.remark,
+							event_time: element.event_time,
+							pt_id: this.ptid,
+							rule_name:element.rule_name,
+							item_name:element.rule_item_details.name,
+							reviewer_id: element.reviewer_id || 0,
+							files: element.files,
+							ticket_count:element.ticket_count,
+						});
+					});
+				} else {
+					this.dialogData.items.forEach((element, index) => {
+						!element.reviewer_id ? (element.reviewer_id = 0) : '';
+						!element.item_id ? (element.item_id = 0) : '';
+						if (
+							(element.reviewer_id && element.point !== 0 && element.rule_id > 0) ||
+							(element.reviewer_id <= 0 &&
+								element.item_id > 0 &&
+								ruleLimitCheck &&
+								element.point !== 0 &&
+								element.point <= maxPointPermission &&
+								Math.abs(element.point) <= maxPointPermission) ||
+							(element.reviewer_id <= 0 && !ruleLimitCheck && this.integralType == 3 && element.rule_id > 0) ||
+							(element.reviewer_id <= 0 &&
+								element.item_id >= 0 &&
+								element.point !== 0 &&
+								element.point <= maxPointPermission &&
+								Math.abs(element.point) <= maxPointPermission &&
+								element.rule_id > 0)
+						) {
+							data.items.push({
+								rule_id: element.rule_id || 0,
+								item_id: element.item_id || 0,
+								point: element.point,
+								remark: element.remark,
+								event_time: element.event_time,
+								pt_id: this.ptid,
+								reviewer_id: element.reviewer_id || 0,
+								files: element.files,
+								rule_name:element.rule_name,
+								item_name:element.rule_item_details.name,
+								ticket_count:element.ticket_count,
+							});
+						} else {
+							this.$message.error('第' + (index + 1) + '条输入积分分值超出权限,请选择审批人递交');
+							throw new Error();
+						}
+					});
+				}
+			} catch (e) {
+				this.btn_loading = false;
+				return false;
+			}
+			this.webSocket(data);
+			// 走长连接处理
+			return false
+			this.btn_loading = true;
+			this.$axios('post', this.integralType === 1 ? '' : this.integralType === 2 ? '/api/integral/review/a/entry' : '/api/integral/point/entry', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						var is = true,msg;
+						if (this.integralType == '3') {
+							res.data.data.list.forEach(item => {
+								if (item.status != 1) {
+									is = false;
+									msg = item.msg;
+								}
+							});
+						} else {
+							res.data.data.list.forEach(item => {
+								if (item.status != 1) {
+									is = false;
+									msg = item.rule_item;
+								}
+							});
+						}
+						if (is) {
+							this.dialogData.items.forEach(element => {
+								element.rule_item_details = { range_type: '' };
+							});
+							this.$refs['dialogData'].resetFields();
+							this.$emit('update:visible', false);
+							this.$emit('update:refresh',this.$moment().format().valueOf());
+							this.closePopup();
+							this.error_list = res.data.data.list;
+							this.error_list_show = true;
+						}
+					}
+				})
+				.finally(e => {
+					this.btn_loading = false;
+				});
+		},
+		webSocket(data){
+			let {members,items}=data;
+			let arr=[];
+			members.forEach(item=>{
+				items.forEach(item2=>{
+					item2.type = this.integralType === 2?'pea':'peb';
+					item2.employee_id=item;
+					arr.push(JSON.parse(JSON.stringify(item2)))
+				})
+			})
+			this.resultList=arr;
+			this.resultIndex=0;
+			this.percentage=0;
+			this.results=[];
+			this.isResult=true;
+			this.opneWebSocket()
+		},
+		opneWebSocket() {
+			let wsData=this.resultList;
+			if(wsData[this.resultIndex]&&!this.isShowError){
+				this.$socketApiTow.sendData(wsData[this.resultIndex],this.onmessageWS)
+			}
+		},
+		onmessageWS(e){
+			if(e.type=='peb'||e.type=='pea'){
+				this.results.unshift(e.result);
+				this.resultIndex++;
+				this.opneWebSocket();
+				// 进度条
+				let lng = this.resultList.length;
+				this.percentage = Math.floor(this.resultIndex / (lng / 100))
+				if (lng == this.results.length) {
+					this.percentage = 100;
+				}
+			}
+			// 中途断开
+			if(e.type=='break'){
+				let wsData=this.resultList;
+				this.errorMsg=e.msg
+				let data={
+					type:this.integralType,
+					obj:wsData.slice(this.resultIndex,wsData.length)
+				}
+				this.$setCache('award_punish',data);
+				this.isShowError2 = true;
+			}
+			// 连接不上
+			if(e.type=='error'){
+				this.errorMsg=e.msg
+				this.isShowError = true;
+			}
+			
+		},
+		// 选择审核人
+		approval_confirm(data) {
+			const item = this.dialogData.items[this.itemIndex];
+			item.approvalName = '';
+			if(item.ticket_count){
+				this.$message('选择递交审批人时,发放奖票将失效,由审批上级来发放奖票');
+			}
+			item.ticket_count=0;
+			item.approval_selected = { dept: [], employee: [] };
+			item.reviewer_id = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				item.approvalName = data.employee[0].name;
+				item.approval_selected.employee = [{ name: data.employee[0].name, id: data.employee[0].id, img_url: data.employee[0].img_url }];
+				item.reviewer_id = data.employee[0].id;
+			}
+			item.reviewer_id ? (item.pointShow = 3) : '';
+			item.show_approval_selector = false;
+		},
+		// 关闭弹窗
+		closePopup() {
+			//关闭重置窗口状态
+			this.dialogData.items = [
+				{
+					ticket_count:0,//奖票
+					rule_switch: true,
+					rule_id: '',
+					item_id: '',
+					point: '0',
+					remark: '',
+					event_time: moment().format('YYYY-MM-DD'),
+					approval: '',
+					approval_not_select: [],
+					pt_id: this.integralType,
+					// 积分填写限制
+					pointShow: 1,
+					max: 0,
+					min: 0,
+					// 审批人信息
+					reviewer_id: '',
+					approvalName: '',
+					approval_not_select: [],
+					approval_selected: { dept: [], employee: [] },
+					show_approval_selector: false,
+					// 附件
+					fileList: [],
+					files: [],
+					// 规则分类 与 规则细则 名称
+					rule_list_value: null,
+					rule_item_list_value: null,
+					// 规则细则详情
+					rule_item_details: { range_type: '' }
+				}
+			];
+			this.$nextTick(() => {
+				this.$emit('update:visible', false);
+			});
+		}
+	}
+};
+</script>
+<style lang="scss" scoped>
+::v-deep .el-input__count{
+  right: 70px;
+  bottom: -36px;
+}	
+.title{
+	background-color: #f4f9fd;
+	border: 1px solid #e4f0fc;
+	padding-right: 10px;
+}
+.title .span{
+	line-height: 36px;
+	width: 100px;
+	text-align: right;
+	font-weight: 700;
+}
+.width_400{
+	width: 400px;
+	position: relative;
+}
+.itemClass .el-cascader-menu .el-cascader-menu__wrap .el-scrollbar__view li.el-cascader-node {
+	height: auto;
+	max-width: 500px;
+	.el-cascader-node__label {
+		white-space: initial;
+		overflow: initial;
+		text-overflow: initial;
+	}
+}
+.results {
+	border-bottom: 1px solid #f1f1f1;
+	text-align: center;
+}
+.results div {
+	padding: 10px;
+}
+</style>

+ 211 - 219
src/components/bonusPointsPopup.vue

@@ -1,63 +1,45 @@
 <template>
 	<div>
 		<!-- 奖扣ab分弹窗 -->
-		<el-dialog :title="title" :visible.sync="visible" top="3%" :close-on-click-modal="false" :before-close="closePopup" width="700px">
+		<el-dialog :title="title" :visible.sync="visible" top="3%" :close-on-click-modal="false"
+			:before-close="closePopup" width="700px" @open="initData()">
 			<div>
 				<el-form :model="dialogData" ref="dialogData" label-width="100px" v-loading="loading">
-					<el-form-item label="奖扣对象" prop="members" :rules="[{ required: true, message: '请选择奖扣对象', trigger: 'change' }]">
+					<el-form-item label="奖扣对象" prop="members"
+						:rules="[{ required: true, message: '请选择奖扣对象', trigger: 'change' }]">
 						<div class="width_400">
-							<el-input auto-complete="off" v-model="employeeName" placeholder="请选择奖扣对象" ></el-input>
-							<div @click="noPersonnelListTips" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+							<el-input auto-complete="off" v-model="employeeName" placeholder="请选择奖扣对象"></el-input>
+							<div @click="noPersonnelListTips"
+								style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
 						</div>
 						<slot></slot>
 					</el-form-item>
 					<div v-for="(item, index) in dialogData.items" :key="index" @click.stop="setIndex(index)">
 						<div class="title flex-box-ce flex-d-center">
 							<span class="span">录入明细({{ index + 1 }})</span>
-							<el-link type="danger" v-show="index > 0 || dialogData.items.length > 1" @click="delItem(index)">删除</el-link>
+							<el-link type="danger" v-show="index > 0 || dialogData.items.length > 1"
+								@click="delItem(index)">删除</el-link>
 						</div>
 						<el-form-item label="指定规则">
-							<el-switch  :disabled="ruleOnoff" @change="switchChange(index, item.rule_switch)" v-model="item.rule_switch"></el-switch>
+							<el-switch :disabled="ruleOnoff" @change="switchChange(index, item.rule_switch)"
+								v-model="item.rule_switch"></el-switch>
 						</el-form-item>
-						<el-form-item
-							label="选择分类"
-							v-if="!item.rule_switch"
+						<el-form-item label="选择分类" v-if="!item.rule_switch"
 							:prop="'items.' + index + '.rule_list_value'"
-							:rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]"
-						>
-							<el-cascader
-								v-model="item.rule_list_value"
-								:ref="'ruleCascader'+index"
-								:popper-class="'ruleClass'"
-								filterable
-								class="width_400"
-								@expand-change="setIndex(index)"
-								clearable
-								:options="rule_list"
-								@change="ruleChange"
-								:props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"
-							></el-cascader>
+							:rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]">
+							<el-cascader v-model="item.rule_list_value" :ref="'ruleCascader' + index"
+								:popper-class="'ruleClass'" filterable class="width_400"
+								@expand-change="setIndex(index)" clearable :options="rule_list" @change="ruleChange"
+								:props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"></el-cascader>
 						</el-form-item>
 
-						<el-form-item
-							label="选择规则"
-							v-if="item.rule_switch"
+						<el-form-item label="选择规则" v-if="item.rule_switch"
 							:prop="'items.' + index + '.rule_item_list_value'"
-							:rules="[{ required: true, message: '请选择规则', trigger: 'blur' }]"
-						>
-							<el-cascader
-								v-model="item.rule_item_list_value"
-								ref="ruleItem"
-								class="width_400"
-								:popper-class="'itemClass'"
-								filterable
-								clearable
-								@expand-change="setIndex(index)"
-								:options="rule_item_list"
-								@change="ruleItemChange"
-								:show-all-levels="false"
-								:props="{ children: 'child', label: 'name', value: 'id' }"
-							></el-cascader>
+							:rules="[{ required: true, message: '请选择规则', trigger: 'blur' }]">
+							<el-cascader v-model="item.rule_item_list_value" ref="ruleItem" class="width_400"
+								:popper-class="'itemClass'" filterable clearable @expand-change="setIndex(index)"
+								:options="rule_item_list" @change="ruleItemChange" :show-all-levels="false"
+								:props="{ children: 'child', label: 'name', value: 'id' }"></el-cascader>
 						</el-form-item>
 
 						<el-form-item>
@@ -71,75 +53,62 @@
 							</div>
 							<div style="line-height: 24px;">{{ item.rule_item_details.name }}</div>
 						</el-form-item>
-						
-						<el-form-item label="积分" :prop="'items.' + index + '.point'" :rules="[{ required: true, message: '请输入分值', trigger: 'blur' }]">
-							<el-input-number style="width: 220px;" v-if="item.rule_item_details.range_type == 2" :min="item.min" :max="item.max" v-model.number="item.point"></el-input-number>
-							<el-input-number style="width: 220px;" v-else :disabled="item.rule_item_details.range_type == 1" v-model.number="item.point"></el-input-number>
+
+						<el-form-item label="积分" :prop="'items.' + index + '.point'"
+							:rules="[{ required: true, message: '请输入分值', trigger: 'blur' }]">
+							<el-input-number style="width: 220px;" v-if="item.rule_item_details.range_type == 2"
+								:min="item.min" :max="item.max" v-model.number="item.point"></el-input-number>
+							<el-input-number style="width: 220px;" v-else
+								:disabled="item.rule_item_details.range_type == 1"
+								v-model.number="item.point"></el-input-number>
 						</el-form-item>
 
-						<el-form-item label="发生时间" :prop="'items.' + index + '.event_time'" :rules="[{ required: true, message: '请选择时间', trigger: 'blur' }]">
-							<el-date-picker
-								:clearable="false"
-								v-model="item.event_time"
-								:picker-options="pickerBeginDateBefore"
-								type="date"
-								placeholder="请选择时间"
-								value-format="yyyy-MM-dd"
-							></el-date-picker>
+						<el-form-item label="发生时间" :prop="'items.' + index + '.event_time'"
+							:rules="[{ required: true, message: '请选择时间', trigger: 'blur' }]">
+							<el-date-picker :clearable="false" v-model="item.event_time"
+								:picker-options="pickerBeginDateBefore" type="date" placeholder="请选择时间"
+								value-format="yyyy-MM-dd"></el-date-picker>
 						</el-form-item>
 						<el-form-item label="发放奖票">
 							<template slot="label">
-								<el-tooltip  effect="dark" placement="top">
-								  <div slot="content">选择递交审批人时,发放奖票将失效,由审批上级来发放奖票</div>
-								  <span>发放奖票<i style="padding-left: 5px;font-size: 16px;" class="el-icon-question fontColorD"></i></span>
+								<el-tooltip effect="dark" placement="top">
+									<div slot="content">选择递交审批人时,发放奖票将失效,由审批上级来发放奖票</div>
+									<span>发放奖票<i style="padding-left: 5px;font-size: 16px;"
+											class="el-icon-question fontColorD"></i></span>
 								</el-tooltip>
 							</template>
-							<el-switch  :disabled="item.approvalName? true:false" :active-value="1" :inactive-value="0" v-model="item.ticket_count"></el-switch>
+							<el-switch :disabled="item.approvalName ? true : false" :active-value="1" :inactive-value="0"
+								v-model="item.ticket_count"></el-switch>
 						</el-form-item>
-						<el-form-item
-							label="事件内容"
-							:prop="'items.' + index + '.remark'"
-							:rules="[{ required: true, message: '请输入事件内容', trigger: 'blur' }, { min: 2, max: 300, message: '长度在 2 到 300 个字符', trigger: 'blur' }]"
-						>
-							<el-input type="textarea" placeholder="请输入事件内容"  clearable maxlength="300" show-word-limit rows="4" v-model="item.remark" ></el-input>
-							<el-button @click="item.remark=''" type="danger" plain size="mini" style="position: absolute;right: 0px;bottom: -30px;z-index: 99999;">清空</el-button>
+						<el-form-item label="事件内容" :prop="'items.' + index + '.remark'"
+							:rules="[{ required: true, message: '请输入事件内容', trigger: 'blur' }, { min: 2, max: 300, message: '长度在 2 到 300 个字符', trigger: 'blur' }]">
+							<el-input type="textarea" placeholder="请输入事件内容" clearable maxlength="300" show-word-limit
+								rows="4" v-model="item.remark"></el-input>
+							<el-button @click="item.remark = ''" type="danger" plain size="mini"
+								style="position: absolute;right: 0px;bottom: -30px;z-index: 99999;">清空</el-button>
 						</el-form-item>
 
 						<el-form-item label="图片">
-							  <upload
-								:headers="$xtoken"
-								:action="$action"
-								:limit="3"
-								list_type="picture-card"
-								:accept="$acceptImg"
-								:multiple="true"
-								ref="clearPicture"
-								:show-file-list="true"
-								:file-list="item.fileList"
-								:on-success="handleFilesSuccess"
-								:on-preview="onFilePreView"
-								:before-upload="beforeUpload"
-								:on-remove="onFileRemove"
-							  >
+							<upload :headers="$xtoken" :action="$action" :limit="3" list_type="picture-card"
+								:accept="$acceptImg" :multiple="true" ref="clearPicture" :show-file-list="true"
+								:file-list="item.fileList" :on-success="handleFilesSuccess" :on-preview="onFilePreView"
+								:before-upload="beforeUpload" :on-remove="onFileRemove">
 								<i class="el-icon-plus"></i>
 							</upload>
 						</el-form-item>
 						<el-form-item label="递交审批" v-if="$getUserData().is_creator == 0">
 							<div class="width_400">
-								<el-input auto-complete="off" v-model="item.approvalName" placeholder="请选择审批人"></el-input>
-								<div @click="item.show_approval_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+								<el-input auto-complete="off" v-model="item.approvalName"
+									placeholder="请选择审批人"></el-input>
+								<div @click="item.show_approval_selector = true"
+									style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;">
+								</div>
 							</div>
-							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_approval_selector" append-to-body :before-close="handleClose">
-								<EmployeeSelector
-									v-if="item.show_approval_selector"
-									ref="superior"
-									:multi="false"
-									:isCreatorSelect="true"
-									:user_no_select="false"
-									:employee_list="superior_list"
-									:selected="item.approval_selected"
-									@confirm="approval_confirm"
-								/>
+							<el-dialog title="选择人员" width="640px" :visible.sync="item.show_approval_selector"
+								append-to-body :before-close="handleClose">
+								<EmployeeSelector v-if="item.show_approval_selector" ref="superior" :multi="false"
+									:isCreatorSelect="true" :user_no_select="false" :employee_list="superior_list"
+									:selected="item.approval_selected" @confirm="approval_confirm" />
 								<span slot="footer" class="dialog-footer">
 									<el-button @click="item.show_approval_selector = false">取 消</el-button>
 									<el-button type="primary" @click="submitEmployee('superior')">确 定</el-button>
@@ -147,26 +116,24 @@
 							</el-dialog>
 						</el-form-item>
 					</div>
-					<el-form-item style="margin-bottom: 0;"><div>如需录入多条,请点击“增加一条”</div></el-form-item>
-					<el-form-item style="margin-bottom: 0;"><el-button type="primary" plain @click="addItem">+ 增加一条</el-button></el-form-item>
+					<el-form-item style="margin-bottom: 0;">
+						<div>如需录入多条,请点击“增加一条”</div>
+					</el-form-item>
+					<el-form-item style="margin-bottom: 0;"><el-button type="primary" plain @click="addItem">+
+							增加一条</el-button></el-form-item>
 					<el-form-item style="text-align: right; margin-bottom: 0;">
 						<el-button @click="closeDialog('dialogData')" :disabled="btn_loading">取 消</el-button>
-						<el-button type="primary" @click="subData('dialogData')" :disabled="btn_loading" :loading="btn_loading">确 认</el-button>
+						<el-button type="primary" @click="subData('dialogData')" :disabled="btn_loading"
+							:loading="btn_loading">确
+							认</el-button>
 					</el-form-item>
 				</el-form>
 			</div>
-			<el-dialog title="选择人员" width="640px" :visible.sync="show_employee_selector" append-to-body :before-close="handleClose">
-				<EmployeeSelector
-					v-if="show_employee_selector"
-					ref="members"
-					:isChecKedAll="false"
-					:isCreatorSelect="true"
-					:user_no_select="false"
-					:max="30"
-					:employee_list="manage_scope"
-					:selected="employee_selected"
-					@confirm="move_employee_confirm"
-				/>
+			<el-dialog title="选择人员" width="640px" :visible.sync="show_employee_selector" append-to-body
+				:before-close="handleClose">
+				<EmployeeSelector v-if="show_employee_selector" ref="members" :isChecKedAll="false"
+					:isCreatorSelect="true" :user_no_select="false" :max="30" :employee_list="manage_scope"
+					:selected="employee_selected" @confirm="move_employee_confirm" />
 				<span slot="footer" class="dialog-footer">
 					<el-button @click="show_employee_selector = false">取 消</el-button>
 					<el-button type="primary" @click="submitMembers()">确 定</el-button>
@@ -187,57 +154,67 @@
 				</el-table-column>
 				<el-table-column prop="status" label="处理状态">
 					<template slot-scope="scope">
-						<span :style="'color:' + (scope.row.status == 0 ? '#f70000' : '#47bf47')">{{ scope.row.msg }}</span>
+						<span :style="'color:' + (scope.row.status == 0 ? '#f70000' : '#47bf47')">{{ scope.row.msg
+							}}</span>
 					</template>
 				</el-table-column>
 				<el-table-column prop="remark" label="备注信息"></el-table-column>
 			</el-table>
 		</el-dialog>
-	
-		<el-dialog title="提交结果" :visible.sync="isResult"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+
+		<el-dialog title="提交结果" :visible.sync="isResult" width="800" :close-on-click-modal="false"
+			:close-on-press-escape="false" :show-close="false">
 			<div v-if="!isShowError">
-				<div style="text-align: center;margin-bottom: 10px;" class="red" v-if="isShowError2">{{errorMsg}}</div>
+				<div style="text-align: center;margin-bottom: 10px;" class="red" v-if="isShowError2">{{ errorMsg }}</div>
 				<el-progress :text-inside="true" :stroke-width="24" :percentage="percentage"></el-progress>
-				<div class="orange" style="text-align: center;padding-top: 10px;" v-if="config.event_review_status&&config.event_entry_review">复核开启后,积分需管理员复核后才计入排名和统计</div>
-				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;" class="scroll-bar">
+				<div class="orange" style="text-align: center;padding-top: 10px;"
+					v-if="config.event_review_status && config.event_entry_review">复核开启后,积分需管理员复核后才计入排名和统计</div>
+				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;"
+					class="scroll-bar">
 					<div class="flex-box-ce results" style="font-weight: 600;">
 						<div style="border-right: 1px solid #f1f1f1;width: 50px;">序号</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
 						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">事件内容</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">积分</div>
-						<div class="flex-2" >处理结果</div>
+						<div class="flex-2">处理结果</div>
 					</div>
 					<div class="flex-box-ce results" v-for="(item, index) in results" :key="index">
-						<div style="border-right: 1px solid #f1f1f1;width: 50px;">{{results.length-index}}</div>
+						<div style="border-right: 1px solid #f1f1f1;width: 50px;">{{ results.length - index }}</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.target }}</div>
 						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.source_msg.remark }}</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
-							{{ item.point>0? '+'+item.point:item.point }} 
-							<span>{{ item.source_msg.pt_id==3? 'B分':'A分' }}</span>
+							{{ item.point > 0 ? '+' + item.point : item.point }}
+							<span>{{ item.source_msg.pt_id == 3 ? 'B分' : 'A分' }}</span>
 						</div>
 						<div class="flex-2" v-if="item.status == 1">
-							<span v-if="item.msg=='奖扣成功'" class="green">{{ item.msg }}</span>
-							<span v-else class="blue">{{ item.msg }}</span>	
+							<span v-if="item.msg == '奖扣成功'" class="green">{{ item.msg }}</span>
+							<span v-else class="blue">{{ item.msg }}</span>
 						</div>
 						<div class="flex-2 red" v-else>{{ item.msg }}</div>
 					</div>
 				</div>
 				<span slot="footer">
-					<div class="flex-box-end" style="margin-top: 20px;" v-show="isShowError2&&results.length!=resultList.length"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
-					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length==resultList.length"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;"
+						v-show="isShowError2 && results.length != resultList.length"><el-button type="primary"
+							@click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length == resultList.length">
+						<el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
 				</span>
 			</div>
 			<div v-else>
-				<div style="text-align: center;" class="red">{{errorMsg}}</div>
+				<div style="text-align: center;" class="red">{{ errorMsg }}</div>
 				<span slot="footer">
-					<div class="flex-box-end" style="margin-top: 20px;"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;"><el-button type="primary"
+							@click="isResult = false" size="small">确 定</el-button></div>
 				</span>
 			</div>
 		</el-dialog>
 		<!-- 缓存的奖扣 -->
-		<el-dialog title="网络中断奖扣列表" :visible.sync="isShowBreak"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+		<el-dialog title="网络中断奖扣列表" :visible.sync="isShowBreak" width="800" :close-on-click-modal="false"
+			:close-on-press-escape="false" :show-close="false">
 			<div>
-				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;" class="scroll-bar">
+				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;"
+					class="scroll-bar">
 					<div class="flex-box-ce results" style="font-weight: 600;">
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">分类</div>
@@ -257,8 +234,8 @@
 							<span v-else>--</span>
 						</div>
 						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.remark }}</div>
-						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.point }} 
-							<span>{{ item.pt_id==3? 'B分':'A分' }}</span>
+						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.point }}
+							<span>{{ item.pt_id == 3 ? 'B分' : 'A分' }}</span>
 						</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.reviewer_name }}</div>
 					</div>
@@ -326,7 +303,7 @@ export default {
 				members: [],
 				items: [
 					{
-						ticket_count:0,//奖票
+						ticket_count: 0,//奖票
 						rule_switch: true,
 						rule_id: '',
 						item_id: '',
@@ -376,88 +353,94 @@ export default {
 
 			// 错误提示
 			error_list: [], //错误信息数组
-			error_list_show: false ,//错误信息弹窗
-			
+			error_list_show: false,//错误信息弹窗
+
 			// 长连接结果
 			results: [], //提交的返回结果集合
 			isResult: false,
 			percentage: 0,
-			resultList:[],//要发送数据的集合
-			resultIndex:0,
-			isShowError:false,
-			isShowError2:false,
-			errorMsg:'服务器繁忙,请稍后再试',
-			breakList:[],
-			isShowBreak:false,
-			config:{},
+			resultList: [],//要发送数据的集合
+			resultIndex: 0,
+			isShowError: false,
+			isShowError2: false,
+			errorMsg: '服务器繁忙,请稍后再试',
+			breakList: [],
+			isShowBreak: false,
+			config: {},
 		};
 	},
 	components: { EmployeeSelector, upload },
 	watch: {
-		isBreak(){
-			let data=this.$getCache('award_punish').obj;
-			data.forEach(item=>{
-				item.name=this.$getCache('userList')[item.employee_id]?this.$getCache('userList')[item.employee_id].name:'--';
-				item.reviewer_name=this.$getCache('userList')[item.reviewer_id]?this.$getCache('userList')[item.reviewer_id].name:'--';
+		isBreak() {
+			let data = this.$getCache('award_punish').obj;
+			data.forEach(item => {
+				item.name = this.$getCache('userList')[item.employee_id] ? this.$getCache('userList')[item.employee_id].name : '--';
+				item.reviewer_name = this.$getCache('userList')[item.reviewer_id] ? this.$getCache('userList')[item.reviewer_id].name : '--';
 			})
-			this.breakList=data;
-			this.isShowBreak=true;
+			this.breakList = data;
+			this.isShowBreak = true;
 		},
+
 		integralType(val) {
 			this.dialogData.items[0].pt_id = val;
 			this.ptid = val;
-			this.getRuleData();
-			this.getRuleItemData();
+			
 		},
+
 		'dialogData.members'(val) {
 			if (val.length == 0) {
 				this.employeeName = '';
 				this.employee_selected = { dept: [], employee: [] };
 			}
 		},
-		isResult(val){
-			if(!val){
+		isResult(val) {
+			if (!val) {
 				this.isShowError = false;
 				this.isShowBreak = false;
 				this.$refs['dialogData'].resetFields();
-				this.$emit('update:refresh',this.$moment().format().valueOf());
+				this.$emit('update:refresh', this.$moment().format().valueOf());
 				this.closePopup();
-				this.errorMsg='服务器繁忙,请稍后再试';
+				this.errorMsg = '服务器繁忙,请稍后再试';
 				this.$socketApiTow.closewebsocket();
 			}
 		},
 	},
 	mounted() {
 		var that = this;
-		this.config=this.$store.state.config;
-		this.getUserDetail(function(data) {
+		this.config = this.$store.state.config;
+		this.getUserDetail(function (data) {
 			that.manage_scope = data.manage_scope;
 			that.superior_list = data.superior_list;
 		});
 	},
 	methods: {
-		setIndex(index){
-		  if(index==this.itemIndex){
-		    return false
-		  }
-		  this.itemIndex = index;
+		initData() {
+			this.getRuleData();
+			this.getRuleItemData();
+		},
+
+		setIndex(index) {
+			if (index == this.itemIndex) {
+				return false
+			}
+			this.itemIndex = index;
 		},
 		// 关闭缓存弹窗
-		colseBreak(){
+		colseBreak() {
 			this.isShowBreak = false;
-			this.breakList=[];
+			this.breakList = [];
 			this.$removeCache('award_punish');
-			this.$emit('update:refresh',this.$moment().format().valueOf());
+			this.$emit('update:refresh', this.$moment().format().valueOf());
 			this.closePopup();
 		},
 		// 提交缓存奖扣
-		submitBreak(){
+		submitBreak() {
 			this.$removeCache('award_punish');
-			this.resultList=JSON.parse(JSON.stringify(this.breakList));
-			this.resultIndex=0;
-			this.percentage=0;
-			this.results=[];
-			this.isResult=true;
+			this.resultList = JSON.parse(JSON.stringify(this.breakList));
+			this.resultIndex = 0;
+			this.percentage = 0;
+			this.results = [];
+			this.isResult = true;
 			this.opneWebSocket()
 		},
 		getUserDetail(func) {
@@ -501,8 +484,8 @@ export default {
 			});
 		},
 		handleFilesSuccess(response, file, fileList) {
-			let fileListData=fileList.filter(e=>{
-			  return e.url
+			let fileListData = fileList.filter(e => {
+				return e.url
 			})
 			this.dialogData.items[this.itemIndex].fileList = fileListData;
 			this.dialogData.items[this.itemIndex].files = [];
@@ -558,9 +541,11 @@ export default {
 			});
 		},
 
+
 		// 获取规则细则
 		getRuleItemData() {
 			let data = { cycle_type: '1', pt_id: this.integralType };
+			this.loading = true;
 			this.$axios('get', '/api/integral/rule/trees', data, 'v2').then(res => {
 				if (res.data.code == 1) {
 					const resultData = res.data.data;
@@ -604,7 +589,7 @@ export default {
 			const item = this.dialogData.items[this.itemIndex];
 			if (value.length > 0) {
 				const user_info = this.$getUserData();
-				let ruleCascader='ruleCascader'+this.itemIndex;
+				let ruleCascader = 'ruleCascader' + this.itemIndex;
 				user_info.point_config.point_limit.forEach(element => {
 					if (this.ptid == this.integralType) {
 						item.max = element.point * 1;
@@ -617,7 +602,7 @@ export default {
 			} else {
 				item.rule_id = '';
 				item.rule_list_value = '';
-				item.rule_name='';
+				item.rule_name = '';
 			}
 		},
 		// 递归判断列表,把最后的child设为undefined
@@ -657,7 +642,7 @@ export default {
 				return false;
 			}
 			this.dialogData.items.push({
-				ticket_count:0,//奖票
+				ticket_count: 0,//奖票
 				rule_switch: true,
 				rule_id: '',
 				item_id: '',
@@ -755,11 +740,11 @@ export default {
 							remark: element.remark,
 							event_time: element.event_time,
 							pt_id: this.ptid,
-							rule_name:element.rule_name,
-							item_name:element.rule_item_details.name,
+							rule_name: element.rule_name,
+							item_name: element.rule_item_details.name,
 							reviewer_id: element.reviewer_id || 0,
 							files: element.files,
-							ticket_count:element.ticket_count,
+							ticket_count: element.ticket_count,
 						});
 					});
 				} else {
@@ -791,9 +776,9 @@ export default {
 								pt_id: this.ptid,
 								reviewer_id: element.reviewer_id || 0,
 								files: element.files,
-								rule_name:element.rule_name,
-								item_name:element.rule_item_details.name,
-								ticket_count:element.ticket_count,
+								rule_name: element.rule_name,
+								item_name: element.rule_item_details.name,
+								ticket_count: element.ticket_count,
 							});
 						} else {
 							this.$message.error('第' + (index + 1) + '条输入积分分值超出权限,请选择审批人递交');
@@ -812,7 +797,7 @@ export default {
 			this.$axios('post', this.integralType === 1 ? '' : this.integralType === 2 ? '/api/integral/review/a/entry' : '/api/integral/point/entry', data)
 				.then(res => {
 					if (res.data.code == 1) {
-						var is = true,msg;
+						var is = true, msg;
 						if (this.integralType == '3') {
 							res.data.data.list.forEach(item => {
 								if (item.status != 1) {
@@ -834,7 +819,7 @@ export default {
 							});
 							this.$refs['dialogData'].resetFields();
 							this.$emit('update:visible', false);
-							this.$emit('update:refresh',this.$moment().format().valueOf());
+							this.$emit('update:refresh', this.$moment().format().valueOf());
 							this.closePopup();
 							this.error_list = res.data.data.list;
 							this.error_list_show = true;
@@ -845,31 +830,31 @@ export default {
 					this.btn_loading = false;
 				});
 		},
-		webSocket(data){
-			let {members,items}=data;
-			let arr=[];
-			members.forEach(item=>{
-				items.forEach(item2=>{
-					item2.type = this.integralType === 2?'pea':'peb';
-					item2.employee_id=item;
+		webSocket(data) {
+			let { members, items } = data;
+			let arr = [];
+			members.forEach(item => {
+				items.forEach(item2 => {
+					item2.type = this.integralType === 2 ? 'pea' : 'peb';
+					item2.employee_id = item;
 					arr.push(JSON.parse(JSON.stringify(item2)))
 				})
 			})
-			this.resultList=arr;
-			this.resultIndex=0;
-			this.percentage=0;
-			this.results=[];
-			this.isResult=true;
+			this.resultList = arr;
+			this.resultIndex = 0;
+			this.percentage = 0;
+			this.results = [];
+			this.isResult = true;
 			this.opneWebSocket()
 		},
 		opneWebSocket() {
-			let wsData=this.resultList;
-			if(wsData[this.resultIndex]&&!this.isShowError){
-				this.$socketApiTow.sendData(wsData[this.resultIndex],this.onmessageWS)
+			let wsData = this.resultList;
+			if (wsData[this.resultIndex] && !this.isShowError) {
+				this.$socketApiTow.sendData(wsData[this.resultIndex], this.onmessageWS)
 			}
 		},
-		onmessageWS(e){
-			if(e.type=='peb'||e.type=='pea'){
+		onmessageWS(e) {
+			if (e.type == 'peb' || e.type == 'pea') {
 				this.results.unshift(e.result);
 				this.resultIndex++;
 				this.opneWebSocket();
@@ -881,31 +866,31 @@ export default {
 				}
 			}
 			// 中途断开
-			if(e.type=='break'){
-				let wsData=this.resultList;
-				this.errorMsg=e.msg
-				let data={
-					type:this.integralType,
-					obj:wsData.slice(this.resultIndex,wsData.length)
+			if (e.type == 'break') {
+				let wsData = this.resultList;
+				this.errorMsg = e.msg
+				let data = {
+					type: this.integralType,
+					obj: wsData.slice(this.resultIndex, wsData.length)
 				}
-				this.$setCache('award_punish',data);
+				this.$setCache('award_punish', data);
 				this.isShowError2 = true;
 			}
 			// 连接不上
-			if(e.type=='error'){
-				this.errorMsg=e.msg
+			if (e.type == 'error') {
+				this.errorMsg = e.msg
 				this.isShowError = true;
 			}
-			
+
 		},
 		// 选择审核人
 		approval_confirm(data) {
 			const item = this.dialogData.items[this.itemIndex];
 			item.approvalName = '';
-			if(item.ticket_count){
+			if (item.ticket_count) {
 				this.$message('选择递交审批人时,发放奖票将失效,由审批上级来发放奖票');
 			}
-			item.ticket_count=0;
+			item.ticket_count = 0;
 			item.approval_selected = { dept: [], employee: [] };
 			item.reviewer_id = '';
 			if (data.employee !== null && data.employee.length != 0) {
@@ -921,7 +906,7 @@ export default {
 			//关闭重置窗口状态
 			this.dialogData.items = [
 				{
-					ticket_count:0,//奖票
+					ticket_count: 0,//奖票
 					rule_switch: true,
 					rule_id: '',
 					item_id: '',
@@ -959,39 +944,46 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
-::v-deep .el-input__count{
-  right: 70px;
-  bottom: -36px;
-}	
-.title{
+::v-deep .el-input__count {
+	right: 70px;
+	bottom: -36px;
+}
+
+.title {
 	background-color: #f4f9fd;
 	border: 1px solid #e4f0fc;
 	padding-right: 10px;
 }
-.title .span{
+
+.title .span {
 	line-height: 36px;
 	width: 100px;
 	text-align: right;
 	font-weight: 700;
 }
-.width_400{
+
+.width_400 {
 	width: 400px;
 	position: relative;
 }
+
 .itemClass .el-cascader-menu .el-cascader-menu__wrap .el-scrollbar__view li.el-cascader-node {
 	height: auto;
 	max-width: 500px;
+
 	.el-cascader-node__label {
 		white-space: initial;
 		overflow: initial;
 		text-overflow: initial;
 	}
 }
+
 .results {
 	border-bottom: 1px solid #f1f1f1;
 	text-align: center;
 }
+
 .results div {
 	padding: 10px;
 }
-</style>
+</style>

+ 1 - 1
src/home.vue

@@ -80,7 +80,7 @@
 						<el-col :gutter="50" style="margin:0;padding:34px 0 0 0;" class="quick_button_box">
 							<div style="display:flex;justify-content: space-around;">
 								<div v-for="(item, index) in fits" :key="index" @click="openGzd(item.url)" style="display:flex;cursor:pointer;padding:0 5px 0 5px">
-									<img :src="item.img" style="width:46px;height:46px;margin:10px 5px 0 0" />
+									<img :src="item.img" style="width:46px; height:46px; margin:10px 5px 0 0" /> 
 									<p style="display: inline-block;width:100%;">
 										<b style="display: inline-block;color:#303133;font-size:16px;margin-top:11px;">{{ item.name }}</b>
 										<br />

+ 211 - 144
src/index.vue

@@ -6,222 +6,265 @@
 					<img src="./assets/image/logo.png" class="logo" />
 					<div>功道云积分制</div>
 				</div>
-				<div class="flex-1 hea-right flex-box flex-v-ce" >
-					<div class="name" style="min-width: 200px;">{{ info.name }}</div>
+
+				<div class="flex-1 hea-right flex-box flex-v-ce">
+					<div class="name" style="min-width: 200px;" @click="copyToClipboard()">{{ info.name }}</div>
 					<div class="flex-1 flex-box-ce font-flex-word" style="cursor: pointer;padding: 0 20px;">
 						<template v-if="$supremeAuthority()=='dept_manager'||$supremeAuthority()=='employee'">
 							<template v-if="information.name">
-								<img src="./assets/image/tz.png" style="width: 18px;height: 18px;"/>
-								<span style="max-width: 500px;padding-left: 10px;" class="font-flex-word"  @click="$router.push({path:'inform'})">{{information.name}}</span>
+								<img src="./assets/image/tz.png" style="width: 18px;height: 18px;" />
+								<span style="max-width: 500px;padding-left: 10px;" class="font-flex-word"
+									@click="$router.push({path:'inform'})">{{information.name}}</span>
 							</template>
 						</template>
-						<div v-else  class="flex-box-ce" >
-							<img src="./assets/image/tz.png" style="width: 18px;height: 18px;"/>
+						<div v-else class="flex-box-ce">
+							<img src="./assets/image/tz.png" style="width: 18px;height: 18px;" />
 							<template v-if="information.name">
-								<span style="max-width: 500px;padding-left: 10px;" class="font-flex-word"  @click="$router.push({path:'inform'})">{{information.name}}</span>
+								<span style="max-width: 500px;padding-left: 10px;" class="font-flex-word"
+									@click="$router.push({path:'inform'})">{{information.name}}</span>
 							</template>
-							<span v-else style="padding: 0 10px;cursor: pointer;color: #606266;"  @click="$router.push({path:'inform'})">暂无公告,点击此处添加公告</span>
+							<span v-else style="padding: 0 10px;cursor: pointer;color: #606266;"
+								@click="$router.push({path:'inform'})">暂无公告,点击此处添加公告</span>
 						</div>
 					</div>
 					<div class="flex-box flex-v-ce">
-						  <el-popover placement="bottom" width="240" trigger="hover" v-if="$supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee'">
-							 <div class="popoverText">
-								 <div class="flex-box-ce"><span>当前使用版本:</span><i>{{ corpMessage.package_name|| '试用规格' }}</i></div>
-								 <div class="flex-box-ce"><span>到期时间:</span><i class="orange">{{ corpMessage.expire_time}}</i></div>
-								 <div class="flex-box-ce"><span>企业使用人数:</span><i class="blue">{{ corpMessage.user_count }}</i>/{{ corpMessage.user_count_max }}人</div>
-								 <div class="flex-box-end">
-									<el-button size="small" @click="isTz = true" class="upgrade" type="primary" icon="el-icon-upload">续费升级</el-button>
-								 </div>
-							 </div> 
+						<el-popover placement="bottom" width="240" trigger="hover"
+							v-if="$supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee'">
+							<div class="popoverText">
+								<div class="flex-box-ce"><span>当前使用版本:</span><i>{{ corpMessage.package_name|| '试用规格'
+										}}</i></div>
+								<div class="flex-box-ce"><span>到期时间:</span><i class="orange">{{
+										corpMessage.expire_time}}</i></div>
+								<div class="flex-box-ce"><span>企业使用人数:</span><i class="blue">{{ corpMessage.user_count
+										}}</i>/{{ corpMessage.user_count_max }}人</div>
+								<div class="flex-box-end">
+									<el-button size="small" @click="isTz = true" class="upgrade" type="primary"
+										icon="el-icon-upload">续费升级</el-button>
+								</div>
+							</div>
 							<div slot="reference" class="flex-box-ce megData" style="cursor: pointer;margin: 0 10px;">
 								<div>{{ corpMessage.package_name|| '试用规格' }}</div>
 								<!-- <div>{{ corpMessage.user_count }}人</div> -->
 							</div>
-						  </el-popover>
-						 <el-popover
-							v-if="!this.$authoritys('employee') && !this.$authoritys('dept_manager')"
-						    placement="bottom"
-							class="popoverBox"
-						    width="60"
-							v-model="visible"
-						    trigger="manual">
+						</el-popover>
+						<el-popover v-if="!this.$authoritys('employee') && !this.$authoritys('dept_manager')"
+							placement="bottom" class="popoverBox" width="60" v-model="visible" trigger="manual">
 							<div style="text-align: center;">这里再次打开</div>
 							<div slot="reference" @click="showWn" class="flex-box-ce btnWn">
 								<i class="el-icon-tickets" style="font-size: 18px;margin-right: 5px;"></i>
 								<span>新手引导</span>
 							</div>
-						  </el-popover>
-						<userImage :user_name="userData.name" :img_url="userData.img_url" width="44px" height="44px"></userImage>
+						</el-popover>
+						<userImage :user_name="userData.name" :img_url="userData.img_url" width="44px" height="44px">
+						</userImage>
 					</div>
 				</div>
+				<!-- 隐藏文本,用于复制ID -->
+				<input v-model="info.id + '-' + userData.id" id="biao" style="opacity: 0;" />
 			</div>
 		</el-header>
+
+		
 		<el-container class="main">
 			<el-aside>
-				<el-menu :default-active="defaultActive" class="el-menu-vertical-demo" :router="true" @select="activeRouter" :unique-opened="true">
+				<el-menu :default-active="defaultActive" class="el-menu-vertical-demo" :router="true"
+					@select="activeRouter" :unique-opened="true">
 					<template v-for="(item, index) in routers">
 						<div v-if="item.children.length != 0" :key="index">
 							<template v-if="item.children.length >= 1 && item.title != '首页' && item.title != '复核'">
 								<template v-if="item.title=='福利'">
 									<el-submenu :index="index.toString()" :key="index" v-if="returnConfig">
 										<template slot="title">
-											<span class="iconfont titleIcon" :class="item.icon" style="font-size: 20px;"></span>
+											<span class="iconfont titleIcon" :class="item.icon"
+												style="font-size: 20px;"></span>
 											<span style="margin-left: 5px;">{{ item.title }}</span>
 										</template>
 										<template v-for="(item2, index2) in item.children">
-											<el-menu-item :index="returnIndex(index, index2)" :ref="item2.path" :route="item2.path" :key="index2" class="font-flex-word">
-												<span slot="title" style="margin-left: 10px;width:120px">{{ item2.title }}</span>
+											<el-menu-item :index="returnIndex(index, index2)" :ref="item2.path"
+												:route="item2.path" :key="index2" class="font-flex-word">
+												<span slot="title" style="margin-left: 10px;width:120px">{{ item2.title
+													}}</span>
 											</el-menu-item>
 										</template>
 									</el-submenu>
 								</template>
 								<el-submenu :index="index.toString()" :key="index" v-else>
 									<template slot="title">
-										<span class="iconfont titleIcon" :class="item.icon" style="font-size: 20px;"></span>
+										<span class="iconfont titleIcon" :class="item.icon"
+											style="font-size: 20px;"></span>
 										<span style="margin-left: 5px;">{{ item.title }}</span>
 									</template>
 									<template v-for="(item2, index2) in item.children">
-										<el-menu-item :index="returnIndex(index, index2)" :ref="item2.path" :route="item2.path" :key="index2" class="font-flex-word">
-											<span slot="title" style="margin-left: 10px;width:120px">{{ item2.title }}</span>
+										<el-menu-item :index="returnIndex(index, index2)" :ref="item2.path"
+											:route="item2.path" :key="index2" class="font-flex-word">
+											<span slot="title" style="margin-left: 10px;width:120px">{{ item2.title
+												}}</span>
 										</el-menu-item>
 									</template>
 								</el-submenu>
 							</template>
 							<template v-else>
-								<template  v-if="item.title=='复核'">
-									<el-menu-item v-if="isShowReview" :index="returnIndex(index, index)" :route="item.children[0].path" :ref="item.children[0].path">
-										<span class="iconfont titleIcon" :class="item.icon" style="font-size: 20px;"></span>
+								<template v-if="item.title=='复核'">
+									<el-menu-item v-if="isShowReview" :index="returnIndex(index, index)"
+										:route="item.children[0].path" :ref="item.children[0].path">
+										<span class="iconfont titleIcon" :class="item.icon"
+											style="font-size: 20px;"></span>
 										<span slot="title" style="margin-left: 5px;">{{ item.children[0].title }}</span>
 									</el-menu-item>
 								</template>
-								<el-menu-item v-else :index="returnIndex(index, index)" :route="item.children[0].path" :ref="item.children[0].path">
+								<el-menu-item v-else :index="returnIndex(index, index)" :route="item.children[0].path"
+									:ref="item.children[0].path">
 									<span class="iconfont titleIcon" :class="item.icon" style="font-size: 20px;"></span>
 									<span slot="title" style="margin-left: 5px;">{{ item.children[0].title }}</span>
 								</el-menu-item>
 							</template>
+
 						</div>
+
 					</template>
+
 				</el-menu>
+
+				<div class="version">1.3</div>
 			</el-aside>
 			<el-main id="main">
-				<keep-alive :include="keepAliveView"><router-view/></keep-alive>
-				<div class="fontColorC" style="text-align: center;margin: 10px 0;">Copyright © {{$moment().format('YYYY')}} 广东功道云数字科技有限公司</div>
+				<keep-alive :include="keepAliveView">
+					<router-view /></keep-alive>
+				<div class="fontColorC" style="text-align: center;margin: 10px 0;">Copyright ©
+					{{$moment().format('YYYY')}} 广东功道云数字科技有限公司</div>
 			</el-main>
 		</el-container>
 		<!-- 续费升级 -->
 		<el-dialog title="续费升级" :visible.sync="isTz" width="400px">
-			<div style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 276px;box-sizing: border-box;margin: 0 auto;">
+			<div
+				style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 276px;box-sizing: border-box;margin: 0 auto;">
 				<img src="./assets/image/code.png" />
 			</div>
 			<div class="fontColorC" style="text-align: center;margin-top: 15px;font-size: 18px;">手机钉钉扫码,付费升级</div>
 		</el-dialog>
 		<el-dialog :close-on-click-modal="false" title="轻松四步落地积分制" :visible.sync="wn_show" width="680px">
-		  <el-row :gutter="0" class="set_role_div" style="border-top:1px solid rgb(234 234 234);">
-		    <el-col :span="8" style="padding:20px 0 20px 0;">
-		      <el-menu default-active="0" style="border: none">
-		        <el-menu-item
-		          :index="index.toString()"
-		          v-for="(item, index) in activeName"
-		          :key="index"
-		          @click="open_right(item)"
-		          style="margin-bottom:20px;position: relative;height:40px;line-height:40px;"
-		        >
-		          <b style="display: inline-block;font-size:16px;text-align:center;">{{ index + 1 }}&nbsp;&nbsp;</b>
-		          <span slot="title" style="padding-left: 10px;">{{ item.name }}</span>
-		          <span v-if="index < activeName.length - 1" style="width:1px;height:15px;border:1px solid rgb(224 224 224);position: absolute;bottom:-17px;left:23px;"></span>
-		        </el-menu-item>
-		      </el-menu>
-		    </el-col>
-		    <el-col :span="1" style="height:370px;border-right:1px solid rgb(234 234 234);"></el-col>
-		    <el-col :span="15" style="padding:20px 0 20px 0;">
-		      <div>
-		        <el-row>
-		          <div style="text-align:center;margin-top:25px;color: #35353a;font-size:16px;">{{ activeNameRig.name }}</div>
-		          <div
-		            v-if="activeNameRig.code == '0' || activeNameRig.code == '1'"
-		            :style="'display:flex;justify-content: space-around;margin:75px auto 0;width:' + usingwidth + 'px;flex-wrap:wrap;'"
-		          >
-		            <div v-for="(item, index) in activeNameRig.item" :key="index">
-		              <div style="text-align:center;display:flex;">
-		                <div @click="strategyClick(item.push)" style="cursor: pointer;">
-		                  <img :src="item.image" alt="" style="width:50px;" />
-		                  <p style="margin:0;padding:0;padding-top:10px;">{{ item.name }}</p>
-		                  <p style="margin:0;padding:0;font-size:13px;color:#2ba5ec;padding-top:8px;cursor: pointer;">{{ item.conf }}</p>
-		                </div>
-		                <i class="el-icon-right" :style="'font-size:30px;margin-top:57px;margin-left:' + usingmarginL + 'px;'" 
-						v-if="index < activeNameRig.item.length - 1" />
-		              </div>
-		            </div>
-		          </div>
-		
-		          <div v-if="activeNameRig.code == '2'" :style="'display:flex;justify-content: space-around;margin:20px auto 0;width:' + usingwidth + 'px;flex-wrap:wrap;'">
-		            <el-col :span="14"
-		              style="display:flex;flex-wrap:wrap;justify-content: space-around;text-align:center;margin-left:20px;position: relative;"
-		            >
-		              <i class="el-icon-plus" style="font-size:30px;position: absolute;top:45%;" />
-		              <div v-for="(item, index) in activeNameRig.item" :key="index" style="width:49%;margin-top:60px;">
-		                <div style="cursor: pointer;" v-if="index != 2" @click="strategyClick(item.push)">
-		                  <img :src="item.image" alt="" style="width:50px;" />
-		                  <p style="margin:0;padding:0;padding-top:10px;">{{ item.name }}</p>
-		                  <p style="margin:0;padding:0;font-size:13px;color:#2ba5ec;padding-top:8px;cursor: pointer;">{{ item.conf }}</p>
-		                </div>
-		              </div>
-		            </el-col>
-		            <el-col :span="8" v-if="activeNameRig.code == '2'">
-		              <div v-for="(item, index) in activeNameRig.item" :key="index">
-		                <div style="text-align:center;display:flex;margin-top:60px;" v-if="index == 2">
-		                  <i class="el-icon-right" style="font-size:30px;margin-top:57px;" />
-		                  <div style="margin-left:25px;cursor: pointer;" @click="strategyClick(item.push)">
-		                    <img :src="item.image" alt="" style="width:50px;" />
-		                    <p style="margin:0;padding:0;padding-top:10px;">{{ item.name }}</p>
-		                    <p style="margin:0;padding:0;font-size:13px;color:#2ba5ec;padding-top:8px;cursor: pointer;">{{ item.conf }}</p>
-		                  </div>
-		                </div>
-		              </div>
-		            </el-col>
-		          </div>
-				  
-				  
-				  <div v-if="activeNameRig.code == '3'" :style="'display:flex;justify-content: space-around;margin:20px auto 0;width:' + usingwidth + 'px;flex-wrap:wrap;'">
-				    <el-col :span="24"
-				      style="display:flex;flex-wrap:wrap;justify-content: space-around;text-align:center;margin-left:20px;position: relative;"
-				    >
-				      <i class="el-icon-plus" style="font-size:30px;position: absolute;top:45%;" />
-				      <div v-for="(item, index) in activeNameRig.item" :key="index" style="width:49%;margin-top:20px;">
-				        <div style="cursor: pointer;" v-if="index != 4" @click="strategyClick(item.push)">
-				          <img :src="item.image" alt="" style="width:50px;" />
-				          <p style="margin:0;padding:0;padding-top:10px;">{{ item.name }}</p>
-				          <p style="margin:0;padding:0;font-size:13px;color:#2ba5ec;padding-top:8px;cursor: pointer;">{{ item.conf }}</p>
-				        </div>
-				      </div>
-				    </el-col>
-				    <el-col :span="8" v-if="activeNameRig.code == '2'">
-				      <div v-for="(item, index) in activeNameRig.item" :key="index">
-				        <div style="text-align:center;display:flex;margin-top:60px;" v-if="index == 4">
-				          <i class="el-icon-right" style="font-size:30px;margin-top:57px;" />
-				          <div style="margin-left:25px;cursor: pointer;" @click="strategyClick(item.push)">
-				            <img :src="item.image" alt="" style="width:50px;" />
-				            <p style="margin:0;padding:0;padding-top:10px;">{{ item.name }}</p>
-				            <p style="margin:0;padding:0;font-size:13px;color:#2ba5ec;padding-top:8px;cursor: pointer;">{{ item.conf }}</p>
-				          </div>
-				        </div>
-				      </div>
-				    </el-col>
-				  </div>
-		        </el-row>
-		      </div>
-		    </el-col>
-		  </el-row>
+			<el-row :gutter="0" class="set_role_div" style="border-top:1px solid rgb(234 234 234);">
+				<el-col :span="8" style="padding:20px 0 20px 0;">
+					<el-menu default-active="0" style="border: none">
+						<el-menu-item :index="index.toString()" v-for="(item, index) in activeName" :key="index"
+							@click="open_right(item)"
+							style="margin-bottom:20px;position: relative;height:40px;line-height:40px;">
+							<b style="display: inline-block;font-size:16px;text-align:center;">{{ index + 1
+								}}&nbsp;&nbsp;</b>
+							<span slot="title" style="padding-left: 10px;">{{ item.name }}</span>
+							<span v-if="index < activeName.length - 1"
+								style="width:1px;height:15px;border:1px solid rgb(224 224 224);position: absolute;bottom:-17px;left:23px;"></span>
+						</el-menu-item>
+					</el-menu>
+				</el-col>
+				<el-col :span="1" style="height:370px;border-right:1px solid rgb(234 234 234);"></el-col>
+				<el-col :span="15" style="padding:20px 0 20px 0;">
+					<div>
+						<el-row>
+							<div style="text-align:center;margin-top:25px;color: #35353a;font-size:16px;">{{
+								activeNameRig.name }}</div>
+							<div v-if="activeNameRig.code == '0' || activeNameRig.code == '1'"
+								:style="'display:flex;justify-content: space-around;margin:75px auto 0;width:' + usingwidth + 'px;flex-wrap:wrap;'">
+								<div v-for="(item, index) in activeNameRig.item" :key="index">
+									<div style="text-align:center;display:flex;">
+										<div @click="strategyClick(item.push)" style="cursor: pointer;">
+											<img :src="item.image" alt="" style="width:50px;" />
+											<p style="margin:0;padding:0;padding-top:10px;">{{ item.name }}</p>
+											<p
+												style="margin:0;padding:0;font-size:13px;color:#2ba5ec;padding-top:8px;cursor: pointer;">
+												{{ item.conf }}</p>
+										</div>
+										<i class="el-icon-right"
+											:style="'font-size:30px;margin-top:57px;margin-left:' + usingmarginL + 'px;'"
+											v-if="index < activeNameRig.item.length - 1" />
+									</div>
+								</div>
+							</div>
+
+							<div v-if="activeNameRig.code == '2'"
+								:style="'display:flex;justify-content: space-around;margin:20px auto 0;width:' + usingwidth + 'px;flex-wrap:wrap;'">
+								<el-col :span="14"
+									style="display:flex;flex-wrap:wrap;justify-content: space-around;text-align:center;margin-left:20px;position: relative;">
+									<i class="el-icon-plus" style="font-size:30px;position: absolute;top:45%;" />
+									<div v-for="(item, index) in activeNameRig.item" :key="index"
+										style="width:49%;margin-top:60px;">
+										<div style="cursor: pointer;" v-if="index != 2"
+											@click="strategyClick(item.push)">
+											<img :src="item.image" alt="" style="width:50px;" />
+											<p style="margin:0;padding:0;padding-top:10px;">{{ item.name }}</p>
+											<p
+												style="margin:0;padding:0;font-size:13px;color:#2ba5ec;padding-top:8px;cursor: pointer;">
+												{{ item.conf }}</p>
+										</div>
+									</div>
+								</el-col>
+								<el-col :span="8" v-if="activeNameRig.code == '2'">
+									<div v-for="(item, index) in activeNameRig.item" :key="index">
+										<div style="text-align:center;display:flex;margin-top:60px;" v-if="index == 2">
+											<i class="el-icon-right" style="font-size:30px;margin-top:57px;" />
+											<div style="margin-left:25px;cursor: pointer;"
+												@click="strategyClick(item.push)">
+												<img :src="item.image" alt="" style="width:50px;" />
+												<p style="margin:0;padding:0;padding-top:10px;">{{ item.name }}</p>
+												<p
+													style="margin:0;padding:0;font-size:13px;color:#2ba5ec;padding-top:8px;cursor: pointer;">
+													{{ item.conf }}</p>
+											</div>
+										</div>
+									</div>
+								</el-col>
+							</div>
+
+
+							<div v-if="activeNameRig.code == '3'"
+								:style="'display:flex;justify-content: space-around;margin:20px auto 0;width:' + usingwidth + 'px;flex-wrap:wrap;'">
+								<el-col :span="24"
+									style="display:flex;flex-wrap:wrap;justify-content: space-around;text-align:center;margin-left:20px;position: relative;">
+									<i class="el-icon-plus" style="font-size:30px;position: absolute;top:45%;" />
+									<div v-for="(item, index) in activeNameRig.item" :key="index"
+										style="width:49%;margin-top:20px;">
+										<div style="cursor: pointer;" v-if="index != 4"
+											@click="strategyClick(item.push)">
+											<img :src="item.image" alt="" style="width:50px;" />
+											<p style="margin:0;padding:0;padding-top:10px;">{{ item.name }}</p>
+											<p
+												style="margin:0;padding:0;font-size:13px;color:#2ba5ec;padding-top:8px;cursor: pointer;">
+												{{ item.conf }}</p>
+										</div>
+									</div>
+								</el-col>
+								<el-col :span="8" v-if="activeNameRig.code == '2'">
+									<div v-for="(item, index) in activeNameRig.item" :key="index">
+										<div style="text-align:center;display:flex;margin-top:60px;" v-if="index == 4">
+											<i class="el-icon-right" style="font-size:30px;margin-top:57px;" />
+											<div style="margin-left:25px;cursor: pointer;"
+												@click="strategyClick(item.push)">
+												<img :src="item.image" alt="" style="width:50px;" />
+												<p style="margin:0;padding:0;padding-top:10px;">{{ item.name }}</p>
+												<p
+													style="margin:0;padding:0;font-size:13px;color:#2ba5ec;padding-top:8px;cursor: pointer;">
+													{{ item.conf }}</p>
+											</div>
+										</div>
+									</div>
+								</el-col>
+							</div>
+						</el-row>
+					</div>
+				</el-col>
+			</el-row>
 		</el-dialog>
-	
+
 		<el-dialog title="温馨提示" :visible.sync="isShowDate" width="400px" top="30vh">
 			<template #title>
-				<div style="font-weight: 600;font-size: 18px;margin-bottom: 10px;" class="black"><i class="el-icon-warning orange"></i> 系统即将到期</div>
+				<div style="font-weight: 600;font-size: 18px;margin-bottom: 10px;" class="black"><i
+						class="el-icon-warning orange"></i> 系统即将到期</div>
 			</template>
 			<div style="margin-bottom: 20px;position: relative;top:-20px">
 				<!-- <div style="font-weight: 600;font-size: 18px;margin-bottom: 10px;" class="black"><i class="el-icon-warning orange"></i> 系统即将到期</div> -->
 				<div>
-					尊敬的【{{ info.name }}】用户!距离贵司开通的“功道云积分制”使用结束只剩下<span class="red">90</span>天,到期时间 {{ corpMessage.expire_time}} 00:00。
+					尊敬的【{{ info.name }}】用户!距离贵司开通的“功道云积分制”使用结束只剩下<span class="red">90</span>天,到期时间 {{
+					corpMessage.expire_time}} 00:00。
 					为避免使用期结束给您带来不便,请在钉钉手机端应用市场或点击下方【续费/升级】按钮进行续费升级。
 					如有任何问题,请联系客服或拨打电话400-6877-880进行咨询
 				</div>
@@ -230,7 +273,8 @@
 				<div class="blue" @click="bundleOfServices">联系客服</div>
 				<div class="flex-box-ce">
 					<el-button size="small" @click="isShowDate=false">取消</el-button>
-					<el-button size="small" @click="isTz = true" class="upgrade" type="primary" icon="el-icon-upload">续费升级</el-button>
+					<el-button size="small" @click="isTz = true" class="upgrade" type="primary"
+						icon="el-icon-upload">续费升级</el-button>
 				</div>
 			</div>
 		</el-dialog>
@@ -247,6 +291,8 @@ window.performance && window.performance.mark("FMP");
 export default {
 	data() {
 		return {
+
+			copyIds: '',
 			loading: false,
 			userData: {},
 			routers: [],
@@ -257,8 +303,6 @@ export default {
 			direction: 'rtl',
 			corpMessage: {} ,//企业套餐信息
 			information:{name:''},
-			
-			
 			usingmarginL: '26',
 			usingwidth: '220',
 			activeNameRig: {
@@ -375,6 +419,14 @@ export default {
 		});
 	},
 	methods: {
+
+		copyToClipboard() {
+			var Url2 = document.getElementById("biao");
+			Url2.select(); // 选择对象
+			document.execCommand("Copy"); // 执行浏览器复制命令
+			// this.$message.success('已复制');
+		},
+
 		subscribe() {
 		  openSubscribeMiniApp({
 		     panelHeight: 'percent40',
@@ -481,7 +533,7 @@ export default {
 				if (res.data.code == 1) {
 					let data= res.data.data;
 					if(data[0]){
-						this.information=data[0]
+						this.information = data[0]
 					}else{
 						this.information={name:''};
 					}
@@ -519,9 +571,11 @@ export default {
 				this.defaultActive = this.$getCache('path');
 			}
 		},
+		
 		openHome() {
 			this.$router.push({ path: '/home' });
 		},
+
 		GetRequest(urlStr) {
 			if (typeof urlStr == 'undefined') {
 				var url = decodeURI(location.search); //获取url中"?"符后的字符串
@@ -539,16 +593,19 @@ export default {
 			}
 			return theRequest;
 		},
+
 		//获取套餐信息
 		getCorp(corpId) {
 			this.$axios('get', 'api/order/corp', { corp_id: corpId }).then(res => {
 				this.corpMessage = res.data.data;
 			});
 		},
+
 		//当刷新页面是控制左边导航栏的选中
 		activeRouter(index, indexPath) {
 			this.$setCache('path', indexPath[1] ? indexPath[1] : indexPath[0]);
 		},
+
 		routerAstrict(data) {
 			//限制路由
 			let obj = [];
@@ -566,6 +623,7 @@ export default {
 			});
 			return obj;
 		},
+
 		returnRoutersArr(str, bool) {
 			var routers = this.$router.options.routes[0].children;
 			var routersArr = [];
@@ -703,6 +761,15 @@ export default {
 	width: 180px !important;
 	background-color: #fff;
 	height: calc(100vh - 60px);
+	position: relative;
+	.version {
+		position: absolute;
+		bottom: 10px;
+		left: 50%;
+		transform: translateX(-50%);
+		font-size: 12px;
+		color: #ccc;
+	}
 }
 .el-aside::-webkit-scrollbar {
 	width: 0px;

+ 1 - 0
src/store/index.js

@@ -16,6 +16,7 @@ export default new Vuex.Store({
 			setCache('siteConfig',data)
 		},
 	},
+	
 	actions: {
 		setConfig({commit}, data) {
 			commit('CONFING', data);

+ 31 - 0
src/utils/jsencrypt.js

@@ -0,0 +1,31 @@
+import { JSEncrypt } from 'jsencrypt'
+const publicKey = hexToDec();
+
+function hexToDec() {
+    let str =
+        'LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCZ1FEWjFVUnZMODRUWG9LTUFXMng2UDZ4WHplZQpXaUxINVljSFJGZ3YwZzBmSVVtTG02UDZ1Z2s1WXpHSkhrSkxvWFlvYmt4SHJXV1FBRjhuZmRnTDVMYmYzMGJ3CjlITVJ1REJXV2w4S3NFYTdwTVllZ2NsY1dncVJwOXBMZVMzQzhXQlI1NmxsNTM4TDF0MkJWZEh5U1pvUnFGRE8KZmJqTitKN0xnWUl6S2NVZGJ3SURBUUFCCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQo='
+    str = atob(str);
+    return str;
+}
+
+
+export function returnJSEncrypt(data, is = true) {
+    let jsencrypt = new JSEncrypt()
+    jsencrypt.setPublicKey(publicKey)
+    if (is) {
+        data.st = Date.parse(new Date());
+    }
+    let s = JSON.stringify(data);
+    let arr = [];
+    if (s.length > 50) {
+        let reg = /.{50}/g;
+        let rs = s.match(reg);
+        rs.push(s.substring(rs.join('').length));
+        rs.forEach(item => {
+            arr.push(jsencrypt.encrypt(item));
+        })
+    } else {
+        arr[0] = jsencrypt.encrypt(s)
+    }
+    return arr
+}

+ 2 - 1
src/views/abPoint/award_punish.vue

@@ -35,7 +35,7 @@
 				</div>
 			</div>
 		</FormBox>
-		<el-table v-if="tabs == 'success'||tabs == 'review'" res="table1" :data="dataList" stripe fit v-loading="table_loading" @row-click="open_detail">
+		<el-table v-if="tabs == 'success' || tabs == 'review'" res="table1" :data="dataList" stripe fit v-loading="table_loading" @row-click="open_detail">
 			<el-table-column label="奖扣对象" prop="employee_id" align="left" width="250">
 				<template slot-scope="scope">
 					<div class="flex-box flex-contet-conter" >
@@ -53,6 +53,7 @@
 					</el-tooltip>
 				</template>
 			</el-table-column>
+
 			<el-table-column  label="积分" width="120">
 				<template slot-scope="scope">
 					<span :class="{green: scope.row.point < 0, red: scope.row.point > 0 }">

+ 121 - 111
src/views/award/grantAward.vue

@@ -5,73 +5,74 @@
 				<div class="form-item">
 					<div class="form-label">姓名搜索</div>
 					<div class="form-search">
-						<el-select size="medium" multiple v-model="formData.employee_ids"  filterable clearable placeholder="请输入或选择人员">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" multiple v-model="formData.employee_ids" filterable clearable
+							placeholder="请输入或选择人员">
+							<el-option v-for="item in employee_map" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">发放状态</div>
 					<div class="form-search">
-						<el-select  size="medium" v-model="formData.has_ticket">
-							<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="formData.has_ticket">
+							<el-option v-for="item in dcArr" :key="item.name" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">
 						<el-tooltip effect="dark" placement="top">
-						  <template slot="content">
-							此处的“我奖扣的”包含所有与我有关的积分事件(1、我直接奖扣成功,2、申请、任务、奖扣<br/> 提交上来由我作为第一审批人审批的,3、积分导入填写的奖扣记录人是我)
-						  </template>
-						  <span>相关性	<i class="el-icon-warning"></i></span>
+							<template slot="content">
+								此处的“我奖扣的”包含所有与我有关的积分事件(1、我直接奖扣成功,2、申请、任务、奖扣<br /> 提交上来由我作为第一审批人审批的,3、积分导入填写的奖扣记录人是我)
+							</template>
+							<span>相关性 <i class="el-icon-warning"></i></span>
 						</el-tooltip>
 					</div>
 					<div class="form-search">
 						<el-select size="medium" v-model="formData.iSrecorder">
-							<el-option v-for="item in source_type" :key="item.name" :label="item.name" :value="item.id"></el-option>
+							<el-option v-for="item in source_type" :key="item.name" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">事件时间</div>
 					<div class="form-search">
-						<el-date-picker
-							v-model="time_slot"
-							type="daterange"
-							size="medium"
-							value-format="yyyy-MM-dd"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-						></el-date-picker>
+						<el-date-picker v-model="time_slot" type="daterange" size="medium" value-format="yyyy-MM-dd"
+							range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">内容搜索</div>
 					<div class="form-search">
-						<el-input size="medium" v-model="formData.keyword" max="20" placeholder="请输入"	clearable></el-input>
+						<el-input size="medium" v-model="formData.keyword" max="20" placeholder="请输入"
+							clearable></el-input>
 					</div>
 				</div>
 			</FormBox>
 			<div style="margin: 10px 0;">
-				<el-button size="medium" :disabled="selectionID.length==0? true:false" @click="deleteInBatches()" type="primary">批量发放奖票</el-button>
+				<el-button size="medium" :disabled="selectionID.length==0? true:false" @click="deleteInBatches()"
+					type="primary">批量发放奖票</el-button>
 			</div>
-			
+
 			<div class="diy-tip1" style="margin-bottom: 10px;">
 				<div>当前数据:{{ total }}条</div>
 			</div>
 			<!-- 表格 -->
 			<div>
-				<el-table :data="list" style="width: 100%;" v-loading="loading"  @selection-change="deleteEvents">
-					<el-table-column  type="selection" width="55" :selectable="selectable"></el-table-column>
+				<el-table :data="list" style="width: 100%;" v-loading="loading" @selection-change="deleteEvents">
+					<el-table-column type="selection" width="55" :selectable="selectable"></el-table-column>
 					<el-table-column prop="employee_name" label="姓名" align="left" min-width="150px">
 						<template slot-scope="scope">
 							<div class="flex-box">
-								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url" width="50px" height="50px"></userImage>
+								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url"
+									width="50px" height="50px"></userImage>
 								<div style="height: 50px;padding-left: 10px;" class="flex-box-v flex-h-zhu">
 									<div>{{ scope.row.employee_name }}</div>
-									<div v-if="scope.row.dept"  style="font-size: 12px;max-width: 150px;" class="fontColorC font-flex-word">{{ scope.row.dept }}</div>
+									<div v-if="scope.row.dept" style="font-size: 12px;max-width: 150px;"
+										class="fontColorC font-flex-word">{{ scope.row.dept }}</div>
 								</div>
 							</div>
 						</template>
@@ -86,7 +87,8 @@
 					</el-table-column>
 					<el-table-column prop="point" label="积分" align="left" min-width="120px">
 						<template slot-scope="scope">
-							<span :class="scope.row.point < 0 ? 'green' : 'red'">{{ scope.row.point }} {{ point_name(scope.row.pt_id) }}</span>
+							<span :class="scope.row.point < 0 ? 'red' : 'green'">{{ scope.row.point }} {{
+								point_name(scope.row.pt_id) }}</span>
 						</template>
 					</el-table-column>
 					<el-table-column prop="create_time" label="事件时间" align="left" min-width="140px">
@@ -122,8 +124,10 @@
 					</el-table-column>
 					<el-table-column width="150" label="操作">
 						<template slot-scope="scope">
-							<span class="blue" style="cursor: pointer;padding-right: 10px;" @click="open_detail(scope.row)">查看详情</span>
-							<span class="blue" style="cursor: pointer;" v-if="!scope.row.has_ticket" @click="deleteInBatches(scope.row)">发放奖票</span>
+							<span class="blue" style="cursor: pointer;padding-right: 10px;"
+								@click="open_detail(scope.row)">查看详情</span>
+							<span class="blue" style="cursor: pointer;" v-if="!scope.row.has_ticket"
+								@click="deleteInBatches(scope.row)">发放奖票</span>
 						</template>
 					</el-table-column>
 					<template slot="empty">
@@ -131,49 +135,45 @@
 					</template>
 				</el-table>
 				<center class="pagination">
-					<el-pagination
-						background
-						@size-change="handleSizeChange"
-						@current-change="handleCurrentChange"
-						:current-page="formData.page"
-						:page-sizes="[10, 20, 50, 100]"
-						layout="total, sizes, prev, pager, next"
-						:page-size="formData.page_size"
-						:total="total"
-					></el-pagination>
+					<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+						:current-page="formData.page" :page-sizes="[10, 20, 50, 100]"
+						layout="total, sizes, prev, pager, next" :page-size="formData.page_size"
+						:total="total"></el-pagination>
 				</center>
 			</div>
 		</div>
-		
-		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" show-close :with-header="false" :width="'500px'">
+
+		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" show-close :with-header="false"
+			:width="'500px'">
 			<div class="drawer_title flex-box-ce">
 				<span class="flex-1">事件详情</span>
-				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+				<i @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
 			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<div class="flex-box flex-v-ce">
-						<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px" height="50px" fontSize="1"></userImage>
-						<span style="font-size: 18px;line-height:50px; margin-left:10px;margin-right:4px;">{{ detail_info.employee_name }}</span>
-						<span class="red point" v-if="detail_info.point >= 0">+{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
-						<span class="green point" v-if="detail_info.point < 0">{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+						<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px"
+							height="50px" fontSize="1"></userImage>
+						<span style="font-size: 18px;line-height:50px; margin-left:10px;margin-right:4px;">{{
+							detail_info.employee_name }}</span>
+						<span class="green point" v-if="detail_info.point >= 0">+{{ detail_info.point }} {{
+							point_name(detail_info.pt_id) }}</span>
+						<span class="red point" v-if="detail_info.point < 0">{{ detail_info.point }} {{
+							point_name(detail_info.pt_id) }}</span>
 					</div>
 				</el-row>
 
-				<el-row >
+				<el-row>
 					<el-col :span="6">事件内容</el-col>
-					<el-col :span="18" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize || detail_info.remark.rule) }}</el-col>
+					<el-col :span="18" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize
+						|| detail_info.remark.rule) }}</el-col>
 				</el-row>
 
 				<el-row v-show="detail_info.files && detail_info.files.length > 0">
 					<el-col :span="18" :offset="6">
-						<el-image
-							v-for="(itme, index) in detail_info.files"
-							:key="index"
-							style="width: 80px; height: 80px;margin: 0 5px;"
-							:src="itme"
-							:preview-src-list="detail_info.files"
-						></el-image>
+						<el-image v-for="(itme, index) in detail_info.files" :key="index"
+							style="width: 80px; height: 80px;margin: 0 5px;" :src="itme"
+							:preview-src-list="detail_info.files"></el-image>
 					</el-col>
 				</el-row>
 
@@ -206,15 +206,12 @@
 					<el-col :span="18">{{ detail_info.complete_task.remark }}</el-col>
 				</el-row>
 
-				<el-row v-show="detail_info.complete_task && detail_info.complete_task.files && detail_info.complete_task.files.length > 0">
+				<el-row
+					v-show="detail_info.complete_task && detail_info.complete_task.files && detail_info.complete_task.files.length > 0">
 					<el-col :span="18" :offset="6">
-						<el-image
-							v-for="(itme, index) in detail_info.complete_task.files"
-							:key="index"
-							style="width: 80px; height: 80px;margin: 0 5px;"
-							:src="itme"
-							:preview-src-list="detail_info.complete_task.files"
-						></el-image>
+						<el-image v-for="(itme, index) in detail_info.complete_task.files" :key="index"
+							style="width: 80px; height: 80px;margin: 0 5px;" :src="itme"
+							:preview-src-list="detail_info.complete_task.files"></el-image>
 					</el-col>
 				</el-row>
 
@@ -230,67 +227,80 @@
 					</el-row>
 					<el-row>
 						<el-col :span="6">积分</el-col>
-						<el-col :span="18" v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{ detail_info.rule_item.min_point }} {{ point_name(detail_info.pt_id) }}</el-col>
+						<el-col :span="18"
+							v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{
+							detail_info.rule_item.min_point }} {{ point_name(detail_info.pt_id) }}</el-col>
 						<el-col :span="18" v-show="detail_info.rule_item.min_point != detail_info.rule_item.max_point">
-							{{ detail_info.rule_item.min_point }} ~ {{ detail_info.rule_item.max_point }} {{ point_name(detail_info.pt_id) }}
+							{{ detail_info.rule_item.min_point }} ~ {{ detail_info.rule_item.max_point }} {{
+							point_name(detail_info.pt_id) }}
 						</el-col>
 					</el-row>
 				</div>
-				
-				<div v-show="detail_info.process"><Steps :process="detail_info.process"></Steps></div>
-				
-				<div v-show="detail_info.dc_remark.flow"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
+
+				<div v-show="detail_info.process">
+					<Steps :process="detail_info.process"></Steps>
+				</div>
+
+				<div v-show="detail_info.dc_remark.flow">
+					<Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review>
+				</div>
 			</div>
-			<div  style="position: absolute; bottom: 20px;right: 20px;left: 20px;" class="flex-box-ce">
-				<el-button type="primary" v-if="!detail_info.has_ticket" @click="deleteInBatches({id:detail_info.event_id},true)">发放奖票</el-button>
+			<div style="position: absolute; bottom: 20px;right: 20px;left: 20px;" class="flex-box-ce">
+				<el-button type="primary" v-if="!detail_info.has_ticket"
+					@click="deleteInBatches({id:detail_info.event_id},true)">发放奖票</el-button>
 				<el-button type="primary" v-else @click="openDetail({id:detail_info.event_id})">查看奖票</el-button>
 				<div class="flex-1"></div>
 				<el-button @click="detail_popup=false">取消</el-button>
 			</div>
 		</el-drawer>
 		<!-- 检查单详情 -->
-		<BrawerBox :showDrawer.sync="isShowDetail"  drawerTitle="奖票详情">
-		  <template slot="main">
-			<div>
-			  <div class="flex-box-v">
-				<div class="message-box">
-				  <div class="flex-box-ce">
-					<div class="fontColorC">奖票对象</div>
-					<div class="flex-1">{{detail.employee_name}}</div>
-				  </div>
-				  <div class="flex-box-ce">
-					<div class="fontColorC">事件时间</div>
-					<div class="flex-1">{{$moment(detail.date+'').format("YYYY-MM-DD")}}</div>
-				  </div>
-				  <div class="flex-box-ce">
-					<div class="fontColorC">发放人</div>
-					<div class="flex-1">{{detail.publisher_name||'--'}}</div>
-				  </div>
-				  <div class="flex-box-ce">
-					<div class="fontColorC">发放时间</div>
-					<div class="flex-1">{{detail.ct}}</div>
-				  </div>
-				  <div class="flex-box-ce">
-					<div class="fontColorC">奖票事件</div>
-					<div class="flex-1">{{detail.remark.customize||detail.remark.rule}}</div>
-				  </div>
+		<BrawerBox :showDrawer.sync="isShowDetail" drawerTitle="奖票详情">
+			<template slot="main">
+				<div>
+					<div class="flex-box-v">
+						<div class="message-box">
+							<div class="flex-box-ce">
+								<div class="fontColorC">奖票对象</div>
+								<div class="flex-1">{{detail.employee_name}}</div>
+							</div>
+							<div class="flex-box-ce">
+								<div class="fontColorC">事件时间</div>
+								<div class="flex-1">{{$moment(detail.date+'').format("YYYY-MM-DD")}}</div>
+							</div>
+							<div class="flex-box-ce">
+								<div class="fontColorC">发放人</div>
+								<div class="flex-1">{{detail.publisher_name||'--'}}</div>
+							</div>
+							<div class="flex-box-ce">
+								<div class="fontColorC">发放时间</div>
+								<div class="flex-1">{{detail.ct}}</div>
+							</div>
+							<div class="flex-box-ce">
+								<div class="fontColorC">奖票事件</div>
+								<div class="flex-1">{{detail.remark.customize||detail.remark.rule}}</div>
+							</div>
+						</div>
+					</div>
+					<div class="message-box" v-if="detail.event">
+						<div style="font-size: 16px;margin-bottom: 20px;">对应积分事件</div>
+						<div class="flex-box"
+							style="background-color: rgb(248, 252, 255);margin-bottom: 14px;position: relative;padding: 8px;border-radius: 5px;">
+							<div class="flex-1" style="padding-right: 20px;">
+								{{detail.event.remark.customize||detail.event.remark.rule}}</div>
+							<div class="red" v-if="detail.event.point>0">+{{detail.event.point}}
+								{{detail.event.pt_id==3? 'B分':'A分'}}</div>
+							<div class="green" v-else>{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
+						</div>
+					</div>
 				</div>
-			  </div>
-			  <div class="message-box" v-if="detail.event">
-				 <div style="font-size: 16px;margin-bottom: 20px;">对应积分事件</div>
-				 <div class="flex-box" style="background-color: rgb(248, 252, 255);margin-bottom: 14px;position: relative;padding: 8px;border-radius: 5px;">
-					 <div class="flex-1" style="padding-right: 20px;">{{detail.event.remark.customize||detail.event.remark.rule}}</div>
-					 <div class="red" v-if="detail.event.point>0">+{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
-					 <div class="green" v-else>{{detail.event.point}} {{detail.event.pt_id==3? 'B分':'A分'}}</div>
-				 </div>
-			  </div>
-			</div>
-		  </template>
-		  <template slot="footer">
-			  <el-button type="danger" plain @click="deleteItem" v-if="detail.publisher_id==$getUserData().id||($supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee')">{{detail.publisher_id==$getUserData().id ?'撤回奖票':'删除奖票'}}</el-button>
-			  <div class="flex-1"></div>
-			  <el-button  plain @click="isShowDetail=false">关 闭</el-button>
-		  </template>
+			</template>
+			<template slot="footer">
+				<el-button type="danger" plain @click="deleteItem"
+					v-if="detail.publisher_id==$getUserData().id||($supremeAuthority()!='dept_manager'&&$supremeAuthority()!='employee')">{{detail.publisher_id==$getUserData().id
+					?'撤回奖票':'删除奖票'}}</el-button>
+				<div class="flex-1"></div>
+				<el-button plain @click="isShowDetail=false">关 闭</el-button>
+			</template>
 		</BrawerBox>
 
 	</div>

+ 88 - 64
src/views/common/rewardTaskDetailsPopup.vue

@@ -1,24 +1,22 @@
 <template>
 	<div>
 		<!-- 抢单任务详情弹窗 -->
-		<el-drawer :visible.sync="Delay_to_open" :with-header="false" :size="'500px'" :before-close="handleClose" :custom-class="'drawer_details'">
+		<el-drawer :visible.sync="Delay_to_open" :with-header="false" :size="'500px'" :before-close="handleClose"
+			:custom-class="'drawer_details'">
 			<div class="details_title">{{ title }}</div>
 			<div class="details_content" v-if="workDetailData" v-loading="loading">
 				<el-row>
 					<el-col :span="24">
 						<div class="flex-box flex-v-ce">
-							<userImage
-								style="margin-right: 15px;"
-								width="50px"
-								height="50px"
-								:user_name="workDetailData.owner_name"
-								:img_url="workDetailData.owner_img_url"
-							></userImage>
+							<userImage style="margin-right: 15px;" width="50px" height="50px"
+								:user_name="workDetailData.owner_name" :img_url="workDetailData.owner_img_url">
+							</userImage>
 							<div>
 								<div style="line-height: 25px;">
 									{{workDetailData.owner_name}}发布的{{ $getTypsName(workDetailData.pt_id) }}任务
-									<span v-if="workDetailData.point_config.base_point > 0" class="red">+{{ workDetailData.point_config.base_point }}</span>
-									<span v-else class="green">{{ workDetailData.point_config.base_point }}</span>
+									<span v-if="workDetailData.point_config.base_point > 0" class="green">+{{
+										workDetailData.point_config.base_point }}</span>
+									<span v-else class="red">{{ workDetailData.point_config.base_point }}</span>
 									{{ $getTypsName(workDetailData.pt_id) }}
 								</div>
 								<div style="color: #909399; line-height: 25px;">
@@ -29,7 +27,7 @@
 						</div>
 					</el-col>
 				</el-row>
-				
+
 				<ul>
 					<li class="flex-box">
 						<div class="label">任务内容</div>
@@ -47,22 +45,20 @@
 						<div class="label">任务备注</div>
 						<div class="content_text">{{ workDetailData.task_remark }}</div>
 					</li>
-					<li class="flex-box" v-if="workDetailData.task_file_list && workDetailData.task_file_list.length > 0">
+					<li class="flex-box"
+						v-if="workDetailData.task_file_list && workDetailData.task_file_list.length > 0">
 						<div class="label"></div>
 						<div class="content_text">
-							<el-image
-								v-for="(item, index) in workDetailData.task_file_list"
-								:key="index"
-								style="width: 100px; height: 100px;margin-right:8px"
-								:src="item"
-								:preview-src-list="workDetailData.task_file_list"
-							></el-image>
+							<el-image v-for="(item, index) in workDetailData.task_file_list" :key="index"
+								style="width: 100px; height: 100px;margin-right:8px" :src="item"
+								:preview-src-list="workDetailData.task_file_list"></el-image>
 						</div>
 					</li>
 
 					<li class="flex-box" v-if="workDetailData.point_config">
 						<div class="label">任务积分</div>
-						<div class="content_text">{{ workDetailData.point_config.base_point }}{{ $getTypsName(workDetailData.pt_id) }}</div>
+						<div class="content_text">{{ workDetailData.point_config.base_point }}{{
+							$getTypsName(workDetailData.pt_id) }}</div>
 					</li>
 					<li class="flex-box">
 						<div class="label">审批人</div>
@@ -86,7 +82,10 @@
 								<i class="el-icon-warning fontColorC"></i>
 							</el-tooltip>
 						</div>
-						<div class="content_text"><span class="blue">{{workDetailData.total_chance-workDetailData.chance}}</span> / {{ workDetailData.total_chance }}   <span class="blue cursor" @click="isShowTable=true" v-if="workDetailData.total_chance!=workDetailData.chance">查看详情</span></div>
+						<div class="content_text"><span
+								class="blue">{{workDetailData.total_chance-workDetailData.chance}}</span> / {{
+							workDetailData.total_chance }} <span class="blue cursor" @click="isShowTable=true"
+								v-if="workDetailData.total_chance!=workDetailData.chance">查看详情</span></div>
 					</li>
 					<li class="flex-box" v-if="workDetailData.point_config.timeout_deduction_point">
 						<div class="label">逾期扣分</div>
@@ -98,12 +97,16 @@
 					</li>
 					<li class="flex-box" v-if="workDetailData.department_info">
 						<div class="label">可见范围</div>
-						<div class="flex-1" v-if="workDetailData.department_info.length > 0||workDetailData.employee_info.length > 0" style="background-color: rgb(250, 251, 252);padding: 8px;border: 5px;">
-							<div class="content_text" style="margin-bottom: 10px;" v-if="workDetailData.department_info.length > 0">
+						<div class="flex-1"
+							v-if="workDetailData.department_info.length > 0||workDetailData.employee_info.length > 0"
+							style="background-color: rgb(250, 251, 252);padding: 8px;border: 5px;">
+							<div class="content_text" style="margin-bottom: 10px;"
+								v-if="workDetailData.department_info.length > 0">
 								<div class="fontColorC">指定部门</div>
-								<span v-for="(item, index) in workDetailData.department_info" :key="index">{{ item.name }}<span v-if="workDetailData.department_info.length - 1 > index">,</span></span>
+								<span v-for="(item, index) in workDetailData.department_info" :key="index">{{ item.name
+									}}<span v-if="workDetailData.department_info.length - 1 > index">,</span></span>
 							</div>
-							<div class="content_text"  v-if="workDetailData.employee_info.length > 0">
+							<div class="content_text" v-if="workDetailData.employee_info.length > 0">
 								<div class="fontColorC">指定人员</div>
 								<span v-for="(item, index) in workDetailData.employee_info" :key="index">
 									{{ item.name }}
@@ -117,20 +120,17 @@
 						<div class="label">完成备注</div>
 						<div class="content_text">{{ workDetailData.complete_task.remark }}</div>
 					</li>
-					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.files && workDetailData.complete_task.files.length > 0">
+					<li class="flex-box"
+						v-if="workDetailData.complete_task && workDetailData.complete_task.files && workDetailData.complete_task.files.length > 0">
 						<div class="label"></div>
 						<div class="content_text">
-							<el-image
-								v-for="(item, index) in workDetailData.complete_task.files"
-								:key="index"
-								style="width: 100px; height: 100px;margin-right:8px"
-								:src="item"
-								:preview-src-list="workDetailData.complete_task.files"
-							></el-image>
+							<el-image v-for="(item, index) in workDetailData.complete_task.files" :key="index"
+								style="width: 100px; height: 100px;margin-right:8px" :src="item"
+								:preview-src-list="workDetailData.complete_task.files"></el-image>
 						</div>
 					</li>
 				</ul>
-				
+
 				<div v-show="workDetailData.point_config && workDetailData.point_config.item_info">
 					<p class="row_title">规则依据</p>
 					<el-row :gutter="10" v-if="workDetailData.point_config.rule_info">
@@ -143,58 +143,66 @@
 					</el-row>
 					<el-row v-if="workDetailData.point_config.item_info">
 						<el-col :span="4">积分</el-col>
-						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point == workDetailData.point_config.item_info.max_point">
-							{{ workDetailData.point_config.item_info.min_point }} {{ $getTypsName(workDetailData.pt_id) }}
+						<el-col :span="19"
+							v-show="workDetailData.point_config.item_info.min_point == workDetailData.point_config.item_info.max_point">
+							{{ workDetailData.point_config.item_info.min_point }} {{ $getTypsName(workDetailData.pt_id)
+							}}
 						</el-col>
-						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point != workDetailData.point_config.item_info.max_point">
-							{{ workDetailData.point_config.item_info.min_point }} ~ {{ workDetailData.point_config.item_info.max_point }} {{ $getTypsName(workDetailData.pt_id) }}
+						<el-col :span="19"
+							v-show="workDetailData.point_config.item_info.min_point != workDetailData.point_config.item_info.max_point">
+							{{ workDetailData.point_config.item_info.min_point }} ~ {{
+							workDetailData.point_config.item_info.max_point }} {{ $getTypsName(workDetailData.pt_id) }}
 						</el-col>
 					</el-row>
 				</div>
 			</div>
 			<div style="height: 60px;border-top: 1px #efefef solid;padding: 0 20px;text-align: right">
-				<el-button style="margin-top: 8px;" :disabled="loading" type="primary" @click="activeTask" v-if="workDetailData.composite_state==1&&userInfo.id!=workDetailData.owner_id&&!userInfo.is_creator">抢任务</el-button>
+				<el-button style="margin-top: 8px;" :disabled="loading" type="primary" @click="activeTask"
+					v-if="workDetailData.composite_state==1&&userInfo.id!=workDetailData.owner_id&&!userInfo.is_creator">抢任务</el-button>
 			</div>
 		</el-drawer>
 		<!-- 对齐我的目标详情 -->
 		<el-dialog title="抢单人员详情" :visible.sync="isShowTable" :append-to-body="true" width="750px" top="5%">
-		  <div>
-		      <div class="fontColorC" style="padding: 10px;font-size: 16px;">
-				  {{tableList.length}}人已抢单,其中<span class="blue">{{returnNum}}</span>人已完成
-			  </div>
-			  <el-table :data="tableList" style="width: 100%;height: 550px;overflow: auto;">
+			<div>
+				<div class="fontColorC" style="padding: 10px;font-size: 16px;">
+					{{tableList.length}}人已抢单,其中<span class="blue">{{returnNum}}</span>人已完成
+				</div>
+				<el-table :data="tableList" style="width: 100%;height: 550px;overflow: auto;">
 					<el-table-column prop="name" label="执行人">
-					  <template slot-scope="scope">
-						  <div class="flex-box">
-							<userImage :user_name="scope.row.employee_name" :img_url="scope.row.img_url" width="40px" height="40px"></userImage>
-							<span style="line-height: 40px; padding-left: 10px;">{{ scope.row.employee_name }}</span>
-						  </div>
-					  </template>
+						<template slot-scope="scope">
+							<div class="flex-box">
+								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.img_url"
+									width="40px" height="40px"></userImage>
+								<span style="line-height: 40px; padding-left: 10px;">{{ scope.row.employee_name
+									}}</span>
+							</div>
+						</template>
 					</el-table-column>
 					<el-table-column label="部门" prop="dept"></el-table-column>
 					<el-table-column label="抢单时间" prop="create_time"></el-table-column>
 					<el-table-column label="执行情况" width="100px">
-					  <template slot-scope="scope">
-						 <span v-if="scope.row.status==1" class="orange">进行中</span>
-						 <span v-if="scope.row.status==2" class="blue">已完成</span>
-						 <span v-if="scope.row.status==3" class="fontColorB">退回</span>
-						 <span v-if="scope.row.status==4" class="green">已审批</span>
-						 <span v-if="scope.row.status==5" class="fontColorB">发布者已撤回</span>
-					  </template>
+						<template slot-scope="scope">
+							<span v-if="scope.row.status==1" class="orange">进行中</span>
+							<span v-if="scope.row.status==2" class="blue">已完成</span>
+							<span v-if="scope.row.status==3" class="fontColorB">退回</span>
+							<span v-if="scope.row.status==4" class="green">已审批</span>
+							<span v-if="scope.row.status==5" class="fontColorB">发布者已撤回</span>
+						</template>
 					</el-table-column>
 					<template slot="empty">
 						<NoData></NoData>
 					</template>
-			  </el-table>
-		  </div>
-		  <div class="flex-box-end" style="margin-top: 20px;">
-		  	<el-button @click="isShowTable=false">关 闭</el-button>
-		  </div>
+				</el-table>
+			</div>
+			<div class="flex-box-end" style="margin-top: 20px;">
+				<el-button @click="isShowTable=false">关 闭</el-button>
+			</div>
 		</el-dialog>
 	</div>
 </template>
 
 <script>
+import { returnJSEncrypt } from "@/utils/jsencrypt";
 export default {
 	name: 'repeatTaskDetailsPopup',
 	props: {
@@ -239,7 +247,8 @@ export default {
 		this.Delay_to_open = this.visible; //更换打开抽屉时机,避免打开两次
 	},
 	methods: {
-		activeTask(){
+		activeTask() {
+			
 			this.$axios('post', '/api/integral/task/exist',{task_id:this.id}).then(res => {
 				let exist=res.data.data.exist
 				if(exist){
@@ -248,10 +257,25 @@ export default {
 					this.collectTask()
 				}
 			})
+			
 		},
 		// 领取任务
 		collectTask() {
-			this.$axios('POST', '/api/integral/task', { task_id: this.id }).then(res => {
+			// this.$axios('post', '/api/integral/task/exist', { data: returnJSEncrypt(data) }, 'v3').then(res => {
+			// 	let exist = res.data.data.exist
+			// 	if (exist) {
+			// 		this.$message.warning("你已经抢到该任务了,请前往【我抢到的】查看")
+			// 	} else {
+			// 		this.collectTask()
+			// 	}
+			// })
+			// this.$axios('POST', '/api/integral/task', { task_id: this.id }).then(res => {
+			// 	this.$message.success('抢单成功!');
+			// 	this.getData();
+			// })
+
+			let data = { ti: this.id, st: Date.now() }
+			this.$axios('POST', '/api/integral/task', { data: returnJSEncrypt(data) }, 'v2').then(res => {
 				this.$message.success('抢单成功!');
 				this.getData();
 			})

+ 86 - 78
src/views/common/taskDetailsPopup.vue

@@ -1,34 +1,35 @@
 <template>
 	<div>
 		<!-- 任务详情弹窗 -->
-		<el-drawer :visible.sync="Delay_to_open" :with-header="false" :size="'500px'" :before-close="handleClose" :custom-class="'drawer_details'">
+		<el-drawer :visible.sync="Delay_to_open" :with-header="false" :size="'500px'" :before-close="handleClose"
+			:custom-class="'drawer_details'">
 			<div class="details_title flex-box-ce">
 				<span class="flex-1">{{ title }}</span>
 				<!-- <span><el-button type="primary" v-if="  workDetailData.status==1" size="small" @click.stop="completeBtn()">完成</el-button></span> -->
 			</div>
 			<div class="details_content" v-if="workDetailData" v-loading="loading">
 				<div class="flex-box flex-v-ce">
-					<userImage class="user_img person_imghead" width="46px" height="46px" :user_name="workDetailData.employee_name" :img_url="workDetailData.img_url"></userImage>
+					<userImage class="user_img person_imghead" width="46px" height="46px"
+						:user_name="workDetailData.employee_name" :img_url="workDetailData.img_url"></userImage>
 					<div class="d_userMessage">
 						<div>{{ workDetailData.employee_name }}</div>
-						<div v-if="detailType != 2 && workDetailData.dept_list[0]">{{ workDetailData.dept_list[0].dept_name }}</div>
+						<div v-if="detailType != 2 && workDetailData.dept_list[0]">{{
+							workDetailData.dept_list[0].dept_name }}</div>
 					</div>
 					<div style="margin-left: 5px;" class="flex-box flex-v-ce">
-						<div v-if="workDetailData.point_config.base_point > 0" class="red">+{{ workDetailData.point_config.base_point }}</div>
-						<div v-else class="green">{{ workDetailData.point_config.base_point }}</div>
+						<div v-if="workDetailData.point_config.base_point > 0" class="green">+{{
+							workDetailData.point_config.base_point }}</div>
+						<div v-else class="red">{{ workDetailData.point_config.base_point }}</div>
 						<div style="margin-left: 5px;">{{ $getTypsName(workDetailData.pt_id) }}</div>
 					</div>
 					<div class="flex-1"></div>
-					
+
+
 					<el-popover v-if="workDetailData.reviews.length>0" placement="bottom-start" trigger="click">
-						<div class="record"  style="margin: 20px 0;width: 400px;">
-							<div
-								@click="openDetail(item)"
-								v-for="(item, index) in workDetailData.reviews"
-								:key="index"
+						<div class="record" style="margin: 20px 0;width: 400px;">
+							<div @click="openDetail(item)" v-for="(item, index) in workDetailData.reviews" :key="index"
 								class="recordList"
-								:class="[workDetailData.reviews.length - index > 1 ? 'record-list' : '']"
-							>
+								:class="[workDetailData.reviews.length - index > 1 ? 'record-list' : '']">
 								<div class="flex-box-ce record-date fontColorB">
 									<!-- <div class="record-name">{{ item.reviewer_name }}</div> -->
 									<div class="flex-1">
@@ -54,18 +55,16 @@
 					</li>
 					<li class="flex-box">
 						<div class="label">任务备注</div>
-						<textarea class="flex-1" disabled="disabled" v-model="workDetailData.task_remark" style="border: none;height:100px"></textarea>
+						<textarea class="flex-1" disabled="disabled" v-model="workDetailData.task_remark"
+							style="border: none;height:100px"></textarea>
 					</li>
-					<li class="flex-box" v-if="workDetailData.task_file_list && workDetailData.task_file_list.length > 0">
+					<li class="flex-box"
+						v-if="workDetailData.task_file_list && workDetailData.task_file_list.length > 0">
 						<div class="label"></div>
 						<div class="content_text">
-							<el-image
-								v-for="(item, index) in workDetailData.task_file_list"
-								:key="index"
-								style="width: 100px; height: 100px;margin-right:8px"
-								:src="item"
-								:preview-src-list="workDetailData.task_file_list"
-							></el-image>
+							<el-image v-for="(item, index) in workDetailData.task_file_list" :key="index"
+								style="width: 100px; height: 100px;margin-right:8px" :src="item"
+								:preview-src-list="workDetailData.task_file_list"></el-image>
 						</div>
 					</li>
 					<li class="flex-box">
@@ -74,7 +73,8 @@
 					</li>
 					<li class="flex-box">
 						<div class="label">任务积分</div>
-						<div class="content_text">{{ workDetailData.point_config.base_point }}{{ workDetailData.pt_name }}</div>
+						<div class="content_text">{{ workDetailData.point_config.base_point }}{{ workDetailData.pt_name
+							}}</div>
 					</li>
 					<li class="flex-box" v-if="workDetailData.point_config.review_point">
 						<div class="label">最终分</div>
@@ -106,22 +106,20 @@
 					</li>
 					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.time">
 						<div class="label">完成时间</div>
-						<div class="content_text">{{$moment(workDetailData.complete_task.time).format('YYYY-MM-DD HH:mm')}}</div>
+						<div class="content_text">{{$moment(workDetailData.complete_task.time).format('YYYY-MM-DD
+							HH:mm')}}</div>
 					</li>
 					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.remark">
 						<div class="label">完成备注</div>
 						<div class="content_text">{{workDetailData.complete_task.remark }}</div>
 					</li>
-					<li class="flex-box" v-if="workDetailData.complete_task && workDetailData.complete_task.files && workDetailData.complete_task.files.length > 0">
+					<li class="flex-box"
+						v-if="workDetailData.complete_task && workDetailData.complete_task.files && workDetailData.complete_task.files.length > 0">
 						<div class="label"></div>
 						<div class="content_text">
-							<el-image
-								v-for="(item, index) in workDetailData.complete_task.files"
-								:key="index"
-								style="width: 100px; height: 100px;margin-right:8px"
-								:src="item"
-								:preview-src-list="workDetailData.complete_task.files"
-							></el-image>
+							<el-image v-for="(item, index) in workDetailData.complete_task.files" :key="index"
+								style="width: 100px; height: 100px;margin-right:8px" :src="item"
+								:preview-src-list="workDetailData.complete_task.files"></el-image>
 						</div>
 					</li>
 				</ul>
@@ -138,11 +136,14 @@
 					</el-row>
 					<el-row v-if="workDetailData.point_config.item_info">
 						<el-col :span="4">积分</el-col>
-						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point == workDetailData.point_config.item_info.max_point">
+						<el-col :span="19"
+							v-show="workDetailData.point_config.item_info.min_point == workDetailData.point_config.item_info.max_point">
 							{{ workDetailData.point_config.item_info.min_point }} {{ workDetailData.pt_name }}
 						</el-col>
-						<el-col :span="19" v-show="workDetailData.point_config.item_info.min_point != workDetailData.point_config.item_info.max_point">
-							{{ workDetailData.point_config.item_info.min_point }} ~ {{ workDetailData.point_config.item_info.max_point }} {{ workDetailData.pt_name }}
+						<el-col :span="19"
+							v-show="workDetailData.point_config.item_info.min_point != workDetailData.point_config.item_info.max_point">
+							{{ workDetailData.point_config.item_info.min_point }} ~ {{
+							workDetailData.point_config.item_info.max_point }} {{ workDetailData.pt_name }}
 						</el-col>
 					</el-row>
 				</div>
@@ -150,7 +151,8 @@
 					<div class="d_progress">
 						<div class="flex-box ">
 							<div class="flex-1">工作进度({{ workDetailData.progress }}%)</div>
-							<div class="addJf blue" @click="sliderShow" v-if="workDetailData.employee_id == userId && workDetailData.status == 1">+更新进度</div>
+							<div class="addJf blue" @click="sliderShow"
+								v-if="workDetailData.employee_id == userId && workDetailData.status == 1">+更新进度</div>
 						</div>
 						<el-progress :percentage="workDetailData.progress"></el-progress>
 					</div>
@@ -159,12 +161,16 @@
 							<el-tab-pane label="工作记录" name="work">
 								<div class="flex-box">
 									<div class="flex-1"></div>
-									<div class="addJf blue" @click="isOne = true" v-if="workDetailData.employee_id == userId && workDetailData.status < 3">+记一条工作记录</div>
+									<div class="addJf blue" @click="isOne = true"
+										v-if="workDetailData.employee_id == userId && workDetailData.status < 3">
+										+记一条工作记录</div>
 								</div>
 								<div class="work_box" style="padding-top:10px">
-									<div class="work_item" v-for="(item, index) in text_list" :key="index" style="margin: 0 0 15px 0">
+									<div class="work_item" v-for="(item, index) in text_list" :key="index"
+										style="margin: 0 0 15px 0">
 										<div class="flex-box">
-											<userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
+											<userImage class="user_img person_imghead" width="40px" height="40px"
+												:user_name="item.recorder" :img_url="item.img_url"></userImage>
 											<div style="width: 100%;" class="d_name">
 												<div class="flex-box flex-d-center">
 													<div class="flex-1">
@@ -174,16 +180,20 @@
 													</div>
 													<div class="d_date fontColorC">
 														{{ item.time }}
-														<span class="delete_jfjl" v-if="item.recorder_id == userId && workDetailData.status < 3" @click="deletejf_cli(index, 0)">
+														<span class="delete_jfjl"
+															v-if="item.recorder_id == userId && workDetailData.status < 3"
+															@click="deletejf_cli(index, 0)">
 															<i class="el-icon-delete"></i>
 														</span>
 													</div>
 												</div>
-												<div class="fontColorB" style="margin-top: 5px;word-break: break-all;">{{ item.remark }}</div>
+												<div class="fontColorB" style="margin-top: 5px;word-break: break-all;">
+													{{ item.remark }}</div>
 											</div>
 										</div>
 									</div>
-									<div v-if="text_list.length == 0" class="fontColorC" style="text-align: center;">暂无工作记录</div>
+									<div v-if="text_list.length == 0" class="fontColorC" style="text-align: center;">
+										暂无工作记录</div>
 								</div>
 							</el-tab-pane>
 							<el-tab-pane label="记分记录" name="participation">
@@ -195,28 +205,36 @@
 									<div class="addJf blue" @click="isIntegral = true" v-if="keepTheScore">+记分</div>
 								</div>
 								<div class="work_box" style="padding-top:10px">
-									<div class="work_item" v-for="(item, index) in point_list" :key="index" style="margin: 0 0 15px 0">
+									<div class="work_item" v-for="(item, index) in point_list" :key="index"
+										style="margin: 0 0 15px 0">
 										<div class="flex-box">
-											<userImage class="user_img person_imghead" width="40px" height="40px" :user_name="item.recorder" :img_url="item.img_url"></userImage>
+											<userImage class="user_img person_imghead" width="40px" height="40px"
+												:user_name="item.recorder" :img_url="item.img_url"></userImage>
 											<div style="width: 100%;" class="d_name">
 												<div class="flex-box flex-d-center">
 													<div class="flex-1">
 														{{ item.recorder }}
-														<span class="red" v-if="item.point * 1 > 0">+{{ item.point }}</span>
-														<span class="green" v-if="item.point * 1 < 0">{{ item.point }}</span>
+														<span class="red" v-if="item.point * 1 > 0">+{{ item.point
+															}}</span>
+														<span class="green" v-if="item.point * 1 < 0">{{ item.point
+															}}</span>
 													</div>
 													<div class="d_date fontColorC">
 														{{ item.time }}
-														<span class="delete_jfjl" v-if="userId == item.recorder_id && workDetailData.status < 3" @click="deletejf_cli(index, 1)">
+														<span class="delete_jfjl"
+															v-if="userId == item.recorder_id && workDetailData.status < 3"
+															@click="deletejf_cli(index, 1)">
 															<i class="el-icon-delete"></i>
 														</span>
 													</div>
 												</div>
-												<div class="fontColorB" style="margin-top: 5px;word-break: break-all;">{{ item.remark }}</div>
+												<div class="fontColorB" style="margin-top: 5px;word-break: break-all;">
+													{{ item.remark }}</div>
 											</div>
 										</div>
 									</div>
-									<div v-if="point_list.length == 0" class="fontColorC" style="text-align: center;">暂无积分记录</div>
+									<div v-if="point_list.length == 0" class="fontColorC" style="text-align: center;">
+										暂无积分记录</div>
 								</div>
 							</el-tab-pane>
 						</el-tabs>
@@ -227,7 +245,8 @@
 		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
 
 		<!-- 更新进度 -->
-		<el-dialog title="更新进度" :close-on-click-modal="false" :visible.sync="isSlider" :before-close="publicClose" width="40%">
+		<el-dialog title="更新进度" :close-on-click-modal="false" :visible.sync="isSlider" :before-close="publicClose"
+			width="40%">
 			<div class="slider">
 				<div class="fontColorC">拖动滑杆更新进度</div>
 				<el-slider v-model="progress"></el-slider>
@@ -238,7 +257,8 @@
 			</span>
 		</el-dialog>
 		<!-- 记一条 -->
-		<el-dialog title="记一条" :close-on-click-modal="false" :visible.sync="isOne" destroy-on-close :before-close="publicClose" width="40%">
+		<el-dialog title="记一条" :close-on-click-modal="false" :visible.sync="isOne" destroy-on-close
+			:before-close="publicClose" width="40%">
 			<div class="flex-box">
 				<div style="width: 80px;">工作记录</div>
 				<el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="textarea"></el-input>
@@ -249,7 +269,8 @@
 			</span>
 		</el-dialog>
 		<!-- 记分记录 -->
-		<el-dialog title="记分" :visible.sync="isIntegral" :before-close="publicClose" width="40%" destroy-on-close :close-on-click-modal="false">
+		<el-dialog title="记分" :visible.sync="isIntegral" :before-close="publicClose" width="40%" destroy-on-close
+			:close-on-click-modal="false">
 			<el-form :model="integral" ref="integral" label-width="80px" :rules="formRules">
 				<el-form-item label="记录" prop="text" :rules="[{ required: true, message: '记录不能为空' }]">
 					<el-input type="textarea" :rows="3" v-model="integral.text"></el-input>
@@ -258,16 +279,11 @@
 				<el-form-item label="记分" prop="num">
 					<!-- <el-form-item label="记分"  prop="num" :rules="[{ required: false, message: '记分不能为空'},{ type: 'number', message: '积分必须为数字值'}]"> -->
 					<div class="num" :class="[integral.type == '1' ? 'add' : 'jian']"></div>
-					<el-input
-						placeholder="请输入内容"
-						type="Number"
-						v-model.number="integral.num"
-						@input="
+					<el-input placeholder="请输入内容" type="Number" v-model.number="integral.num" @input="
 							val => {
 								integral.num = val.replace(/[^\d]/g, '');
 							}
-						"
-					>
+						">
 						<el-select v-model="integral.type" slot="prepend" placeholder="请选择" style="width: 80px;">
 							<el-option label="奖分" value="1"></el-option>
 							<el-option label="扣分" value="2"></el-option>
@@ -280,28 +296,20 @@
 				<el-button type="primary" @click="integralSend('integral')">完成</el-button>
 			</span>
 		</el-dialog>
-	
-		<el-dialog title="完成任务" :visible.sync="completeShow"  :close-on-click-modal="false" destroy-on-close width="50%">
+
+		<el-dialog title="完成任务" :visible.sync="completeShow" :close-on-click-modal="false" destroy-on-close width="50%">
 			<el-form :model="detail_form" ref="detail_form" label-width="80px">
-				<el-form-item label="任务备注" prop="remark" :rules="[{ required: true, message: '请填写任务备注(限200字)', trigger: 'blur' }]">
-					<el-input v-model="detail_form.remark" type="textarea" :rows="4"  maxlength="200" show-word-limit></el-input>
+				<el-form-item label="任务备注" prop="remark"
+					:rules="[{ required: true, message: '请填写任务备注(限200字)', trigger: 'blur' }]">
+					<el-input v-model="detail_form.remark" type="textarea" :rows="4" maxlength="200"
+						show-word-limit></el-input>
 				</el-form-item>
 				<el-form-item label="图片">
-					<upload
-						:headers="Xtoken"
-						class="avatar-uploader"
-						:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
-						:show-file-list="true"
-						:file-list="detail_form.fileList"
-						:on-success="handleFilesSuccess"
-						:on-preview="onFilePreView"
-						:before-upload="beforeUpload"
-						:on-remove="onFileRemove"
-						:limit="3"
-						accept="image/jpeg,image/png"
-						:multiple="true"
-						ref="clearPicture"
-					>
+					<upload :headers="Xtoken" class="avatar-uploader"
+						:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'" :show-file-list="true"
+						:file-list="detail_form.fileList" :on-success="handleFilesSuccess" :on-preview="onFilePreView"
+						:before-upload="beforeUpload" :on-remove="onFileRemove" :limit="3" accept="image/jpeg,image/png"
+						:multiple="true" ref="clearPicture">
 						<el-button size="small" type="primary">点击上传</el-button>
 						(最多选择3张)
 					</upload>

+ 187 - 152
src/views/ranking/integral_event.vue

@@ -5,137 +5,140 @@
 				<div class="form-item">
 					<div class="form-label">姓名搜索</div>
 					<div class="form-search">
-						<el-select size="medium" v-model="select_employee_id" filterable clearable placeholder="请输入或选择人员">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="select_employee_id" filterable clearable
+							placeholder="请输入或选择人员">
+							<el-option v-for="item in employee_map" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">所在部门</div>
 					<div class="form-search">
-						<el-cascader
-							size="medium"
-							v-model="dept_name"
-							:options="dept_tree"
+						<el-cascader size="medium" v-model="dept_name" :options="dept_tree"
 							:props="{ checkStrictly: true, multiple: true, value: 'id', label: 'name', children: '_child' }"
-							ref="dept"
-							filterable
-							collapse-tags
-							clearable
-							placeholder="全公司"
-						></el-cascader>
+							ref="dept" filterable collapse-tags clearable placeholder="全公司"></el-cascader>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">积分类型</div>
 					<div class="form-search">
-						<el-select  size="medium" v-model="formData.pt_id" clearable placeholder="A/B分">
-							<el-option v-for="item in getTypes()" :key="item.name" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="formData.pt_id" clearable placeholder="A/B分">
+							<el-option v-for="item in getTypes()" :key="item.name" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">事件来源</div>
 					<div class="form-search">
-							<el-select size="medium" v-model="formData.source_type" clearable placeholder="全部">
-								<el-option v-for="item in source_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
-							</el-select>
+						<el-select size="medium" v-model="formData.source_type" clearable placeholder="全部">
+							<el-option v-for="item in source_type" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
+						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">规则分类</div>
 					<div class="form-search">
-						<el-cascader
-							v-model="rule"
-							:options="rule_trees"
-							:props="props"
-							@change="rule_null"
-							size="medium"
-							ref="rule"
-							clearable
-							placeholder="全部规则分类"
-						></el-cascader>
+						<el-cascader v-model="rule" :options="rule_trees" :props="props" @change="rule_null"
+							size="medium" ref="rule" clearable placeholder="全部规则分类"></el-cascader>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">
 						<el-tooltip effect="dark" placement="top">
-						  <template slot="content">
-							默认仅显示组织架构中“已启用”人员的积分事件,未启用、已离职等人员的积分事件可以通过“未启用&未授权”筛选查看
-						  </template>
-						  <span>人员状态	<i class="el-icon-warning"></i></span>
+							<template slot="content">
+								默认仅显示组织架构中“已启用”人员的积分事件,未启用、已离职等人员的积分事件可以通过“未启用&未授权”筛选查看
+							</template>
+							<span>人员状态 <i class="el-icon-warning"></i></span>
 						</el-tooltip>
 					</div>
 					<div class="form-search">
 						<el-select size="medium" v-model="formData.is_enable">
-							<el-option  label="已启用" :value="1"></el-option>
-							<el-option  label="未授权&未启用" :value="0"></el-option>
+							<el-option label="已启用" :value="1"></el-option>
+							<el-option label="未授权&未启用" :value="0"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
-					<div class="form-label">发生时间</div>
+					<div class="form-label"><span style="color: red;">*</span>发生时间</div>
 					<div class="form-search">
-						<el-date-picker
-							v-model="time_slot"
-							type="daterange"
-							size="medium"
-							value-format="yyyy-MM-dd"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-						></el-date-picker>
+						<el-date-picker v-model="time_slot" type="daterange" size="medium" value-format="yyyy-MM-dd"
+							range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :clearable="false"></el-date-picker>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">复核状态</div>
 					<div class="form-search">
-						<el-select class="date-picker-width" size="medium" v-model="formData.status"  placeholder="请选择复核状态">
-							<el-option v-for="item in dcArr" :key="item.name" :label="item.name" :value="item.id"></el-option>
+						<el-select class="date-picker-width" size="medium" v-model="formData.status"
+							placeholder="请选择复核状态">
+							<el-option v-for="item in dcArr" :key="item.name" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">奖扣分值</div>
 					<div class="form-search">
-						<el-select class="date-picker-width" size="medium" v-model="formData.add_subtract"  placeholder="请选择复核状态">
-							<el-option  label="全部" :value="0"></el-option>
-							<el-option  label="奖分" :value="1"></el-option>
-							<el-option  label="扣分" :value="2"></el-option>
+						<el-select class="date-picker-width" size="medium" v-model="formData.add_subtract"
+							placeholder="请选择复核状态">
+							<el-option label="全部" :value="0"></el-option>
+							<el-option label="奖分" :value="1"></el-option>
+							<el-option label="扣分" :value="2"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">内容搜索</div>
 					<div class="form-search">
-						<el-input size="medium" clearable max="20" v-model="formData.keyword" placeholder="请输入"></el-input>
+						<el-input size="medium" clearable max="20" v-model="formData.keyword"
+							placeholder="请输入"></el-input>
+					</div>
+				</div>
+
+				<div class="form-item">
+					<div class="form-label"></div>
+					<div class="form-search">
+						<el-button type="primary" @click="doSearch()">查 询</el-button>
 					</div>
 				</div>
 			</FormBox>
-			
+
+
+
 			<div style="padding: 10px 0;position: relative;z-index: 1;background-color: #fff;">
-				<el-button v-if="employeeOrdept" type="success" size="medium" @click="toleadShw = true" plain>导入数据</el-button>
+				<el-button v-if="employeeOrdept" type="success" size="medium" @click="toleadShw = true"
+					plain>导入数据</el-button>
 				<el-button type="primary" size="medium" @click="exportExcel" plain>导出当前数据</el-button>
-				<el-button class="first-element-btn" size="medium" v-if="employeeOrdept" :disabled="deleteDisabled" @click="deleteInBatches" type="danger">批量删除</el-button>
+				<el-button class="first-element-btn" size="medium" v-if="employeeOrdept" :disabled="deleteDisabled"
+					@click="deleteInBatches" type="danger">批量删除</el-button>
 			</div>
 			<div style="position: relative;z-index: 1;background-color: #fff;padding-bottom: 10px;">
-				<div class="diy-tip1"><div>当前数据:{{ total }}条</div></div>
+				<div class="diy-tip1">
+					<div>当前数据:{{ total }}条</div>
+				</div>
 			</div>
 			<div>
-				<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @row-click="open_detail" @selection-change="deleteEvents">
+				<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @row-click="open_detail"
+					@selection-change="deleteEvents">
 					<el-table-column v-if="employeeOrdept" type="selection" width="55"></el-table-column>
 					<el-table-column prop="employee_name" label="姓名" align="left" min-width="125px">
 						<template slot-scope="scope">
 							<div class="flex-box">
-								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url" width="50px" height="50px"></userImage>
-								<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.employee_name }}</span>
+								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url"
+									width="50px" height="50px"></userImage>
+								<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.employee_name
+									}}</span>
 							</div>
 						</template>
 					</el-table-column>
-					<el-table-column prop="dept" show-overflow-tooltip label="部门" align="left" min-width="120px"></el-table-column>
+					<el-table-column prop="dept" show-overflow-tooltip label="部门" align="left"
+						min-width="120px"></el-table-column>
 					<el-table-column prop="point" label="积分" align="left" min-width="120px">
 						<template slot-scope="scope">
-							<span :class="scope.row.point < 0 ? 'green' : 'red'">{{ scope.row.point }} {{ point_name(scope.row.pt_id) }}</span>
+							<span :class="scope.row.point < 0 ? 'red' : 'green'">{{ scope.row.point }} {{
+								point_name(scope.row.pt_id) }}</span>
 						</template>
 					</el-table-column>
 					<el-table-column prop="remark" label="事件内容" align="left" min-width="280px">
@@ -146,7 +149,8 @@
 							</el-tooltip>
 						</template>
 					</el-table-column>
-					<el-table-column prop="rule_name" show-overflow-tooltip label="规则分类" align="left" min-width="140px"></el-table-column>
+					<el-table-column prop="rule_name" show-overflow-tooltip label="规则分类" align="left"
+						min-width="140px"></el-table-column>
 					<el-table-column prop="create_time" label="发生时间" align="left" min-width="140px">
 						<template slot-scope="scope">
 							{{ scope.row.event_time }}
@@ -184,48 +188,43 @@
 					</template>
 				</el-table>
 				<center class="pagination">
-					<el-pagination
-						background
-						@size-change="handleSizeChange"
-						@current-change="handleCurrentChange"
-						:current-page="formData.page"
-						:page-sizes="[10, 20, 50, 100]"
-						layout="total, sizes, prev, pager, next"
-						:page-size="pageLimit"
-						:total="total"
-					></el-pagination>
+					<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+						:current-page="formData.page" :page-sizes="[10, 20, 50, 100]"
+						layout="total, sizes, prev, pager, next" :page-size="pageLimit" :total="total"></el-pagination>
 				</center>
 			</div>
 		</div>
-		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
+		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'"
+			direction="rtl">
 			<div class="drawer_title flex-box-ce">
 				<span class="flex-1">事件详情</span>
-				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+				<i @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
 			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<div class="flex-box flex-v-ce">
-						<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px" height="50px" fontSize="1"></userImage>
-						<span style="font-size: 18px;line-height:50px; margin-left:10px;margin-right:4px;">{{ detail_info.employee_name }}</span>
-						<span class="red point" v-show="detail_info.point >= 0">+{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
-						<span class="green point" v-show="detail_info.point < 0">{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+						<userImage :user_name="detail_info.employee_name" :img_url="detail_info.img_url" width="50px"
+							height="50px" fontSize="1"></userImage>
+						<span style="font-size: 18px;line-height:50px; margin-left:10px;margin-right:4px;">{{
+							detail_info.employee_name }}</span>
+						<span class="green point" v-show="detail_info.point >= 0">+{{ detail_info.point }} {{
+							point_name(detail_info.pt_id) }}</span>
+						<span class="red point" v-show="detail_info.point < 0">{{ detail_info.point }} {{
+							point_name(detail_info.pt_id) }}</span>
 					</div>
 				</el-row>
 
-				<el-row >
+				<el-row>
 					<el-col :span="6">事件内容</el-col>
-					<el-col :span="18" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize || detail_info.remark.rule) }}</el-col>
+					<el-col :span="18" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize
+						|| detail_info.remark.rule) }}</el-col>
 				</el-row>
 
 				<el-row v-show="detail_info.files && detail_info.files.length > 0">
 					<el-col :span="18" :offset="6">
-						<el-image
-							v-for="(itme, index) in detail_info.files"
-							:key="index"
-							style="width: 80px; height: 80px;margin: 0 5px;"
-							:src="itme"
-							:preview-src-list="detail_info.files"
-						></el-image>
+						<el-image v-for="(itme, index) in detail_info.files" :key="index"
+							style="width: 80px; height: 80px;margin: 0 5px;" :src="itme"
+							:preview-src-list="detail_info.files"></el-image>
 					</el-col>
 				</el-row>
 
@@ -237,16 +236,16 @@
 				<el-row>
 					<el-col :span="6">来源类型</el-col>
 					<el-col :span="18">
-							<span v-show="detail_info.source_type == 1">积分奖扣</span>
-							<span v-show="detail_info.source_type == 2">任务</span>
-							<span v-show="detail_info.source_type == 3">积分系统分配</span>
-							<span v-show="detail_info.source_type == 4">考勤系统分配</span>
-							<span v-show="detail_info.source_type == 5">积分申请</span>
-							<span v-show="detail_info.source_type == 6">绩效任务包</span>
-							<span v-show="detail_info.source_type == 8">积分导入</span>
-							<span v-show="detail_info.source_type == 9">A分转B分</span>
-							<span v-show="detail_info.source_type == 10">钉钉汇报(日志)奖扣分</span>
-							<span v-show="detail_info.source_type > 10">其他</span>
+						<span v-show="detail_info.source_type == 1">积分奖扣</span>
+						<span v-show="detail_info.source_type == 2">任务</span>
+						<span v-show="detail_info.source_type == 3">积分系统分配</span>
+						<span v-show="detail_info.source_type == 4">考勤系统分配</span>
+						<span v-show="detail_info.source_type == 5">积分申请</span>
+						<span v-show="detail_info.source_type == 6">绩效任务包</span>
+						<span v-show="detail_info.source_type == 8">积分导入</span>
+						<span v-show="detail_info.source_type == 9">A分转B分</span>
+						<span v-show="detail_info.source_type == 10">钉钉汇报(日志)奖扣分</span>
+						<span v-show="detail_info.source_type > 10">其他</span>
 					</el-col>
 				</el-row>
 
@@ -270,15 +269,12 @@
 					<el-col :span="18">{{ detail_info.complete_task.remark }}</el-col>
 				</el-row>
 
-				<el-row v-show="detail_info.complete_task && detail_info.complete_task.files && detail_info.complete_task.files.length > 0">
+				<el-row
+					v-show="detail_info.complete_task && detail_info.complete_task.files && detail_info.complete_task.files.length > 0">
 					<el-col :span="18" :offset="6">
-						<el-image
-							v-for="(itme, index) in detail_info.complete_task.files"
-							:key="index"
-							style="width: 80px; height: 80px;margin: 0 5px;"
-							:src="itme"
-							:preview-src-list="detail_info.complete_task.files"
-						></el-image>
+						<el-image v-for="(itme, index) in detail_info.complete_task.files" :key="index"
+							style="width: 80px; height: 80px;margin: 0 5px;" :src="itme"
+							:preview-src-list="detail_info.complete_task.files"></el-image>
 					</el-col>
 				</el-row>
 
@@ -294,22 +290,29 @@
 					</el-row>
 					<el-row>
 						<el-col :span="6">积分</el-col>
-						<el-col :span="18" v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{ detail_info.rule_item.min_point }}</el-col>
+						<el-col :span="18"
+							v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{
+							detail_info.rule_item.min_point }}</el-col>
 						<el-col :span="18" v-show="detail_info.rule_item.min_point != detail_info.rule_item.max_point">
 							{{ detail_info.rule_item.min_point }} ~ {{ detail_info.rule_item.max_point }}
 						</el-col>
 					</el-row>
 				</div>
-				<div v-show="detail_info.process"><Steps :process="detail_info.process"></Steps></div>
-				<div v-show="detail_info.dc_remark.flow"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
+				<div v-show="detail_info.process">
+					<Steps :process="detail_info.process"></Steps>
+				</div>
+				<div v-show="detail_info.dc_remark.flow">
+					<Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review>
+				</div>
 				<div style="text-align: center;margin-top: 30px;" v-if="detail_info.source_type == 10 && see_log">
 					<el-button type="primary" size="medium" @click="showLog = true">
 						查看日志详情内容
-						<span style=";padding-left:5px;">»</span>
+						<span style="padding-left:5px;">»</span>
 					</el-button>
 				</div>
 			</div>
-			<div v-if="!this.$authoritys('employee') && !this.$authoritys('dept_manager')" style="position: absolute; bottom: 20px; display: block; right: 20px;">
+			<div v-if="!this.$authoritys('employee') && !this.$authoritys('dept_manager')"
+				style="position: absolute; bottom: 20px; display: block; right: 20px;">
 				<el-button @click="close_integral_event">取消</el-button>
 				<el-button type="danger" @click="del_integral_event(detail_info)">删除</el-button>
 			</div>
@@ -319,23 +322,32 @@
 			<div class="title">{{ ding_report.creator_name }}的{{ ding_report.template_name }}</div>
 			<div v-if="ding_report.contents.length > 0">
 				<div class="contents" v-for="(item, index) in ding_report.contents" :key="index">
-					<div class="key">{{ item.key }}</div>
-					<div class="value fontColorC">
-						<span v-if="item.value">{{ item.value }}</span>
-						<span v-else>未填写</span>
-					</div>
+					<template v-if="item.type == 8">
+						<div class="key">{{ item.key }}</div>
+						<div v-if="item.value.length > 0" class="flex-box flex-d-wrap" style="margin-top: 20px;">
+							<el-image v-for="(item, index) in item.value" :key="index"
+								style="width: 100px; height: 100px; margin-right:8px" :src="item"
+								:preview-src-list="item.value"></el-image>
+						</div>
+					</template>
+
+					<template v-else>
+						<div class="key">{{ item.key }}</div>
+						<div class="value fontColorC">
+							<span v-if="item.value">{{ item.value }}</span>
+							<span v-else>未填写</span>
+						</div>
+					</template>
 				</div>
 			</div>
+
+
 			<div v-if="ding_report.images.length > 0">
 				<div class="key" style="margin-bottom: 20px;">图片</div>
 				<div class="flex-box flex-d-wrap">
-					<el-image
-						v-for="(item, index) in ding_report.images"
-						:key="index"
-						style="width: 100px; height: 100px;margin-right:8px"
-						:src="item"
-						:preview-src-list="ding_report.images"
-					></el-image>
+					<el-image v-for="(item, index) in ding_report.images" :key="index"
+						style="width: 100px; height: 100px;margin-right:8px" :src="item"
+						:preview-src-list="ding_report.images"></el-image>
 				</div>
 			</div>
 		</el-dialog>
@@ -350,7 +362,8 @@
 					</el-table-column>
 				</el-table>
 			</div>
-			<span slot="footer"><el-button type="primary" size="medium" @click="importErrorInfoShow = false">确 定</el-button></span>
+			<span slot="footer"><el-button type="primary" size="medium" @click="importErrorInfoShow = false">确
+					定</el-button></span>
 		</el-dialog>
 
 		<el-dialog title="轮播事件" :visible.sync="swiperShow" width="500px">
@@ -359,7 +372,8 @@
 					<el-col :span="5" style="line-height: 36px;">仅展示最新的</el-col>
 					<el-col :span="6">
 						<el-select v-model="page_size" placeholder="请选择">
-							<el-option v-for="item in swiperPageList" :key="item.value" :label="item.value" :value="item.value"></el-option>
+							<el-option v-for="item in swiperPageList" :key="item.value" :label="item.value"
+								:value="item.value"></el-option>
 						</el-select>
 					</el-col>
 					<el-col :span="6" style="line-height: 36px;">条积分事件来轮播</el-col>
@@ -367,12 +381,15 @@
 			</div>
 			<span slot="footer">
 				<el-button size="medium" @click="swiperShow = false" style="margin-right: 10px;">取 消</el-button>
-				<router-link :to="{ path: '/deptRankSwiper?' + '&page=1&page_size=' + this.page_size + '&type=1' }" target="_blank">
+				<router-link :to="{ path: '/deptRankSwiper?' + '&page=1&page_size=' + this.page_size + '&type=1' }"
+					target="_blank">
 					<el-button size="medium" type="primary">开始轮播</el-button>
 				</router-link>
 			</span>
 		</el-dialog>
-		<toLead :visible.sync="toleadShw" :nowIndex.sync="nowIndex" :tolead="toleadResult" @confirm="tealConfirm" :export_type="'integral_event'" :dstyle="'height:130px;'">
+
+		<toLead :visible.sync="toleadShw" :nowIndex.sync="nowIndex" :tolead="toleadResult" @confirm="tealConfirm"
+			:export_type="'integral_event'" :dstyle="'height:130px;'">
 			<template slot="1">
 				<div v-if="nowIndex == 1">
 					<div class="flex-box flex-v-ce margin-bottom">
@@ -380,19 +397,13 @@
 						<el-button size="medium" type="primary" @click="downloadTemplate" plain>下载模板</el-button>
 					</div>
 					<div class="margin-bottom">
-						<el-upload
-							:limit="1"
-							:headers="ATOKEN"
-							ref="upload"
-							:action="action"
-							:on-success="handlePictureCardPrediv"
-							:file-list="fileList"
-							:before-upload="beforeFilesUpload"
-							:on-progress="handleOnthecross"
-						>
+						<el-upload :limit="1" :headers="ATOKEN" ref="upload" :action="action"
+							:on-success="handlePictureCardPrediv" :file-list="fileList"
+							:before-upload="beforeFilesUpload" :on-progress="handleOnthecross">
 							<p>
 								2、上传积分事件数据Excel表
-								<el-button style="margin-left: 10px;" size="medium" type="primary" plain>选择文件</el-button>
+								<el-button style="margin-left: 10px;" size="medium" type="primary"
+									plain>选择文件</el-button>
 							</p>
 						</el-upload>
 					</div>
@@ -413,7 +424,6 @@ export default {
 			deleteDisabled: true,
 			action: process.env.VUE_APP_BASE_API + 'api/integral/import',
 			ATOKEN: { 'A-TOKEN': this.$getToken(), Accept: 'application/vnd.test.v2+json' },
-
 			loading: false,
 			swiperShow: false,
 			swiperPageList: [{ value: '10' }, { value: '30' }, { value: '50' }],
@@ -485,22 +495,25 @@ export default {
 	components: { Steps, toLead,Review },
 	created() {
 		this.getEmployee();
+		this.getRecentMonthDates();
 	},
 	mounted() {
 		this.deriveRestrict();
 		this.getDepartment();
 		this.get_rule_trees();
+		this.time_slot = this.getRecentMonthDates()
 		this.get_integral_list(this.formData);
 		this.see_log = this.$store.state.config.see_log;
 		this.point_types = this.getTypes();
 	},
 	watch: {
-		'formData.keyword': {
-			deep: true,
-			handler: _debounce(function(val) {
-				this.keyWordSelect();
-			}, 1000)
-		},
+		// 'formData.keyword': {
+		// 	deep: true,
+		// 	handler: _debounce(function (val) {
+		// 		// this.formData.page = 1;
+		// 		this.keyWordSelect();
+		// 	}, 1000)
+		// },
 		toleadShw(val) {
 			if (val) this.nowIndex = 1;
 		},
@@ -513,26 +526,26 @@ export default {
 		},
 		'formData.add_subtract'(val, old_val) {
 			this.formData.page = 1;
-			this.get_integral_list(this.formData);
+			// this.get_integral_list(this.formData);
 		},
 		'formData.is_enable'(val, old_val) {
 			this.formData.page = 1;
-			this.get_integral_list(this.formData);
+			// this.get_integral_list(this.formData);
 		},
 		'formData.pt_id'(val, old_val) {
 			this.formData.page = 1;
 			!val ? delete this.formData.pt_id : '';
-			this.get_integral_list(this.formData);
+			// this.get_integral_list(this.formData);
 		},
 		'formData.source_type'(val) {
 			this.formData.page = 1;
 			val == 0 ? delete this.formData.source_type : '';
-			this.get_integral_list(this.formData);
+			// this.get_integral_list(this.formData);
 		},
 		'formData.status'(val) {
 			this.formData.dc_status=JSON.stringify([val]);
 			this.formData.page = 1;
-			this.get_integral_list(this.formData);
+			// this.get_integral_list(this.formData);
 		},
 		'formData.page'(val, old_val) {
 			this.get_integral_list(this.formData);
@@ -540,7 +553,7 @@ export default {
 		select_employee_id(val) {
 		  this.formData.page = 1;
 		  this.formData.employee_ids = val;
-		  this.get_integral_list(this.formData);
+		//   this.get_integral_list(this.formData);
 		},
 		time_slot(val, old_val) {
 			this.formData.page = 1;
@@ -551,7 +564,7 @@ export default {
 				delete this.formData.start_day;
 				delete this.formData.end_day;
 			}
-			this.get_integral_list(this.formData);
+			// this.get_integral_list(this.formData);
 		},
 		u_start(val, old_val) {
 			this.formData.page = 1;
@@ -562,7 +575,7 @@ export default {
 				delete this.formData.u_start_day;
 				delete this.formData.u_end_day;
 			}
-			this.get_integral_list(this.formData);
+			// this.get_integral_list(this.formData);
 		},
 		dept_name(val, old_val) {
 			this.formData.page = 1;
@@ -579,11 +592,33 @@ export default {
 			}
 			this.$nextTick(() => {
 				this.$refs.dept.dropDownVisible = false;
-				this.get_integral_list(this.formData);
+				// this.get_integral_list(this.formData);
 			});
 		},
 	},
+
+	
+
 	methods: {
+
+		doSearch() {
+			this.get_integral_list(this.formData);
+		},
+
+		getRecentMonthDates() {
+			let currentDate = new Date();
+			let oneMonthAgo = new Date();
+			oneMonthAgo.setMonth(currentDate.getMonth() - 1);
+			let year = oneMonthAgo.getFullYear();
+			let month = oneMonthAgo.getMonth() + 1;
+			let day = oneMonthAgo.getDate();
+			day = day < 10 ? '0' + day : day;
+			month = month < 10 ? '0' + month : month;
+			let formattedCurrentDate = `${year}-${currentDate.getMonth() + 1}-${day}`;
+			let formattedDate = `${year}-${month}-${day}`;
+			return [formattedDate, formattedCurrentDate]
+		},
+
 		//获取员工列表
 		getEmployee() {
 			this.$axios('get', '/api/employee/index', { dept_id: 0, keywords: '', page: 1, page_size: 3000, is_official: 1 }).then(res => {
@@ -839,7 +874,7 @@ export default {
 			}
 			this.$nextTick(() => {
 				this.$refs.rule.dropDownVisible = false;
-				this.get_integral_list(this.formData);
+				// this.get_integral_list(this.formData);
 			});
 		},
 		del_integral_event(item) {

+ 79 - 0
src/views/set/categoryFinder.js

@@ -0,0 +1,79 @@
+// categoryFinder.js
+
+// 递归查找节点
+function findNodeWithPath(nodes, targetId, currentPath = []) {
+    for (const node of nodes) {
+        // 创建当前路径的副本
+        const path = [...currentPath, {
+            id: node.id,
+            name: node.name,
+            pid: node.pid,
+            sort: node.sort
+        }];
+
+        // 如果找到目标节点
+        if (node.id === targetId) {
+            return path;
+        }
+
+        // 如果有子节点,递归查找
+        if (node.child && node.child.length > 0) {
+            const result = findNodeWithPath(node.child, targetId, path);
+            if (result) return result;
+        }
+    }
+    return null;
+}
+
+// 主要的查找函数
+export function findCategoryById(data, id) {
+    const path = findNodeWithPath(data, id);
+
+    if (!path) {
+        return {
+            success: false,
+            error: `未找到ID为 ${id} 的分类`,
+            targetId: id
+        };
+    }
+
+    const targetNode = path[path.length - 1];
+
+    return {
+        success: true,
+        targetId: id,
+        targetNode: targetNode,
+        parents: path.slice(0, -1),
+        fullPath: path,
+        depth: path.length - 1,
+        isRoot: path.length === 1
+    };
+}
+
+// 辅助函数:格式化显示结果
+export function formatCategoryResult(result) {
+    if (!result.success) {
+        return `错误: ${result.error}`;
+    }
+
+    const lines = [];
+    // lines.push(`=== 分类查找结果 ===`);
+    lines.push(`${result.targetNode.name}`);
+    // lines.push(`路径深度: ${result.depth}`);
+    // lines.push(`是否为根节点: ${result.isRoot ? '是' : '否'}`);
+
+    if (result.parents.length > 0) {
+        // lines.push(`父级路径:`);
+        result.fullPath.forEach((node, index) => {
+            const indent = '  '.repeat(index);
+            const isLast = index === result.fullPath.length - 1;
+            const marker = isLast ? ' > ' : ' > ';
+            lines.push(`${indent}${marker}${node.name}`);
+        });
+    } else {
+        // lines.push(`这是一个根级分类`);
+    }
+
+    return lines.join('\n');
+}
+

+ 0 - 1
src/views/set/check.vue

@@ -42,7 +42,6 @@ export default {
 		  },
         {
           initialName: "正常打卡,每次加分",
-          message:'只包含打上班卡',
           initia_mark: false,
           initia_input: {
             age: "0",

+ 4 - 4
src/views/set/framework.vue

@@ -50,12 +50,12 @@
 								</el-select>
 							</div>
 						</div>
-						<!-- <div class="form-item">
+						<div class="form-item">
 							<div class="form-label">姓名搜索</div>
 							<div class="form-search">
 								<el-input placeholder="请输入" size="medium" v-model="keywords" clearable></el-input>
 							</div>
-						</div> -->
+						</div>
 					</FormBox>
 					<div style="margin: 10px 0;" class="flex-box-ce">
 						<el-button @click="participation()" :loading="enable_loading" size="medium" type="primary">批量启用</el-button>
@@ -165,7 +165,7 @@
 				</div>
 			</div>
 			<!-- 隐藏文本,用于复制ID -->
-			<input  v-model="copyIds" id="biao" style="opacity:0"/>
+			<input v-model="copyIds" id="biao" style="opacity: 0;"/>
 		</div>
 		
 		<el-dialog  :close-on-click-modal="false" ref="EditInformation_list" title="员工详情" width="500px" :before-close="detailFormreturn" :visible.sync="diaTableVisible">
@@ -1034,7 +1034,7 @@ export default {
 				})
 		},
 		copyToClipboard() {
-			var Url2=document.getElementById("biao");
+			var Url2 = document.getElementById("biao");
 			Url2.select(); // 选择对象
 			document.execCommand("Copy"); // 执行浏览器复制命令
 			this.$message.success('已复制');

+ 0 - 2
src/views/set/initialPoint.vue

@@ -18,7 +18,6 @@ export default {
 			initia_arr: [
 				{
 					initialName: '基础分',
-          message:'设置分值后,系统将为全部员工自动加上此项基础分;此项基础分仅加一次,计入每个员工的累计总分。',
 					initia_mark: true,
 					initia_input: {
 						age: ''
@@ -28,7 +27,6 @@ export default {
 				},
 				{
 					initialName: '工龄分',
-          message:'首次加分=员工已在职的月份数*工龄分,未满一个月的不加分;后续加分按已设置的工龄分值每月自动累加',
 					initia_mark: true,
 					initia_input: {
 						age: ''

+ 2 - 3
src/views/set/jurisdiction.vue

@@ -38,12 +38,11 @@
 							<el-button size="small" v-show="item_info.code == 'dept_manager'" @click="toleadShw = true">导出/修改管理列表</el-button>
 							<el-button size="small" v-show="item_info.code == 'dept_manager'" @click="synchronization" type="primary">同步管理范围</el-button>
 						</div>
-						<!-- <div class="gap-right-8 fr" style="display:inline-block; width:180px;" v-show="item_info.code == 'dept_manager'">
+						<div class="gap-right-8 fr" style="display:inline-block; width:180px;" v-show="item_info.code == 'dept_manager'">
 							<el-input placeholder="搜索员工姓名" ref="search-bar" v-model="keyword" size="small" class="input-with-select" @keyup.enter.native="onFilterChanged">
 								<el-button slot="append" size="small" icon="el-icon-search" @click="onFilterChanged"></el-button>
 							</el-input>
-						</div> -->
-						
+						</div>
 					</div>
 					<div v-show="item_info.code == 'creator'">
 						<el-table :data="table_list" v-loading="table_loading">

+ 2 - 2
src/views/set/log.vue

@@ -12,7 +12,7 @@
 				</div>
 				<div class="flex-box-end" style="margin-top: 20px;">
 					<el-button  v-if="$authoritys() != 'dept_manager' && $authoritys() != 'employee'" plain @click="isShowLog = true">刷新汇报记录</el-button>
-					<el-button  type="primary" plain  @click="add()">新增模板</el-button>
+					<el-button  type="primary" plain  @click="add()">添加日志模板</el-button>
 					<el-button  type="primary" @click="isPz = true">设置<i class="el-icon-setting el-icon--right"></i></el-button>
 				</div>
 			</div>
@@ -48,7 +48,7 @@
 				</template>
 			</el-table>
 		</div>
-		<el-dialog :visible.sync="isPz" top="25vh" width="520px" class="dialog">
+		<el-dialog title="日志配置" :visible.sync="isPz" top="25vh" width="520px" class="dialog">
 			<el-alert class="el-dialog__body" title="日志配置适用所有日志" type="warning" :closable="false" show-icon></el-alert>
 			<el-form label-width="170px" ref="setForm" class="form">
 				<el-form-item label="是否允许查看日志内容"><el-switch v-model="see_log" :active-value="1" :inactive-value="0"></el-switch></el-form-item>

+ 5 - 0
src/views/set/rule.vue

@@ -432,6 +432,7 @@ export default {
 	created() {
 		this.point_types = this.$getTyps().reverse();
 	},
+	
 	mounted() {
 		this.$nextTick(function() {
 			if (this.$getCache('rule')) {
@@ -900,6 +901,9 @@ export default {
 				}
 			});
 		},
+
+		
+
 		//编辑规则
 		edit_submit_rule(form) {
 			let self = this;
@@ -1196,6 +1200,7 @@ export default {
 					}
 				}
 				this.rule_tree = this.getRuleTreeData(res.data.data.rule_tree);
+				console.log("rule_tree", this.rule_tree)
 				if (is) { //需要刷新分类详情
 					this.handleNodeClick(this.selectItem,true);
 				}

+ 3 - 3
src/views/set/screenSet.vue

@@ -113,7 +113,7 @@
 			</div>
 		</el-dialog>
 
-		<el-dialog :title="'设置('+selectItem.name+')'" :visible.sync="dialogVisible" width="70%" class="dialog">
+		<el-dialog :title="'设置('+selectItem.name+')'" :visible.sync="dialogVisible" width="1000px" class="dialog">
 			<div class="flex-box">
 				<div class="flex-4" style="padding-top: 50px;">
 					<div  style="color: #222;font-weight: 700;font-size: 16px;padding-left: 8px;">点击下面模块,快速定位到设置项
@@ -152,7 +152,7 @@
 							<div class="formTitle">组织名称和logo设置</div>
 							<div class="formBox">
 								<el-form-item label="组织名称">
-									<el-input style="width: 350px;" maxlength="20" show-word-limit v-model.trim="config.company.name" placeholder="请输入名称"/>
+									<el-input class="width250" maxlength="10" show-word-limit v-model.trim="config.company.name" placeholder="请输入名称"></el-input>
 								</el-form-item>
 								<el-form-item label="logo">
 									<upload
@@ -615,7 +615,7 @@ export default {
 				//配置格式 不是删除则必填
 				ranking_type:'ranking',
 				company: {
-					name: this.$getUserData().company_info.name.slice(0, 20), //不超过十个字 公司名截断
+					name: this.$getUserData().company_info.name.slice(0, 10), //不超过十个字 公司名截断
 					logo: 'https://integralsys.oss-cn-shenzhen.aliyuncs.com/intesys/dd/17/2022/07/01/CaBis82ryBYbncxc3nehiSXkiwDbhbwi.png' //公司logo
 				},
 				title: '积分数据大屏', //不超过十个字

+ 460 - 53
src/views/set/systemLayout.vue

@@ -1,6 +1,6 @@
 <template>
 	<div class="all padding-20" v-loading="loading">
-		
+
 		<el-tabs v-model="activeName" @tab-click="handleClick" class="tab-container">
 			<el-tab-pane label="基本设置" name="first">
 				<div class="integralApproval" style="margin-top: 30px;">
@@ -8,27 +8,31 @@
 					<div>当前系统审批流程 <span class="blue cursor" @click="approvalProcess">查看图例</span></div>
 					<div class="fontColorC"><span>指定规则的审批或奖扣分,均可直接通过</span></div>
 				</div>
-				
+
 				<div class="integralApproval">
-					<b>积分复核<el-switch style="margin-left:30px;" :active-value="1" :inactive-value="0" v-model="event_review_status"></el-switch></b>
-					<div style="line-height: 22px;"  v-if="event_review_status">
-						<div class="fontColorC" style="margin-bottom: 5px;">开启后,以下来源的积分需要在<span class="orange">复核通过</span>后才计入排名和统计<br/>哪些来源的积分需要复核(至少选择一项)</div>
+					<b>积分复核<el-switch style="margin-left:30px;" :active-value="1" :inactive-value="0"
+							v-model="event_review_status"></el-switch></b>
+					<div style="line-height: 22px;" v-if="event_review_status">
+						<div class="fontColorC" style="margin-bottom: 5px;">开启后,以下来源的积分需要在<span
+								class="orange">复核通过</span>后才计入排名和统计<br />哪些来源的积分需要复核(至少选择一项)</div>
 						<div class="flex-box-ce">
-						  <el-checkbox v-model="event_apply_review" label="积分申请" border size="small"></el-checkbox>
-						  <el-checkbox v-model="event_entry_review" label="积分奖扣" border size="small"></el-checkbox>
-						  <el-checkbox v-model="event_task_review" label="任务" border size="small"></el-checkbox>
+							<el-checkbox v-model="event_apply_review" label="积分申请" border size="small"></el-checkbox>
+							<el-checkbox v-model="event_entry_review" label="积分奖扣" border size="small"></el-checkbox>
+							<el-checkbox v-model="event_task_review" label="任务" border size="small"></el-checkbox>
 						</div>
 						<div style="margin: 12px 0;">
-							<div style="margin-bottom: 10px;">复核人员选择 <span style="font-size: 12px;" class="fontColorB">(仅系统管理员可更改此配置)</span></div>
-							<el-radio-group  v-model="is_review_manager" style="display: block;">
-							    <el-radio :disabled="!isCreator" :label="1">积分管理员、公司管理员、系统管理员均可操作复核</el-radio>
+							<div style="margin-bottom: 10px;">复核人员选择 <span style="font-size: 12px;"
+									class="fontColorB">(仅系统管理员可更改此配置)</span></div>
+							<el-radio-group v-model="is_review_manager" style="display: block;">
+								<el-radio :disabled="!isCreator" :label="1">积分管理员、公司管理员、系统管理员均可操作复核</el-radio>
 								<div style="margin-bottom: 8px;"></div>
-							    <el-radio :disabled="!isCreator" :label="2">指定人员可操作复核</el-radio>
+								<el-radio :disabled="!isCreator" :label="2">指定人员可操作复核</el-radio>
 							</el-radio-group>
 							<div class="input-box font-flex-word" @click="openUserSelect" v-if="is_review_manager==2">
 								<span class="fontColorC" v-if="event_special.length==0">请选择指定人员</span>
 								<template v-else>
-									<span v-for="(item,index) in event_special" :key="index">{{item.name}}<span v-if="index!=event_special.length-1">,</span></span>
+									<span v-for="(item,index) in event_special" :key="index">{{item.name}}<span
+											v-if="index!=event_special.length-1">,</span></span>
 								</template>
 							</div>
 						</div>
@@ -36,19 +40,20 @@
 					</div>
 				</div>
 				<div class="integralApproval">
-					<b>福利模块<el-switch style="margin-left:30px;" :active-value="1" :inactive-value="0" v-model="shop_status"></el-switch></b>
-					<div  class="fontColorC">
+					<b>福利模块<el-switch style="margin-left:30px;" :active-value="1" :inactive-value="0"
+							v-model="shop_status"></el-switch></b>
+					<div class="fontColorC">
 						<div>开启后,通过“功勋点”可兑换公司的福利奖品;</div>
 						<div>员工可通过公司定期统一发放或挣更多个人B分来获得功勋点</div>
 					</div>
 				</div>
-				
+
 				<div class="integralApproval">
 					<b>
 						提交积分时,必须选择积分规则
 						<el-switch style="margin-left:30px;" v-model="ruleOnoff"></el-switch>
 					</b>
-					<div  class="fontColorC">
+					<div class="fontColorC">
 						<div>开启后,申请积分或奖扣积分时,必须选择积分规则提交;</div>
 						<div>此配置不影响积分审批和任务发布</div>
 					</div>
@@ -58,7 +63,7 @@
 						指定规则的审批或奖扣分免审
 						<el-switch style="margin-left:30px;" v-model="examine"></el-switch>
 					</b>
-					<div  class="fontColorC">
+					<div class="fontColorC">
 						<div>开启后,按照系统已有的积分规则制度提交的审批或者奖扣可直接通过;</div>
 						<div>即使审批人/录分人的权限分不足,也能审批通过</div>
 					</div>
@@ -69,7 +74,8 @@
 						<el-switch style="margin-left:30px;" v-model="isApB"></el-switch>
 					</b>
 					<div class="flex-box flex-v-ce" v-if="isApB">
-						1A分=<el-input v-model.number="pointNum" autofocus="0" size="mini" class="pointNum" oninput="value=value.replace(/[^\d]/g,'')"></el-input>B分
+						1A分=<el-input v-model.number="pointNum" autofocus="0" size="mini" class="pointNum"
+							oninput="value=value.replace(/[^\d]/g,'')"></el-input>B分
 					</div>
 					<div class="fontColorC">
 						<div>开启后,每奖/扣1条A分,额外产生一条分值按比例转换后的B分记录;</div>
@@ -81,7 +87,7 @@
 						管理者审批计入奖扣分目标
 						<el-switch style="margin-left:30px;" v-model="task_review"></el-switch>
 					</b>
-					<div  class="fontColorC">
+					<div class="fontColorC">
 						<div>系统默认的管理者奖扣目标只包含管理者主动给员工奖扣的积分;</div>
 						<div>开启后,审批员工申请的积分和任务也会记入Ta的奖扣分目标内</div>
 					</div>
@@ -90,8 +96,10 @@
 					<b>管理者奖扣分目标结算时间(不达标自动扣分)</b>
 					<div class="flex-box flex-v-ce" style="margin-top:10px;">
 						每月
-						<el-select v-model="task_schedule_day" size="mini" style="margin: 0 10px;width: 80px;" placeholder="请选择截止日期">
-							<el-option v-for="item in columns" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						<el-select v-model="task_schedule_day" size="mini" style="margin: 0 10px;width: 80px;"
+							placeholder="请选择截止日期">
+							<el-option v-for="item in columns" :key="item.value" :label="item.name"
+								:value="item.value"></el-option>
 						</el-select>
 						结算上个月的管理者奖扣,不达标的自动扣分
 					</div>
@@ -105,12 +113,16 @@
 			<el-tab-pane label="通知设置" name="second">
 				<div class="integralApproval">
 					<div v-for="(item, index) in informText" :key="index" style="margin-top:30px;">
-						<p  class="flex-box-ce">
+						<p class="flex-box-ce">
 							<b>{{ item.title }}</b>
-							<el-switch v-if="item.switchs == 0" style="margin:-6px 0 0 30px;" v-model="individualPoints"></el-switch>
-							<el-switch v-if="item.switchs == 1" style="margin:-6px 0 0 30px;" v-model="pointManagement"></el-switch>
-							<el-switch v-if="item.switchs == 2" style="margin:-6px 0 0 30px;" v-model="taskToInform"></el-switch>
-							<el-switch v-if="item.switchs == 3" style="margin:-6px 0 0 30px;" v-model="approvalNotice"></el-switch>
+							<el-switch v-if="item.switchs == 0" style="margin:-6px 0 0 30px;"
+								v-model="individualPoints"></el-switch>
+							<el-switch v-if="item.switchs == 1" style="margin:-6px 0 0 30px;"
+								v-model="pointManagement"></el-switch>
+							<el-switch v-if="item.switchs == 2" style="margin:-6px 0 0 30px;"
+								v-model="taskToInform"></el-switch>
+							<el-switch v-if="item.switchs == 3" style="margin:-6px 0 0 30px;"
+								v-model="approvalNotice"></el-switch>
 						</p>
 						<p>{{ item.ram }}</p>
 						<p style="margin-top: 5px;" v-if="item.checkboxs && individualPoints">
@@ -122,11 +134,13 @@
 			<el-tab-pane label="操作历史" name="history">
 				<el-form :inline="true">
 					<el-form-item style="float: right;margin-bottom: 0;">
-						<el-input size="medium" v-model="formData.keywords" placeholder="请输入内容" max="200" @keyup.enter.native="his_int()" class="persons_name">
+						<el-input size="medium" v-model="formData.keywords" placeholder="请输入内容" max="200"
+							@keyup.enter.native="his_int()" class="persons_name">
 							<el-button size="medium" slot="append" icon="el-icon-search" @click="his_int()"></el-button>
 						</el-input>
 					</el-form-item>
 				</el-form>
+
 				<el-table :data="list" style="width: 100%" v-loading="hisload">
 					<el-table-column label="内容" prop="content"></el-table-column>
 					<el-table-column prop="create_time" label="时间" width="180px"></el-table-column>
@@ -135,45 +149,228 @@
 					</template>
 				</el-table>
 				<center style="padding: 20px 0;">
-					<el-pagination
-					background
-					@size-change="handleSizeChange"
-					@current-change="handleCurrentChange"
-					:page-sizes="[10, 20, 50, 100]"
-					layout="total, sizes, prev, pager, next"
-					:page-size="formData.page_size"
-					:current-page="formData.page"
-					:total="total"
-					></el-pagination>
+					<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+						:page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next"
+						:page-size="formData.page_size" :current-page="formData.page" :total="total"></el-pagination>
 				</center>
 			</el-tab-pane>
+
+			<el-tab-pane label="积分细则操作记录" name="operateRecord">
+				<div style="margin-top: 30px;">
+					<el-table :data="records" style="width: 100%" v-loading="recordLoad">
+						<el-table-column label="操作人" prop="employee_id" min-width="120">
+							<template slot-scope="scope">
+								<span>{{ employeeMap[scope.row.employee_id].name }}</span>
+							</template>
+						</el-table-column>
+
+						<el-table-column label="操作" prop="type" min-width="120">
+							<template slot-scope="scope">
+								<el-tag v-if="scope.row.type == 1" type="success">新增</el-tag>
+								<el-tag v-if="scope.row.type == 2" type="info">修改</el-tag>
+								<el-tag v-if="scope.row.type == 3" type="danger">删除</el-tag>
+							</template>
+						</el-table-column>
+						<el-table-column prop="create_time" label="操作时间" min-width="160"></el-table-column>
+						<el-table-column prop="item_remark" label="操作后的细则名" min-width="300"></el-table-column>
+						<el-table-column label="备注" prop="remark" min-width="150"></el-table-column>
+						<el-table-column min-width="120">
+							<template slot-scope="scope">
+								<el-link type="primary" @click="goDetail(scope.row)">查看详情</el-link>
+							</template>
+						</el-table-column>
+
+
+						<template slot="empty">
+							<noData></noData>
+						</template>
+					</el-table>
+
+					<center style="padding: 20px 0;">
+						<el-pagination background @size-change="handleSizeChange2" @current-change="handleCurrentChange2"
+							:page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next"
+							:page-size="formData2.page_size" :current-page="formData2.page"
+							:total="total2"></el-pagination>
+					</center>
+				</div>
+
+			</el-tab-pane>
 		</el-tabs>
 		<div class="pop-up">
-			<el-button type="primary" class="save" v-if="activeName == 'first' || activeName == 'second'" @click="saveFirst(activeName)">保存</el-button>
+			<el-button type="primary" class="save" v-if="activeName == 'first' || activeName == 'second'"
+				@click="saveFirst(activeName)">保存</el-button>
 		</div>
 		<el-dialog title="系统审批流程" :visible.sync="dialogVisible" width="770px" top="3vh" :before-close="handleClose">
 			<svg-icon icon-class="approval_process" style="font-size:730px;" />
 		</el-dialog>
-		
+
 		<el-dialog title="人员选择" :visible.sync="manageScope_show" top="5vh" width="700px">
-			<EmployeeSelector
-				v-if="manageScope_show"
-				ref="Employee2"
-				:max="10"
-				:isChecKedAll="false"
-				:selected="selected_manage"
-				@confirm="manage_confirm"
-			></EmployeeSelector>
+			<EmployeeSelector v-if="manageScope_show" ref="Employee2" :max="10" :isChecKedAll="false"
+				:selected="selected_manage" @confirm="manage_confirm"></EmployeeSelector>
 			<span slot="footer">
 				<el-button @click="manageScope_show=false">取消</el-button>
-				<el-button type="primary" :loading="scope_loading" :disabled="scope_loading" @click="sub_manageScope">完成</el-button>
+				<el-button type="primary" :loading="scope_loading" :disabled="scope_loading"
+					@click="sub_manageScope">完成</el-button>
 			</span>
 		</el-dialog>
-	
+
+		<el-dialog title="操作记录详情" :visible.sync="recordDetail_show" top="5vh" width="700px" center>
+			<div v-if="JSON.stringify(recordDetail) !== '{}'">
+				<div class="info-item flex-box-ce">
+					<div class="label">操作人: </div>
+					<div class="value">{{ employeeMap[recordDetail.employee_id].name }}</div>
+				</div>
+				<div class="info-item flex-box-ce">
+					<div class="label">操作: </div>
+					<div class="value">
+						<el-tag v-if="recordDetail.type == 1" type="success" size="small">新增</el-tag>
+						<el-tag v-if="recordDetail.type == 2" type="info" size="small">修改</el-tag>
+						<el-tag v-if="recordDetail.type == 3" type="danger" size="small">删除</el-tag>
+					</div>
+				</div>
+
+				<div class="info-item flex-box-ce">
+					<div class="label">操作时间: </div>
+					<div class="value">{{ recordDetail.create_time }}</div>
+				</div>
+
+				<div class="info-item flex-box-ce">
+					<div class="label">备注: </div>
+					<div class="value">{{ recordDetail.remark }}</div>
+				</div>
+
+				<template v-if="recordDetail.type == 2">
+					<div class="flex-box-ce">
+						<div class="left-box">
+							<div class="title">变更前</div>
+
+							<div class="info-item flex-box-ce">
+								<div class="label">规则内容: </div>
+								<div class="value">
+									{{ recordDetail.old_item.remark }}
+								</div>
+							</div>
+
+							<div class="info-item flex-box-ce">
+								<div class="label">所属分类: </div>
+								<div class="value">
+									{{ recordDetail.old_item.result }}
+								</div>
+							</div>
+
+
+							<div class="info-item flex-box-ce">
+								<div class="label">积分类型: </div>
+								<div class="value">
+									<span v-if="recordDetail.old_item.range_type == 1">固定分值</span>
+									<span v-if="recordDetail.old_item.range_type == 2">范围分值</span>
+								</div>
+							</div>
+
+
+
+							<div class="info-item flex-box-ce">
+								<div class="label">分值: </div>
+								<div v-if="recordDetail.old_item.range_type == 1">
+									<span :class="recordDetail.old_item.min_point > 0 ? 'red' : 'green'">
+										{{ recordDetail.old_item.min_point }} {{recordDetail.old_item.pt_Obj.name
+										}}</span>
+								</div>
+								<div v-if="recordDetail.old_item.range_type == 2">
+									<span :class="recordDetail.old_item.min_point > 0 ? 'red' : 'green'">
+										{{ recordDetail.old_item.min_point }}
+									</span>
+									至
+									<span :class="recordDetail.old_item.max_point > 0 ? 'red' : 'green'">
+										{{ recordDetail.old_item.max_point }} {{ recordDetail.old_item.pt_Obj.name }}
+									</span>
+								</div>
+							</div>
+
+
+						</div>
+						<i class="el-icon-right"></i>
+
+						<div class="right-box">
+							<div class="title">变更后</div>
+
+
+							<div class="info-item flex-box-ce">
+								<div class="label">规则内容: </div>
+								<div class="value">
+									{{ recordDetail.new_item.remark }}
+								</div>
+							</div>
+
+							<div class="info-item flex-box-ce">
+								<div class="label">所属分类: </div>
+								<div class="value">
+									{{ recordDetail.new_item.result }}
+								</div>
+							</div>
+
+
+
+							<div class="info-item flex-box-ce">
+								<div class="label">积分类型: </div>
+								<div class="value">
+									<span v-if="recordDetail.new_item.range_type == 1">固定分值</span>
+									<span v-if="recordDetail.new_item.range_type == 2">范围分值</span>
+								</div>
+							</div>
+
+
+							<div class="info-item flex-box-ce">
+								<div class="label">分值: </div>
+								<div v-if="recordDetail.new_item.range_type == 1">
+									<span :class="recordDetail.new_item.min_point > 0 ? 'red' : 'green'">
+										{{ recordDetail.new_item.min_point }} {{ recordDetail.new_item.pt_Obj.name
+										}}</span>
+								</div>
+								<div v-if="recordDetail.new_item.range_type == 2">
+									<span :class="recordDetail.new_item.min_point > 0 ? 'red' : 'green'">
+										{{ recordDetail.new_item.min_point }}
+									</span>
+									至
+									<span :class="recordDetail.new_item.max_point > 0 ? 'red' : 'green'">
+										{{ recordDetail.new_item.max_point }} {{ recordDetail.new_item.pt_Obj.name }}
+									</span>
+								</div>
+							</div>
+
+
+
+
+						</div>
+
+					</div>
+				</template>
+
+				<template v-else>
+					<div class="info-item flex-box-ce">
+						<div class="label">所属分类: </div>
+						<div class="value">
+							{{ recordDetail.new_item.result }}
+						</div>
+					</div>
+				</template>
+
+
+
+			</div>
+			<!-- <span slot="footer">
+				<el-button @click="manageScope_show = false">取消</el-button>
+				<el-button type="primary" :loading="scope_loading" :disabled="scope_loading"
+					@click="sub_manageScope">完成</el-button>
+			</span> -->
+		</el-dialog>
+
 	</div>
 </template>
 <script>
 import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import { findCategoryById, formatCategoryResult } from './categoryFinder.js';
+
 export default {
 	components:{EmployeeSelector},
 	data() {
@@ -206,12 +403,17 @@ export default {
 			// 操作历史
 			hisload: false,
 			list: null,
-      		total: null,
+			total: null,
 			formData: {
 				keywords: '',
 				page: 1,
 				page_size: 10
 			},
+			total2: null,
+			formData2: {
+				page: 1,
+				page_size: 10
+			},
 			
 			// 复核相关
 			event_review_status:1,//是否开启复核 1 开启 0或其他 不开启
@@ -265,7 +467,14 @@ export default {
 			manageScope_show:false,
 			scope_loading:false,
 			selected_manage: { employee: [], dept: [] },
-			isCreator:this.$getIsCreator('creator'),
+			isCreator: this.$getIsCreator('creator'),
+
+			records: [],
+			recordLoad: false,
+			employeeMap: this.$getCache("userList"),
+			recordDetail: {},
+			recordDetail_show: false,
+			item_list: []
 		};
 	},
 	watch:{
@@ -278,8 +487,134 @@ export default {
 	mounted() {
 		this.manageList();
 		this.cheakAx('first');
+		this.getData();
+		this.getRuleList();
 	},
 	methods: {
+
+		getData(is) {
+			this.$axios('get', '/api/integral/rule/trees', { cycle_type: 1 }).then(res => {
+				var item_list = res.data.data.item_list || [];
+				var list = [];
+				for (let i in item_list) {
+					for (let k in item_list[i]) {
+						item_list[i][k].pt_Obj = this.$getTyps(item_list[i][k].pt_id);
+						list.push(item_list[i][k]);
+					}
+				}
+				this.rule_tree = this.getRuleTreeData(res.data.data.rule_tree);
+
+				
+			}).finally(() => {
+			});
+		},
+
+		getRuleList() {
+			let data = {
+				page: 1,
+				cycle_type: 1,
+				include_sub: 1,
+				keyword: '',
+				page_size: 1000,
+			}
+			
+			this.item_list = [];
+			this.$axios('get', '/api/integral/rule/items', data).then(res => {
+				let list = res.data.data.list;
+				list.forEach(item => {
+					item.checked = false;
+					item.pt_Obj = this.$getTyps(item.pt_id);
+				})
+				this.item_list = list;
+			}).finally(() => {
+			});
+		},
+
+		// 规则递归 children
+		getRuleTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				data[i].isShowChild = false
+				if (data[i].child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i].child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getRuleTreeData(data[i].child);
+				}
+			}
+			return data;
+		},
+
+
+		findCategoryWithParents(data, targetId) {
+			// 递归查找节点
+			function findNode(nodes, id, path = []) {
+				for (const node of nodes) {
+					// 创建当前路径的副本
+					const currentPath = [...path, {
+						id: node.id,
+						name: node.name,
+						pid: node.pid,
+						sort: node.sort
+					}];
+
+					// 如果找到目标节点
+					if (node.id === id) {
+						return currentPath;
+					}
+
+					// 如果有子节点,递归查找
+					if (node.child && node.child.length > 0) {
+						const result = findNode(node.child, id, currentPath);
+						if (result) return result;
+					}
+				}
+				return null;
+			}
+
+			return findNode(data, targetId);
+		},
+
+
+		findSingleCategory(data, id) {
+			const path = this.findCategoryWithParents(data, id);
+			if (path) {
+				return {
+					target: path[path.length - 1],
+					parents: path.slice(0, -1),
+					fullPath: path,
+					depth: path.length - 1
+				};
+			}
+			return null;
+		},
+
+		
+
+		goDetail(row) {
+			let url = `/api/integral/rule/items/log/info`
+			let params = {
+				id: row.id
+			}
+			this.$axios('get', url, params).then(res => {
+				if (res.data.code == 1) {
+					this.recordDetail = res.data.data;
+					const new_item_result = findCategoryById(this.rule_tree, Number(this.recordDetail.new_item.rule_id));
+					const old_item_result = findCategoryById(this.rule_tree, this.recordDetail.old_item.rule_id);
+					let obj = this.item_list.find(item => item.id == this.recordDetail.old_item.id)
+					this.recordDetail.old_item.pt_Obj = this.$getTyps(this.recordDetail.old_item.pt_id);
+					this.recordDetail.new_item.pt_Obj = this.$getTyps(Number(this.recordDetail.new_item.pt_id));
+					// this.recordDetail.old_item.rule_name = obj.rule_name
+					this.recordDetail.old_item.result = formatCategoryResult(old_item_result)
+					this.recordDetail.new_item.result = formatCategoryResult(new_item_result)
+					this.recordDetail_show = true;
+				}
+				
+			})
+		},
+
+
+		
 		manage_confirm(val){
 			if(val.employee.length>0){
 				this.event_special=val.employee;
@@ -333,10 +668,31 @@ export default {
 		handleClick(tab, event) {
 			if(this.activeName == 'history'){
 				this.hisList()
-			}else{
+			} else if (this.activeName == 'operateRecord') { 
+				this.formData2.page = 1
+				this.getOperationRecords()
+			} else{
 				this.cheakAx(this.activeName);
 			}
+			
 		},
+
+		getOperationRecords() {
+			this.recordLoad = true
+			let url = `/api/integral/rule/items/log`
+			let params = {
+				rule_id: '',
+				item_id: '',
+				page: this.formData2.page,
+				page_size: this.formData2.page_size,
+			}
+			this.$axios('get', url, params).then(res => {
+				this.recordLoad = false
+				this.records = res.data.data.list
+				this.total2 = res.data.data.total
+			})
+		},
+
 		saveFirst(name) {
 			let data = {};
 			if (name == 'first') {
@@ -449,11 +805,60 @@ export default {
 			this.formData.page = 1;
 			this.hisList()
 		},
+
+		// 页码变更
+		handleCurrentChange2(val) {
+			this.formData2.page = val;
+			this.getOperationRecords()
+		},
+		handleSizeChange2(val) {
+			this.formData2.page_size = val;
+			this.getOperationRecords()
+		},
+		
 	}
 };
 </script>
 
 <style scoped lang="scss">
+
+.info-item {
+	margin-bottom: 20px;
+	display: flex;
+	align-items: flex-start;
+	.label {
+		width: 120px;
+		font-weight: 600;
+	}
+
+	.value {
+		flex: 1;
+		color: #606266;
+		display: flex;
+		align-items: center;
+	}
+	
+}
+
+.left-box, .right-box {
+	width: 48%;
+	padding: 10px;
+	box-sizing: border-box;
+	border: 1px solid #f1f1f1;
+	border-radius: 12px;
+	.title {
+		text-align: left;
+		font-weight: 600;
+		line-height: 30px;
+		font-size: 14px;
+	}
+}
+
+.el-icon-right {
+	font-size: 30px;
+	margin: 0 10px;
+	color: #ccc;
+}
 .input-box{
 	-webkit-appearance: none;
 	background-color: #FFF;
@@ -518,6 +923,8 @@ export default {
 	width: 100px;
 	font-size: 15px;
 }
+
+
 .pop-up{
   position: sticky;
   bottom: -10px;

+ 3 - 3
src/views/set/voluntarilyPoint.vue

@@ -121,11 +121,11 @@
 
 			<!-- 可写公共组建: -->
 			<!-- 新增加分组弹出框 -->
-			<el-dialog :close-on-click-modal="false" :title="grouping_type ? '编辑加分组' : '新增加分组'" :visible.sync="dialogVisible">
+			<el-dialog :close-on-click-modal="false" :title="grouping_type ? '编辑加分组' : '新增加分组'" :visible.sync="dialogVisible" width="40%">
 				<el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">
 					<el-form-item label="加分组名称" prop="name" :rules="[{ required: true, message: '请输入加分组名称' }]">
-            <el-input v-model="numberValidateForm.name" placeholder="请输入加分组名称" maxlength="30" show-word-limit />
-          </el-form-item>
+						<el-input type="age" v-model="numberValidateForm.name" placeholder="请输入加分组名称"></el-input>
+					</el-form-item>
 				</el-form>
 				<span slot="footer" class="dialog-footer" style=" overflow: hidden;">
 					<el-button

+ 91 - 0
src/views/subassembly/set/buy.vue

@@ -0,0 +1,91 @@
+<template>
+	<div class="all">
+		<div style="margin-bottom: 30px;">
+				<div class="initia_title">工作日志积分</div>
+				<div class="initia_title_1">
+					1、启用后,在钉钉发布工作日志,系统自动按“日志积分规则”奖分
+					<br />
+					2、日志名称必须与“钉钉日志模板名称”一致,否则奖分不会生效
+					<br />
+					3、日志支持每月、每周、每次汇报,可自行根据需要设置“日志积分规则
+				</div>
+				<div class="flex-box-end" style="margin-top: 20px;">
+					<el-button size="small" plain @click="add()">购买</el-button>
+				</div>
+			</div>
+	</div>
+</template>
+
+<script>
+import openLink from 'dingtalk-jsapi/api/biz/util/openLink';
+export default {
+	data() {
+		return {
+			loading: false,
+		};
+	},
+	watch:{
+	},
+	mounted() {
+		let s={'name':'喜喜',age:'18'}
+		let arr=Object.create(s);
+	},
+	methods: {
+		init() {
+			this.$dd.biz.util.openSlidePanel({
+			    url: 'https://h5.dingtalk.com/open-market/share.html?shareGoodsCode=D34E5A30A9AC7FC6327AB5E6D2D145418457E59F16C3FC969F1A50AEF2E5E320588012470F1AB045&token=d37751d45abad15178adf60f936d7c28&shareUid=C5EB7B5C85793F3D909B2AC4771E12D7', //打开侧边栏的url
+			    title: 'title', //侧边栏顶部标题
+			    onSuccess : function(result) {
+
+			    },
+			    onFail : function() {
+
+			    }
+			})
+		 },
+		 add(){
+			this.$axios('get', 'api/order/goods/sku', { callback: 'https://test-ding.g107.com/#/index', goods_code: 'DT_GOODS_881607043109331' }).then(res => {
+				
+			});
+		 }
+	}
+};
+</script>
+<style scoped lang="scss">
+.all{
+	padding: 20px;
+}
+.widthInput {
+	width: 150px;
+}
+.title {
+	margin: 10px 0;
+	margin-top: 0;
+	font-size: 14px;
+	font-weight: 700;
+	padding-left: 13px;
+}
+.initia_title {
+	font-size: 20px;
+	color: rgba(48, 49, 51, 1);
+	font-family: PingFangSC-Regular;
+}
+.initia_title_1 {
+	color: #e6a23c;
+	font-size: 14px;
+	margin-top: 10px;
+}
+.lookQrcode {
+	color: #606266;
+	cursor: pointer;
+	transition: all 0.3s;
+	font-weight: 700;
+}
+.lookQrcode:hover {
+	color: #2490fd;
+}
+.name {
+	max-width: 200px;
+	margin-right: 10px;
+}
+</style>

+ 249 - 0
src/views/subassembly/set/check.vue

@@ -0,0 +1,249 @@
+<template>
+ <div>
+	 <div v-loading="loading" v-if="ding_enable">
+	   <workpoints :initia_arr="initia_arr" v-if="!loading" :initia_head="initia_head" :obj="obj" @initia="initia" />
+  	   <div class="all" v-else><workpoints :initia_arr="initia_arr" :initia_head="initia_head" :obj="obj" @initia="initia" /></div>
+	 </div>
+	 <div v-else class="all">
+		 <div class="nullD">请到钉钉考勤管理后台-<span class="blue"> 工作台 </span>-<span class="blue"> 考勤打卡 </span>-<span class="blue"> 考勤报表 </span>-<span class="blue">切换新版 </span>-开启新版考勤报表功能</div>
+		 <div class="text">如下图:</div>
+		 <div class="img1">
+			 <img src="@/assets/image/kq1.png">
+		 </div>
+		 <div class="img1">
+		 	<img src="@/assets/image/kq2.png">
+		 </div>
+	 </div>
+ </div>	
+</template>
+
+<script>
+import workpoints from "@/components/publics/workpoints";
+export default {
+  components: {workpoints},	
+  data() {
+    return {
+      loading: false,
+	  ding_enable:true,
+      initia_head: {
+        initial_suername: "考勤积分",
+        initial_suertext: "以下考勤加扣分,均为B分",
+        initial_left: "167px",
+        initial_width: "165px",
+      },
+      initia_arr: [
+		  {
+			initialName: "是否启用考勤设置",
+			initia_mark: false,
+			type:'switch',
+			initia_input: {
+			  age: "0",
+			},
+		  },
+        {
+          initialName: "正常打卡,每次加分",
+          message:'只包含打上班卡',
+          initia_mark: false,
+          initia_input: {
+            age: "0",
+          },
+        },
+        {
+          initialName: "上下班缺卡,每次扣分",
+          initia_mark: false,
+          initia_input: {
+            age: "0",
+          },
+        },
+		{
+		  initialName: "旷工缺席,每次扣分",
+		  initia_mark: false,
+		  initia_input: {
+		    age: "0",
+		  },
+		},
+        {
+          initialName: "上班迟到,每次扣分",
+		  message:'不包含严重迟到、旷工迟到',
+          initia_mark: false,
+          initia_input: {
+            age: "0",
+          },
+        },
+		
+		{
+		  initialName: "严重迟到,每次扣分",
+		  initia_mark: false,
+		  initia_input: {
+		    age: "0",
+		  },
+		},
+		{
+		  initialName: "旷工迟到,每次扣分",
+		  initia_mark: false,
+		  initia_input: {
+		    age: "0",
+		  },
+		},
+
+        {
+          initialName: "下班早退,每次扣分",
+          initia_mark: false,
+          initia_input: {
+            age: "0",
+          },
+        },
+		{
+		  initialName: "加班加分",
+		  initia_mark: false,
+		  message:'当天最终加班得分=【加班加分】*【加班-审批单统计】,必须是提交通过的审批单,加班才有加分 ',
+		  initia_input: {
+		    age: "0",
+		  },
+		},
+		{
+		  initialName: "月度全勤加分",
+		  initia_mark: false,
+		  initia_input: {
+		    age: "0",
+		  },
+		},
+		{//全勤配置
+		  type:'object',
+		  absent_holiday:{
+			enable:0,
+			list:[],
+			val1:'',
+			val2:'',
+			val3:'',
+		  },
+		  absent_late:{
+			enable:0,
+			count:1,
+			serious_late_count:1,
+			absent_late_count:1,
+		  },
+		},
+      ],
+	  obj: {
+		  // ding_enable:'',
+		  enable:'',
+		  normal: "", //>=0
+		  no_sign: "", //<=0
+		  absent: "", //<=0
+		  on_duty_late: "", //<=0
+		  off_duty_early: "", //<=0
+		  // ot_per_hour: "", //>=0
+		  ot_per_day:'',
+		  // leave_per_hour: "", //<=0
+		  month_full_ad: "", //>=0
+	  },
+    };
+  },
+  mounted() {
+    this.getData();
+  },
+  methods: {
+    initia(obj) {
+	  console.log(obj);
+	  // return false
+		
+	  let ok=obj.arr;
+      var objs = {};
+	  objs.enable = ok[0].sj; //是否启用考勤设置
+
+      objs.normal = ok[1].sj; //正常打卡加分
+	  objs.no_sign = ok[2].sj; //缺卡扣分
+	  objs.absent = ok[3].sj; //旷工扣分
+	  objs.on_duty_late = ok[4].sj; //迟到扣分
+	  
+	  objs.serious_late = ok[5].sj; //严重迟到,每次扣分
+	  objs.absenteeism_late = ok[6].sj; //矿工迟到,每次扣分
+	  
+	  objs.off_duty_early = ok[7].sj;//早退扣分
+	  objs.ot_per_day =ok[8].sj; //每加班满一天加分 
+	  objs.month_full_ad = ok[9].sj //月度全勤加分
+	  
+	  
+	  //全勤加分需同时满足以下条件
+	  let {absent_late,absent_holiday}=obj.checkAllData;
+	  objs.absent_late=absent_late;
+	  
+	  objs.absent_holiday=absent_holiday;
+	  if(absent_late.enable==1
+		&&(absent_late.count==0||!absent_late.count)
+		&&(absent_late.serious_late_count==0||!absent_late.serious_late_count)
+		&&(absent_late.absent_late_count==0||!absent_late.absent_late_count)){
+		  this.$message.error("月度全勤加分的三种“迟到少于次数”至少要有一个值不能为0或空")
+		  return
+	  }
+      this.$axios('post',"/api/ad/update",objs).then((res) => {
+          if (res.data.code == 1) {
+            this.$message({
+              message: res.data.msg,
+              type: "success",
+            });
+          }
+        }).finally(err=>{
+			this.loading = false;
+		});
+    },
+    getData() {
+      this.loading = true;
+      this.$axios('get',"/api/ad/info").then((res) => {
+        var arr = [],config=res.data.data;
+		this.ding_enable=config.ding_enable==0? false:true;
+		if(!this.ding_enable){
+			return false;
+		}
+		this.initia_arr[0].initia_input.age =config.enable
+		this.initia_arr[1].initia_input.age =config.normal? config.normal:0   //正常打卡加分
+		this.initia_arr[2].initia_input.age =config.no_sign? config.no_sign:0 //缺卡扣分
+		this.initia_arr[3].initia_input.age =config.absent? config.absent:0 //旷工扣分
+		this.initia_arr[4].initia_input.age =config.on_duty_late? config.on_duty_late:0 //迟到扣分
+		
+		
+		this.initia_arr[5].initia_input.age =config.serious_late? config.serious_late:0 //严重迟到,每次扣分
+		this.initia_arr[6].initia_input.age =config.absenteeism_late? config.absenteeism_late:0 //矿工迟到,每次扣分
+		
+		
+		this.initia_arr[7].initia_input.age =config.off_duty_early? config.off_duty_early:0 //早退扣分
+		this.initia_arr[8].initia_input.age =config.ot_per_day? config.ot_per_day:0 //每加班满一天加分 
+		this.initia_arr[9].initia_input.age =config.month_full_ad? config.month_full_ad:0  //月度全勤加分
+		
+		// 全勤配置
+		this.initia_arr[10].absent_holiday =config.absent_holiday
+		this.initia_arr[10].absent_late = config.absent_late 
+		
+		
+		// this.initia_arr[5].initia_input.age =config.off_duty_early? config.off_duty_early:0 //早退扣分
+		// this.initia_arr[6].initia_input.age =config.ot_per_day? config.ot_per_day:0 //每加班满一天加分 
+		// this.initia_arr[7].initia_input.age =config.month_full_ad? config.month_full_ad:0  //月度全勤加分
+		
+		// // 全勤配置
+		// this.initia_arr[8].absent_holiday =config.absent_holiday
+		// this.initia_arr[8].absent_late = config.absent_late 
+      }).finally(err=>{
+			this.loading = false;
+	  });
+    },
+  },
+};
+</script>
+
+<style scoped lang="scss">
+	.nullD{
+		text-align: center;
+		padding: 20px;
+		font-size: 18px;
+	}
+	.text{
+		padding: 30px;
+		font-size: 18px;
+		font-weight: 600;
+	}
+	.img1{
+		text-align: center;
+		margin-bottom: 20px;
+	}
+</style>

+ 1503 - 0
src/views/subassembly/set/framework.vue

@@ -0,0 +1,1503 @@
+<template>
+	<div class="all-box">
+		<!-- 头部提示 -->
+		<div class="diy-tip" style="margin-bottom: 10px;">
+			<div>
+				当前组织架构成员通过钉钉通讯录同步,员工开启积分管理后才能正式启用并进入“功道云积分制”,如果您的钉钉通讯录有变动,点击
+				<span class="blue" style="margin-left: 10px;cursor: pointer;" @click="tb()" v-loading="tbLoading">
+					<i class="el-icon-refresh"></i>
+					立即同步
+				</span>
+			</div>
+		</div>
+		<div class="all">
+			<div class="flex-box">
+				<div class="terr-left">
+					<div class="rule_class_box" v-loading="ruleDeprt">
+						<div class="company_name">
+							<img src="@/assets/image/two.png" />
+							<span>组织架构</span>
+						</div>
+						<el-tree
+							:data="bmList"
+							class="cate-tree"
+							:highlight-current="true"
+							:props="{ children: '_child', label: 'name' }"
+							@node-click="handleNodeClick"
+							:accordion="true"
+							empty-text="您暂无部门数据,请同步钉钉通讯录"
+						>
+							<div
+								content="tree"
+								v-show="treedata.length != 0"
+								class="flex-box flex-v-ce"
+								slot-scope="{ node, data }"
+								style="font-size: 14px;color: #606266; width:100%; text-align: left;"
+							>
+								<img src="@/assets/image/one.png" style="width: 20px;margin-right: 5px;" />
+								<span class="name">{{ data.name }}</span>
+							</div>
+						</el-tree>
+					</div>
+				</div>
+				<div class="terr-right border-right flex-1">
+					<FormBox>
+						<div class="form-item">
+							<div class="form-label">启用状态</div>
+							<div class="form-search">
+								<el-select v-model="status"  size="medium">
+								  <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
+								</el-select>
+							</div>
+						</div>
+						<!-- <div class="form-item">
+							<div class="form-label">姓名搜索</div>
+							<div class="form-search">
+								<el-input placeholder="请输入" size="medium" v-model="keywords" clearable></el-input>
+							</div>
+						</div> -->
+					</FormBox>
+					<div style="margin: 10px 0;" class="flex-box-ce">
+						<el-button @click="participation()" :loading="enable_loading" size="medium" type="primary">批量启用</el-button>
+						<el-button @click="forbidden()" :loading="enable_loading" size="medium" type="danger">批量禁用</el-button>
+						<el-button  size="medium" type="success" @click="import_rules_show = true" plain>导入人员</el-button>
+						<el-button  size="medium" type="primary" @click="derivedRule" plain>导出人员</el-button>
+						<div class="flex-1"></div>
+						<el-button @click="showDrawerTow=true" plain size="medium" type="primary">未授权人员</el-button>
+					</div>
+					<el-table :data="userList" @selection-change="handleSelectionChange" v-loading="tableToading">
+						<el-table-column type="selection" width="50" :selectable="selectable"></el-table-column>
+						<el-table-column label="姓名">
+							<template slot-scope="scope">
+								<div class="flex-box flex-v-ce">
+									<userImage :user_name="scope.row.name" :img_url="scope.row.img_url" width="44px" height="44px"></userImage>
+									<div style="margin-left: 10px;">{{ scope.row.name }}</div>
+									<div style="margin-left: 10px;" v-if="scope.row.is_creator" class="green">(系统管理员)</div>
+									<div style="margin-left: 10px;" v-if="scope.row.id == userInfo.id" class="green">(我)</div>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column label="部门">
+							<template slot-scope="scope">
+								<div class="flex-box flex-v-ce bms">
+									<div v-for="(item, index) in scope.row.employee_detail.dept_list" :key="index">{{ item.dept_name }}<span v-if="scope.row.employee_detail.dept_list.length-index>1">,</span></div>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column prop="accedence_time" label="入职时间">
+							<template slot-scope="scope">
+								<span style="cursor: pointer;" @click="moreMessage(scope.row.id)">{{scope.row.accedence_time}}</span>
+							</template>
+						</el-table-column>
+						<!-- <el-table-column prop="id" label="员工标识" width="80">
+							<template slot-scope="scope">
+								<el-button size="mini" type="primary" @click="copyId(scope.row.id)">复制</el-button>
+							</template>
+						</el-table-column> -->
+						<!-- <el-table-column label="是否参与排名" align="center">
+							<template slot-scope="scope">
+								<template v-if="scope.row.is_creator != 1">
+									<span
+										class="participateRank"
+										:style="scope.row.is_ranking == 1 ? 'color:#409eff' : 'color:#F56C6C'"
+										@click="rankingtakePartIn(scope.row.id, scope.row.is_ranking)"
+									>
+										{{ scope.row.is_ranking == 1 ? '参与' : '不参与' }}
+									</span>
+								</template>
+								<span v-else class="fontColorB">不参与</span>
+							</template>
+						</el-table-column> -->
+						<el-table-column label="启用积分管理">
+							<template slot="header" slot-scope="scope">
+								<el-popover placement="top-start" width="300" trigger="manual" v-model="visible">
+									<div class="el-popover2">
+										<div class="title">
+											提示
+											<i class="el-icon-info" style="margin-left: 5px;"></i>
+										</div>
+										<div style="margin-bottom: 10px;">在这里启用积分管理,即可进入系统</div>
+										<div class="flex-box">
+											<div class="flex-1"></div>
+											<el-button size="small" @click="visible_close()">我知道了</el-button>
+										</div>
+									</div>
+									<div slot="reference" class="popover" @click="visible = !visible">
+										启用积分管理
+										<i class="el-icon-info" style="margin-left: 5px;"></i>
+									</div>
+								</el-popover>
+							</template>
+							<template slot-scope="scope">
+								<div :class="[scope.row.is_official == 1 ? 'switch-box' : '']" @click="changeIs(scope.row.is_official, scope.row.id)">
+									<div class="switch"></div>
+								</div>
+							</template>
+						</el-table-column>
+						
+						<!-- <el-table-column label="管理上级" align="center" width="80">
+							<template slot-scope="scope">
+								<span v-if="scope.row.is_creator != 1 && scope.row.is_official != 0" class="participateRank" style="color:#409eff;" @click="setSuperior(scope.row)">设置</span>
+							</template>
+						</el-table-column> -->
+						
+						<el-table-column prop="id" label="操作" >
+							<template slot-scope="scope">
+<!-- 								<el-link style="padding-right: 10px;" type="info" @click="moreMessage(scope.row.id)" :underline="false">转交事项</el-link> -->
+								<el-link type="primary" @click="moreMessage(scope.row.id)" :underline="false">更多信息</el-link>
+							</template>
+						</el-table-column>
+						<template slot="empty">
+							<noData></noData>
+						</template>
+					</el-table>
+					<div class="pagination">
+						<el-pagination
+							@size-change="handleSizeChange"
+							@current-change="handleCurrentChange"
+							:current-page="page"
+							:page-sizes="[10, 20, 50, 100]"
+							:page-size="perPage"
+							layout="total,sizes, prev, pager, next"
+							:total="total"
+						></el-pagination>
+					</div>
+				</div>
+			</div>
+			<!-- 隐藏文本,用于复制ID -->
+			<input  v-model="copyIds" id="biao" style="opacity:0"/>
+		</div>
+		
+		<el-dialog  :close-on-click-modal="false" ref="EditInformation_list" title="员工详情" width="500px" :before-close="detailFormreturn" :visible.sync="diaTableVisible">
+			<div style="padding-right:20px;">
+				<div class="flex-box-end" style="margin-bottom: 20px;"><el-button size="mini" type="primary" @click="openZj()">任务,审批事项转交</el-button></div>
+				<el-form ref="detailForm" :model="messageMore"  @submit.native.prevent v-loading="show_loading">
+					<el-form-item label="员工标识" prop="id" :label-width="'100px'">
+						<el-input v-model="copyIds" disabled auto-complete="off"></el-input>
+						<span style="position:absolute;top:1px;right:7px;font-size:12px;color:#61aeff;cursor:pointer;" @click="copyToClipboard()">点击复制</span>
+					</el-form-item>
+					<el-form-item label="姓名" prop="name" :label-width="'100px'">
+						<el-input v-model="messageMore.name" disabled ref="inputName" auto-complete="off"></el-input>
+					</el-form-item>
+					<el-form-item label="入职时间" prop="accedence_time" :label-width="'100px'">
+						<el-date-picker
+						style="width:100%;"
+						v-model="messageMore.accedence_time"
+						type="date"
+						@change="updateDate"
+						:clearable="false"
+						value-format="yyyy-MM-dd"
+						placeholder="选择日期"
+						></el-date-picker>
+					</el-form-item>
+					<el-form-item label="部门" prop="name" :label-width="'100px'">
+						<el-input v-model="deptList" disabled ref="inputName" placeholder="暂无部门"  auto-complete="off"></el-input>
+					</el-form-item>
+					<el-form-item label="是否参与排名" prop="name" :label-width="'100px'">
+						<span v-if="messageMore.is_creator != 1" class="participateRank"
+							:style="messageMore.is_ranking == 1 ? 'color:#409eff' : 'color:#F56C6C'"
+							@click="rankingtakePartIn(messageMore.id, messageMore.is_ranking)">
+								{{ messageMore.is_ranking == 1 ? '参与' : '不参与' }}
+						</span>
+						<span v-else class="fontColorB">不参与</span>
+					</el-form-item>
+					<el-form-item label="管理上级" prop="name" :label-width="'100px'">
+						<el-input auto-complete="off" v-model="propList" :disabled="messageMore.is_creator == 1 || messageMore.is_official == 0"  placeholder="暂无管理上级"></el-input>
+						<div
+						@click="setSuperior(messageMore)"
+						v-if="messageMore.is_creator != 1 && messageMore.is_official != 0"
+						style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"
+						></div>
+					</el-form-item>
+					<el-form-item label="直属上级" prop="name" :label-width="'100px'">
+						<el-input auto-complete="off" v-model="dirSupervisor.name" :disabled="messageMore.is_creator == 1 || messageMore.is_official == 0"  placeholder="暂无直属上级"></el-input>
+						<div
+						@click="dirSuperior(messageMore)"
+						v-if="messageMore.is_creator != 1 && messageMore.is_official != 0"
+						style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"
+						></div>
+					</el-form-item>
+				</el-form>
+			</div>
+		</el-dialog>
+		
+		<!-- 事项转交 -->
+		<el-dialog class="dialog" :visible.sync="isShowZj" top="10vh" width="700px" :before-close="handleClose">
+			<div>
+			  <div style="margin-top: 10px;" v-if="selectUserName">事项转交({{selectUserName}})</div>
+			  <el-tabs v-model="activeName">
+				<el-tab-pane label="待完成任务" name="first"></el-tab-pane>
+				<el-tab-pane label="待审批事项" name="second"></el-tab-pane>
+			  </el-tabs>
+			  <div class="flex-box-ce">
+					<el-select size="small" style="width: 150px" v-model="taskType" placeholder="请选择截止日期" v-if="activeName=='first'">
+						<el-option :key="1" label="Ta负责的" :value="1"></el-option>
+						<el-option :key="2" label="Ta审批的" :value="2"></el-option>
+					</el-select>
+					<el-input size="small"  prefix-icon="el-icon-search" style="width: 200px;margin-left: 10px;" clearable placeholder="内容搜索" v-model="keyName"></el-input>
+					<span class="fontColorC" style="font-size: 12px;padding-left: 10px;">请选择对应事项进行转交,暂不支持批量转交</span>
+			  </div>
+			  <div>
+				  <template v-if="activeName=='first'">
+					  <el-table :data="taskList" style="width: 100%;height: 536px;">
+					  	<el-table-column label="任务内容" prop="task_name">
+					  		<template slot-scope="scope"><span class="font-flex-word" style="max-width: 400px;">{{ scope.row.task_name }}</span></template>
+					  	</el-table-column>
+
+					  	<el-table-column label="操作" width="120px">
+					  		<template slot-scope="scope">
+								<el-link type="primary" style="padding-right: 10px;" :underline="false" @click.stop="openDetail(scope.row)" class="blue">查看任务</el-link>
+								<el-link type="primary" :underline="false" @click.stop="completeBtn(scope.row,1)">转交</el-link>
+					  		</template>
+					  	</el-table-column>
+					  	<template slot="empty"><noData></noData></template>
+					  </el-table>
+				  </template>
+				  <template v-if="activeName=='second'">
+					  <el-table :data="spList" style="width: 100%;height: 536px;">
+						<el-table-column label="审批内容" prop="remark.rule">
+							<template slot-scope="scope">
+								<span class="font-flex-word" style="max-width: 400px;">{{ scope.row.remark.customize || scope.row.remark.rule }}</span>
+							</template>
+						</el-table-column>
+						<el-table-column label="操作" width="120px">
+							<template slot-scope="scope">
+								<el-link style="padding-right: 10px;" type="primary" :underline="false" @click.stop="openDetailXq(scope.row)">查看审批</el-link>
+								<el-link type="primary" :underline="false" @click.stop="completeBtn(scope.row,2)">转交</el-link>
+							</template>
+						</el-table-column>
+						<template slot="empty"><noData></noData></template>
+					  </el-table>
+				  </template>
+				  <center class="pagination">
+				  	<el-pagination	:current-page.sync="page3" 	layout="total,prev,pager,next" 	:total="total3" @size-change="handleSizeChange3" @current-change="handleCurrentChange3" :page-size="perPage3"></el-pagination>
+				  </center>
+			  </div>
+			</div>
+		</el-dialog>
+		
+		<!-- 详情弹窗 -->
+		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="taskId" :title="'任务详情'"></taskDetailsPopup>
+		<!-- 审批详情 -->
+		<examinePopup :title="'审核详情'" :id="examineId" :show.sync="detailShow"></examinePopup>
+
+		<el-dialog title="设置是否参与排名" :visible.sync="dialogVisible" top="30vh" width="520px" :before-close="handleClose">
+			<div style="margin-left:20px;">
+				<el-radio v-for="(item, index) in radioLi" :key="index" v-model="radio" :label="item.id">
+					<span style="font-size:17px;">{{ item.name }}</span>
+					<p style="font-size:14px;margin:8px 0 0 24px;">{{ item.kam }}</p>
+				</el-radio>
+			</div>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="dialogVisible = false">取 消</el-button>
+				<el-button type="primary" @click="setRanking" :disabled="rangLoad">确 定</el-button>
+			</span>
+		</el-dialog>
+		<!-- 导入规则 -->
+		<el-dialog title="导入人员" :visible.sync="import_rules_show" width="500px" @before-close="close_import">
+					<div class="text-center flex-box-v flex-center-center">
+						<p><img src="@/assets/image/rules_mould1.png" alt="" /></p>
+						<p>仅支持xls、xlsx格式文件</p>
+						<el-upload
+							class="upload-demo"
+							:headers="ATOKEN"
+							ref="upload"
+							:limit="1"
+							:action="action"
+							:on-remove="handleRemove"
+							:on-success="handleSuccess"
+							:before-upload="beforeFilesUpload"
+							:file-list="fileList"
+						>
+							<el-button slot="trigger" type="primary">选取文件</el-button>
+						</el-upload>
+					</div>
+		</el-dialog>
+		
+		<el-dialog title="设置管理上级" :visible.sync="manageScope_show" :before-close="publicClose2" top="5vh" width="700px">
+			<EmployeeSelector
+				v-if="manageScope_show"
+				ref="Employee2"
+				:employee_list="employeeList"
+				:user_no_select="false"
+				:close_clear_data="false"
+				isCreatorSelect
+				createDimness
+				:selected="selected_manage"
+				@confirm="manage_confirm"
+			></EmployeeSelector>
+			<span slot="footer">
+				<el-button @click="publicClose2()">取消</el-button>
+				<el-button type="primary" :loading="scope_loading" :disabled="scope_loading" @click="sub_manageScope">完成</el-button>
+			</span>
+		</el-dialog>
+		
+		<el-dialog title="设置直属上级" :visible.sync="dirSupScope_show" :before-close="publicClose3" top="5vh" width="700px">
+			<EmployeeSelector
+				v-if="dirSupScope_show"
+				:max="1"
+				ref="Employee3"
+				:multi="false"
+				:close_clear_data="false"
+				:employee_list="dirSupList"
+				isCreatorSelect
+				:selected="selected_dirSup"
+				@confirm="dirSup_confirm"
+			></EmployeeSelector>
+			<span slot="footer">
+				<el-button @click="publicClose3()">取消</el-button>
+				<el-button type="primary" :loading="scope_loading" :disabled="scope_loading" @click="dir_SupScope">完成</el-button>
+			</span>
+		</el-dialog>
+		<!-- 未授权人员 -->
+		<el-drawer :visible.sync="showDrawerTow" :append-to-body="true" :with-header="false">
+		  <div class="drawer-header flex-box-ce">
+		  	<span class="flex-1">未授权人员</span>
+		  	<i  @click="showDrawerTow=false" style="cursor: pointer;" class="el-icon-close"></i>
+		  </div>
+		  <div class="drawer-main">
+				<div class="flex-box-ce"><el-input prefix-icon="el-icon-search"  maxlength="10" show-word-limit  placeholder="人员搜索" clearable v-model="userName"></el-input></div>
+				<ul class="ul"  v-loading="tableToading2">
+				  <li v-for="(item, index) in noUserList" :key="index" class="flex-box-ce li" style="padding: 10px 0;">
+					<div class="flex-1 flex-box-ce">
+						<userImage :user_name="item.name"  :img_url="item.img_url"></userImage>
+						<div class="flex-box-v" style="margin: 0 10px;">
+						  <div>{{ item.name }}</div>
+						  <div v-if="item.employee_detail.dept_list.length > 0" style="margin-top: 5px;" class="fontColorC font-flex-word">
+						    <span v-for="(item2, index2) in item.employee_detail.dept_list" :key="index2">
+						      <span>{{ item2.dept_name }}</span>
+						      <span v-if="item.employee_detail.dept_list.length - index2 > 1">,</span>
+						    </span>
+						  </div>
+						</div>		  
+					</div>
+					<span style="cursor: pointer;" class="blue" @click="openZj(item)">事项转交</span>
+				  </li>
+				</ul>
+				<noData v-if="noUserList.length==0"></noData>
+				<center class="pagination">
+					<el-pagination
+					:current-page.sync="page2" 
+					layout="total,prev,pager,next" 
+					:total="total2" 
+					@size-change="handleSizeChange2"
+					@current-change="handleCurrentChange2" 
+					:page-size="perPage2">
+					</el-pagination>
+				</center>
+		  </div>
+		</el-drawer>
+	
+		<el-dialog title="转交" :visible.sync="comtheResults" width="500px" :close-on-click-modal="false">
+		  <div class="">
+		    <div style="margin-bottom: 20px;">{{selectIndex==1? '当前负责人':'当前审批人'}}:<span style="padding-left: 10px;">{{ selectUserName }}</span></div>
+			<div class="flex-box-ce">
+				<span style="line-height:36px;width: 84px;text-align: right;">转给:</span>
+				<el-select size="small" v-model="employee_id" filterable clearable placeholder="请输入或选择人员">
+					<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+				</el-select>
+			</div>
+		  </div>
+		  <span slot="footer" class="dialog-footer">
+		    <el-button @click="comtheResults = false">取 消</el-button>
+		    <el-button type="primary" @click="savecomtheResults()">确 定</el-button>
+		  </span>
+		</el-dialog>
+		<!-- 人员同步 -->
+		<el-dialog title="钉钉通讯录同步" :visible.sync="isShowTb" top="30vh" width="600px" :before-close="handleClose">
+			<div style="margin-left:20px;">
+				<el-radio :style="{marginBottom:index==0?'70px':'30px'}" v-for="(item, index) in tbList" :key="index" v-model="selectTbIndex" :label="item.id">
+					<span style="font-size:17px;font-weight: 600;" class="black">{{ item.name }}</span>
+					<div style="font-size:13px;padding-left: 24px;padding-top: 5px;" class="fontColorC">{{ item.kam }}</div>
+				</el-radio>
+				<el-cascader
+					size="medium"
+					style="width: 300px;position: relative;left: 20px;top: -196px;"
+					v-model="dept_name"
+					@change="handleChange"
+					:options="dept_tree"
+					:disabled="selectTbIndex!=4"
+					collapse-tags
+					:props="{checkStrictly: true, value: 'id', label: 'name', multiple: true, children: '_child' }"
+					ref="dept"
+					clearable
+					placeholder="请选择部门"
+				></el-cascader>
+			</div>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="isShowTb = false">取 消</el-button>
+				<el-button type="primary" @click="tb(true)" :disabled="rangLoad">确 定</el-button>
+			</span>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+import {_debounce} from '@/api/auth';
+import examinePopup from '@/components/examinePopup';
+import taskDetailsPopup from '@/views/common/taskDetailsPopup'
+export default {
+	data() {
+		return {
+			manageData: [],//管理员列表
+			employeeList: [],
+			manageScope_show: false,
+			scope_loading: false,
+			clickone: false,
+			mangeId: 0,
+			selected_manage: { employee: [], dept: [] },
+			
+			is: 1,
+			no: 0,
+			page: 1,
+			perPage: 10,
+			total: 0,
+			info: {}, //公司信息
+			tips_show: true,
+			bmList: [],
+			userList: [],
+			class_type: '',
+			treedata: [1],
+			tableData: [],
+			keywords: '',
+			dept_id: 0,
+
+			tableToading: false,
+			tbLoading: false,
+			selectIds: [],
+			enable_loading: false,
+			visible: false,
+
+			ruleDeprt: false,
+			dialogVisible: false,
+			rankingtakePartInId: '',
+			radio: '1',
+
+			rangLoad: false,
+			radioLi: [{ id: '1', name: '参与排名', kam: '在排名中展示此人' }, { id: '0', name: '不参与排名', kam: '排名不展示此人(自定义排名除外)' }],
+			userInfo: this.$getUserData(),
+			copyIds:'',
+			options: [{
+			  value: '-1',
+			  label: '全部'
+			}, {
+			  value: '1',
+			  label: '已开启'
+			}, {
+			  value: '0',
+			  label: '已禁用'
+			}],
+			status: '-1',
+			//导入规则
+			import_rules_show: false,
+			save_loading: false,
+			import_btn_show: false,
+			fileList: [],
+			file: null,
+			action: process.env.VUE_APP_BASE_API + 'api/employee/enable_import',
+			ATOKEN: { 'A-TOKEN': this.$getToken()},
+			diaTableVisible: false,
+			messageMore: {},
+			deptList: '',
+			propList: '',
+			dirSupervisor: {},
+			dirSupScope_show: false,
+			show_loading: false,
+			newId: 0,
+			dirSupList: [],
+			selected_dirSup: { employee: [], dept: [] },
+			employeeAll:[],//人员列表
+			
+			// 未授权
+			showDrawerTow:false,
+			tableToading2:false,
+			page2: 1,
+			perPage2: 10,
+			total2: 0,
+			noUserList: [],
+			userName:'',
+			
+			isShowZj:false,
+			activeName:'first',
+			taskList:[],
+			spList:[],
+			showDetailPopup:false,
+			detailShow:false,
+			examineId:0,
+			taskId:0,
+			selectUserId:0,
+			
+			page3: 1,
+			perPage3: 10,
+			total3: 0,
+			keyName:'',
+			comtheResults:false,
+			selectIndex:1,
+			selectUserName:'',
+			employee_id:'',
+			selectId:0,
+			employee_map:[],
+			taskType:1,
+			
+			// 人员同步
+			isShowTb:false,
+			selectTbIndex:4,
+			tbList: [
+				{ id: 4, name: '仅同步指定部门内的人员信息(可多选)', kam: '该选择不会包含子部门人员,请确保选中需要同步的人员的直属部门' },
+				{ id: 3, name: '仅同步部门信息和上下级关系', kam: '仅同步所有部门名称和上下级所属关系,但不同步人员信息' },
+				{ id: 1, name: '同步全部部门和人员信息 ', kam: '同步全部信息所需时间较长,请关注同步成功后推送的工作通知' },
+			],
+			dept_tree:[],
+			dept_name: [],
+			dept_ids:[],
+		};
+	},
+	components: {
+		EmployeeSelector,examinePopup,taskDetailsPopup
+	},
+	watch: {
+		keywords: {
+		  deep: true,
+		  handler: _debounce(function(val) {
+			this.page = 1;
+			this.getEmployee();
+		  })
+		},
+		dept_id(val) {
+			 this.page = 1;
+			this.getEmployee();
+		},
+		status(){
+			 this.page = 1;
+			 this.getEmployee();
+		},
+		userName: {
+		  deep: true,
+		  handler: _debounce(function(val) {
+			this.page2 = 1;
+			this.getNoUser();
+		  })
+		},
+		keyName: {
+		  deep: true,
+		  handler: _debounce(function(val) {
+			this.page3 = 1;
+			if(this.activeName=='first'){
+				if(this.taskType==1){
+					this.getTaskList();
+				}else{
+					this.getTaskList2();
+				}
+			}else{
+				this.getSpList();
+			}
+		  })
+		},
+		showDrawerTow(val){
+			if(val){
+				this.getNoUser();
+			}
+		},
+		activeName(val){
+			this.page3= 1;
+			this.perPage3= 10;
+			this.total3= 0;
+			this.keyName='';
+			this.$nextTick(()=>{
+				if(val=='first'){
+					if(this.taskType==1){
+						this.getTaskList();
+					}else{
+						this.getTaskList2();
+					}
+				}else{
+					this.getSpList();
+				}
+			})
+		},
+		taskType(val){
+			this.page3= 1;
+			this.perPage3= 10;
+			this.total3= 0;
+			if(val==1){
+				this.getTaskList();
+			}else{
+				this.getTaskList2();
+			}
+		},
+		isShowTb(val){
+			if(val){
+				this.dept_name=[];
+				this.dept_ids=[];
+				this.selectTbIndex==4;
+			}
+		},
+		diaTableVisible(val){
+			if(!val){
+				this.getEmployee();
+			}
+		},
+	},
+	created() {
+		this.filtration();
+		this.getInfo();
+		this.getEmployee();
+		this.manageList();
+		this.getEmployeeList();
+	},
+	mounted() {
+		this.$nextTick(function() {
+			if (this.$getCache('rule')) {
+				this.tips_show = false;
+			} else {
+				this.tips_show = true;
+			}
+		});
+	},
+	methods: {
+		//获取员工列表
+		updateDate() {
+			this.$axios('POST', '/api/employee/accedence', { employee_id: this.messageMore.id, time:this.messageMore.accedence_time}).then(res => {
+				this.$message.success('已修改')
+			})
+		},
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i]._child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i]._child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i]._child);
+				}
+			}
+			return data;
+		},
+		handleChange(val) {
+			if (val.length !== 0) {
+				let dept_ids=[];
+				val.forEach((item)=>{
+					dept_ids.push(item[item.length-1]);
+				})
+				let set =new Set(dept_ids);
+				this.dept_ids=[...set]
+			} else {
+				this.dept_ids=[];
+			}
+		},
+		//获取员工列表
+		getEmployeeList() {
+			this.$axios('get', '/api/employee/index', { dept_id: 0, keywords: '', page: 1, page_size: 3000, is_official: 1 })
+				.then(res => {
+					let list = res.data.data.list;
+					this.employee_map = list;
+				})
+				.finally(err => {});
+		},
+		savecomtheResults(){
+			if(!this.employee_id){
+				
+				this.$message.error('请选择转交人员')
+				return false
+			}
+			let url='';
+			if(this.selectIndex==1){
+				url=this.taskType==1? "api/integral/work/transfer":'api/integral/work/transfer/reviewer'
+			}else{
+				url='api/integral/review/transfer'
+			}
+			let data={
+				work_id:this.selectId,
+				review_id:this.selectId,
+				employee_id:this.employee_id,
+			}
+			this.$axios('post', url, data).then(res => {
+				this.$message.success('已转交')
+				this.comtheResults=false;
+			})
+		},
+		completeBtn(item,index){
+			this.selectIndex=index;
+			this.selectId=item.id;
+			this.employee_id='';
+			this.comtheResults=true;
+		},
+		openDetail(row) {
+			this.taskId = parseInt(row.id);
+			this.showDetailPopup = true;
+		},
+		openDetailXq(row) {
+			this.examineId = row.id;
+			this.detailShow = true;
+		},
+		
+		getTaskList(){
+			let data={
+				status: 'running',
+				page: this.page3,
+				page_size:this.perPage3,
+				content:this.keyName,
+				sort:'publish',
+				employee_id:this.selectUserId,
+			}
+			this.$axios('get', '/api/integral/work/list', data).then(res => {
+				this.total3 = res.data.data.total;
+				this.taskList = res.data.data.list;
+			})
+		},
+		getTaskList2(){
+			let data={
+				page: this.page3,
+				page_size:this.perPage3,
+				reviewer_id:this.selectUserId,
+				keyword:this.keyName,
+			}
+			this.$axios('get', '/api/integral/work/list/reviewer/r', data).then(res => {
+				this.total3 = res.data.data.total;
+				this.taskList = res.data.data.list;
+			})
+		},
+		getSpList(){
+			let data={
+				type: 'waiting',
+				page: this.page3,
+				pt_id:0,
+				page_size:this.perPage3,
+				keyword:this.keyName,
+				reviewer_id:this.selectUserId,
+			}
+			this.$axios('get', '/api/integral/review/list', data).then(res => {
+				this.$nextTick(()=>{
+					this.total3 = res.data.data.total;
+					this.spList = res.data.data.list;
+				})
+			})
+		},
+		openZj(item){
+			this.page3= 1;
+			this.perPage3= 10;
+			this.total3= 0;
+			this.keyName='';
+			this.taskType=1;
+			this.selectUserId=item? item.id:this.newId;
+			this.activeName='first';
+			this.selectUserName=item? item.name:this.messageMore.name,
+			this.getTaskList();
+			this.isShowZj=true;
+		},
+		getNoUser(){
+			this.tableToading2 = true;
+			let data={
+				keywords: this.userName,
+				page: this.page2,
+				page_size:this.perPage2,
+				is_scope:0,
+			}
+			this.$axios('get', '/api/employee/index', data).then(res => {
+				this.total2 = res.data.data.pageInfo.count;
+				this.noUserList = res.data.data.list;
+			}).finally(err => {
+				this.tableToading2 = false;
+			});
+		},
+		
+		manage_confirm(date) {
+			let manageId = [];
+			date.employee.forEach(item => manageId.push(item.id))
+			let data = {
+				employee_id: this.mangeId,
+				manage_id: manageId
+			}
+			this.$axios('post', '/api/employee/superior', data).then(res =>{
+				if(res.data.code == 1){
+					this.manageScope_show = false
+					this.$message.success('设置成功');
+					this.moreMessage();
+				}
+			}).finally(_=>{
+				this.scope_loading = false
+			})
+		},
+		dirSup_confirm(date){
+			let data = {
+				employee_ids: [this.newId],
+				superior_id: date.employee.length > 0 ? date.employee[0].id : null
+			}
+			this.$axios('post','/api/employee/directly_superior',data).then(res =>{
+				if(res.data.code == 1){
+					this.dirSupScope_show = false
+					this.$message.success('设置成功');
+					this.moreMessage();
+				}
+			}).finally(_=>{
+				this.scope_loading = false
+			})
+		},
+		sub_manageScope(){
+			this.scope_loading = true
+			this.$refs.Employee2.confirm();
+		},
+		dir_SupScope(){
+			this.scope_loading = true
+			this.$refs.Employee3.confirm();
+		},
+		detailFormreturn() {
+			this.diaTableVisible = false
+		},
+		nameStrList(list,Str){
+			let deptarr = ''
+			list.forEach((x, y) =>{
+				deptarr += x[Str] + ' ';
+
+			})
+			return deptarr
+		},
+		moreMessage(id) {
+			let isId = 0;
+			if(id){
+				this.newId = id
+				isId = id
+			}else{
+				isId = this.newId
+			}
+			this.diaTableVisible = true
+			this.show_loading = true
+			let http1 = this.$axios('get', '/api/employee/info', { id: isId })
+			let http2 = this.$axios('get', '/api/employee/code', { employee_id: isId })
+			Promise.all([http1, http2]).then(res =>{
+				if(res[0]){
+					if (res[0].data.code == 1) {
+						let data = res[0].data.data
+						if(data.employee_detail.dept_list){
+							this.deptList = this.nameStrList(data.employee_detail.dept_list, 'dept_name');
+						}
+						if(data.employee_detail.superior_list){
+							let employeeD = data.employee_detail
+							if(employeeD.superior_id != 0){
+								this.dirSupervisor = employeeD.superior_list.filter(x => x.id == employeeD.superior_id)[0]||{}
+							}else{
+								this.dirSupervisor = {}
+							}
+							// 过滤已经离职人员
+							let sup=[...this.employeeAll].filter(x => [...employeeD.superior_list].some(y => y.id === x.id));
+							this.propList = this.nameStrList(sup, 'name');
+						}
+						this.messageMore = data
+					}
+				}
+				if(res[1]){
+					if (res[1].data.code == 1) {
+						this.copyIds = res[1].data.data.encrypt_code;
+					}
+				}
+			}).finally(() =>{
+				this.show_loading = false
+			})
+		},
+		setSuperior(row){
+			this.mangeId = row.id
+			let createData = this.manageData.filter(x => x.is_creator == 1);
+			let list = this.manageData.filter(x => x.id != row.id && x.is_creator != 1)
+			this.employeeList = list
+			let supList =row.employee_detail.superior_list
+			if(createData[0]){
+				supList.forEach(item =>{
+					createData.some(arr =>{
+						if(item.id == arr.id){
+							item.is_creator = true
+							return true
+						}
+					})
+				})
+			}
+			this.selected_manage.employee = supList
+			this.manageScope_show = true
+		},
+		filtration() {
+		  this.$axios('get', '/api/employee/index', { dept_id: this.pid, page: 0, page_size: 3000,is_official:1 }).then(res => {
+			 this.employeeAll = res.data.data.list;
+		  }); 
+		},
+		dirSuperior(row){
+			this.dirSupList = row.employee_detail.superior_list
+			if(this.dirSupervisor.name){
+				let arr = []
+				arr.push(this.dirSupervisor)
+				this.selected_dirSup.employee = arr
+			}else{
+				this.selected_dirSup.employee = []
+			}
+			this.dirSupScope_show = true
+		},
+		publicClose2() {
+			this.$refs.Employee2.close();
+			this.manageScope_show = false;
+		},
+		publicClose3() {
+			this.$refs.Employee3.close();
+			this.dirSupScope_show = false
+		},
+		//管理列表
+		manageList(){
+			let params = {
+				roles: ['creator', 'admin', 'point_manager', 'dept_manager']
+			}
+			this.$axios('get', '/api/employee/role_employee', params).then(res =>{
+				if(res.data.code == 1){
+					this.manageData = res.data.data.list
+				}
+			})
+		},
+		handleSuccess(response) {
+			if (response.code == 1) {
+				if (response.data.list.length > 0) {
+					var htmls = response.data.list;
+					var str = "<div class='red'></div>";
+					htmls.forEach(item => {
+						str += `<div>${item.姓名}:${item.line_err}</div>`;
+					});
+					this.$notify.error({
+						title: '导入错误',
+						dangerouslyUseHTMLString: true,
+						message: str,
+						duration: 0,
+						offset: 50,
+						customClass: 'notifyBox'
+					});
+					this.close_import();
+				} else {
+					this.file = response.data.list;
+					this.$message.success({ message: response.msg });
+					this.getEmployee();
+					this.close_import();
+				}
+			}else{
+				this.$message.error({ message: response.msg });
+			}
+		},
+		handleRemove(file, fileList) {
+			if (fileList !== null && fileList.length != 0) {
+				this.import_btn_show = true;
+			} else {
+				this.import_btn_show = false;
+			}
+		},
+		beforeFilesUpload(file) {
+			const $ext_list = ['xlsx', 'xls'];
+			let len = file.name.split('.').length - 1;
+			const $ext_name = file.name.split('.')[len];
+			if ($ext_list.indexOf($ext_name) != -1) {
+				this.import_btn_show = true;
+			} else {
+				this.$message.warning('文件格式上传错误,仅支持上传xlsx,xls)');
+				return false;
+			}
+		},
+		//导出规则按钮
+		derivedRule(){
+		  let status=this.status=='-1'? '':this.status
+		  let str='';
+		  if(status){
+			  if(this.dept_id){
+				  str='&is_official='+status+'&dept_id='+this.dept_id+'&keywords='+this.keywords;
+			  }else{
+				  str='&is_official='+status+'&keywords='+this.keywords;
+			  }
+		  }else{
+			  if(this.dept_id){
+			  	str='&dept_id='+this.dept_id+'&keywords='+this.keywords;
+			  }else{
+			  	str='&keywords='+this.keywords;
+			  }
+		  }
+		  let userData=this.$getUserData();
+		  window.open(process.env.VUE_APP_BASE_API+'/api/download/employee_status_export?employee_id='+userData.id+str)
+		},
+		// 导入相关
+		close_import() {
+			this.import_rules_show = false;
+			this.import_btn_show = false;
+			this.$refs.upload.clearFiles();
+		},
+		// 复制ID
+		copyId(id) {
+			this.$axios('get', '/api/employee/code', { employee_id: id })
+				.then(res => {
+					if (res.data.code == 1) {
+						this.copyIds = res.data.data.encrypt_code;
+						this.$nextTick(()=>{
+							this.copyToClipboard();
+						})
+					}
+				})
+		},
+		copyToClipboard() {
+			var Url2=document.getElementById("biao");
+			Url2.select(); // 选择对象
+			document.execCommand("Copy"); // 执行浏览器复制命令
+			this.$message.success('已复制');
+		},
+		forbidden() {
+			if (this.selectIds.length == 0) {
+				this.$message.error({ message: '请选择禁用的人员!' });
+				return;
+			}
+			this.$confirm('确定禁用选择的人员?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.enable_loading = true;
+				this.$axios('post', '/api/employee/disable', { employee_id: this.selectIds })
+					.then(res => {
+						if (res) {
+							this.$message.success('已禁用');
+							this.page=1;
+							this.getEmployee();
+						}
+					})
+					.finally(err => {
+						this.enable_loading = false;
+					});
+			});
+		},
+		selectable(row) {
+			if (row.is_creator) {
+				return false;
+			} else if (this.userInfo.id == row.id) {
+				return false;
+			} else {
+				return true;
+			}
+		},
+		setRanking() {
+			this.rangLoad = true;
+			let data = {
+				employee_id: this.rankingtakePartInId,
+				switch: Number(this.radio)
+			};
+			this.$axios('post', '/api/employee/ranking_switch', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.$message.success({ message: res.data.msg });
+						this.moreMessage();
+					}
+				})
+				.finally(() => {
+					this.dialogVisible = false;
+					setTimeout(() => {
+						this.rangLoad = false;
+					}, 200);
+				});
+		},
+		rankingtakePartIn(id, is_ranking) {
+			this.radio = is_ranking.toString();
+			this.rankingtakePartInId = id;
+			this.dialogVisible = true;
+		},
+		handleClose(done) {
+			done();
+		},
+		//同步信息
+		tb(is) {
+			if(!is){
+				this.isShowTb=true;
+				return false
+			}
+			let data={
+				type:this.selectTbIndex,
+				dept_list:this.dept_ids.toString(),
+			}
+			if(this.selectTbIndex==4&&this.dept_ids.length==0){
+				this.$message.error({ message: '请选择指定部门' });
+				return false
+			}
+			this.tbLoading = true;
+			this.$axios('post', '/api/ding/site_sync',data).then(res => {
+				this.$message.success({ message: '同步中,成功后将发送工作通知' });
+				this.dept_id = 0;
+				this.getInfo();
+				this.page=1;
+				this.getEmployee();
+				this.isShowTb=false
+			}).finally(() => {
+				this.tbLoading = false;
+				this.isShowTb=false
+			});
+		},
+		//搜索
+		searchUser() {
+			this.page = 1;
+			this.getEmployee();
+		},
+		//是否开通
+		changeIs(e, id) {
+			var url = e == 1 ? '/api/employee/disable' : '/api/employee/enable';
+			this.$axios('post', url, { employee_id: [id] }).then(res => {
+				if (e == 0) {
+					this.$message.success({ message: '开启成功,可在"角色权限设置对应管理范围"' });
+				} else {
+					this.$message.success({ message: res.data.msg });
+				}
+				this.getEmployee();
+			});
+		},
+		//批量开通权限
+		participation() {
+			if (this.selectIds.length == 0) {
+				this.$message.error({ message: '请选择参与的人员!' });
+				return;
+			}
+			this.enable_loading = true;
+			this.$axios('post', '/api/employee/enable', { employee_id: this.selectIds }).then(res => {
+				this.$message.success({ message: '开启成功,可在"角色权限设置对应管理范围"' });
+				this.page=1;
+				this.getEmployee();
+			}).finally(err => {
+				this.enable_loading = false;
+			});
+		},
+		//获取公司信息
+		getInfo(is) {
+			this.ruleDeprt = true;
+			this.$axios('get', '/api/site/info').then(res => {
+				this.info = res.data.data;
+				this.getDepartment();
+			});
+		},
+		//选择员工
+		handleSelectionChange(e) {
+			var arr = [];
+			for (var item in e) {
+				arr.push(e[item].id);
+			}
+			this.selectIds = arr;
+		},
+		//点击部门
+		handleNodeClick(e) {
+			this.page = 1;
+			this.dept_id = e.id;
+		},
+		//获取部门
+		getDepartment() {
+			this.ruleDeprt = true;
+			this.$axios('get', '/api/department/tree').then(res => {
+				var list = [{id: 0,name: this.info.name,_child: res.data.data.list}];
+				this.bmList = list;
+				this.dept_tree = this.getTreeData(res.data.data.list);
+			}).finally(() => {
+				this.ruleDeprt = false;
+			});
+		},
+		//获取员工
+		getEmployee() {
+			this.tableToading = true;
+			let data={
+				dept_id: this.dept_id,
+				keywords: this.keywords,
+				page: this.page,
+				page_size:this.perPage,
+			}
+			let is_official=this.status=='-1'? '':this.status;
+			if(is_official){
+				data.is_official=is_official;
+			}
+			this.$axios('get', '/api/employee/index', data).then(res => {
+				this.total = res.data.data.pageInfo.count;
+				this.userList = res.data.data.list;
+				var visible = this.$getCache('visible');
+				if (!visible) {
+					this.visible = true;
+				}
+			}).finally(err => {
+				this.tableToading = false;
+			});
+		},
+		visible_close() {
+			this.$setCache('visible', 'true');
+			this.visible = false;
+		},
+		//关闭提示
+		tips_close() {
+			this.$setCache('rule', 'true');
+			this.tips_show = false;
+		},
+		handleSizeChange: function(val) {
+			this.perPage = val;
+			this.page = 1;
+			this.getEmployee();
+		},
+		//页码变更
+		handleCurrentChange: function(val) {
+			this.page = val;
+			this.getEmployee();
+		},
+		handleSizeChange2: function(val) {
+			this.perPage2 = val;
+			this.page2 = 1;
+			this.getNoUser();
+		},
+		//页码变更
+		handleCurrentChange2: function(val) {
+			this.page2 = val;
+			this.getNoUser();
+		},
+		handleSizeChange3: function(val) {
+			this.perPage3 = val;
+			this.page3 = 1;
+			if(this.activeName=='first'){
+				if(this.taskType==1){
+					this.getTaskList()
+				}else{
+					this.getTaskList2()
+				}
+			}else{
+				this.getSpList()
+			}
+		},
+		//页码变更
+		handleCurrentChange3: function(val) {
+			this.page3 = val;
+			if(this.activeName=='first'){
+				if(this.taskType==1){
+					this.getTaskList()
+				}else{
+					this.getTaskList2()
+				}
+			}else{
+				this.getSpList()
+			}
+		}
+	}
+};
+</script>
+
+<style lang="scss" scoped="scoped">
+.li {
+  border-bottom: 1px solid #f1f1f1;
+}
+.li:hover {
+  background-color: #f5f7fa;
+}
+.ul {
+  margin-top: 20px;
+}
+.el-icon-close {
+  cursor: pointer;
+  padding: 8px;
+  position: relative;
+  right: -8px;
+}
+.el-icon-close:hover {
+  color: #f56c6c;
+}
+.dialog ::v-deep .el-dialog__body{
+	padding-top: 0px;
+	padding: 0 20px;
+}
+
+::v-deep .li .el-checkbox__label {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  display: block;
+  width: 440px;
+}
+::v-deep .li .el-radio__label {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  display: block;
+  width: 100%;
+  max-width: 440px;
+}
+::v-deep .el-drawer {
+  width: 500px !important;
+}
+.drawer-header {
+  height: 60px;
+  border-bottom: 1px solid #ebebeb;
+  line-height: 60px;
+  font-size: 18px;
+  font-weight: 500;
+  padding: 0 20px;
+}
+.drawer-main {
+  height: calc(100vh - 120px);
+  padding: 20px;
+  overflow-y: scroll;
+  min-width: 450px;
+  font-size: 14px;
+}
+.drawer-main::-webkit-scrollbar-track {
+  -webkit-box-shadow: inset 0 0 5px rgba(255, 255, 255, 0.3);
+  border-radius: 5px;
+  background-color: rgba(216, 216, 216, 0.8);
+}
+.drawer-main::-webkit-scrollbar {
+  width: 5px;
+  background-color: rgba(201, 201, 201, 0);
+}
+.drawer-main::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  -webkit-box-shadow: inset 0 0 5px rgb(153, 145, 145) (160, 154, 154);
+  background-color: rgb(168, 167, 167);
+}
+.drawer-footer {
+  background-color: #fff;
+  border-top: 1px solid #ebebeb;
+  padding: 10px 20px;
+  font-size: 14px;
+}
+::v-deep .width-150 {
+  width: 180px;
+}
+::v-deep :focus {
+  outline: 0;
+}
+.text-center {
+	text-align: center;
+}
+.text-center p {
+	padding: 10px 0;
+}
+.title {
+	font-size: 16px;
+	color: #909399;
+	margin-bottom: 10px;
+}
+.popover {
+	border: none;
+	// color: #909399;
+	font-weight: 600;
+	cursor: pointer;
+}
+.popover:hover {
+	background-color: #fff;
+	border-color: #fff;
+}
+
+.switch {
+	margin: 0;
+	display: inline-block;
+	position: relative;
+	width: 40px;
+	height: 20px;
+	border: 1px solid #dcdfe6;
+	outline: none;
+	border-radius: 10px;
+	box-sizing: border-box;
+	background: #dcdfe6;
+	cursor: pointer;
+	transition: border-color 0.3s, background-color 0.3s;
+	vertical-align: middle;
+}
+.switch:after {
+	content: '';
+	position: absolute;
+	top: 1px;
+	left: 1px;
+	border-radius: 100%;
+	transition: all 0.3s;
+	width: 16px;
+	height: 16px;
+	background-color: #fff;
+}
+.switch-box .switch {
+	border-color: #409eff;
+	background-color: #409eff;
+}
+.switch-box .switch:after {
+	left: 100%;
+	margin-left: -17px;
+}
+.name {
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	width: 80%;
+}
+.bms div {
+	margin-right: 10px;
+}
+.top-msg div:nth-child(1) {
+	margin-bottom: 10px;
+}
+.company_name {
+	position: relative;
+	display: block;
+	font-family: 'Microsoft YaHei';
+	text-align: left;
+	padding: 15px 25px;
+	cursor: pointer;
+	overflow: hidden;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	border-bottom: 1px #f8f8f8 solid;
+}
+.company_name img {
+	position: relative;
+	display: inline-block;
+	top: 2px;
+	width: 18px;
+	height: 18px;
+	margin-right: 4px;
+}
+.terr-right {
+	.custom-tree-node {
+		margin-left: -4px;
+	}
+	.custom-tree-node * {
+		vertical-align: middle;
+	}
+	.custom-tree-node:hover {
+		.treeIcon {
+			display: inline-block;
+			width: 55%;
+		}
+	}
+}
+
+.el-popover2 {
+	color: #409eff;
+}
+.rule_class_box {
+	::v-deep .el-tree-node {
+		border-bottom: 1px #f8f8f8 solid;
+	}
+	::v-deep .el-tree-node__content {
+		padding: 10px 0;
+		// border-bottom: 1px #f8f8f8 solid;
+	}
+	::v-deep .el-tree-node__content:hover {
+		background: #ecf5ff;
+		border-radius: 4px;
+	}
+	::v-deep .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content .name {
+		color: #409eff !important;
+		font-weight: normal;
+		transition: 0.35s ease-in-out;
+	}
+}
+.participateRank {
+	cursor: pointer;
+	text-decoration: underline;
+}
+.tips {
+	background: #dcdfe6;
+	border-radius: 50%;
+	width: 14px;
+	height: 14px;
+	color: #fff;
+	display: inline-block;
+	font-size: 12px;
+	line-height: 14px;
+	text-align: center;
+}
+.rankingcla{
+	font-size: 13px;
+	color: #959595;
+}
+</style>

+ 88 - 0
src/views/subassembly/set/initialPoint.vue

@@ -0,0 +1,88 @@
+<template>
+	<div v-loading="loading">
+		<workpoints :initia_arr="initia_arr" :initia_head="initia_head" @initia="initia" />
+	</div>
+</template>
+<script>
+import workpoints from '@/components/publics/workpoints';
+export default {
+	data() {
+		return {
+			loading: false,
+			initia_head: {
+				initial_suername: '初始分',
+				initial_suertext: '基础分和工龄分均为B分',
+				initial_left: '85px',
+				initial_width: '83px'
+			},
+			initia_arr: [
+				{
+					initialName: '基础分',
+          message:'设置分值后,系统将为全部员工自动加上此项基础分;此项基础分仅加一次,计入每个员工的累计总分。',
+					initia_mark: true,
+					initia_input: {
+						age: ''
+					},
+					initial_text:
+						'基础分是为了让积分保持正激励的作用,减少出现0分<br/>以下的情况,更好地激励员工挣分;<br/>设置分值后,系统将为全部员工自动加上此项基础分;<br/>此项基础分仅加一次,计入每个员工的累积总分'
+				},
+				{
+					initialName: '工龄分',
+          message:'首次加分=员工已在职的月份数*工龄分,未满一个月的不加分;后续加分按已设置的工龄分值每月自动累加',
+					initia_mark: true,
+					initia_input: {
+						age: ''
+					},
+					initial_text: '工龄分是为了更好的认可老员工;<br/>首次加分=员工已在职的月份*工龄分,未满一个月的不<br/>加分;后续加分按设置的工龄分值每月自动累加'
+				}
+			],
+			obj: [
+				{
+					base_point: '',
+					service_point: ''
+				}
+			]
+		};
+	},
+	components: {
+		workpoints
+	},
+	mounted() {
+		this.cheak_ax();
+	},
+	methods: {
+		initia(obj) {
+			let ok=obj.arr;
+			this.loading = true;
+			this.obj.base_point = +ok[0].sj;
+			this.obj.service_point = +ok[1].sj;
+			this.$axios('post', '/api/integral/site/config', this.obj)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.$message({
+							message: res.data.msg,
+							type: 'success'
+						});
+					}
+				})
+				.finally(err => {
+					this.loading = false;
+				});
+		},
+		cheak_ax() {
+			this.loading = true;
+			this.$axios('get', '/api/integral/site/config')
+				.then(res => {
+					let data=res.data.data;
+					this.initia_arr[0].initia_input.age = Math.abs(data.base_point);
+					this.initia_arr[1].initia_input.age = Math.abs(data.service_point);
+				})
+				.finally(err => {
+					this.loading = false;
+				});
+		}
+	}
+};
+</script>
+
+<style scoped lang="scss"></style>

+ 1538 - 0
src/views/subassembly/set/jurisdiction.vue

@@ -0,0 +1,1538 @@
+<template>
+	<div class="all-box">
+		<el-alert v-if="tips_show" class="diy-tip" title="温馨提示:" type="warning" @close="tips_close" description show-icon>
+			<p>功道云积分系统共有5种角色,不同角色拥有不同的权限</p>
+		</el-alert>
+		<div class="all">
+			<div class="flex-box" v-loading="role_loading">
+				<div class="terr-left">
+					<el-menu default-active="0" class="el-menu-vertical-demo" style="border: none">
+						<el-menu-item style="height: 47px;line-height: 47px;" :index="index.toString()" v-for="(item, index) in role_list" :key="index" @click="open_right(item)">
+							<i class="el-icon-s-custom"></i>
+							<span slot="title">{{ item.name }}</span>
+						</el-menu-item>
+					</el-menu>
+				</div>
+				<div class="terr-right border-right flex-1">
+					<div class="margin-bottom">
+						<div class="flex-box flex-v-ce">
+							<div class="name">{{ item_info.name }}</div>
+							<div class="flex-1"></div>
+							<el-button type="text" size="medium" style=" padding: 0; line-height: initial;" v-show="item_info.code !== 'creator'" @click="dataAccessPopup">
+								数据查看权限
+							</el-button>
+							<el-button type="text" size="medium" plain v-if="item_info.code != 'employee'" @click="open_right(item_info)">刷新</el-button>
+						</div>
+						<div class="user_text fontColorC" v-if="item_info.code == 'creator'">系统管理员默认为开通【功道云积分制】的人,拥有所有的功能及管理权限</div>
+						<div class="user_text fontColorC" v-if="item_info.code == 'admin'">公司管理员一般为合伙人、股东等高级管理人员,可管理多个部门和人员</div>
+						<div class="user_text fontColorC" v-if="item_info.code == 'point_manager'">积分专员一般为人事、行政等管理督办人员,可管理多个部门和人员</div>
+						<div class="user_text fontColorC" v-if="item_info.code == 'dept_manager'">部门管理员一般为部门/团队经理、主管、组长,可管理一部分人员</div>
+						<div class="user_text fontColorC" v-if="item_info.code == 'employee'">员工为默认角色,每个人都拥有员工角色的功能权限,该角色不可修改</div>
+					</div>
+					<div class="flex-box btns flex-v-ce margin-bottom" v-if="item_info.code != 'employee'">
+						<div class="flex-1">
+							<el-button size="small" v-show="item_info.code == 'creator' && isStart" @click="dialogFormVisible = true" type="primary">添加</el-button>
+							<el-button size="small" v-show="item_info.code == 'creator' && table_list.length > 1 && isStart" @click="del_creator" type="danger">删除</el-button>
+							<el-button size="small" v-show="item_info.code != 'creator'" @click="add_item" type="primary">添加</el-button>
+							<el-button size="small" v-show="item_info.code != 'creator' && table_list.length > 0" @click="del_item" type="danger">删除</el-button>
+							<el-button size="small" v-show="item_info.code == 'dept_manager'" @click="toleadShw = true">导出/修改管理列表</el-button>
+							<el-button size="small" v-show="item_info.code == 'dept_manager'" @click="synchronization" type="primary">同步管理范围</el-button>
+						</div>
+						<!-- <div class="gap-right-8 fr" style="display:inline-block; width:180px;" v-show="item_info.code == 'dept_manager'">
+							<el-input placeholder="搜索员工姓名" ref="search-bar" v-model="keyword" size="small" class="input-with-select" @keyup.enter.native="onFilterChanged">
+								<el-button slot="append" size="small" icon="el-icon-search" @click="onFilterChanged"></el-button>
+							</el-input>
+						</div> -->
+						
+					</div>
+					<div v-show="item_info.code == 'creator'">
+						<el-table :data="table_list" v-loading="table_loading">
+							<el-table-column width="40" fixed v-if="item_info.code == 'creator' && table_list.length > 1 && isStart">
+								<template slot-scope="scope">
+									<el-radio v-model="radioVal" :label="scope.row.id"></el-radio>
+								</template>
+							</el-table-column>
+							<el-table-column prop="name" label="姓名">
+								<template slot-scope="scope">
+									<div class="flex-box flex-v-ce">
+										<userImage width="50px" height="50px" :img_url="scope.row.img_url" :user_name="scope.row.name"></userImage>
+										<span style="margin-left: 10px; line-height: 50px;">{{ scope.row.name }}</span>
+									</div>
+								</template>
+							</el-table-column>
+							<el-table-column prop="dept" label="部门" v-if="item_info.code != 'creator'"></el-table-column>
+							<template slot="empty">
+								<noData :isSolt="true">
+									<template v-slot:default>
+										<div style="position: inherit;">
+											还没有{{ item_info.name }},
+											<span style="color:#26A2FF;cursor:pointer;" @click="dialogFormVisible = true">去添加>></span>
+										</div>
+									</template>
+								</noData>
+							</template>
+						</el-table>
+						<!-- 						<div v-else style="text-align: center;">
+							<template>
+								<div style="margin-top: 10%;margin-bottom: 10px;">
+									系统管理员即钉钉的主管理员,请确认应用的使用范围中是否选择了主管理员设置步骤:
+								</div>
+								<div>
+									进入【<span class="blue">钉钉管理后台</span>】→【<span class="blue">工作台</span>】→【<span class="blue">功道云积分制</span>】→【<span class="blue">设置</span>】,修改可见范围为全部员工或从部分员工中选上主管理员
+								</div>
+							</template>
+						</div> -->
+					</div>
+					<div v-show="item_info.code == 'employee'" style="text-align:center;margin-top:200px;">未设置管理角色的人员,都是普通员工</div>
+
+					<el-table :data="table_list" fit v-show="item_info.code == 'admin' || item_info.code == 'point_manager'" v-loading="table_loading">
+						<el-table-column width="40" fixed>
+							<template slot-scope="scope">
+								<el-radio v-model="radioVal" :label="scope.row.id"></el-radio>
+							</template>
+						</el-table-column>
+						<el-table-column prop="name" label="姓名" width="150" fixed>
+							<template slot-scope="scope">
+								<div class="flex-box flex-v-ce">
+									<userImage width="50px" height="50px" :img_url="scope.row.img_url" :user_name="scope.row.name"></userImage>
+									<span style="margin-left: 10px; line-height: 50px;">{{ scope.row.name }}</span>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column prop="dept" label="部门"></el-table-column>
+						<el-table-column width="100px">
+							<template slot="header" slot-scope="scope">
+								<span>管理范围</span>
+								<el-tooltip placement="top">
+									<div slot="content">
+										可自由分配每个管理者的管辖范围,设置后对管辖范围内的人员有分配任务,发绩效,奖扣积分、查看积分排名和统计、审核其提交上来的申请等权限
+									</div>
+									<span class="tips">?</span>
+								</el-tooltip>
+							</template>
+							<template slot-scope="scope">
+								<div @click="add_management_scope(scope.row)" v-show="scope.row.manage_scope_count == 0" class="cursor_pointer" style="text-decoration:underline">
+									去设置
+								</div>
+								<div @click="add_management_scope(scope.row)" v-show="scope.row.manage_scope_count != 0" class="cursor_pointer">
+									{{ scope.row.manage_scope_count }}人
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column>
+							<template slot="header" slot-scope="scope">
+								<span>积分权限</span>
+								<el-tooltip placement="top">
+									<div slot="content">
+										针对不同的管理岗位,可赋予每个管理者不同的奖扣积分权限
+										<br />
+										积分权限不足的须递交给其上级审核
+									</div>
+									<span class="tips">?</span>
+								</el-tooltip>
+							</template>
+							<el-table-column label="A分权限">
+								<template slot-scope="scope">
+									<div @click="open_integral_limit(scope.row)" class="cursor_pointer">
+										<div v-for="(item, index) in scope.row.point_limit" :key="index" v-show="item.name == 'A分'" class="cursor_pointer">
+											<span v-if="item.point != 0">{{ item.point }}</span>
+											<span v-else style="text-decoration:underline">未设置</span>
+										</div>
+									</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="B分权限">
+								<template slot-scope="scope">
+									<div @click="open_integral_limit(scope.row)" class="cursor_pointer">
+										<div v-for="(item, index) in scope.row.point_limit" :key="index" v-show="item.name == 'B分'" class="cursor_pointer">
+											<span v-if="item.point != 0">{{ item.point }}</span>
+											<span v-else style="text-decoration:underline">未设置</span>
+										</div>
+									</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="每月B分奖分上限">
+								<template slot-scope="scope">
+									<div @click="open_integral_limit(scope.row)" v-show="scope.row.entry_limit == 0" class="cursor_pointer" style="text-decoration:underline">
+										不限制
+									</div>
+									<div @click="open_integral_limit(scope.row)" v-show="scope.row.entry_limit > 0" class="cursor_pointer">{{ scope.row.entry_limit }}</div>
+									<div @click="open_integral_limit(scope.row)" v-show="scope.row.entry_limit < 0">不限制</div>
+								</template>
+							</el-table-column>
+						</el-table-column>
+						<el-table-column>
+							<template slot="header" slot-scope="scope">
+								<span>奖扣目标</span>
+								<el-tooltip placement="top">
+									<div slot="content">
+										积分是否能落地,奖扣分的执行最为关键。赋予一定的人员奖扣分任务,比如经理,主管,积分专员,行政人事等,更利于整个积分制管理的落地和实施。
+									</div>
+									<span class="tips">?</span>
+								</el-tooltip>
+							</template>
+							<el-table-column label="奖分目标">
+								<template slot-scope="scope">
+									<span @click="open_bonus_deducted(scope.row)">
+										<div
+											v-for="(item, index) in scope.row.reward_task_monthly"
+											:key="index"
+											v-show="item.name == 'B分' && item.point != 0"
+											class="cursor_pointer"
+										>
+											{{ item.point }}
+										</div>
+										<div
+											v-for="(item, index) in scope.row.reward_task_monthly"
+											:key="index + ':'"
+											v-show="item.name == 'B分' && item.point == 0"
+											class="cursor_pointer"
+											style="text-decoration:underline"
+										>
+											未设置
+										</div>
+									</span>
+								</template>
+							</el-table-column>
+							<el-table-column label="扣分目标">
+								<template slot-scope="scope">
+									<span @click="open_bonus_deducted(scope.row)">
+										<div
+											v-for="(item, index) in scope.row.deduct_task_monthly"
+											:key="index"
+											v-show="item.name == 'B分' && item.point != 0"
+											class="cursor_pointer"
+										>
+											{{ item.point }}
+										</div>
+										<div
+											v-for="(item, index) in scope.row.deduct_task_monthly"
+											:key="index + '::'"
+											v-show="item.name == 'B分' && item.point == 0"
+											class="cursor_pointer"
+											style="text-decoration:underline"
+										>
+											未设置
+										</div>
+									</span>
+								</template>
+							</el-table-column>
+							<el-table-column label="人次目标">
+								<template slot-scope="scope">
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count == 0" class="cursor_pointer" style="text-decoration:underline">
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count != 0" class="cursor_pointer">{{ scope.row.exec_count }}</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="每少一次扣">
+								<template slot-scope="scope">
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count_point == 0" class="cursor_pointer" style="text-decoration:underline">
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count_point != 0">{{ scope.row.exec_count_point }}</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="比例目标">
+								<template slot-scope="scope">
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.reward_ratio == 0" class="cursor_pointer" style="text-decoration:underline">
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.reward_ratio != 0" class="cursor_pointer">{{ scope.row.reward_ratio }}</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="不达标扣">
+								<template slot-scope="scope">
+									<div
+										@click="open_bonus_deducted(scope.row)"
+										v-show="scope.row.reward_ratio_point == 0"
+										class="cursor_pointer"
+										style="text-decoration:underline"
+									>
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.reward_ratio_point != 0" class="cursor_pointer">
+										{{ scope.row.reward_ratio_point }}
+									</div>
+								</template>
+							</el-table-column>
+						</el-table-column>
+						<template slot="empty">
+							<noData :isSolt="true">
+								<template v-slot:default>
+									<div>
+										还没有{{ item_info.name }},
+										<span style="color:#26A2FF;cursor:pointer;" @click="add_item">去添加>></span>
+									</div>
+								</template>
+							</noData>
+						</template>
+					</el-table>
+
+					<!-- 部门管理者专属 -->
+					<el-table :data="table_list" fit v-show="item_info.code == 'dept_manager'" v-loading="table_loading" @selection-change="handleSelectionChange">
+						<el-table-column width="55" fixed type="selection"></el-table-column>
+						<el-table-column prop="name" label="姓名" width="150" fixed>
+							<template slot-scope="scope">
+								<div class="flex-box flex-v-ce">
+									<userImage width="50px" height="50px" :img_url="scope.row.img_url" :user_name="scope.row.name"></userImage>
+									<span style="margin-left: 10px; line-height: 50px;">{{ scope.row.name }}</span>
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column prop="dept" label="部门"></el-table-column>
+						<el-table-column width="100px">
+							<template slot="header" slot-scope="scope">
+								<span>管理范围</span>
+								<el-tooltip placement="top">
+									<div slot="content">
+										可自由分配每个管理者的管辖范围,设置后对管辖范围内的人员有分配任务,发绩效,奖扣积分、查看积分排名和统计、审核其提交上来的申请等权限
+									</div>
+									<span class="tips">?</span>
+								</el-tooltip>
+							</template>
+							<template slot-scope="scope">
+								<div @click="add_management_scope(scope.row)" v-show="scope.row.manage_scope_count == 0" class="cursor_pointer" style="text-decoration:underline">
+									去设置
+								</div>
+								<div @click="add_management_scope(scope.row)" v-show="scope.row.manage_scope_count != 0" class="cursor_pointer">
+									{{ scope.row.manage_scope_count }}人
+								</div>
+							</template>
+						</el-table-column>
+						<el-table-column>
+							<template slot="header" slot-scope="scope">
+								<span>积分权限</span>
+								<el-tooltip placement="top">
+									<div slot="content">
+										针对不同的管理岗位,可赋予每个管理者不同的奖扣积分权限
+										<br />
+										积分权限不足的须递交给其上级审核
+									</div>
+									<span class="tips">?</span>
+								</el-tooltip>
+							</template>
+							<el-table-column label="A分权限">
+								<template slot-scope="scope">
+									<div @click="open_integral_limit(scope.row)" class="cursor_pointer">
+										<div v-for="(item, index) in scope.row.point_limit" :key="index" v-show="item.name == 'A分'" class="cursor_pointer">
+											<span v-if="item.point != 0">{{ item.point }}</span>
+											<span v-else style="text-decoration:underline">未设置</span>
+										</div>
+									</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="B分权限">
+								<template slot-scope="scope">
+									<div @click="open_integral_limit(scope.row)" class="cursor_pointer">
+										<div v-for="(item, index) in scope.row.point_limit" :key="index" v-show="item.name == 'B分'" class="cursor_pointer">
+											<span v-if="item.point != 0">{{ item.point }}</span>
+											<span v-else style="text-decoration:underline">未设置</span>
+										</div>
+									</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="每月B分奖分上限">
+								<template slot-scope="scope">
+									<div @click="open_integral_limit(scope.row)" v-show="scope.row.entry_limit == 0" class="cursor_pointer" style="text-decoration:underline">
+										不限制
+									</div>
+									<div @click="open_integral_limit(scope.row)" v-show="scope.row.entry_limit > 0" class="cursor_pointer">{{ scope.row.entry_limit }}</div>
+									<div @click="open_integral_limit(scope.row)" v-show="scope.row.entry_limit < 0">不限制</div>
+								</template>
+							</el-table-column>
+						</el-table-column>
+						<el-table-column>
+							<template slot="header" slot-scope="scope">
+								<span>奖扣目标</span>
+								<el-tooltip placement="top">
+									<div slot="content">
+										积分是否能落地,奖扣分的执行最为关键。赋予一定的人员奖扣分任务,比如经理,主管,积分专员,行政人事等,更利于整个积分制管理的落地和实施。
+									</div>
+									<span class="tips">?</span>
+								</el-tooltip>
+							</template>
+							<el-table-column label="奖分目标">
+								<template slot-scope="scope">
+									<span @click="open_bonus_deducted(scope.row)">
+										<div
+											v-for="(item, index) in scope.row.reward_task_monthly"
+											:key="index"
+											v-show="item.name == 'B分' && item.point != 0"
+											class="cursor_pointer"
+										>
+											{{ item.point }}
+										</div>
+										<div
+											v-for="(item, index) in scope.row.reward_task_monthly"
+											:key="index + ':'"
+											v-show="item.name == 'B分' && item.point == 0"
+											class="cursor_pointer"
+											style="text-decoration:underline"
+										>
+											未设置
+										</div>
+									</span>
+								</template>
+							</el-table-column>
+							<el-table-column label="扣分目标">
+								<template slot-scope="scope">
+									<span @click="open_bonus_deducted(scope.row)">
+										<div
+											v-for="(item, index) in scope.row.deduct_task_monthly"
+											:key="index"
+											v-show="item.name == 'B分' && item.point != 0"
+											class="cursor_pointer"
+										>
+											{{ item.point }}
+										</div>
+										<div
+											v-for="(item, index) in scope.row.deduct_task_monthly"
+											:key="index + '::'"
+											v-show="item.name == 'B分' && item.point == 0"
+											class="cursor_pointer"
+											style="text-decoration:underline"
+										>
+											未设置
+										</div>
+									</span>
+								</template>
+							</el-table-column>
+							<el-table-column label="奖扣次数">
+								<template slot-scope="scope">
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count == 0" class="cursor_pointer" style="text-decoration:underline">
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count != 0" class="cursor_pointer">{{ scope.row.exec_count }}</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="每少一次扣">
+								<template slot-scope="scope">
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count_point == 0" class="cursor_pointer" style="text-decoration:underline">
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.exec_count_point != 0">{{ scope.row.exec_count_point }}</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="奖扣比例">
+								<template slot-scope="scope">
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.reward_ratio == 0" class="cursor_pointer" style="text-decoration:underline">
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.reward_ratio != 0" class="cursor_pointer">{{ scope.row.reward_ratio }}</div>
+								</template>
+							</el-table-column>
+							<el-table-column label="不达标扣">
+								<template slot-scope="scope">
+									<div
+										@click="open_bonus_deducted(scope.row)"
+										v-show="scope.row.reward_ratio_point == 0"
+										class="cursor_pointer"
+										style="text-decoration:underline"
+									>
+										未设置
+									</div>
+									<div @click="open_bonus_deducted(scope.row)" v-show="scope.row.reward_ratio_point != 0" class="cursor_pointer">
+										{{ scope.row.reward_ratio_point }}
+									</div>
+								</template>
+							</el-table-column>
+						</el-table-column>
+						<template slot="empty">
+							<noData :isSolt="true">
+								<template v-slot:default>
+									<div>
+										还没有{{ item_info.name }},
+										<span style="color:#26A2FF;cursor:pointer;" @click="add_item">去添加>></span>
+									</div>
+								</template>
+							</noData>
+						</template>
+					</el-table>
+					<div class="pagination" v-show="item_info.code != 'employee'">
+						<el-pagination
+							@size-change="handleSizeChange"
+							@current-change="handleCurrentChange"
+							:current-page="page"
+							:page-sizes="[10, 20, 50, 100]"
+							layout="total,sizes, prev, pager, next"
+							:total="total"
+						></el-pagination>
+					</div>
+				</div>
+			</div>
+		</div>
+		
+		<el-dialog title="添加人员" :visible.sync="add_employee_show" :before-close="publicClose" width="700px" top="5vh">
+			<EmployeeSelector v-if="add_employee_show" ref="Employee" :user_no_select="false" @confirm="add_employee_confirm"></EmployeeSelector>
+			<span slot="footer">
+				<el-button @click="publicClose()">取消</el-button>
+				<!-- 积分负责人调用单次的添加接口 -->
+				<!-- <el-button type="primary" :loading="setUser_loading" v-if="item_info.code == 'ding_admin'"  @click="sub_add_employee2">完成</el-button> -->
+				<!-- 其他可批量 -->
+				<el-button type="primary" :loading="setUser_loading" :disabled="setUser_loading" @click="sub_add_employee">完成</el-button>
+			</span>
+		</el-dialog>
+
+		<el-dialog :title="'设置积分权限 '+ selectUser" :visible.sync="integral_limit_show" :close-on-click-modal="false" width="700px">
+			<el-form label-width="180px" :model="integral_limit_form" ref="integral_limit_form" v-loading="integral_limit_loading">
+				<span v-for="(item, index) in integral_limit_form.point_limit" :key="index" v-show="item.pt_id !== 1">
+					<el-form-item :label="item.name + '权限(单次奖扣)'" :rules="[{ required: true, message: '分值不能为空' }, { type: 'number', message: '分值必须为数字值' }]">
+						<el-input v-model.number="item.point" oninput="value=value.replace(/[^\d]/g,'')"></el-input>
+						<template slot="label">
+							<span>{{item.name}}'权限(单次奖扣)' 
+							<el-tooltip placement="top">
+								<span slot="content">
+									每次奖扣{{item.name}}不得超过设置的分值
+								</span>
+								<span class="tips">?</span>
+							</el-tooltip>
+							</span>
+						</template>
+					</el-form-item>
+				</span>
+				<el-form-item label="每月B分奖分上限" prop="entry_limit">
+					<el-input v-model.number="integral_limit_form.entry_limit" oninput="value=value.replace(/[^\d]/g,'')" placeholder="奖分上限不限制"></el-input>
+					<template slot="label">
+						<span>每月B分奖分上限
+						<el-tooltip placement="top">
+							<span slot="content" style="width: 200px;">奖分上限仅能限制管理者直接对员工进行奖扣B分,积分申请、任务审批等其他积分来源方式不会受到限制,请按自身需要设置上限分值</span>
+							<span class="tips">?</span>
+						</el-tooltip>
+						</span>
+					</template>
+				</el-form-item>
+				<el-form-item style="text-align: right; margin-bottom: 0">
+					<el-button @click="integral_limit_show = false">取消</el-button>
+					<el-button type="primary" :loading="integral_loading" :disabled="integral_loading" @click="sub_employee_limit('integral_limit_form')">确定</el-button>
+				</el-form-item>
+			</el-form>
+		</el-dialog>
+
+		<el-dialog title="设置管理范围" :visible.sync="management_scope_show" :before-close="publicClose2" top="5vh" width="700px">
+			<EmployeeSelector
+				v-if="management_scope_show"
+				ref="Employee2"
+				:my_no_select="my_no_select"
+				:user_no_select="false"
+				:selected="management_scope_arr"
+				@confirm="management_scope_confirm"
+			></EmployeeSelector>
+			<span slot="footer">
+				<el-button @click="publicClose2()">取消</el-button>
+				<el-button type="primary" :loading="scope_loading" :disabled="scope_loading" @click="sub_management_scope">完成</el-button>
+			</span>
+		</el-dialog>
+
+		<el-dialog :title="'每月奖扣目标 (B分)  '+  selectUser" :visible.sync="bonus_deducted_show" width="600px">
+			<el-form :model="integral_limit_form" ref="integral_limit_form" :rules="integral_limit_rules" label-width="130px" v-loading="bonus_deducted_loading">
+				<span v-for="(item, index) in integral_limit_form.reward_task_monthly" :key="index" v-show="item.name == 'B分'">
+					<el-form-item>
+						<template slot="label">
+							<span>奖分目标</span>
+							<el-tooltip placement="top">
+								<div slot="content" style="width: 300px;">
+									对奖分分值作任务要求。未达分值任务的按差额扣分
+									<br />
+									举例说明:奖分任务1000,实际奖分980(差额20分),则该执行人员将被扣20分。反之,如实际奖分达到或超出1000分,不对执行人员实行扣分
+								</div>
+								<span class="tips">?</span>
+							</el-tooltip>
+						</template>
+						<el-input v-model.number="item.point" type="number" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入数值"></el-input>
+					</el-form-item>
+				</span>
+				<span v-for="(item, index) in integral_limit_form.deduct_task_monthly" :key="item.name" v-show="item.name == 'B分'">
+					<el-form-item style="margin-bottom: 0;" prop="point">
+						<template slot="label">
+							<span>扣分目标</span>
+							<el-tooltip placement="top">
+								<div slot="content" style="width: 300px;">
+									对扣分分值作任务要求。未达分值任务的按差额扣分
+									<br />
+									举例说明:扣分任务100,实际扣分80(差额20分),则该执行人员将被扣20分。反之,如实际扣分达到或超出100分,不对执行人员实行扣分
+								</div>
+								<span class="tips">?</span>
+							</el-tooltip>
+						</template>
+						<el-input v-model.number="item.point" type="number" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入数值"></el-input>
+						<el-checkbox v-model="checked">
+						    如未完成目标,自动按差额扣分
+						    <el-tooltip placement="top">
+						      <div slot="content" style="width: 300px;"> 设置后,奖分与扣分目标其中有一项未达标,系统将自动扣除差额分值;<br />例如,A设置了月奖分目标100和月扣分目标100,到了月底,奖了80和扣了30,那该管理者将被扣90B分。</div>
+						    <span class="tips">?</span>
+						  </el-tooltip>
+						</el-checkbox>
+					</el-form-item>
+				</span>
+				<el-form-item>
+					<div style="font-size: 12px; color: #909399; line-height: 20px;">
+						设置后,奖分与扣分目标其中有一项未达标,系统将自动扣除差额分值;
+						<br />
+						例如,A设置了月奖分目标100和月扣分目标100,到了月底,奖了80和扣了30,那该管理者将被扣90B分。
+					</div>
+				</el-form-item>
+
+				<el-form-item prop="exec_count">
+					<template slot="label">
+						<span>人次目标</span>
+						<el-tooltip placement="top">
+							<div slot="content" style="width: 300px;">
+								对奖分和扣分的执行次数作任务要求
+								<br />
+								举例说明:奖扣次数任务100,实际执行次数95(差5次),假如每少一次扣5分,则该执行人员将被扣5*5=25分。反之,如果任务达标,不对执行人员实行扣分
+							</div>
+							<span class="tips">?</span>
+						</el-tooltip>
+					</template>
+					<el-input v-model.number="integral_limit_form.exec_count" oninput="value=value.replace(/[^\d]/g,'')" type="number" placeholder="请输入数值"></el-input>
+				</el-form-item>
+
+				<el-form-item prop="exec_count_point">
+					<template slot="label">
+						<span>每少一次奖扣</span>
+						<el-tooltip placement="top">
+							<div slot="content" style="width: 300px;">奖扣次数未达任务要求的,每少一次扣对应分值</div>
+							<span class="tips">?</span>
+						</el-tooltip>
+					</template>
+					<el-input v-model.number="integral_limit_form.exec_count_point" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入数值"></el-input>
+				</el-form-item>
+
+				<el-form-item prop="reward_ratio">
+					<template slot="label">
+						<span>比例目标</span>
+						<el-tooltip placement="top">
+							<div slot="content" style="width: 300px;">
+								对奖分和扣分的比例作任务要求
+								<br />
+								举例说明:奖扣比例任务10:1,实际执行奖扣比例11:1(管理者当老好人,不敢执行扣分,导致扣分占比过低),则视为未完成,该执行人员将被扣对应分值。反之比例小于等于10:1,任务为达标,不对执行人员实行扣分
+							</div>
+							<span class="tips">?</span>
+						</el-tooltip>
+					</template>
+					<el-input
+						v-model.number="integral_limit_form.reward_ratio"
+						style="width: 100px;"
+						oninput="value=value.replace(/[^\d]/g,'')"
+						placeholder="请输入数值"
+					></el-input>
+					:
+					<el-input style="width: 100px;" disabled placeholder="1"></el-input>
+				</el-form-item>
+
+				<el-form-item prop="reward_ratio_point">
+					<template slot="label">
+						<span>比例不达标扣</span>
+						<el-tooltip placement="top">
+							<div slot="content" style="width: 300px;">未完成奖扣比例任务的,按对应分值扣分</div>
+							<span class="tips">?</span>
+						</el-tooltip>
+					</template>
+					<el-input v-model.number="integral_limit_form.reward_ratio_point" oninput="value=value.replace(/[^\d]/g,'')" placeholder="请输入数值"></el-input>
+				</el-form-item>
+
+				<el-form-item style=" text-align: right; margin-bottom: 0;">
+					<el-button @click="bonus_deducted_colse('integral_limit_form')">取消</el-button>
+					<el-button type="primary" :loading="bonus_loading" :disabled="bonus_loading" @click="sub_bonus_deducted('integral_limit_form')">确定</el-button>
+				</el-form-item>
+			</el-form>
+		</el-dialog>
+		
+		<!-- 添加老板 -->
+		<el-dialog title="添加系统管理员" :visible.sync="dialogFormVisible" top="5vh" width="700px">
+			<EmployeeSelector v-if="dialogFormVisible" ref="boss" :multi="false" :user_no_select="false" @confirm="selectBoss"></EmployeeSelector>
+			<div style="text-align: center;" class="fontColorD">系统管理员至少有一位,系统管理员不能删除自己</div>
+			<div slot="footer" class="dialog-footer">
+				<el-button @click="dialogFormVisible = false" :disabled="isShowBoss">取 消</el-button>
+				<el-button type="primary" :loading="isShowBoss" :disabled="isShowBoss" @click="add_creator()">确 定</el-button>
+			</div>
+		</el-dialog>
+		
+		<!-- 查看管理范围 -->
+		<el-dialog title="数据查看权限" :visible.sync="dataAccessShow" width="600px">
+			<div v-loading="dataAccessLoading">
+				<el-form label-width="120px">
+					<el-form-item v-for="(item, index) in jurisdiction" :key="index" :label="item.title">
+						<el-radio-group v-model="item.code">
+							<el-col :span="24" v-for="(d, index) in item.list" :key="index" style="padding: 10px 0">
+								<el-radio :label="d.id" class="radioBox">{{ d.name }}</el-radio>
+							</el-col>
+						</el-radio-group>
+					</el-form-item>
+				</el-form>
+			</div>
+			<span slot="footer">
+				<el-button :disabled="setDataAccessBtn" @click="dataAccessShow = false">取消</el-button>
+				<el-button :disabled="setDataAccessBtn" type="primary" @click="setDataAccess">确定</el-button>
+			</span>
+		</el-dialog>
+		<!-- 导出员工 -->
+		<!-- <el-dialog title="导出/修改部门管理者信息" width="600px" :visible.sync="exportEmploye" :close-on-click-modal="false" :before-close="close_export">
+			<div style="float: left;width:49%" class="ps">
+				<div style="margin-left: 20%;">
+					<p>1.导出部门管理者信息</p>
+					<el-button type="primary" plain @click="downloadSheet">导出</el-button>
+				</div>
+			</div>
+			<div style="border-left: 1px solid #D8D8D8;width: 1px;height: 255px;float: left;"></div>
+
+			<div style="float: left;width:49%;" class="ps">
+				<div style="margin-left: 20%;">
+					<p>2.修改部门管理者信息</p>
+					<p>导出部门管理者信息表进行修改</p>
+					<p>上传修改好的部门管理者信息表</p>
+					<el-upload
+						:limit="1"
+						:headers="ATOKEN"
+						ref="upload2"
+						:action="integralUpload"
+						:on-success="handlePictureCardPreview"
+						:before-upload="beforeFilesUpload"
+					>
+						<p><el-button slot="trigger" type="primary" plain>选取文件</el-button></p>
+					</el-upload>
+				</div>
+			</div>
+			<div class="align-center" style="margin-bottom:20px; float:left; margin-left:10px;"></div>
+			<div class="align-center" style="margin-bottom:20px; float:left; margin-left:10px;"></div>
+			<div style="clear:both;"></div>
+		</el-dialog> -->
+		
+		<toLead :visible.sync="toleadShw" :nowIndex.sync="nowIndex" :tolead="toleadResult" @confirm="tealConfirm" :export_type="'prize_import'" :dstyle="'height:130px;'">
+			<template slot="1">
+				<div v-if="nowIndex == 1">
+					<div class=" margin-bottom">
+						<div class="flex-box flex-v-ce">
+							<div style="margin-right: 10px;">1、导出部门管理者信息</div>
+							<el-button size="medium" type="primary" @click="downloadSheet" plain>导出</el-button>
+						</div>
+					</div>
+					
+					<div class="margin-bottom">
+						<el-upload
+							:limit="1"
+							:headers="ATOKEN"
+							ref="upload2"
+							:action="integralUpload"
+							:on-success="handlePictureCardPreview"
+							:before-upload="beforeFilesUpload"
+							:on-progress="handleOnthecross"
+						>
+							<div>
+								2、上传修改好的部门管理者信息表
+								<el-button style="margin-left: 10px;" size="medium" type="primary" plain>选取文件</el-button>
+							</div>
+						</el-upload>
+					</div>
+				</div>
+			</template>
+		</toLead>
+
+		<!-- 同步人员 -->
+		<el-dialog  title="提示" :visible.sync="isShowTb" :before-close="closeTb" width="500px">
+			<p style="font-size: 18px;font-weight: 600;margin-bottom: 10px;">
+				<i class="el-icon-warning orange" style="font-size: 22px;"></i>
+				确认同步所选择的人员吗?
+			</p>
+			<span slot="footer">
+				<div class="flex-box-ce">
+					<el-checkbox v-model="isMode">替换已有管理范围</el-checkbox>
+					<div class="flex-1"></div>
+					<el-button @click="closeTb()">取 消</el-button>
+					<el-button type="primary" :loading="tb_loading" :disabled="tb_loading" @click="tb">确 定</el-button>
+				</div>
+			</span>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+
+import toLead from '@/components/toLead';
+const minimum = (rule, value, callback) => {
+	if (value < 0) {
+		callback(new Error('数值不能为负数'));
+	} else {
+		callback();
+	}
+};
+export default {
+	data() {
+		return {
+			page: 1,
+			pageSize:10,
+			total: 0,
+			role_list: [],
+			table_list: [],
+			tips_show: false,
+			role_loading: false,
+			table_loading: false,
+			setUser_loading: false,
+			item_info: {
+				// code: 'creator'
+			},
+			rules_employee_arr: { employee: [], dept: [] },
+
+			//添加人员相关
+			add_employee_show: false,
+			add_employee_form: { employee_ids: [] },
+			employee_arr: [],
+
+			radioVal: '',
+			// 设置积分相关
+			integral_limit_show: false,
+			management_scope_show: false,
+			integral_limit_loading: false,
+			integral_limit_form: {},
+			management_scope_arr: { employee: [], dept: [] },
+			scope_loading: false,
+			integral_loading: false,
+
+			// 设置奖扣任务相关
+			bonus_deducted_show: false,
+			bonus_deducted_loading: false,
+			bonus_loading: false,
+			integral_limit_rules: {
+				// exec_count: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }],
+				// exec_count_point: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }],
+				// reward_ratio: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }],
+				// reward_ratio_point: [{ required: true, validator: minimum, trigger: 'blur' }, { type: 'number', message: '分值必须为数字值' }]
+			},
+			my_no_select: '', //设置人的ID
+			isStart: false, //是否是系统管理员或者积分负责人
+			// BOSS操作
+			dialogFormVisible: false, //控制添加老板弹窗
+			bossObj: '',
+			isShowBoss: false,
+			keyword: '', //搜索的关键词
+
+			checked: true,
+			integralUpload: process.env.VUE_APP_BASE_API + '/api/employee/prize_import',
+			publicBASE_API: process.env.VUE_APP_BASE_API,
+			// datas: { type: 'prize_buckle' },
+			update_btn: false,
+			ATOKEN: { 'A-TOKEN': this.$getToken() },
+			exportEmploye: false, // 导出员工信息
+
+			// 控制管理范围
+			dataAccessShow: false,
+			setDataAccessBtn: false,
+			dataAccessLoading: false,
+			jurisdiction: [],
+			// 除员工外权限范围数据
+			dataAccessList: [
+				{
+					title: '查看积分事件',
+					name: 'event_range',
+					code: 0,
+					list: [{ name: '仅查看自己的数据', id: 1 }, { name: '查看自己以及管理范围内用户的数据', id: 2 }, { name: '查看全员数据', id: 3 }]
+				},
+				{
+					title: '管理者奖扣',
+					name: 'prize_range',
+					code: 0,
+					list: [{ name: '查看自己以及管理范围内管理者的数据', id: 1 }, { name: '查看全部管理者的数据', id: 2 }]
+				}
+				// {
+				//   title: '团队绩效',
+				//   name: 'performance_range',
+				//   code: 0,
+				//   list: [
+				//     {name: '查看自己以及管理范围内用户的数据', id: 1},
+				//     {name: '查看全员数据', id: 2},
+				//   ]
+				// },
+				// {
+				//   title: '团队数据',
+				//   name: 'statistics_range',
+				//   code: 0,
+				//   list: [
+				//     {name: '查看自己以及管理范围内用户的数据', id: 1},
+				//     {name: '查看全员数据', id: 2},
+				//   ]
+				// },
+			],
+			// 员工权限范围数据
+			dataAccessListEmployee: [
+				{
+					title: '积分事件',
+					name: 'event_range',
+					code: 0,
+					list: [{ name: '看自己的', id: 1 }, { name: '查看全员数据', id: 3 }]
+				}
+				//   {
+				//     title: '团队绩效',
+				//     name: 'performance_range',
+				//     code: 0,
+				//     list: [
+				//       {name: '仅查看自己的数据', id: 1},
+				//       {name: '查看全员数据', id: 2},
+				//     ]
+				//   }
+			],
+
+			// 同步管理范围
+			del_arr: [],
+			isShowTb: false,
+			tb_loading: false,
+			isMode: false,
+
+			//导入相关
+			toleadShw: false,
+			nowIndex: 1,
+			toleadResult: {},
+			selectUser:''
+		};
+	},
+	components: { EmployeeSelector, toLead },
+	created() {
+		this.get_role_list();
+		// 判断是否是系统管理员
+		this.isStart = this.$getIsCreator('creator');
+	},
+	mounted() {
+		if (this.$getCache('framework')) {
+			this.tips_show = false;
+		} else {
+			this.tips_show = true;
+		}
+	},
+	watch: {
+		toleadShw(val){
+			if(val) this.nowIndex = 1
+		},
+		isShowTb(val) {
+			if (!val) {
+				this.isMode = false;
+			}
+		},
+		isMode(val) {
+			let users = this.del_arr;
+			users.forEach(item => {
+				item.mode = val ? 'cover' : 'merge';
+			});
+			this.del_arr = users;
+		}
+	},
+	methods: {
+		handleOnthecross(event, file, fileList){
+			this.nowIndex = 2
+		},
+		// 同步管理范围
+		tb() {
+			this.tb_loading = true;
+			this.$axios('post', '/api/employee/sync_scope', { info: JSON.stringify(this.del_arr) })
+				.then(res => {
+					if (res.data.code == 1) {
+						this.$message.success('已同步');
+						this.get_table_list();
+					}
+				})
+				.finally(() => {
+					this.isShowTb = false;
+					this.tb_loading = false;
+				});
+		},
+		handleSelectionChange(val) {
+			this.del_arr = [];
+			val.forEach(element => {
+				this.del_arr.push({ employee_id: element.id, mode: 'merge' });
+			});
+		},
+		// 同步管理范围
+		synchronization() {
+			if (this.del_arr.length == 0) {
+				this.$message.error('请勾选人员');
+				return;
+			}
+			this.isShowTb = true;
+		},
+		closeTb() {
+			this.isShowTb = false;
+		},
+		// 关闭导出
+		close_export() {
+			this.exportEmploye = false;
+			this.$refs.upload2.clearFiles();
+		},
+		//  导入 新增
+		uploadFile: function(type) {
+			let params = {};
+			params.file = this.file;
+			this.update_btn = true;
+			this.$axios('post', '/api/employee/prize_import', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.close_export();
+						this.$message.success({
+							type: '上传成功',
+							message: res.data.msg
+						});
+						this.get_table_list();
+					}
+				})
+				.finally(() => {
+					setTimeout(() => {
+						this.update_btn = false;
+					}, 3000);
+				});
+		},
+		// 导出员工信息
+		downloadSheet: function() {
+			let role_id;
+			for (let i in this.role_list) {
+				if (this.role_list[i].code == 'dept_manager') {
+					role_id = this.role_list[i].id;
+				}
+			}
+			window.open(this.publicBASE_API + 'api/download/prize_export?role_id=' + role_id + '&employee_id=' + this.$getUserData().id, '_blank');
+		},
+		tealConfirm(){
+			this.page=1;
+			this.get_table_list();
+		},
+		handlePictureCardPreview(response) {
+			if(response.code == 1){
+				response.data.id = 1
+			}else{
+				response.data.id = 0
+				response.data.name = response.msg
+			}
+			this.toleadResult = response.data
+			this.nowIndex = 3
+			return
+		  if (response.code == 1) {
+		  	if (Array.isArray(response.data)&&response.data.length > 0) {
+		  		var htmls = response.data;
+		  		var str = "<div class='red'></div>";
+		  		htmls.forEach(item => {
+		  			str += `<div>${item.errors}</div>`;
+		  		});
+		  		this.close_export();
+		  		this.$notify.error({
+		  			title: '导入错误',
+		  			dangerouslyUseHTMLString: true,
+		  			message: str,
+		  			duration: 0,
+		  			offset: 50,
+		  			customClass: 'notifyBox'
+		  		});
+		  	} else {
+		  		this.file = response.data;
+		  		this.$message.success({ message: response.msg });
+		  		this.close_export();
+				this.page=1;
+				this.get_table_list();
+		  	}
+		  }else{
+			  this.$message.error({ message: response.msg });
+			  this.close_export();
+		  }
+		},
+		beforeFilesUpload(file) {
+			const $ext_list = ['xlsx', 'xls'];
+			let len = file.name.split('.').length - 1;
+			const $ext_name = file.name.split('.')[len];
+			if ($ext_list.indexOf($ext_name) != -1) {
+			} else {
+				this.toleadResult.id = 0
+				this.toleadResult.name = '文件格式上传错误,仅支持上传xlsx,xls)'
+				this.nowIndex = 3
+				// this.$message.warning('文件格式上传错误,仅支持上传xlsx,xls)');
+				return false;
+			}
+		},
+		//点击搜索
+		onFilterChanged: function() {
+			this.page = 1;
+			this.get_table_list();
+		},
+		// 数据查看权限弹窗
+		dataAccessPopup() {
+			this.dataAccessShow = true;
+			this.getDataAccess();
+		},
+		// 获取数据范围权限
+		getDataAccess() {
+			let self = this;
+			self.dataAccessLoading = true;
+			self.$axios('get', '/api/role/range', { role_id: self.item_info.id, })
+				.then(res => {
+					if (res.data.code == 1) {
+						const resData = res.data.data;
+						if (this.item_info.code != 'employee') {
+							self.dataAccessList.forEach(element => {
+								element.name == 'event_range' ? (element.code = resData.event_range) : '';
+								element.name == 'prize_range' ? (element.code = resData.prize_range) : '';
+							});
+						} else {
+							self.dataAccessListEmployee.forEach(element => {
+								element.name == 'event_range' ? (element.code = resData.event_range) : '';
+							});
+						}
+					} else {
+						self.$message.error(res.data.msg);
+					}
+				})
+				.finally(() => {
+					self.dataAccessLoading = false;
+				});
+		},
+		// 设置数据范围权限
+		setDataAccess() {
+			let self = this;
+			let data = {
+				role_id: self.item_info.id
+			};
+			self.setDataAccessBtn = true;
+			self.jurisdiction.forEach(element => {
+				data[element.name] = element.code;
+			});
+			if (self.item_info.code == 'employee') {
+				data.prize_range = '1';
+			}
+			data.performance_range = '1';
+			data.statistics_range = '1';
+			self.$axios('post', '/api/role/range', data)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.dataAccessShow = false;
+						self.$message.success(res.data.msg);
+					} else {
+						self.$message.error(res.data.msg);
+					}
+				})
+				.finally(() => {
+					self.setDataAccessBtn = false;
+				});
+		},
+
+		selectBoss(val) {
+			if (val.employee.length > 0) {
+				this.bossObj = val.employee[0].id;
+			}
+		},
+		//添加老板
+		add_creator() {
+			this.isShowBoss = true;
+			this.$refs.boss.confirm(); //调用组件的confirm();
+			if (this.bossObj) {
+				this.$axios('post', '/api/role/creator/add', { employee_id: this.bossObj })
+					.then(res => {
+						this.$message.success('设置成功');
+						this.open_right(this.role_list[0]);
+					})
+					.finally(() => {
+						this.bossObj = '';
+						this.isShowBoss = false;
+						this.dialogFormVisible = false;
+					});
+			} else {
+				this.$message.error('请选择人员');
+				this.isShowBoss = false;
+			}
+		},
+		open_bonus_deducted(item) {
+			this.bonus_deducted_show = true;
+			this.selectUser=item.name;
+			this.set_mployee_limit_id = item.id;
+			this.get_employee_limit(item.id);
+		},
+		sub_bonus_deducted(fromName) {
+			this.bonus_loading = true;
+			this.integral_limit_form.employee_id = this.set_mployee_limit_id;
+			this.integral_limit_form.task_enable = this.checked?'1':'0'
+			var data = this.integral_limit_form;
+			data.reward_task_monthly[1].point = Number(data.reward_task_monthly[1].point);
+			data.deduct_task_monthly[1].point = Number(data.deduct_task_monthly[1].point);
+			
+			if (!this.isNumber(data.reward_task_monthly[1].point) || data.reward_task_monthly[1].point < 0) {
+				this.$message.error('月奖分任务必须为整数且不能为负分');
+				return;
+			}
+			if (!this.isNumber(data.deduct_task_monthly[1].point) || data.deduct_task_monthly[1].point < 0) {
+				this.$message.error('月扣分任务必须为整数且不能为负分');
+				return;
+			}
+			// return;
+			this.$refs[fromName].validate(valid => {
+				if (valid) {
+					this.$axios('post', '/api/integral/employee/limit', data)
+						.then(res => {
+							if (res.data.code == 1) {
+								this.$message.success(res.data.msg);
+								setTimeout(() => {
+									this.get_table_list();
+								}, 1000);
+								this.bonus_deducted_show = false;
+							}
+						})
+						.finally(() => {
+							this.bonus_loading = false;
+						});
+				} else {
+					this.bonus_loading = false;
+				}
+			});
+		},
+		bonus_deducted_colse(fromName) {
+			this.bonus_deducted_show = false;
+			this.$refs[fromName].resetFields();
+		},
+		//设置管理范围
+		sub_management_scope() {
+			this.scope_loading = true;
+			this.$refs.Employee2.confirm(); //调用组件的confirm();
+			this.$axios('post', '/api/employee/scope', { employee_id: this.list_info.id, id: this.management_arr })
+				.then(res => {
+					if (res.data.code == 1) {
+						this.$message.success('设置成功');
+						this.table_list.forEach(element => {
+							if (element.id == this.list_info.id) {
+								element.manage_scope_count = this.management_arr.length;
+							}
+						});
+						this.management_scope_show = false;
+					}
+				})
+				.finally(() => {
+					this.scope_loading = false;
+				});
+		},
+		//添加编辑管理范围
+		management_scope_confirm(val) {
+			this.management_arr = [];
+			val.employee.forEach(element => {
+				this.management_arr.push(element.id);
+			});
+		},
+		add_management_scope(item) {
+			this.list_info = item;
+			this.my_no_select = item.id;
+			this.management_scope_arr.employee = [];
+			this.role_loading = true;
+			this.$axios('get', '/api/employee/info', { id: this.list_info.id })
+				.then(res => {
+					if (res.data.code == 1) {
+						this.management_scope_show = true;
+						this.management_scope_arr.employee = res.data.data.employee_detail.manage_scope || []; //获取当前数据的管理范围
+					}
+				})
+				.finally(() => {
+					this.role_loading = false;
+				});
+		},
+
+		isNumber(obj) {
+			return obj === +obj;
+		},
+		sub_employee_limit(fromName) {
+			this.$refs[fromName].validate(valid => {
+				if (!this.isNumber(this.integral_limit_form.point_limit[0].point) || this.integral_limit_form.point_limit[0].point < 0) {
+					this.$message.error('权限分必须为整数且不能为负分');
+					return;
+				}
+				if (!this.isNumber(this.integral_limit_form.point_limit[1].point) || this.integral_limit_form.point_limit[1].point < 0) {
+					this.$message.error('权限分必须为整数且不能为负分');
+					return;
+				}
+				if (valid) {
+					this.integral_loading = true;
+					this.integral_limit_form.employee_id = this.set_mployee_limit_id;
+					this.$axios('post', '/api/integral/employee/limit', this.integral_limit_form)
+						.then(res => {
+							if (res.data.code == 1) {
+								this.$message.success(res.data.msg);
+								this.get_table_list();
+								this.integral_limit_show = false;
+							}
+						})
+						.finally(() => {
+							this.integral_loading = false;
+						});
+				}
+			});
+		},
+		open_integral_limit(item) {
+			this.integral_limit_show = true;
+			this.selectUser=item.name;
+			this.set_mployee_limit_id = item.id;
+			this.get_employee_limit(item.id);
+		},
+		get_employee_limit(id) {
+			this.integral_limit_loading = true;
+			this.$axios('get', '/api/integral/employee/limit', { employee_id: id })
+				.then(res => {
+					if (res.data.code == 1) {
+						var item = res.data.data;
+						if (item.point_limit == null || item.point_limit == undefined || item.point_limit.length == 0) {
+							item.point_limit = [{ name: 'A分', point: '0', pt_id: this.$getTyps('AF').id }, { name: 'B分', point: '0', pt_id: this.$getTyps('BF').id }];
+						}
+						if (item.deduct_task_monthly == null || item.deduct_task_monthly == undefined || item.deduct_task_monthly.length == 0) {
+							item.deduct_task_monthly = [{ name: 'A分', point: '0', pt_id: this.$getTyps('AF').id }, { name: 'B分', point: '0', pt_id: this.$getTyps('BF').id }];
+						}
+						if (item.reward_task_monthly == null || item.reward_task_monthly == undefined || item.reward_task_monthly.length == 0) {
+							item.reward_task_monthly = [{ name: 'A分', point: '0', pt_id: this.$getTyps('AF').id }, { name: 'B分', point: '0', pt_id: this.$getTyps('BF').id }];
+						}
+						if (item.point_limit[0].point || item.point_limit[1].point) {
+							item.point_limit[0].point = Number(item.point_limit[0].point);
+							item.point_limit[1].point = Number(item.point_limit[1].point);
+						}
+						if (item.entry_limit<0) {
+							item.entry_limit='';
+						}
+						this.checked = item.task_enable == 0 ?false:true
+						this.integral_limit_form = item;
+					}
+				}).finally(() => {
+					this.integral_limit_loading = false;
+				});
+		},
+		// 添加积分负责人专属
+		sub_add_employee2(form) {
+			var that = this;
+			this.$refs.Employee.confirm(); //调用组件的confirm();
+			let data = {};
+			if (that.employee_arr.length > 0) {
+				data.role_id = this.item_info.id;
+				data.employee_id = that.employee_arr[0];
+			} else {
+				this.$message.error('未选择人员');
+				return;
+			}
+			this.setUser_loading = true;
+			this.$nextTick(() => {
+				this.$axios('post', '/api/role/user/add', data)
+					.then(res => {
+						if (res.data.code == 1) {
+							this.$message.success('已经添加成功,请稍后重新进来查看');
+							this.add_employee_show = false;
+							this.open_right(this.item_info);
+						}
+					})
+					.finally(() => {
+						this.setUser_loading = false;
+					});
+			});
+		},
+		// 其他角色添加人员
+		sub_add_employee(form) {
+			var that = this;
+			this.$refs.Employee.confirm(); //调用组件的confirm();
+			let data = { target: [] };
+			if (that.employee_arr.length > 0) {
+				that.employee_arr.forEach(element => {
+					data.target.push({ role_id: this.item_info.id, employee_id: element });
+				});
+			} else {
+				this.$message.error('未选择人员');
+				return;
+			}
+			this.setUser_loading = true;
+			this.$nextTick(() => {
+				this.$axios('post', '/api/role/user/many', data)
+					.then(res => {
+						if (res.data.code == 1) {
+							this.$message.success('已经添加成功,请稍后重新进来查看');
+							this.add_employee_show = false;
+							this.open_right(this.item_info);
+						}
+					})
+					.finally(() => {
+						this.setUser_loading = false;
+					});
+			});
+		},
+
+		add_employee_confirm(val) {
+			this.employee_arr = [];
+			val.employee.forEach(element => {
+				this.employee_arr.push(element.id);
+			});
+		},
+
+		//关闭弹窗
+		publicClose() {
+			this.$refs.Employee.close();
+			this.add_employee_show = false;
+		},
+		publicClose2() {
+			this.$refs.Employee2.close();
+			this.management_scope_show = false;
+			this.dialogFormVisible = false;
+		},
+		//删除系统管理员
+		del_creator() {
+			var userData = this.$getUserData();
+			if (!this.radioVal) {
+				this.$message.error('请选择要删除的系统管理员');
+				return false;
+			}
+			if (this.radioVal == userData.id) {
+				this.$message.error('不能删除自己');
+				return false;
+			}
+			this.$confirm('确定要删除该系统管理员?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.$axios('post', '/api/role/creator/delete', { employee_id: this.radioVal })
+					.then(res => {
+						if (res.data.code == 1) {
+							this.$message.success(res.data.msg);
+							this.page=1;
+							this.get_table_list();
+						}
+					})
+					.finally(() => {
+						this.radioVal = '';
+					});
+			});
+		},
+		del_item() {
+			var userData = this.$getUserData();
+			let employee_id=[];
+			if(this.item_info.code=='dept_manager'){
+				if (this.del_arr.length == 0) {
+					this.$message.error('请选择需要同步的人员');
+					return;
+				}
+				employee_id=this.del_arr.map(item=>{
+					return item.employee_id
+				})
+			}else{
+				if (!this.radioVal) {
+					this.$message.error('请选择要删除的人员');
+					return false;
+				}
+				if (this.radioVal == userData.id) {
+					this.$message.error('不能删除自己');
+					return false;
+				}
+				employee_id.push(this.radioVal);
+			}
+			
+			this.$confirm('确定要删除该人员?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.$axios('post', '/api/role/user/del', { role_id: this.item_info.id, employee_id: JSON.stringify(employee_id)})
+					.then(res => {
+						if (res.data.code == 1) {
+							this.$message.success(res.data.msg);
+							this.page=1;
+							this.get_table_list();
+						}
+					})
+					.finally(() => {
+						this.radioVal = '';
+					});
+			});
+		},
+		add_item() {
+			this.add_employee_show = true;
+		},
+		get_role_list() {
+			this.role_loading = true;
+			this.$axios('get', '/api/role/list')
+				.then(res => {
+					if (res.data.code == 1) {
+						this.role_list = res.data.data.list;
+						this.open_right(this.role_list[0]);
+					}
+				})
+				.finally(() => {
+					this.role_loading = false;
+				});
+		},
+		handleSizeChange: function(val) {
+			this.pageSize=val;
+			this.page = 1;
+			this.get_table_list();
+		},
+		//页码变更
+		handleCurrentChange: function(val) {
+			this.page = val;
+			this.get_table_list();
+		},
+		open_right(data) {
+			this.page=1;
+			this.keyword='';
+			this.jurisdiction = data.code == 'employee' ? this.dataAccessListEmployee : this.dataAccessList;
+			this.item_info = data;
+			if (data.code != 'employee') {
+				this.get_table_list();
+			}
+		},
+		get_table_list() {
+			this.table_loading = true;
+			var that = this;
+			this.table_list = [];
+			this.$axios('get', '/api/role/user', { role_id: this.item_info.id, keyword: this.keyword,page_size:this.pageSize,page:this.page })
+				.then(res => {
+					if (res.data.code == 1) {
+						var list = res.data.data.list;
+						list.forEach(item => {
+							if (item.point_limit == null || item.point_limit == undefined || item.point_limit.length == 0) {
+								item.point_limit = [{ name: 'A分', point: '0', pt_id: that.$getTyps('AF').id }, { name: 'B分', point: '0', pt_id: that.$getTyps('BF').id }];
+							}
+							if (item.deduct_task_monthly == null || item.deduct_task_monthly == undefined || item.deduct_task_monthly.length == 0) {
+								item.deduct_task_monthly = [{ name: 'A分', point: '0', pt_id: that.$getTyps('AF').id }, { name: 'B分', point: '0', pt_id: that.$getTyps('BF').id }];
+							}
+							if (item.reward_task_monthly == null || item.reward_task_monthly == undefined || item.reward_task_monthly.length == 0) {
+								item.reward_task_monthly = [{ name: 'A分', point: '0', pt_id: that.$getTyps('AF').id }, { name: 'B分', point: '0', pt_id: that.$getTyps('BF').id }];
+							}
+						});
+						this.table_list = list || [];
+						this.total=res.data.data.total
+					}
+				})
+				.finally(() => {
+					this.table_loading = false;
+				});
+		},
+		// 关闭提示语
+		tips_close() {
+			this.$setCache('framework', 'true');
+			this.tips_show = false;
+		}
+	}
+};
+</script>
+
+<style scoped="scoped">
+::v-deep .el-radio .el-radio__label {
+	display: none;
+}
+::v-deep .radioBox .el-radio__label {
+	display: inline-block;
+}
+.tips {
+	background: #dcdfe6;
+	border-radius: 50%;
+	width: 14px;
+	height: 14px;
+	color: #fff;
+	display: inline-block;
+	font-size: 12px;
+	line-height: 14px;
+	text-align: center;
+}
+.name {
+	font-size: 18px;
+	margin-bottom: 5px;
+}
+.user_text {
+	font-size: 12px;
+}
+.cursor_pointer {
+	cursor: pointer;
+}
+.ps p {
+	margin-bottom: 10px;
+}
+</style>

+ 436 - 0
src/views/subassembly/set/log.vue

@@ -0,0 +1,436 @@
+<template>
+	<div class="all-box">
+		<div class="all" style="padding: 40px;">
+			<div style="margin-bottom: 30px;">
+				<div class="initia_title">工作日志积分</div>
+				<div class="initia_title_1">
+					1、启用后,在钉钉发布工作日志,系统自动按“日志积分规则”奖分
+					<br />
+					2、日志名称必须与“钉钉日志模板名称”一致,否则奖分不会生效
+					<br />
+					3、日志支持每月、每周、每日汇报,可自行根据需要设置“日志积分规则
+				</div>
+				<div class="flex-box-end" style="margin-top: 20px;">
+					<el-button  v-if="$authoritys() != 'dept_manager' && $authoritys() != 'employee'" plain @click="isShowLog = true">刷新汇报记录</el-button>
+					<el-button  type="primary" plain  @click="add()">新增模板</el-button>
+					<el-button  type="primary" @click="isPz = true">设置<i class="el-icon-setting el-icon--right"></i></el-button>
+				</div>
+			</div>
+			<el-table ref="multipleTable" :data="list" tooltip-effect="dark" align="center" v-loading="loading">
+				<el-table-column label="序号" align="left" type="index"></el-table-column>
+				<el-table-column label="日志名称" prop="name"></el-table-column>
+				<el-table-column label="日志积分规则"  min-width="300">
+					<template slot-scope="scope">
+						<span>{{ getMoney(scope.row.interval) }}汇报,每次奖{{ scope.row.config.point }} B分,汇报超过{{scope.row.config.upper_limit}}次不再奖励积分</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="状态">
+					<template slot-scope="scope">
+						<span v-if="scope.row.enable == 0" class="orange">已禁用</span>
+						<span v-else class="green">已启用</span>
+					</template>
+				</el-table-column>
+				<el-table-column label="操作">
+					<template slot-scope="scope">
+						<div class="flex-box-ce">
+							<div @click.stop="openSet(scope.row)" style="margin-right: 10px;"><span class="lookQrcode">编辑</span></div>
+							<div @click.stop="deleteSet(scope.row)"><span class="lookQrcode red">删除</span></div>
+						</div>
+					</template>
+				</el-table-column>
+				<template slot="empty">
+					<noData :isSolt="true">
+						<div>
+							您当前没有日志模板,去添加
+							<span style="cursor: pointer;margin-left: 10px;" @click="add()" class="blue">添加</span>
+						</div>
+					</noData>
+				</template>
+			</el-table>
+		</div>
+		<el-dialog :visible.sync="isPz" top="25vh" width="520px" class="dialog">
+			<el-alert class="el-dialog__body" title="日志配置适用所有日志" type="warning" :closable="false" show-icon></el-alert>
+			<el-form label-width="170px" ref="setForm" class="form">
+				<el-form-item label="是否允许查看日志内容"><el-switch v-model="see_log" :active-value="1" :inactive-value="0"></el-switch></el-form-item>
+				<el-form-item style="text-align: right; margin-bottom: 0">
+					<el-button @click="isPz = false">取消</el-button>
+					<el-button type="primary" :loading="setLoading" :disabled="setLoading" @click="saveFirst()">确定</el-button>
+				</el-form-item>
+			</el-form>
+		</el-dialog>
+		<el-dialog :title="isAdd? '添加日志模板':'编辑日志模板'" :visible.sync="dialogVisible" top="25vh" width="520px" class="dialog">
+			<el-alert class="el-dialog__body" title="日志名称必须与钉钉日志模板名称一致,否则设置无效,不会产生积分" type="warning" :closable="false" show-icon></el-alert>
+			<el-form label-width="110px" :model="selectItem" ref="setForm" class="form">
+				<el-form-item style="margin-bottom: 0px;" label="日志名称">
+					<div class="flex-box flex-v-ce">
+						<el-input v-if="isAdd" style="width: 200px;" v-model="selectItem.name" placeholder="请输入日志名称"></el-input>
+						<template v-else>
+							<div class="font-flex-word name">{{ selectItem.name }}</div>
+							<div class="blue" @click="showName(selectItem.name)">修改</div>
+						</template>
+					</div>
+					<el-dialog title="设置名称" :visible.sync="isShowName" top="25vh" width="520px" append-to-body>
+						<div style="text-align: center;">
+							<el-alert
+								class="el-dialog__body"
+								title="日志名称必须与钉钉日志模板名称一致,否则设置无效,不会产生积分"
+								type="warning"
+								:closable="false"
+								show-icon
+							></el-alert>
+							<el-input style="width: 200px;" v-model="nameVal" placeholder="请输入日志名称"></el-input>
+							<div class="flex-box-end" style="margin-top: 20px;">
+								<el-button @click="isShowName = false">取消</el-button>
+								<el-button type="primary" @click="submitName()">确定</el-button>
+							</div>
+						</div>
+					</el-dialog>
+				</el-form-item>
+				<el-form-item style="margin-bottom: 10px;" label="是否启用"><el-switch v-model="selectItem.enable"></el-switch></el-form-item>
+				<template v-if="selectItem.enable">
+					<div style="margin-top: 20px;"></div>
+					<div class="title">日志积分规则</div>
+					<el-form-item label="日志汇报要求" prop="interval" :rules="[{ required: true, message: '请选择汇报要求' }]">
+						<el-select class="widthInput" v-model="selectItem.interval" placeholder="请选择">
+							<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+					<el-form-item label="每次汇报奖励" :rules="[{ required: true, message: '请输入分值', trigger: 'change' }]" prop="config.point">
+						<el-input
+							class="widthInput"
+							placeholder="请输入(1~999)"
+							@input="checkCountry($event, 'input1')"
+							id="input1"
+							v-model.number="selectItem.config.point"
+						></el-input>
+						<span style="margin-left: 5px;">B分</span>
+					</el-form-item>
+					<el-form-item label="汇报提交超过" prop="config.upper_limit" :rules="[{ required: true, message: '请输入次数' }]">
+						<el-input
+							class="widthInput"
+							placeholder="请输入(1~999)"
+							@input="checkCountry($event, 'input2')"
+							id="input2"
+							v-model.number="selectItem.config.upper_limit"
+						></el-input>
+						<span style="margin-left: 5px;">次,不再奖励积分</span>
+					</el-form-item>
+				</template>
+				<el-form-item style="text-align: right; margin-bottom: 0">
+					<el-button @click="dialogVisible = false">取消</el-button>
+					<el-button type="primary" :loading="setLoading" :disabled="setLoading" @click="submit('setForm')">确定</el-button>
+				</el-form-item>
+			</el-form>
+		</el-dialog>
+		<el-dialog title="刷新日志记录" :visible.sync="isShowLog" top="25vh" width="520px" class="dialog" :close-on-click-modal="false" :close-on-press-escape="false">
+			<el-form :model="logData" ref="setForm2" label-width="110px">
+				<el-form-item label="日志汇报要求" prop="type" :rules="[{ required: true, message: '请选择汇报要求' }]">
+					<el-select class="widthInput" v-model="logData.type" placeholder="请选择" style="width: 250px;">
+						<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item label="选择日期" prop="target_date" :rules="[{ required: true, message: '请选择汇报要求' }]">
+					<el-date-picker :picker-options="pickerOptions" v-model="logData.target_date" type="date" value-format="yyyy-MM-dd" placeholder="选择日期" style="width: 250px;"></el-date-picker>
+				</el-form-item>
+			</el-form>
+			<span slot="footer" class="dialog-footer">
+				<el-button @click="isShowLog = false">取 消</el-button>
+				<el-button type="primary" @click="refresh('setForm2')">确 定</el-button>
+			</span>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+
+export default {
+	
+	data() {
+		return {
+			loading: false,
+			setLoading: false,
+			ding_enable: true,
+			list: [],
+			dialogVisible: false,
+			isPz:false,
+			pickerOptions: {
+				disabledDate(time) {
+					return time.getTime() > Date.now() - 8.64e7;
+				}
+			},
+			selectItem: {
+				config: { point: 0, upper_limit: 0 },
+				enable: true,
+				id: '',
+				interval: 1,
+				name: '',
+				site_id: '',
+				type: ''
+			},
+			options: [
+				{
+					value: 1,
+					label: '每日'
+				},
+				{
+					value: 2,
+					label: '每周'
+				},
+				{
+					value: 3,
+					label: '每月'
+				}
+			],
+			isShowName: false,
+			nameVal: '',
+
+			// 添加模板
+			isAdd: false,
+
+			isShowLog: false,
+			logData: {
+				type: 1,
+				target_date: ''
+			},
+			configData:{},
+			see_log:1
+		};
+	},
+	watch: {
+		dialogVisible(val) {
+			if (!val) {
+				this.isAdd = false;
+				this.selectItem = {
+					config: { point: 0, upper_limit: 0 },
+					enable: true,
+					id: '',
+					interval: 1,
+					name: '',
+					site_id: '',
+					type: ''
+				};
+			}
+		}
+	},
+	mounted() {
+		this.getList();
+		this.cheakAx();
+	},
+	methods: {
+		saveFirst(name) {
+			this.configData.see_log=this.see_log
+			this.$axios('post', '/api/integral/site/config', this.configData)
+				.then(res => {
+					if (res.data.code == 1) {
+						this.$message({
+							message: res.data.msg,
+							type: 'success'
+						});
+					}
+				})
+				.finally(() => {
+					this.isPz=false;
+					this.cheakAx('first');
+				});
+		},
+		cheakAx() {
+			this.$axios('get', '/api/integral/site/config').then(res => {
+				this.$store.dispatch('setConfig', res.data.data);
+				this.configData = res.data.data;
+				this.see_log=res.data.data.see_log;
+			})
+		},
+		refresh(fromName) {
+			this.$refs[fromName].validate(valid => {
+				if (valid) {
+					let type='';
+					if(this.logData.type==1){
+						type='daily'
+					}else if(this.logData.type==2){
+						type='weekly'
+					}else{
+						type='monthly'
+					}
+					let data = {
+						type: type,
+						// employee_id: this.$getUserData().id,
+						target_date: this.logData.target_date
+					};
+					this.$axios('post', '/api/ding/report_sync', data)
+						.then(res => {
+							this.$message.success('已刷新');
+						})
+						.finally(() => {
+							this.logData={
+								type: 1,
+								target_date: ''
+							};
+							this.isShowLog = false;
+						});
+				}
+			});
+		},
+		deleteSet(e) {
+			this.$confirm('确定要删除该日志模板吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.$axios('DELETE', '/api/integral/report/templates', { id: e.id }).then(res => {
+					if (res.data.code == 1) {
+						this.$message.success('删除成功');
+						this.getList();
+					}
+				});
+			});
+		},
+		add() {
+			if (this.list.length == 20) {
+				this.$message.warning('日志模板最多有20个');
+				return false;
+			}
+			this.isAdd = true;
+			this.dialogVisible = true;
+		},
+		// 最大值不能大于100
+		checkCountry(e, id) {
+			//解决v-model与oninput同时使用失效问题
+			var dom = document.getElementById(id);
+			var value = dom.value;
+			//写你自己的输入规则
+			value = value.replace(/[^\d]/g, '');
+			if (value > 999) {
+				id == 'input1' ? (this.selectItem.config.point = '') : (this.selectItem.config.upper_limit = '');
+				this.$message.warning('不能大于999');
+				return false;
+			}
+			dom.value = value; //输入框赋值
+			id == 'input1' ? (this.selectItem.config.point = dom.value) : (this.selectItem.config.upper_limit = dom.value);
+		},
+		submitName() {
+			if (!this.nameVal || this.nameVal == null || this.nameVal == undefined) {
+				this.$message.error('请输入日志名称');
+				return;
+			}
+			this.selectItem.name = this.nameVal;
+			this.isShowName = false;
+		},
+		showName(name) {
+			this.nameVal = name;
+			this.isShowName = true;
+		},
+		submit(fromName) {
+			if (this.isAdd) {
+				if (!this.selectItem.name) {
+					this.$message.error('请输入日志名称');
+					return false;
+				}
+			}
+			if (this.selectItem.enable) {
+				if (this.selectItem.config.point == 0) {
+					this.$message.error('汇报奖励不能为0');
+					return false;
+				}
+				if (this.selectItem.config.upper_limit == 0) {
+					this.$message.error('提交超过次数不能为0');
+					return false;
+				}
+			}
+			this.$refs[fromName].validate(valid => {
+				if (valid) {
+					this.setLoading = true;
+					let jsonItem = JSON.stringify(this.selectItem);
+					let data = JSON.parse(jsonItem);
+					data.enable = data.enable ? 1 : 0;
+					data.point = data.config.point;
+					data.upper_limit = data.config.upper_limit;
+					if (this.isAdd) {
+						data.type = 'other';
+					}
+					this.$axios('post', '/api/integral/report/templates', data)
+						.then(res => {
+							if (res.data.code == 1) {
+								this.$message.success(res.data.msg);
+								this.getList();
+								this.dialogVisible = false;
+							}
+						})
+						.finally(() => {
+							this.setLoading = false;
+						});
+				}
+			});
+		},
+		openSet(item) {
+			var jsonItem = JSON.stringify(item);
+			this.selectItem = JSON.parse(jsonItem);
+			this.selectItem.enable = this.selectItem.enable == 0 ? false : true;
+			this.dialogVisible = true;
+		},
+		getMoney: function(index) {
+			var str; //1-每日 2-每周 3-每月
+			switch (index) {
+				case 1:
+					str = '每日';
+					break;
+				case 2:
+					str = '每周';
+					break;
+				case 3:
+					str = '每月';
+					break;
+			}
+			return str;
+		},
+		getList() {
+			this.loading = true;
+			this.$axios('get', '/api/integral/report/templates/list')
+				.then(res => {
+					this.list = res.data.data.list;
+				})
+				.finally(err => {
+					this.loading = false;
+				});
+		}
+	}
+};
+</script>
+<style scoped lang="scss">
+.el-dialog__body {
+	position: relative;
+	top: -20px;
+}
+.widthInput {
+	width: 150px;
+}
+.title {
+	margin: 10px 0;
+	margin-top: 0;
+	font-size: 14px;
+	font-weight: 700;
+	padding-left: 13px;
+}
+.initia_title {
+	font-size: 20px;
+	color: rgba(48, 49, 51, 1);
+	font-family: PingFangSC-Regular;
+}
+.initia_title_1 {
+	color: #e6a23c;
+	font-size: 14px;
+	margin-top: 10px;
+}
+.lookQrcode {
+	color: #606266;
+	cursor: pointer;
+	transition: all 0.3s;
+	font-weight: 700;
+}
+.lookQrcode:hover {
+	color: #2490fd;
+}
+.name {
+	max-width: 200px;
+	margin-right: 10px;
+}
+</style>

+ 1460 - 0
src/views/subassembly/set/rule.vue

@@ -0,0 +1,1460 @@
+<template>
+	<div class="all-box">
+		
+		<!-- 头部提示 -->
+		<el-alert class="diy-tip" title="如何使用积分规则?" type="success" @close="tips_close" v-if="tips_show" description show-icon>
+			<p>1.先【添加规则分类】,再【添加规则】</p>
+			<p>2.拖拽积分‘分类’与‘规则’节点即可排序</p>
+		</el-alert>
+		
+		<div class="all">
+			<div class="flex-box" v-loading="rule_loading">
+				<div class="terr-left">
+					<el-button size="medium" @click="add_class"  type="primary">+ 添加规则分类</el-button>
+					<div style="background-color: #ecf5ff;padding: 10px;margin-bottom: 10px;font-size: 13px;" class="fontColorC"><i class="el-icon-warning blue"></i>  拖拽下方分类即可排序</div>
+					<div class="rule_class_box" v-loading="leftLoading">
+<!-- 						<el-tree
+						  :data="rule_tree"
+						  node-key="id"
+						  :props="defaultProps"
+						  @node-drop="handleDrop"
+						  draggable
+						  :allow-drop="allowDrop"
+						  @node-click="handleNodeClick($event)"
+						  >
+						</el-tree> -->
+						
+						<Rule :data="rule_tree" :paddingl="false" :sum="1" :selectId="selectId" @ruleDrag="ruleDrag" @ruleActive="handleNodeClick"></Rule>
+					</div>
+				</div>
+				<div class="terr-right border-right flex-1">
+					<div class="flex-box flex-v-ce" style="margin-bottom: 12px;">
+						<div class="name">{{ selectItem.name }}  <span style="font-size: 13px;cursor: pointer;" @click="copy()" v-if="selectItem.id">(分类id:<span>{{selectItem.id}}</span>)</span></div>
+						<el-button size="medium" plain v-if="selectItem.id" @click="edit_class">编辑</el-button>
+					</div>
+					
+					<div class="flex-box-ce flex-d-wrap fontColorB" v-if="selectItem.dept_info.length>0">
+						可见范围:<span v-for="(item,index) in selectItem.dept_info" :key="index">{{item.name}} 、</span>
+					</div>
+					
+					<div class="flex-box ruleSearch" style="padding-top: 8px;">
+						<div class="flex-box btns flex-v-ce">
+							<el-button size="small" @click="del_item" type="danger" plain>批量删除</el-button>
+							<el-button size="small" @click="add_rule" type="primary">添加规则</el-button>
+							<el-button size="small" type="success" @click="toleadShw = true" plain>导入规则</el-button>
+							<el-button size="small" type="success" @click="derivedRule" plain>导出规则</el-button>
+						</div>
+						<el-input placeholder="搜索规则内容" style="width: 250px;margin-left: 10px;" maxlength="20" v-model="keyword" clearable/>
+					</div>
+					<div  style="margin-top: 20px;">
+						<div class="table-header flex-box-ce">
+							<div style="width: 55px;padding: 0 10px;box-sizing: border-box;">
+								<el-checkbox v-model="checked_all" @change="checkedAll"></el-checkbox>
+							</div>
+							<div class="flex-1" style="text-align: left;">内容</div>
+							<div class="flex-1" style="text-align: center;">分值</div>
+							<div class="flex-1" style="text-align: center;">操作</div>
+						</div>
+						<div class="table-content" v-loading="rightLoading">
+							<transition-group name="drag" tag="div" v-if="item_list.length>0">
+								<div 
+								 v-for="(item,index) in item_list" :key="item.id" 
+								 class="flex-box-ce"
+								 :class="{'border_bottom': (border_bottom==item.id&&directionIndex==1),'border_top': (border_bottom==item.id&&directionIndex==2)}"
+								 draggable 
+								 @dragstart.stop="dragstart($event,item,index)" 
+								 @dragenter.stop="dragenter($event,item,index)"  
+								 @dragover.stop="dragover($event, item,index)"  
+								 @drop.stop="drop($event,item,index)"
+								 @dragend.stop="dragend($event,item,index)">
+									<div style="width: 55px;padding: 0 10px;box-sizing: border-box;">
+										<el-checkbox v-model="item.checked" @change="handleSelectionChange"></el-checkbox>
+									</div>
+									<div class="flex-1" style="text-align: left;" @click="editDetails(item)">{{item.remark}}</div>
+									<div class="flex-1" style="text-align: center;" @click="editDetails(item)">
+										<div v-if="item.range_type == 1">
+											<span :class="item.min_point > 0 ? 'red' : 'green'">{{ item.min_point }} {{ item.pt_Obj.name }}</span>
+										</div>
+										<div v-if="item.range_type == 2">
+											<span :class="item.min_point > 0 ? 'red' : 'green'">{{ item.min_point }}</span>
+											至
+											<span :class="item.max_point > 0 ? 'red' : 'green'">{{ item.max_point }} {{ item.pt_Obj.name }}</span>
+										</div>
+									</div>
+									<div class="flex-1" style="text-align: center;" @click="editDetails(item)">
+										<!-- <span>{{item.sort}}</span> -->
+										<span @click.stop="ruleQRcode(item)" class="lookQrcode">查看二维码</span>
+										<span class="blue" style="padding-left: 10px;cursor: pointer;">编辑</span>
+									</div>
+								</div>
+							</transition-group>	
+							<noData v-if="item_list.length==0"></noData>
+							<center style="padding: 20px 0;">
+								<el-pagination
+									background
+									@size-change="handleSizeChange"
+									@current-change="handleCurrentChange"
+									:current-page="page"
+									layout="total, prev, pager, next"
+									:page-size="page_size"
+									:total="total"
+								></el-pagination>
+							</center>
+						</div>
+					</div>
+							
+				</div>
+			</div>
+		</div>
+		
+		<el-dialog @close="closeCode" :visible.sync="innerVisible" width="444px" append-to-body>
+			<div style="border-radius: 15px;border: 1px solid #f1f1f1;padding: 10px; width: 346px;box-sizing: border-box;margin: 0 auto;">
+				<div id="qrcode" ref="qrcode"></div>
+			</div>
+			<div class="qrcodesave" ><span @click.stop="downloadE">下载保存此二维码</span></div>
+		</el-dialog>
+
+		<!-- 编辑添加分类 -->
+		<el-dialog
+			:title="class_type == 'add' ? '添加规则分类' : '编辑规则分类'"
+			:visible.sync="class_show"
+			@close="add_dept_close('dept_formdata')"
+			:close-on-click-modal="false"
+			width="600px"
+		>
+			<el-form :model="dept_formdata" ref="dept_formdata" :rules="dept_formdata_rules" label-width="80px">
+				<el-form-item label="规则分类" prop="name"><el-input style="width: 400px;" placeholder="分类名称" v-model="dept_formdata.name" maxlength="10" show-word-limit></el-input></el-form-item>
+				<el-form-item label="上级分类">
+					<el-cascader
+						style="width: 400px;"
+						ref="pid"
+						v-model="dept_formdata.pid"
+						:options="rule_tree"
+						:props="{ checkStrictly: true, label: 'name', value: 'id', children: 'child' }"
+						clearable
+						filterable
+					></el-cascader>
+				</el-form-item>
+				<el-form-item label="可见范围" prop="dept_ids">
+					<el-cascader
+						size="medium"
+						style="width: 400px;"
+						v-model="dept_name"
+						@change="handleChange"
+						:options="dept_tree"
+						collapse-tags
+						:props="{ checkStrictly: true, value: 'id', label: 'name', multiple: true, children: '_child' }"
+						ref="dept"
+						clearable
+						placeholder="全公司"
+					></el-cascader>
+					<div style="color:#b5b7bb;padding-left:10px;">不选时,默认所有人可见</div>
+				</el-form-item>
+				<div class="flex-box">
+					<el-button type="danger" @click="del_dept" v-show="class_type == 'edit'">删除分类</el-button>
+					<div class="flex-1"></div>
+					<el-button @click="add_dept_close('dept_formdata')">取消</el-button>
+					<el-button type="primary" @click="submit_add_dept('dept_formdata')" :loading="dept_loading" :disabled="dept_loading">确定</el-button>
+				</div>
+			</el-form>
+		</el-dialog>
+		
+		<!-- 添加编辑规则 -->
+		<el-dialog :title="rule_type == 'add' ? '添加规则' : '编辑规则'" :visible.sync="rule_show" :close-on-click-modal="false" width="600px">
+			<el-form :model="rules_detail_form" ref="rules_detail_form" :rules="rules" label-width="80px">
+				<el-form-item label="规则内容" prop="remark">
+					<el-input v-model="rules_detail_form.remark" placeholder="请输入规则内容" type="textarea" :rows="5" maxlength="300" show-word-limit></el-input>
+				</el-form-item>
+				<el-form-item label="所属分类" prop="rule_id">
+					<div style="position: relative;">
+						<div style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; z-index: 9;"	@click="not_data"	v-show="rule_tree !== null && rule_tree.length == 0"></div>
+						<el-cascader
+							ref="dept2"
+							placeholder="请选择分类"
+							v-model="rules_detail_form.rule_id"
+							:options="rule_tree"
+							:props="{ checkStrictly: true, label: 'name', value: 'id', children: 'child' }"
+							clearable
+							filterable
+						></el-cascader>
+					</div>
+				</el-form-item>
+				<el-form-item label="规则类型" prop="pt_id">
+					<el-radio v-model="rules_detail_form.pt_id" :label="item.id" v-for="(item, index) in point_types" :key="index" v-show="item.name !== '绩效分'">
+						{{ item.name }}
+					</el-radio>
+				</el-form-item>
+				<el-form-item label="规则积分" prop="range_type">
+					<el-radio-group v-model="rules_detail_form.range_type">
+						<el-radio :label="item.value" v-for="(item, index) in range_type_arr" :key="index">{{ item.name }}</el-radio>
+					</el-radio-group>
+				</el-form-item>
+				<div class="flex-box flex-v-ce">
+					<el-form-item class="select_width">
+						<el-input placeholder="请输入分值" v-model.number="rules_detail_form.min_point" type="age">
+							<el-select v-model="integral_select_name1" slot="prepend" placeholder="请选择类型">
+								<el-option v-for="(item, index) in integral_select" :key="index" :label="item.name" :value="item.value"></el-option>
+							</el-select>
+						</el-input>
+					</el-form-item>
+
+					<div v-if="rules_detail_form.range_type == 2" style="position: relative;bottom: 10px;padding: 0 10px;">至</div>
+					<el-form-item v-if="rules_detail_form.range_type == 2" class="form-right select_width">
+						<el-input placeholder="请输入分值" v-model.number="rules_detail_form.max_point" type="age">
+							<el-select v-model="integral_select_name2" slot="prepend" placeholder="请选择类型">
+								<el-option v-for="(item, index) in integral_select" :key="index" :label="item.name" :value="item.value"></el-option>
+							</el-select>
+						</el-input>
+					</el-form-item>
+				</div>
+
+				<div class="flex-box flex-v-ce">
+					<el-button type="danger" @click="del_rule" :loading="delRule_loading" :disabled="delRule_loading" v-show="rule_type == 'edit'">删除规则</el-button>
+					<div class="flex-1"></div>
+					<el-button @click="rule_close('rules_detail_form')">取消</el-button>
+					<el-button type="primary" v-show="rule_type == 'add'" :loading="rule_loading2" :disabled="rule_loading2" @click="add_submit_rule('rules_detail_form')">
+						确定
+					</el-button>
+					<el-button type="primary" v-show="rule_type == 'edit'" :loading="rule_loading2" :disabled="rule_loading2" @click="edit_submit_rule('rules_detail_form')">
+						确定
+					</el-button>
+				</div>
+				
+			</el-form>
+		</el-dialog>
+
+		<!-- 导入规则 -->
+		<toLead :visible.sync="toleadShw" :nowIndex.sync="nowIndex" :tolead="toleadResult" @confirm="tealConfirm" :export_type="'rule_items'" :dstyle="'height:180px;padding: 40px 80px;'">
+			<template slot="1">
+				<el-row v-if="nowIndex == 1">
+					<el-col :span="12">
+						<div class="text-center">
+							<p>1、下载规则模版,填写好规则</p>
+							<p><img src="@/assets/image/rules_mould.png" alt="" /></p>
+							<p>规则表</p>
+							<span>
+								<a target="_blank" :href="downloadUrl"><el-button type="primary">下载模板</el-button></a>
+							</span>
+						</div>
+					</el-col>
+					<el-col :span="12">
+						<div class="text-center">
+							<p>2、上传填好的规则表</p>
+							<p><img src="@/assets/image/rules_mould1.png" alt="" /></p>
+							<p>仅支持xls、xlsx格式文件</p>
+							<el-upload
+								class="upload-demo"
+								:headers="ATOKEN"
+								ref="upload"
+								:limit="1"
+								:action="action"
+								:on-remove="handleRemove"
+								:on-success="handleSuccess"
+								:before-upload="beforeFilesUpload"
+								:file-list="fileList"
+								:on-progress="handleOnthecross"
+							>
+								<el-button slot="trigger" type="primary">选取文件</el-button>
+							</el-upload>
+						</div>
+					</el-col>
+				</el-row>
+			</template>
+		</toLead>
+	
+	</div>
+</template>
+
+<script>
+
+import QRCode from 'qrcodejs2';
+import toLead from '@/components/toLead';
+import Rule from '@/components/Rule';
+import {_debounce} from '@/api/auth';
+export default {
+	data() {
+		return {
+			keyword:'',//搜索关键字
+			ruleDetails: {},
+			innerVisible: false,
+			bodyLoad: false,
+			action: process.env.VUE_APP_BASE_API + 'api/rule/import',
+			downloadUrl: process.env.VUE_APP_BASE_API + 'api/download/rule_item',
+			ATOKEN: { 'A-TOKEN': this.$getToken(), Accept: 'application/vnd.test.v2+json' },
+			tips_show: true,
+			rule_loading: false,
+			rule_tree: [],
+			item_list: [],
+			all_item_list: [],
+			defaultProps: {
+				id: 'id',
+				children: 'child',
+				label: 'name'
+			},
+			selectItem: { name: '积分规则',dept_info:[] }, //选择的分类
+			//添加分类
+			class_show: false,
+			delRule_loading: false,
+			dept_formdata_rules: {
+				name: [
+					{
+						required: true,
+						message: '请输入规则分类',
+						trigger: 'blur'
+					},
+					{
+						min: 2,
+						max: 20,
+						message: '长度在 2 到 20 个字符',
+						trigger: 'blur'
+					}
+				]
+			},
+			dept_formdata: {
+				name: '',
+				pid: '0',
+				cycle_type: '1',
+				dept_ids:[],
+			},
+			class_type: 'add',
+			dept_loading: false,
+
+			// 规则相关
+			del_item_id: [], //选择规则ID集合
+			rule_loading2: false,
+			rule_type: 'add',
+			rule_show: false,
+			rules_detail_form: {
+				rule_id: '',
+				range_type: '1',
+				prize_type: '0',
+				min_point: '',
+				max_point: '',
+				min_point2: '',
+				max_point2: '',
+				remark: '',
+				is_attendance: '0',
+				cycle_type: '1',
+				pt_id: 0
+			},
+			rules: {
+				remark: [
+					{
+						required: true,
+						message: '请输入规则名称',
+						trigger: 'blur'
+					}
+				],
+				rule_id: [
+					{
+						required: true,
+						message: '请选择分类',
+						trigger: 'change'
+					}
+				]
+			},
+			integral_select_name1: '1',
+			integral_select_name2: '1',
+			point_types: [],
+			range_type_arr: [
+				{
+					name: '固定分值',
+					value: '1'
+				},
+				{
+					name: '范围分值',
+					value: '2'
+				}
+			],
+			integral_select: [
+				{
+					name: '奖分',
+					value: '1'
+				},
+				{
+					name: '扣分',
+					value: '2'
+				}
+			],
+			//导入规则
+			import_rules_show: false,
+			save_loading: false,
+			import_btn_show: false,
+			fileList: [],
+			file: null,
+			// item_lists:[],
+			//导入相关
+			toleadShw: false,
+			nowIndex: 1,
+			toleadResult: {},
+			
+			dept_tree:[],
+			dept_name:[],
+			employee_selected: { dept: [], employee: [] },
+			oneruleId: [],
+			echoGather: [],
+			
+			selectId:0,
+			leftLoading:false,
+			rightLoading:false,
+			
+			checked_all:false,//全选
+			dragIndex:0,
+			border_bottom:0,
+			isTd:false,//是否移动位置
+			
+			directionIndex:0,
+			page:1,
+			page_size:100,
+			total:0,
+		};
+	},
+	components: {toLead,Rule},
+	watch: {
+		toleadShw(val){
+			if(val) this.nowIndex = 1
+		},
+		'dept_formdata.pid'(val, old_val) {
+			this.$nextTick(() => {
+				this.$refs.pid.dropDownVisible = false;
+			});
+		},
+		'rules_detail_form.rule_id'(val, old_val) {
+			this.$nextTick(() => {
+				this.$refs.dept2.dropDownVisible = false;
+			});
+		},
+		keyword:_debounce(function(val){
+			this.page=1;
+			this.getRuleList(this.selectId)
+		}),
+	},
+	created() {
+		this.point_types = this.$getTyps().reverse();
+	},
+	mounted() {
+		this.$nextTick(function() {
+			if (this.$getCache('rule')) {
+				this.tips_show = false;
+			} else {
+				this.tips_show = true;
+			}
+		});
+		this.getData();
+		this.getRuleList();
+		this.getDepartment();
+	},
+	methods: {
+		
+		getArrIndex(arr,id,data,func){
+			if(arr&&arr.length>0){
+				arr.some((e,index)=>{
+					if(e.id==id){
+						data={
+						  id:id,
+						  prev_id:arr[index-1]? arr[index-1].id:0,
+						  sibling_id:arr[index+1]? arr[index+1].id:0,
+						}
+						func(data)
+						return true
+					}else{
+						this.getArrIndex(e.child,id,data,func);
+					}
+				})
+			}
+		},
+		
+		handleDrop(draggingNode, dropNode, dropType, ev) {
+			let oneId,twoId;
+		    var data={}
+			this.getArrIndex(this.rule_tree,draggingNode.data.id,data,(val)=>{
+				this.ruleDrag(val);
+			});
+		},
+		//拖拽时判定目标节点能否被放置
+		allowDrop(draggingNode, dropNode, type) {
+			if(type=='inner'){
+				return false;
+			}
+			if(draggingNode.data.pid==dropNode.data.pid){
+				return true;
+			}else{
+				return false
+			}
+		},
+		
+		checkedAll(val){
+			let item_list=JSON.parse(JSON.stringify(this.item_list));
+			item_list.forEach(e=>{
+				e.checked=val
+			})
+			this.item_list=item_list
+			this.$nextTick(()=>{
+				this.handleSelectionChange();
+			})
+		},
+		
+		dragstart(e,item,index) {
+		  this.dragIndex = index;
+		  this.isTd=true;
+		  setTimeout(() => {
+		  	e.target.classList.add('moveing')
+		  }, 0)
+		},
+		
+		//dragenter,进入目标元素触发,相当于mouseover
+		dragenter(e,item,index) {
+		  e.preventDefault();
+		  if(this.dragIndex!=index){
+			if(index>this.dragIndex){
+			   this.directionIndex=1;
+			}else{
+			   this.directionIndex=2;
+			}
+			this.border_bottom=item.id
+		  }else{
+			this.border_bottom=0;
+		  }
+		},
+		//dragover,进入目标、离开目标之间,连续触发
+		dragover(e,item,index) {
+		  e.preventDefault();
+		},
+		// 鼠标松开 防抖触发排序
+		drop(e,item,index) {
+			// return false
+			this.border_bottom=0;
+			if (this.dragIndex !== index&&this.isTd) {
+			  this.isTd=false;
+			  let moving = this.item_list[this.dragIndex]; //获取之前记录的元素
+			  this.item_list.splice(this.dragIndex, 1); //删除列表的记录元素
+			  this.item_list.splice(index,0, moving);//插入元素
+			  this.dragIndex = index;
+			  
+			  // oneId前一个ID twoId后一个ID
+			  let oneId=this.item_list[index-1]? this.item_list[index-1].id:0;
+			  let twoId=this.item_list[index+1]? this.item_list[index+1].id:0;
+			  let data={
+				  id:this.item_list[index].id,
+				  prev_id:oneId,
+				  sibling_id:twoId,
+			  }
+			  this.rightLoading = true;
+			  this.$axios('post','api/integral/rule/items/drag',data).then(res => {}).finally(() => {
+			  	this.rightLoading = false;
+			  });
+			}
+		},
+		//用户完成拖动后触发
+		dragend(e,item,index){
+			this.border_bottom=0;
+			e.target.classList.remove('moveing')
+		},
+		
+		
+		ruleDrag(data){
+			this.leftLoading = true;
+			this.$axios('post','api/integral/rule/drag',data).then(res => {
+				
+			}).finally(() => {
+				this.leftLoading = false;
+			});
+		},
+		copy (index) {
+			  //创建input标签
+			  var input = document.createElement('input')
+			  //将input的值设置为需要复制的内容
+			  input.value =this.selectItem.id
+			  //添加input标签
+			  document.body.appendChild(input)
+			  //选中input标签
+			  input.select()
+			  //执行复制
+			  document.execCommand('copy')
+			  //成功提示信息
+			  this.$message.success('分类ID复制成功')
+			  //移除input标签
+			  document.body.removeChild(input)
+		},
+		//编辑分组
+		edit_class() {
+			this.class_show = true;
+			this.class_type = 'edit';
+			this.echoGather=[];
+			this.dept_formdata = {
+				child: this.selectItem.child,
+				id: this.selectItem.id,
+				name: this.selectItem.name,
+				pid: this.selectItem.pid,
+				dept_ids:this.selectItem.dept_ids,
+			};
+			console.log(this.selectItem)
+			for (let i in this.selectItem.dept_ids) {
+				this.getTreeDatas(this.dept_tree, this.selectItem.dept_ids[i]);
+			}
+			this.dept_name = this.echoGather;
+		},
+		//添加分组
+		submit_add_dept(form) {
+			this.dept_loading = true;
+			this.$refs[form].validate(valid => {
+				if (valid) {
+					let pidData=JSON.parse(JSON.stringify(this.dept_formdata.pid))//备份选择的规则,因为提交时间PID会被重新赋值
+					if (this.class_type == 'edit') {
+						delete this.dept_formdata.child;
+						this.dept_formdata.rule_id = this.dept_formdata.id;
+						if (typeof this.dept_formdata.pid == 'number') {
+							
+						} else {
+							if (this.dept_formdata.pid.length > 0) {
+								this.dept_formdata.pid = this.dept_formdata.pid[this.dept_formdata.pid.length - 1];
+							} else {
+								this.dept_formdata.pid = 0;
+							}
+						}
+						let dept_formdata=JSON.parse(JSON.stringify(this.dept_formdata))
+						dept_formdata.dept_ids=JSON.stringify(dept_formdata.dept_ids)
+						this.$axios('post', '/api/integral/rule/edit',dept_formdata)
+							.then(res => {
+								if (res.data.code == 1) {
+									this.selectItem.name = this.dept_formdata.name;
+									this.$message.success('修改积分分类成功');
+									this.getData(true);
+									this.add_dept_close('dept_formdata');
+								}
+							})
+							.finally(() => {
+								this.dept_formdata.pid=pidData
+								this.dept_loading = false;
+							});
+					} else {
+						if (this.dept_formdata.pid !== null && this.dept_formdata.pid.length == 0) {
+							this.dept_formdata.pid = 0;
+						} else {
+							this.dept_formdata.pid = this.dept_formdata.pid[this.dept_formdata.pid.length - 1];
+						}
+						let dept_formdata=JSON.parse(JSON.stringify(this.dept_formdata))
+						dept_formdata.dept_ids=JSON.stringify(dept_formdata.dept_ids)
+						this.$axios('post', '/api/integral/rule',dept_formdata).then(res => {
+							if (res.data.code == 1) {
+								this.$message.success('添加积分分类成功');
+								this.getData();
+								this.add_dept_close('dept_formdata');
+							}
+						}).finally(() => {
+							this.dept_formdata.pid=pidData
+							this.dept_loading = false;
+						});
+					}
+				} else {
+					this.dept_loading = false;
+				}
+			});
+		},
+		getTreeDatas(data, item) {
+			for (let i in data) {
+				if (data[i].id == item) {
+					if (data[i].parentid == 1) {
+						this.oneruleId.unshift(data[i].id);
+						this.echoGather.push(this.oneruleId);
+						this.oneruleId = [];
+						break;
+					} else {
+						this.oneruleId.unshift(data[i].id);
+						this.getTreeDatas(this.dept_tree, data[i].parentid);
+					}
+				} else {
+					if (data[i]._child) {
+						this.getTreeDatas(data[i]._child, item);
+					}
+				}
+			}
+			return;
+		},
+		handleChange(val) {
+			let data = [];
+			for (let i in val) {
+				data.push(val[i][val[i].length - 1]);
+			}
+			this.dept_formdata.dept_ids = data;
+		},
+		handleOnthecross(event, file, fileList){
+			this.nowIndex = 2
+		},
+		//导出规则按钮
+		derivedRule(){
+		  let userData=this.$getUserData();
+		  window.open(process.env.VUE_APP_BASE_API+'/api/download/rule_item/item?employee_id='+userData.id)
+		},
+		//获取部门
+		getDepartment() {
+			this.$axios('get', '/api/department/tree').then(res => {
+				this.dept_tree = this.getTreeData(res.data.data.list);
+			});
+		},
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i]._child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i]._child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i]._child);
+				}
+			}
+			return data;
+		},
+		downloadE() {
+			let rule_remark = '';
+			if (this.ruleDetails.remark.length > 10) {
+				rule_remark = this.ruleDetails.remark;
+				rule_remark = rule_remark.slice(0, 10);
+			} else {
+				rule_remark = this.ruleDetails.remark;
+			}
+			var canvasData = this.$refs.qrcode.getElementsByTagName('canvas')
+			var a = document.createElement("a");
+			var event = new MouseEvent("click"); // 创建一个单击事件
+			a.href = canvasData[0].toDataURL("image/png");
+			a.download = rule_remark;
+			a.dispatchEvent(event); // 触发a的单击事件
+		},
+		payOrder (row) {// 展示二维码
+			let url = 'dingtalk://dingtalkclient/action/open_micro_app'
+			let appid = '?appId='+this.$appId
+			let corpId = '&corpId='+this.$getCache('corpId')
+			// let corpId = '&corpId=ding011f57ab048cf202ffe93478753d9884'
+			let page = '&page='+encodeURIComponent(`pages/workbench/apply/apply?id=${encodeURIComponent(row)}`)//encodeURIComponent('小米')
+			let urls = url+appid+corpId+page
+			var qrcode = new QRCode('qrcode', {
+				text: urls, // 二维码内容
+				width: 325,
+				height: 325,
+				render: 'table', // 设置渲染方式(有两种方式 table和canvas,默认是canvas)
+				colorDark: '#34373e', // 二维码色
+				colorLight: '#ffffff', // 背景色
+				correctLevel: QRCode.CorrectLevel.H // 容错等级,H是heigh,最高,所以二维码看起来很密
+			})
+		},
+		ruleQRcode(row) {
+			this.ruleDetails = row;
+			// 生成二维码
+			this.innerVisible = true;
+			// 使用$nextTick确保数据渲染
+			this.$nextTick(() => {
+				this.payOrder(row.id);
+			});
+		},
+		// 关闭弹框,清除已经生成的二维码
+		closeCode() {
+			setTimeout(() => {
+				this.$refs.qrcode.innerHTML = '';
+			}, 150);
+		},
+
+		// 导入相关
+		close_import() {
+			this.import_rules_show = false;
+			this.import_btn_show = false;
+			this.$refs.upload.clearFiles();
+		},
+
+		tealConfirm(){
+			this.page=1;
+			this.getRuleList(this.selectId);
+		},
+		
+		handleSuccess(response) {
+			if(response.code == 1){
+				response.data.id = 1
+			}else{
+				response.data.id = 0
+				response.data.name = response.msg
+			}
+			this.toleadResult = response.data
+			this.nowIndex = 3
+			return
+
+			if (response.code == 1) {
+				if (response.data.length > 0) {
+					var htmls = response.data;
+					var str = "<div class='red'></div>";
+					htmls.forEach(item => {
+						str += `<div>${item.errors}</div>`;
+					});
+					this.close_import();
+					this.$notify.error({
+						title: '导入错误',
+						dangerouslyUseHTMLString: true,
+						message: str,
+						duration: 0,
+						offset: 50,
+						customClass: 'notifyBox'
+					});
+				} else {
+					this.file = response.data;
+					this.$message.success({ message: response.msg });
+					this.getData();
+					this.close_import();
+				}
+			}else{
+				this.$message.error({ message: response.msg });
+			}
+		},
+		
+		handleRemove(file, fileList) {
+			if (fileList !== null && fileList.length != 0) {
+				this.import_btn_show = true;
+			} else {
+				this.import_btn_show = false;
+			}
+		},
+		
+		beforeFilesUpload(file) {
+			const $ext_list = ['xlsx', 'xls'];
+			let len = file.name.split('.').length - 1;
+			const $ext_name = file.name.split('.')[len];
+			if ($ext_list.indexOf($ext_name) != -1) {
+			} else {
+				this.toleadResult.id = 0
+				this.toleadResult.name = '文件格式上传错误,仅支持上传xlsx,xls)'
+				this.nowIndex = 3
+				return false;
+			}
+		},
+
+		//添加规则
+		add_submit_rule(form) {
+			let self = this;
+			self.$refs[form].validate(valid => {
+				if (valid) {
+					if (self.integral_select_name1 != '1' && self.rules_detail_form.min_point >= 0) {
+						self.rules_detail_form.min_point = '-' + self.rules_detail_form.min_point;
+					}
+					if (self.integral_select_name2 != '1' && self.rules_detail_form.max_point >= 0) {
+						self.rules_detail_form.max_point = '-' + self.rules_detail_form.max_point;
+					}
+					if (self.rules_detail_form.range_type == 1) {
+						self.rules_detail_form.max_point = self.rules_detail_form.min_point;
+					}
+					if (self.rules_detail_form.min_point == 0 || !self.rules_detail_form.min_point || self.rules_detail_form.max_point == 0 || !self.rules_detail_form.max_point) {
+						this.$message.error('积分不能为空或为0');
+						return;
+					}
+					if (Array.isArray(self.rules_detail_form.rule_id)) {
+						self.rules_detail_form.rule_id = self.rules_detail_form.rule_id[self.rules_detail_form.rule_id.length - 1];
+					}
+					if (parseFloat(self.rules_detail_form.min_point) > parseFloat(self.rules_detail_form.max_point)) {
+						this.$confirm('填写的规则积分是' +self.rules_detail_form.min_point +' ~ ' +self.rules_detail_form.max_point +',应该是 ' +self.rules_detail_form.max_point +' ~ ' +self.rules_detail_form.min_point +'吧?','提示',
+							{
+								confirmButtonText: '确定',
+								cancelButtonText: '取消',
+								type: 'warning'
+							}
+						).then(() => {
+							this.rule_loading2 = true;
+							let min_point = this.rules_detail_form.min_point;
+							this.rules_detail_form.min_point = this.rules_detail_form.max_point;
+							this.rules_detail_form.max_point = min_point;
+							if (this.rules_detail_form.min_point == 0 && this.rules_detail_form.range_type == 1) {
+								this.$message.error('积分不能为零');
+								this.rule_loading2 = false;
+								return false;
+							}
+							let data = {
+								items: [this.rules_detail_form]
+							};
+							this.$axios('post', '/api/integral/rule/items', data).then(res => {
+								this.$message.success(res.data.msg);
+								this.getRuleList(this.selectId)
+								this.rule_close(form);
+							}).finally(() => {
+								this.rule_loading2 = false;
+							});
+						});
+					} else {
+						this.rule_loading2 = true;
+						self.rules_detail_form.item_id = self.rules_detail_form.id;
+						if (self.rules_detail_form.min_point == 0 && self.rules_detail_form.range_type == 1) {
+							self.$message.error('积分不能为零');
+							this.rule_loading2 = false;
+							return false;
+						}
+						let data = {
+							items: [self.rules_detail_form]
+						};
+						this.$axios('post', '/api/integral/rule/items', data)
+							.then(res => {
+									this.$message.success(res.data.msg);
+									this.getRuleList(this.selectId)
+									this.rule_close(form);
+							})
+							.finally(() => {
+								this.rule_loading2 = false;
+							});
+					}
+				} else {
+					this.rule_loading2 = false;
+					return false;
+				}
+			});
+		},
+		//编辑规则
+		edit_submit_rule(form) {
+			let self = this;
+			self.$refs[form].validate(valid => {
+				if (valid) {
+					if (!self.rules_detail_form.min_point) {
+						this.$message.error('积分不能为空或为0');
+						return;
+					}
+					if (self.integral_select_name1 != '1' && self.rules_detail_form.min_point >= 0) {
+						self.rules_detail_form.min_point = '-' + self.rules_detail_form.min_point;
+					}
+					if (self.integral_select_name2 != '1' && self.rules_detail_form.max_point >= 0) {
+						self.rules_detail_form.max_point = '-' + self.rules_detail_form.max_point;
+					}
+					if (self.rules_detail_form.range_type == 1) {
+						self.rules_detail_form.max_point = self.rules_detail_form.min_point;
+					}
+					if (Array.isArray(self.rules_detail_form.rule_id)) {
+						self.rules_detail_form.rule_id = self.rules_detail_form.rule_id[self.rules_detail_form.rule_id.length - 1];
+					}
+					if (parseFloat(self.rules_detail_form.min_point) > parseFloat(self.rules_detail_form.max_point)) {
+						this.$confirm(
+							'填写的规则积分是' +
+								self.rules_detail_form.min_point +
+								' ~ ' +
+								self.rules_detail_form.max_point +
+								',应该是 ' +
+								self.rules_detail_form.max_point +
+								' ~ ' +
+								self.rules_detail_form.min_point +
+								'吧?',
+							'提示',
+							{
+								confirmButtonText: '确定',
+								cancelButtonText: '取消',
+								type: 'warning'
+							}
+						).then(() => {
+							this.rule_loading2 = true;
+							let min_point = self.rules_detail_form.min_point;
+							self.rules_detail_form.min_point = self.rules_detail_form.max_point;
+							self.rules_detail_form.max_point = min_point;
+							let data = self.rules_detail_form;
+							data.item_id = self.rules_detail_form.id;
+							if(data.sort){
+								delete data.sort
+							}
+							if (self.rules_detail_form.min_point == 0 && self.rules_detail_form.range_type == 1) {
+								self.$message.error('积分不能为零');
+								this.rule_loading2 = false;
+								return false;
+							}
+							this.$axios('post', '/api/integral/rule/items/edit', data)
+								.then(res => {
+									if (res.data.code == 1) {
+										self.$message.success(res.data.msg);
+										this.getRuleList(this.selectId)
+										self.rule_close(form);
+									}
+								})
+								.finally(err => {
+									this.rule_loading2 = false;
+								});
+						});
+					} else {
+						this.rule_loading2 = true;
+						self.rules_detail_form.item_id = self.rules_detail_form.id;
+						let data = self.rules_detail_form;
+						data.item_id = self.rules_detail_form.id;
+						if (self.rules_detail_form.min_point == 0 && self.rules_detail_form.range_type == 1) {
+							self.$message.error('积分不能为零');
+							this.rule_loading2 = false;
+							return false;
+						}
+						if(data.sort){
+							delete data.sort
+						}
+						this.$axios('post', '/api/integral/rule/items/edit', data)
+							.then(res => {
+								if (res.data.code == 1) {
+									self.$message.success(res.data.msg);
+									this.getRuleList(this.selectId)
+									self.rule_close(form);
+								}
+							})
+							.finally(() => {
+								this.rule_loading2 = false;
+							});
+					}
+				} else {
+					this.rule_loading2 = false;
+					return false;
+				}
+			});
+		},
+		
+		//删除规则
+		del_rule() {
+			let self = this;
+			let data = {
+				item_ids:JSON.stringify([this.rules_detail_form.id])
+			};
+			this.delRule_loading = true;
+        	const h = this.$createElement;
+			self.$msgbox({
+				title: '提示',
+				message: h('div', null, [
+					h('p', null, [
+						h('i', { class: "el-icon-info", style: "color: #e6a23c; "}, null),
+						h('span', { style: "font-size: 16px; color: black; padding-left: 5px;" }, '删除操作可能造成以下影响')
+					]),
+					h('ul', { style: "list-style: disc; padding: 0 0 0 21px; color: #6d6d6d; margin: 5px 0; " },[
+						h('li', {style: "margin: 5px 0;"}, '与当前积分规则关联的积分审批,以此规则作为依据的审批单只能作废'),
+						h('li', {style: "margin: 5px 0;"}, '与当前积分规则关联的自定义积分排名,此规则产生的积分将不再统计'),
+					]),
+					h('p', { style: "font-size: 15px; color: #616161; " }, '请确保无上述审批单或排名数据影响后,再操作删除'),
+				]),
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				showCancelButton: true,
+				customClass: 'winClass',//弹窗样式
+			}).then(
+				() => {
+					this.$axios('post', '/api/integral/rule/items/destroy', data).then(res => {
+						this.$message.success(res.data.msg);
+						this.rule_show = false;
+						this.getRuleList(this.selectId);
+					}).finally(() => {
+						this.delRule_loading = false;
+					});
+				},
+				err => {
+					this.delRule_loading = false;
+				}
+			);
+		},
+		//关闭规则弹窗
+		rule_close(form) {
+			this.rule_show = false;
+			this.$refs[form].resetFields();
+		},
+		not_data() {
+			this.$confirm('暂时没有积分分类,是否前往添加?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.rule_show = false;
+				this.class_show = true;
+			});
+		},
+		add_rule() {
+			this.rule_show = true;
+			this.rule_type = 'add';
+			this.rules_detail_form = {
+				rule_id: '',
+				range_type: '1',
+				prize_type: '0',
+				min_point: '',
+				max_point: '',
+				min_point2: '',
+				max_point2: '',
+				remark: '',
+				is_attendance: '0',
+				cycle_type: '1',
+				pt_id: 3
+			};
+			this.integral_select_name1 = '1';
+			this.integral_select_name2 = '1';
+		},
+		//批量删除
+		del_item() {
+			if (this.del_item_id.length == 0) {
+				this.$message.error('请选择积分细则');
+				return false;
+			}
+        	const h = this.$createElement;
+			this.$msgbox({
+				title: '提示',
+				message: h('div', null, [
+					h('p', null, [
+						h('i', { class: "el-icon-info", style: "color: #e6a23c; "}, null),
+						h('span', { style: "font-size: 16px; color: black; padding-left: 5px;" }, '删除操作可能造成以下影响')
+					]),
+					h('ul', { style: "list-style: disc; padding: 0 0 0 21px; color: #6d6d6d; margin: 5px 0; " },[
+						h('li', {style: "margin: 5px 0;"}, '与当前积分规则关联的积分审批,以此规则作为依据的审批单只能作废'),
+						h('li', {style: "margin: 5px 0;"}, '与当前积分规则关联的自定义积分排名,此规则产生的积分将不再统计'),
+					]),
+					h('p', { style: "font-size: 15px; color: #616161; " }, '请确保无上述审批单或排名数据影响后,再操作删除'),
+				]),
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				showCancelButton: true,
+				customClass: 'winClass',//弹窗样式
+			}).then(() => {
+				let data = {
+					item_ids: JSON.stringify(this.del_item_id)
+				};
+				this.$axios('post', '/api/integral/rule/items/destroy', data).then(res => {
+					if (res.data.code == 1) {
+						this.$message.success(res.data.msg);
+						this.getRuleList(this.selectId);
+					}
+				});
+			});
+		},
+
+		editDetails(val) {
+			this.rules_detail_form = JSON.parse(JSON.stringify(val));
+			if (this.rules_detail_form.min_point == this.rules_detail_form.max_point) {
+				this.rules_detail_form.range_type = '1';
+			} else {
+				this.rules_detail_form.range_type = '2';
+			}
+			if (this.rules_detail_form.min_point < 0) {
+				this.integral_select_name1 = '2';
+				let str = this.rules_detail_form.min_point;
+				this.rules_detail_form.min_point = str.toString().substring(1);
+			} else {
+				this.integral_select_name1 = '1';
+			}
+			if (this.rules_detail_form.max_point < 0) {
+				this.integral_select_name2 = '2';
+				let str = this.rules_detail_form.max_point;
+				this.rules_detail_form.max_point = str.toString().substring(1);
+			} else {
+				this.integral_select_name2 = '1';
+			}
+			this.rule_show = true;
+			this.rule_type = 'edit';
+		},
+		handleSelectionChange() {
+			this.del_item_id = [];
+			this.item_list.forEach(e=>{
+				if(e.checked){
+					this.del_item_id.push(e.id);
+				}
+			})
+		},
+
+		// 规则递归 children
+		getRuleTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				data[i].isShowChild=false
+				if (data[i].child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i].child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getRuleTreeData(data[i].child);
+				}
+			}
+			return data;
+		},
+		
+		handleNodeClick(e,is) {
+			if(this.leftLoading||this.selectId==e.id&&!is){
+				return false
+			}
+			this.selectId=e.id
+			this.page=1;
+			if(e.id){
+				this.$axios('get', '/api/integral/rule/info', { rule_id: e.id }).then(res => {
+					let dept_info=res.data.data.dept_info;
+					let data=res.data.data;
+					let dept_ids=dept_info.map(item=>{
+						return item.id
+					})
+					this.selectItem = {
+						child: e.child,
+						id: data.id,
+						name: data.name,
+						pid: data.pid,
+						dept_info:dept_info,
+						dept_ids:dept_ids
+					};
+					console.log(this.selectItem)
+				})
+				this.getRuleList(e.id)
+			}else{
+				this.selectItem = { name: '积分规则',dept_info:[] };
+			}
+		},
+		getData(is) {
+			this.rule_loading = true;
+			this.$axios('get','/api/integral/rule/trees',{cycle_type:1}).then(res => {
+				var item_list = res.data.data.item_list || [];
+				var list = [];
+				for (let i in item_list) {
+					for (let k in item_list[i]) {
+						item_list[i][k].pt_Obj = this.$getTyps(item_list[i][k].pt_id);
+						list.push(item_list[i][k]);
+					}
+				}
+				this.rule_tree = this.getRuleTreeData(res.data.data.rule_tree);
+				if (is) { //需要刷新分类详情
+					this.handleNodeClick(this.selectItem,true);
+				}
+			}).finally(() => {
+				this.rule_loading = false;
+			});
+		},
+		getRuleList(id){
+			let data={
+				page:this.page,
+				cycle_type:1,
+				include_sub:1,
+				keyword:this.keyword,
+				page_size:100,
+			}
+			if(id){
+				data.rule_id=id
+			}
+			this.checked_all=false;
+			this.rightLoading=true;
+			this.item_list=[];
+			this.$axios('get', '/api/integral/rule/items',data).then(res => {
+				let list=res.data.data.list;
+				list.forEach(item=>{	
+					item.checked=false;
+					item.pt_Obj = this.$getTyps(item.pt_id);
+				})
+				// console.log(list)
+				this.item_list = list;
+				this.total=res.data.data.total
+			}).finally(() => {
+				this.rightLoading = false;
+			});
+		},
+		//删除分组
+		del_dept() {
+			this.$confirm('此操作将永久删除该分类, 是否继续?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.$axios('post', '/api/integral/rule/destroy', { rule_id: this.selectItem.id }).then(res => {
+					if (res.data.code == 1) {
+						this.selectItem = { name: '积分规则',dept_info:[] };
+						this.selectId=0;
+						this.$message.success(res.data.msg);
+						this.getData();
+						this.getRuleList()
+						this.add_dept_close('dept_formdata');
+					}
+				});
+			});
+		},
+		//关闭弹窗
+		add_dept_close(form) {
+			this.class_show = false;
+			this.$refs[form].resetFields();
+		},
+		//关闭提示
+		tips_close() {
+			this.$setCache('rule', 'true');
+			this.tips_show = false;
+		},
+		//添加分类
+		add_class() {
+			this.class_show = true;
+			this.class_type = 'add';
+			this.dept_name=[];
+			this.dept_formdata = {
+				name: '',
+				pid: '0',
+				cycle_type: '1',
+				dept_ids:[],
+			};
+		},
+		// 页面变更
+		handleCurrentChange(val) {
+			this.page = val;
+			this.getRuleList(this.selectId);
+		},
+		handleSizeChange(val) {
+			this.page = 1;
+			this.page_size = val;
+			this.getRuleList(this.selectId);
+		},
+	}	
+};
+</script>
+
+<style scoped lang="scss">
+.moveing {
+	opacity: 0.5;
+}
+.border_top{
+	// position: relative;
+	border-top: 1px solid #017FFF !important;
+}
+.border_bottom{
+	border-bottom: 1px solid #017FFF !important;
+}	
+.drag-move {
+	transition: transform .3s;
+}	
+.table-header{
+	padding: 12px 0;
+	border-bottom: 1px solid #EBEEF5;
+}	
+.table-header .flex-1{
+	color: #909399;
+	font-weight: 600;
+	padding:0 10px ;
+}
+.table-content{
+	position: relative;
+}
+.table-content .flex-1{
+	padding:12px 10px;
+	line-height: 23px;
+	position: relative;
+	color: #606266;
+}
+.table-content .flex-box-ce{
+	border-bottom: 1px solid #EBEEF5;
+}
+.table-content .flex-box-ce:nth-child(2n){
+	background-color: #FAFAFA;
+}
+.table-content .flex-box-ce:hover{
+	background-color: #F5F7FA !important;
+	cursor: pointer;
+}
+.border {
+  -webkit-appearance: none;
+  background-color: #fff;
+  background-image: none;
+  border-radius: 4px;
+  border: 1px solid #dcdfe6;
+  -webkit-box-sizing: border-box;
+  box-sizing: border-box;
+  color: #c0c4cf;
+  font-size: inherit;
+  height: auto;
+  outline: 0;
+  padding: 0 15px;
+  width: 400px;
+  position: relative;
+  cursor: pointer;
+}
+.border .font-flex-word {
+  color: #606266;
+}	
+	
+	
+	
+$red: #f56c6c;
+::v-deep .el-table__row{
+	cursor: pointer;
+}
+.select_width .el-select {
+	width: 80px;
+	background-color: #fff;
+	border: 1px solid #f1f1f1;
+	border-left: none;
+	color: #222;
+	border-radius: 5px;
+}
+.text-center {
+	text-align: center;
+}
+.text-center p {
+	padding: 10px 0;
+}
+.terr-right {
+	.name {
+		font-size: 18px;
+		margin-right: 20px;
+	}
+	.btns button {
+		font-size: 14px;
+		height: 38px;
+		width: 90px;
+		margin-right: 5px;
+	}
+}
+.rule_class_box {
+	::v-deep .el-tree-node__content {
+		padding: 10px 0;
+		// border-bottom: 1px #f8f8f8 solid;
+	}
+	::v-deep .el-tree-node__content:hover {
+		// background: #ecf5ff;
+		// border-radius: 4px;
+	}
+	::v-deep .is-current .el-tree-node__content .el-icon-caret-right {
+		color: #409eff !important;
+	}
+	::v-deep .is-current .el-tree-node__content .el-tree-node__label {
+		color: #409eff !important;
+	}
+	::v-deep .is-current .el-tree-node__children .el-icon-caret-right {
+		color: #c0c4cc !important;
+	}
+	::v-deep .is-current .el-tree-node__children .el-tree-node__label {
+		color: #606266 !important;
+	}
+	::v-deep .el-tree-node__label {
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+}
+.form-right ::v-deep .el-form-item__content {
+	margin-left: 0px !important;
+}
+.terr-left button {
+	margin: 0 auto;
+	display: block;
+	margin-bottom: 10px;
+}
+
+.el-dropdown-links {
+	font-size: 20px;
+	cursor: pointer;
+	color: #686a6d;
+}
+.color-red {
+	color: $red;
+	&:hover {
+		color: #f14141;
+	}
+}
+.qrcodesave {
+	text-align: center;
+	margin-top: 15px;
+	font-size: 18px;
+	span {
+		color: #606266;
+		cursor: pointer;
+		transition: all 0.3s;
+	}
+}
+
+.qrcodesave span:hover {
+	color: #2490fd;
+}
+.lookQrcode {
+	color: #606266;
+	cursor: pointer;
+	transition: all 0.3s;
+}
+.lookQrcode:hover {
+	color: #2490fd;
+}
+.ruleSearch ::v-deep .el-input__inner{
+	height:38px;
+}
+</style>
+<style lang="scss">
+	.winClass{
+		width: 500px
+	}
+</style>

+ 103 - 0
src/views/subassembly/set/rule2.vue

@@ -0,0 +1,103 @@
+<template>
+	<div class="all-box">
+		<transition-group name="drag" tag="div">
+				<div class="item" v-for="(item, i) in list" :key="item.id" draggable="true"
+					@dragstart="dragstart($event, i)" @dragenter="dragenter($event, i)" @dragend="dragend"
+					@dragover="dragover">
+					{{ item.name }}
+				</div>
+		</transition-group>
+	</div>
+</template>
+
+<script>
+	import QRCode from 'qrcodejs2';
+	import toLead from '@/components/toLead';
+	import Rule from '@/components/Rule';
+	import {
+		_debounce
+	} from '@/api/auth';
+	export default {
+		data() {
+			return {
+				list: [{
+						name: 'a',
+						id: 1
+					},
+					{
+						name: 'b',
+						id: 2
+					},
+					{
+						name: 'c',
+						id: 3
+					},
+					{
+						name: 'd',
+						id: 4
+					},
+					{
+						name: 'e',
+						id: 5
+					},
+				],
+				dragIndex: 0
+			};
+		},
+		methods: {
+			dragstart(e, index) {
+				e.stopPropagation()
+				this.dragIndex = index
+				setTimeout(() => {
+					e.target.classList.add('moveing')
+				}, 0)
+			},
+			dragenter(e, index) {
+				e.preventDefault()
+				// 拖拽到原位置时不触发
+				if (this.dragIndex !== index) {
+					const source = this.list[this.dragIndex];
+					this.list.splice(this.dragIndex, 1);
+					this.list.splice(index, 0, source);
+
+					// 更新节点位置
+					this.dragIndex = index
+				}
+			},
+			dragover(e) {
+				e.preventDefault()
+				e.dataTransfer.dropEffect = 'move'
+			},
+			dragend(e) {
+				e.target.classList.remove('moveing')
+			},
+		}
+	};
+</script>
+
+<style scoped lang="scss">
+	.drag-move {
+		transition: transform .2s;
+	}
+
+	.item {
+		width: 200px;
+		height: 40px;
+		line-height: 40px;
+		// background-color: #f5f6f8;
+		background-color: skyblue;
+		text-align: center;
+		margin: 10px;
+		color: #fff;
+		font-size: 18px;
+	}
+
+	.container {
+		position: relative;
+		padding: 0;
+	}
+
+	.moveing {
+		opacity: 0;
+	}
+</style>

+ 1245 - 0
src/views/subassembly/set/screenSet.vue

@@ -0,0 +1,1245 @@
+<template>
+	<div class="all-box">
+		
+		<div class="all" style="padding: 20px;">
+			<div class="flex-box-ce" style="padding: 30px 10px;">
+				<div class="flex-1">
+					<div style="font-size: 24px;font-weight: 700;margin-bottom: 5px;">数据大屏 
+					  <el-popover
+					    placement="bottom-start"
+					    title="使用须知"
+					    width="500"
+					    trigger="hover"
+					    content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。">
+						<div>
+							<div style="padding: 10px 0;font-weight: 700;">如何显示大屏数据:</div>
+							<p>1.会议平板访问:在平板中输入大屏访问链接,密码验证后可直接访问</p>
+							<p>2.电脑投屏到其他设备:在电脑的浏览器上访问链接,投屏到大屏设备中</p>
+							<div style="padding: 10px 0;font-weight: 700">其他须知:</div>
+							<p>1.创建大屏名称和备注可用于区分不同区域或场景下的大屏,最多创建10个大屏</p>
+							<p>2.每个大屏仅支持3个窗口同时访问,每打开一个窗口都会占用访问数,请避免打开多余窗口</p>
+							<p>3.链接复制到其他设备,请用浏览器输入并打开访问链接,首次进入需输入密码</p>
+							<p>4.更换设置可直接操作保存,更换后刷新页面或稍候5分钟即可</p>
+							<p>5.如需切换其他大屏,请点击大屏右上角退出登录,重新输入其他大屏的密码即可</p>
+							<p>6.分享链接的密码重置后,对应的大屏需重新输入密码验证</p>
+							<p>7.本机上每次打开链接都需要密码</p>
+						</div>
+						<span style="font-size:12px;cursor: pointer;" class="blue" slot="reference">使用须知</span>
+					  </el-popover>
+					</div>
+					<div style="font-size: 14px;" class="fontColorB">积分可视化数据大屏,直观展现积分排名、积分快讯、运作情况,支持电脑投屏、会议平板直接访问。</div>
+				</div>
+				<el-button type="primary" @click="isPz = true" :disabled="list.length==10">
+					创建数据大屏
+					<i class="el-icon-setting el-icon--right"></i>
+				</el-button>
+			</div>
+			<el-alert title="最多创建10个大屏链接,每个链接仅支持3个窗口同时在线访问,超出后无法获取数据" type="warning"></el-alert>
+			<el-table ref="multipleTable" :data="list" tooltip-effect="dark" align="center" v-loading="loading">
+				<el-table-column label="大屏名称" prop="name"></el-table-column>
+				<el-table-column label="备注" min-width="300" prop="remark"></el-table-column>
+				<el-table-column label="操作">
+					<template slot-scope="scope">
+						<div class="flex-box-ce">
+							<div @click.stop="openSet(scope.row)" style="margin-right: 10px;"><span class="lookQrcode blue">设置</span></div>
+							<!-- <div @click.stop="preview(scope.row,1)" style="margin-right: 10px;"><span class="lookQrcode green">预览</span></div> -->
+							<div @click.stop="preview(scope.row,2)" style="margin-right: 10px;"><span class="lookQrcode green">访问大屏</span></div>
+							<div @click.stop="compile(scope.row)" style="margin-right: 10px;"><span class="lookQrcode">编辑</span></div>
+							<div @click.stop="deleteSet(scope.row)"><span class="lookQrcode red">删除</span></div>
+						</div>
+					</template>
+				</el-table-column>
+				<template slot="empty">
+					<noData :isSolt="true">
+						<div>
+							您当前没有数据大屏配置,去添加
+							<span style="cursor: pointer;margin-left: 10px;" @click="isPz = true" class="blue">添加</span>
+						</div>
+					</noData>
+				</template>
+			</el-table>
+		</div>
+		
+		<el-dialog :title="isCompile? '编辑数据大屏':'创建数据大屏'" :visible.sync="isPz" width="500px" class="dialog">
+			<el-form label-width="80px" :model="formData" ref="setForm" class="form">
+				<el-form-item
+					label="名称"
+					prop="name"
+					:rules="[{ required: true, message: '请输入名称', trigger: 'blur' }, { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }]"
+				>
+					<el-input maxlength="20" show-word-limit v-model="formData.name" placeholder="请输入名称"></el-input>
+				</el-form-item>
+				<el-form-item
+					label="备注"
+					prop="remark"
+					:rules="[{ required: true, message: '请输入备注', trigger: 'blur' }, { min: 2, max: 100, message: '长度在 2 到 100 个字符', trigger: 'blur' }]"
+				>
+					<el-input type="textarea" placeholder="请输入备注" :rows="4" maxlength="100" show-word-limit v-model="formData.remark"></el-input>
+				</el-form-item>
+			</el-form>
+			<div class="flex-box-end">
+				<el-button @click="isPz = false">取消</el-button>
+				<el-button type="primary" :loading="setLoading" :disabled="setLoading" @click="saveFirst('setForm')">确定</el-button>
+			</div>
+		</el-dialog>
+		
+		<el-dialog title="打开方式" :visible.sync="isPreview" width="500px" class="dialog">
+			<div>
+				<div style="margin-bottom: 20px;">{{selectItem.name}}</div>
+				<div>打开方式1:扫码登录(新)</div>
+				<div class="flex-box-ce" style="margin: 10px 0;">
+					<el-input style="width: 300px;" v-model="previewUrl2"  disabled placeholder="链接"></el-input>
+					<div class="blue" style="padding-left: 10px;cursor: pointer;" @click="copy('3')">复制大屏链接</div>
+				</div>
+				<div style="font-size: 12px;position: relative;top: -10px;" class="orange">扫码方式适用于触摸屏和投屏场景,不支持手动输入链接地址及纯遥控选择操作,请根据设备条件选择打开方式</div>
+				<div style="margin-top: 30px;">打开方式2:密码登录(旧)</div>
+				<div class="flex-box-ce" style="margin: 10px 0;">
+					<el-input style="width: 300px;" v-model="previewUrl"  disabled placeholder="链接"></el-input>
+					<div class="blue" style="padding-left: 10px;cursor: pointer;" @click="copy('1')">复制大屏链接</div>
+				</div>
+				<div class="flex-box-ce">
+					<el-input style="width: 300px;" v-model="code" placeholder="随机密码" disabled>
+						<el-button slot="append" @click="refresh">刷新</el-button>
+					</el-input>
+					<div class="blue" style="padding-left: 10px;cursor: pointer;" @click="copy('2')">复制密码</div>
+				</div>
+				<div class="orange" style="font-size: 12px;margin-bottom: 10px;">刷新后原有的密码将失效</div>
+				<!-- <div class="orange">每个链接仅支持3个窗口同时在线访问,超出后无法获取数据</div> -->
+			</div>
+			<div class="flex-box-end" style="margin: 10px 0;">
+				<!-- <el-button @click="preview({},1)" type="primary" plain>打开大屏</el-button> -->
+				<div class="flex-1"></div>
+				<el-button @click="isPreview = false" type="">关 闭</el-button>
+			</div>
+		</el-dialog>
+
+		<el-dialog :title="'设置('+selectItem.name+')'" :visible.sync="dialogVisible" width="70%" class="dialog">
+			<div class="flex-box">
+				<div class="flex-4" style="padding-top: 50px;">
+					<div  style="color: #222;font-weight: 700;font-size: 16px;padding-left: 8px;">点击下面模块,快速定位到设置项
+						<el-popover placement="bottom-start" title="示例" width="500" trigger="hover">
+							<div><img  src="@/assets/image/321.jpg" style="width: 100%;"/></div>
+							<span style="font-size:14px;cursor: pointer;" class="blue" slot="reference">示例</span>
+						</el-popover>
+					 </div>
+					<div class="flex-box-ce">
+						<div class="flex-1">
+							<div class="border1" @click="activeQie('2')" :class="activeBor == '2' ? 'activeBor' : ''" style="height: 40px;line-height: 40px;">组织名称和logo设置</div>
+							<div class="border1" @click="activeQie('3')" :class="activeBor == '3' ? 'activeBor' : ''" style="height: 300px;line-height: 300px;">排行榜设置</div>
+						</div>
+						<div class="flex-1">
+							<div class="border1" @click="activeQie('1')" :class="activeBor == '1' ? 'activeBor' : ''" style="height: 40px;line-height: 40px;">标题设置</div>
+							<div class="border1" @click="activeQie('4')" :class="activeBor == '4' ? 'activeBor' : ''" style="height: 80px;line-height: 80px;">今日积分数据设置</div>
+							<div class="border1" @click="activeQie('5')" :class="activeBor == '5' ? 'activeBor' : ''" style="height: 212px;line-height: 212px;">活跃度设置</div>
+						</div>
+						<div class="flex-1">
+							<div class="" style="height: 44px;"></div>
+							<div class="border1" @click="activeQie('6')" :class="activeBor == '6' ? 'activeBor' : ''" style="height: 300px;line-height: 300px;">积分快讯设置</div>
+						</div>
+					</div>
+				</div>
+				<div class="flex-3 scroll-bar" id="scroll" style="height: 500px;overflow-y: scroll;margin-left: 10px;" @scroll="myFunction">
+					<el-form label-width="80px" :model="config" ref="setForm" class="form">
+						<div class="kuai">
+							<div class="formTitle">标题设置</div>
+							<div class="formBox">
+								<el-form-item label="标题名称">
+									<el-input class="width250" maxlength="10" show-word-limit v-model.trim="config.title" placeholder="请输入名称"></el-input>
+								</el-form-item>
+							</div>
+						</div>
+						<div class="kuai">
+							<div class="formTitle">组织名称和logo设置</div>
+							<div class="formBox">
+								<el-form-item label="组织名称">
+									<el-input style="width: 350px;" maxlength="20" show-word-limit v-model.trim="config.company.name" placeholder="请输入名称"/>
+								</el-form-item>
+								<el-form-item label="logo">
+									<upload
+										:headers="Xtoken"
+										class="avatar-uploader"
+										action="https://integralsys.oss-cn-shenzhen.aliyuncs.com"
+										:show-file-list="false"
+										:multiple="false"
+										:limit="100"
+										accept="image/jpeg,image/png"
+										:on-success="handleFilesSuccess"
+										:before-upload="beforeUpload"
+									>
+										<img v-if="config.company.logo" :src="config.company.logo" class="avatar" />
+										<i v-else class="el-icon-plus avatar-uploader-icon"></i>
+									</upload>
+									<div class="orange" style="font-size: 12px;">比例为1:1,最大不超过5M</div>
+								</el-form-item>
+							</div>
+						</div>
+						<div class="kuai">
+							<div class="formTitle">排行榜设置</div>
+							<div class="formBox">
+								<el-form-item style="margin-bottom: 30px;">
+									  <el-radio-group v-model="config.ranking_type">
+									    <el-radio label="ranking">阶段排名</el-radio>
+									    <el-radio label="ranking_total">累计排名</el-radio>
+									  </el-radio-group>
+									  <div style="position: absolute;z-index: 999;left: 0px;top: 30px;font-size: 12px;line-height: 14px;" class="fontColorC">
+										  <span v-if="config.ranking_type=='ranking'">阶段排名仅统计时间区间内的积分数据<br/>不包含基础分和工龄分</span>
+										  <span v-else>累计B分排名即员工从入职至今的所有B分总计<br/>包含基础分和工龄分</span>
+									</div>
+								</el-form-item>
+								<div style="min-height: 362px;">
+									<template v-if="config.ranking_type=='ranking'">
+										<el-form-item label="名称">
+											<el-input class="width250" maxlength="10" show-word-limit v-model.trim="config.ranking.name" placeholder="请输入名称"></el-input>
+										</el-form-item>
+										<el-form-item label="时间">
+											<el-select class="width250" v-model="config.ranking.condition.date" placeholder="请选择积分类型">
+												<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"></el-option>
+											</el-select>
+											<el-date-picker
+												class="width250"
+												v-if="config.ranking.condition.date == 1"
+												v-model="config.ranking.condition.time"
+												type="daterange"
+												value-format="timestamp"
+												@change="setTime"
+												:clearable="false"
+												range-separator="至"
+												start-placeholder="开始日期"
+												end-placeholder="结束日期"
+											></el-date-picker>
+										</el-form-item>
+										<el-form-item label="部门">
+											<template slot="label">
+												<el-tooltip effect="dark" placement="top">
+												  <template slot="content">
+													选择部门默认包含子部门
+												  </template>
+												  <span>部门	<i class="el-icon-warning"></i></span>
+												</el-tooltip>
+											</template>
+											<el-cascader
+												v-model="config.ranking.condition.deptArr"
+												:options="dept_tree"
+												:props="{checkStrictly: true, multiple : true, value: 'id', label: 'name', children: '_child' }"
+												class="width250"
+												ref="dept1"
+												filterable
+												collapse-tags
+												placeholder="全公司"
+												clearable
+											></el-cascader>
+										</el-form-item>
+										<el-form-item label="姓名">
+											<el-select class="width250" v-model="config.ranking.condition.position" placeholder="请选择人员范围">
+												<el-option v-for="item in roleOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
+											</el-select>
+										</el-form-item>
+										<el-form-item label="类型">
+											<el-select class="width250" v-model="config.ranking.condition.point_id" placeholder="请选择积分类型">
+												<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value" v-if="item.value != 1"></el-option>
+											</el-select>
+										</el-form-item>
+										<el-form-item label="排除">
+											<el-input class="width250" auto-complete="off" v-model="config.ranking.condition.employeeName" placeholder="请选择排除对象"></el-input>
+											<div @click="noPersonnelListTips" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
+										</el-form-item>	
+									</template>
+									<template v-else>
+										<el-form-item label="名称">
+											<el-input class="width250" maxlength="10" show-word-limit v-model.trim="config.ranking_total.name" placeholder="请输入名称"></el-input>
+										</el-form-item>
+										<el-form-item label="部门">
+											<template slot="label">
+												<el-tooltip effect="dark" placement="top">
+												  <template slot="content">
+													选择部门默认包含子部门
+												  </template>
+												  <span>部门	<i class="el-icon-warning"></i></span>
+												</el-tooltip>
+											</template>
+											<el-cascader
+												v-model="config.ranking_total.condition.deptArr"
+												:options="dept_tree"
+												:props="{checkStrictly: true, multiple : true, value: 'id', label: 'name', children: '_child' }"
+												class="width250"
+												ref="dept6"
+												filterable
+												collapse-tags
+												placeholder="全公司"
+												clearable
+											></el-cascader>
+										</el-form-item>
+									</template>
+								</div>
+							</div>
+						</div>
+						<div class="kuai">
+							<div class="formTitle">
+								今日积分数据设置
+								<el-tooltip effect="dark" placement="top">
+								  <template slot="content">
+									<div>
+										合并统计A分和B分数据<br />
+										● 今日奖分:仅统计奖分,不统计扣分<br />
+										● 今日人次:今日每有1条积分事件,记1人次(含奖分、扣分)<br />
+										● 仅统计事件发生时间是今日的数据<br />
+										● 仅统计复核通过的事件(未开复核的,系统会自动复核通过)
+									</div>
+								  </template>
+								  <span><i class="el-icon-warning fontColorC"></i></span>
+								</el-tooltip>
+							</div>
+							<div class="formBox">
+								<el-form-item label="部门">
+									<template slot="label">
+										<el-tooltip effect="dark" placement="top">
+										  <template slot="content">
+											选择部门默认包含子部门
+										  </template>
+										  <span>部门	<i class="el-icon-warning"></i></span>
+										</el-tooltip>
+									</template>
+									<el-cascader
+										v-model="config.center.deptArr"
+										:options="dept_tree"
+										:props="{checkStrictly: true, multiple : true, value: 'id', label: 'name', children: '_child' }"
+										ref="dept2"
+										class="width250"
+										filterable
+										collapse-tags
+										placeholder="全公司"
+										clearable
+									></el-cascader>
+								</el-form-item>
+							</div>
+						</div>
+						<div class="kuai">
+							<div class="formTitle">活跃度设置
+							  <el-tooltip effect="dark" placement="top">
+							    <template slot="content">
+									活跃度统计的积分包含A分和B分<br />
+									● 获得积分人员占比=获得积分的人数/参与积分的总人数<br />
+									● 执行奖扣管理人员占比=有执行奖扣的人/总管理者人数<br />
+									● 基准标尺为执行下限,要求活跃度在标尺之上执行才算执行到位
+							    </template>
+							    <i class="el-icon-warning fontColorC"></i>
+							  </el-tooltip>
+							</div>
+							<div class="formBox">
+								<el-form-item label="部门">
+									<template slot="label">
+										<el-tooltip effect="dark" placement="top">
+										  <template slot="content">
+											选择部门默认包含子部门
+										  </template>
+										  <span>部门	<i class="el-icon-warning"></i></span>
+										</el-tooltip>
+									</template>
+									<el-cascader
+										v-model="config.active.deptArr"
+										:options="dept_tree"
+										:props="{checkStrictly: true, multiple : true, value: 'id', label: 'name', children: '_child' }"
+										ref="dept3"
+										class="width250"
+										filterable
+										collapse-tags
+										placeholder="全公司"
+										clearable
+									></el-cascader>
+								</el-form-item>
+								<el-form-item label="时间范围">
+									<el-select class="width250" v-model="config.active.type" placeholder="请选择时间范围">
+										<el-option key="1" label="近三天" :value="1"></el-option>
+										<el-option key="2" label="近三周" :value="2"></el-option>
+									</el-select>
+								</el-form-item>
+								<el-form-item label="标尺">
+									<el-input class="width250"  @input="config.active.base_ratio=config.active.base_ratio.replace(/^(0+)|[^\d]+/g,'')" v-model="config.active.base_ratio" placeholder="请输入标尺">
+										<template slot="append">
+											%
+										</template>
+									</el-input>
+								</el-form-item>
+							</div>
+						</div>
+						<div class="kuai">
+							<div class="formTitle">积分快讯设置</div>
+							<div class="formBox">
+								<div style="color: #333;font-weight: 700;margin-bottom: 10px;">显示最新产生的100条积分事件</div>
+								<el-form-item label="名称">
+									<el-input class="width250" maxlength="10" show-word-limit v-model.trim="config.event.name" placeholder="请输入名称"></el-input>
+								</el-form-item>
+								<el-form-item label="来源">
+									<el-select class="width250" multiple v-model="config.event.source_type" placeholder="全部">
+										<el-option v-for="item in sourceOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
+									</el-select>
+								</el-form-item>
+								<el-form-item label="部门">
+									<template slot="label">
+										<el-tooltip effect="dark" placement="top">
+										  <template slot="content">
+											选择部门默认包含子部门
+										  </template>
+										  <span>部门	<i class="el-icon-warning"></i></span>
+										</el-tooltip>
+									</template>
+									<el-cascader
+										v-model="config.event.deptArr"
+										:options="dept_tree"
+										:props="{checkStrictly: true,multiple : true, value: 'id', label: 'name', children: '_child' }"
+										ref="dept4"
+										class="width250"
+										filterable
+										collapse-tags
+										placeholder="全公司"
+										clearable
+									></el-cascader>
+								</el-form-item>
+								<el-form-item label="类型">
+									<el-select class="width250" v-model="config.event.ptId" placeholder="请选择积分类型">
+										<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value"></el-option>
+									</el-select>
+								</el-form-item>
+							</div>
+						</div>
+					</el-form>
+				</div>
+			</div>
+			<div class="flex-box-end" style="padding-top: 10px;">
+				<el-button @click="dialogVisible = false">取消</el-button>
+				<el-button type="primary" :loading="setLoading" :disabled="setLoading" @click="submit()">确定</el-button>
+			</div>
+			<el-dialog title="选择人员" width="640px" :visible.sync="show_employee_selector" append-to-body>
+				<EmployeeSelector
+					v-if="show_employee_selector"
+					ref="members"
+					:isChecKedAll="false"
+					:user_no_select="false"
+					:max="30"
+					:selected="employee_selected"
+					@confirm="move_employee_confirm"
+				/>
+				<span slot="footer" class="dialog-footer">
+					<el-button @click="show_employee_selector = false">取 消</el-button>
+					<el-button type="primary" @click="submitMembers()">保 存</el-button>
+				</span>
+			</el-dialog>
+		</el-dialog>
+		
+	</div>
+</template>
+
+<script>
+import upload from '@/components/upload';
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+export default {
+	name: 'screenSet',
+	components: { upload, EmployeeSelector },
+	data() {
+		return {
+			Xtoken: { 'X-Token': this.$getToken() },
+			loading: false,
+			setLoading: false,
+			ding_enable: true,
+			list: [],
+			dialogVisible: false,
+			isPz: false,
+			dept_tree: [], //部门列表
+			options: [
+				{
+					value: -5,
+					label: '本年'
+				},
+				{
+					value: -4,
+					label: '本季'
+				},
+				{
+					value: -3,
+					label: '本月'
+				},
+				{
+					value: -2,
+					label: '本周'
+				},
+				{
+					value: -1,
+					label: '本天'
+				},
+				{
+					value: 1,
+					label: '自定义时间区间'
+				}
+			],
+			roleOptions: [
+				{
+					value: 'all',
+					label: '全部'
+				},
+				{
+					value: 'manager',
+					label: '管理员'
+				},
+				{
+					value: 'employee',
+					label: '员工'
+				}
+			],
+			sourceOptions: [
+				{
+					value: 1,
+					label: '积分奖扣'
+				},
+				{
+					value: 2,
+					label: '任务'
+				},
+				{
+					value: 3,
+					label: '积分系统分配'
+				},
+				{
+					value: 4,
+					label: '考勤系统分配'
+				},
+				{
+					value: 5,
+					label: '积分申请'
+				},
+				// {
+				// 	value: 6,
+				// 	label: '绩效任务包'
+				// },
+				{
+					value: 8,
+					label: '积分导入'
+				},
+				{
+					value: 9,
+					label: 'A分转B分'
+				},
+				{
+					value: 10,
+					label: '钉钉汇报(日志)奖扣分'
+				}
+			],
+			typeOptions: [
+				{
+					value: 1,
+					label: '全部'
+				},
+				{
+					value: 2,
+					label: 'A分'
+				},
+				{
+					value: 3,
+					label: 'B分'
+				}
+			],
+			activeBor: '1',
+			isShowName: false,
+			nameVal: '',
+			employeeName: '',
+			employee_selected: { dept: [], employee: [] },
+			show_employee_selector: false,
+			isCompile:false,//是否编辑
+			
+			isPreview: false,
+			previewUrl:'',
+			previewUrl2:'',
+			code:'',
+			selectItem:{},
+			formData: {
+				// id:'',//修改与删除时,必传 不传则为新增
+				name: '', //不是删除则必填 配置名称 1-20个字符
+				remark: '', //备注信息 最多20个字符 默认空
+				del: 0, //是否为删除操作 1 是 其他否 默认0
+				remake_code: 0 //是否重新生成校验码 1 是 默认0
+			},
+			defaultConfig: {
+				//配置格式 不是删除则必填
+				ranking_type:'ranking',
+				company: {
+					name: this.$getUserData().company_info.name.slice(0, 10), //不超过十个字 公司名截断
+					logo: 'https://integralsys.oss-cn-shenzhen.aliyuncs.com/intesys/dd/17/2022/07/01/CaBis82ryBYbncxc3nehiSXkiwDbhbwi.png' //公司logo
+				},
+				title: '积分数据大屏', //不超过十个字
+				ranking_total: { //累计B分排名拿数据
+					name: "排行榜",  //不超过十个字
+					condition: { //筛选条件
+						dept: [],   //限定部门ID列表  空全公司
+						deptArr: [],
+						point_id: "2",//2AF 3BF,
+						position: "employee",//employee manager  all//员工 管理员  全部
+						exclusion: [],//不参与排名用户ID数组,
+					}
+				},
+				ranking: {
+					//从阶段排名拿数据
+					name: '排行榜', //不超过十个字
+					condition: {//筛选条件
+						time: [],
+						date: -3,
+						start_date: -3, //结束时间
+						end_date: -3, //开始时间
+						deptArr: [],
+						dept: [], //限定部门ID列表  空全公司
+						point_id: 3, //2AF   3BF,
+						position: 'all', //manager  all//员工 管理员  全部
+						employeeName: '',
+						exclusion: [] ,//不参与排名,
+						employee:[],
+					}
+				},
+				center: {
+					deptArr: [],
+					dept: [] //部门ID列表  空全公司
+				},
+				active: {
+					base_ratio: 60, //基准比例
+					deptArr: [],
+					dept: [], //部门ID列表  空全公司
+					type: 1
+				},
+				event: {
+					name: '积分快讯', //排行榜名称
+					source_type: [1, 2, 5], //来源ID列表 1积分录入 2任务 3积分系统分配 4考勤系统分配 5积分申请 6绩效任务包	8积分导入 9A分转B分 10钉钉报告直接奖励
+					deptArr: [],
+					dept: [], //部门ID列表  空全公司
+					point_id: [2, 3], //积分类型  2AF 3BF
+					ptId: 1
+				}
+			},
+			config: {
+				//配置格式 不是删除则必填
+				ranking_type:'ranking',
+				company: {
+					name: this.$getUserData().company_info.name.slice(0, 20), //不超过十个字 公司名截断
+					logo: 'https://integralsys.oss-cn-shenzhen.aliyuncs.com/intesys/dd/17/2022/07/01/CaBis82ryBYbncxc3nehiSXkiwDbhbwi.png' //公司logo
+				},
+				title: '积分数据大屏', //不超过十个字
+				ranking_total: { //累计B分排名拿数据
+					name: "累计B分排名",  //不超过十个字
+					condition: { //筛选条件
+						dept: [],   //限定部门ID列表  空全公司
+						deptArr: [],
+						point_id: "2",//2AF 3BF,
+						position: "employee",//employee manager  all//员工 管理员  全部
+						exclusion: [],//不参与排名用户ID数组,
+					}
+				},
+				ranking: {
+					//从阶段排名拿数据
+					name: '排行榜', //不超过十个字
+					condition: {
+						//筛选条件,
+						time: [],
+						date: -3,
+						start_date: -3, //结束时间
+						end_date: -3, //开始时间
+						deptArr: [],
+						dept: [], //限定部门ID列表  空全公司
+
+						point_id: 3, //2AF   3BF,
+						position: 'all', //manager  all//员工 管理员  全部
+						employeeName: '',
+						exclusion: [] ,//不参与排名,
+						employee:[],
+					}
+				},
+				center: {
+					deptArr: [],
+					dept: [] //部门ID列表  空全公司
+				},
+				active: {
+					base_ratio: 60, //基准比例
+					deptArr: [],
+					dept: [], //部门ID列表  空全公司
+					type: 1
+				},
+				event: {
+					name: '积分快讯', //排行榜名称
+					source_type: [1, 2, 5], //来源ID列表 1积分录入 2任务 3积分系统分配 4考勤系统分配 5积分申请 6绩效任务包	8积分导入 9A分转B分 10钉钉报告直接奖励
+					deptArr: [],
+					dept: [], //部门ID列表  空全公司
+					point_id: [2, 3], //积分类型  2AF 3BF
+					ptId: 1
+				}
+			},
+		};
+	},
+	watch: {
+		'config.event.ptId'(val) {
+			if (val == 1) {
+				this.config.event.point_id = [2, 3];
+			} else {
+				this.config.event.point_id = [val];
+			}
+		},
+		'config.event.deptArr'(val) {
+			if(val.length>0){
+				let dept_ids=[];
+				val.forEach((item)=>{
+					dept_ids.push(item[item.length-1]);
+					// dept_ids.push(...item);
+				})
+				let set =new Set(dept_ids);
+				this.config.event.dept = [...set];
+			}else{
+				this.config.event.dept=[];
+			}
+			this.closeDept()
+		},
+		'config.active.deptArr'(val) {
+			if(val.length>0){
+				let dept_ids=[];
+				val.forEach((item)=>{
+					dept_ids.push(item[item.length-1]);
+					// dept_ids.push(...item);
+				})
+				let set =new Set(dept_ids);
+				this.config.active.dept = [...set];
+			}else{
+				this.config.active.dept=[];
+			}
+			this.closeDept()
+		},
+		'config.center.deptArr'(val) {
+			if(val.length>0){
+				let dept_ids=[];
+				val.forEach((item)=>{
+					dept_ids.push(item[item.length-1]);
+					// dept_ids.push(...item);
+				})
+				let set =new Set(dept_ids);
+				this.config.center.dept = [...set];
+			}else{
+				this.config.center.dept=[];
+			}
+			this.closeDept()
+		},
+		'config.ranking.condition.deptArr'(val) {
+			if(val.length>0){
+				let dept_ids=[];
+				val.forEach((item)=>{
+					dept_ids.push(item[item.length-1]);
+					// dept_ids.push(...item);
+				})
+				let set =new Set(dept_ids);
+				this.config.ranking.condition.dept = [...set];
+			}else{
+				this.config.ranking.condition.dept=[];
+			}
+			this.closeDept()
+		},
+		'config.ranking_total.condition.deptArr'(val) {
+			if(val.length>0){
+				let dept_ids=[];
+				val.forEach((item)=>{
+					dept_ids.push(item[item.length-1]);
+					// dept_ids.push(...item);
+				})
+				let set =new Set(dept_ids);
+				this.config.ranking_total.condition.dept = [...set];
+			}else{
+				this.config.ranking_total.condition.dept=[];
+			}
+			this.closeDept()
+		},
+		'config.ranking.condition.date'(val){
+			if(val!=1){
+				this.config.ranking.condition.start_date= val; //结束时间
+				this.config.ranking.condition.end_date= val; //结束时间
+			}else{
+				this.config.ranking.condition.start_date= ''; //结束时间
+				this.config.ranking.condition.end_date= ''; //结束时间
+			}
+		},
+		isPz(val) {
+			if (!val) {
+				this.formData={
+					// id:'',//修改与删除时,必传 不传则为新增
+					name: '', //不是删除则必填 配置名称 1-20个字符
+					remark: '', //备注信息 最多20个字符 默认空
+					del: 0, //是否为删除操作 1 是 其他否 默认0
+					remake_code: 0 //是否重新生成校验码 1 是 默认0
+				}
+				this.isCompile=false;//是否编辑	
+			}
+		},
+		dialogVisible(val) {
+			if (!val) {
+				// this.activeBor='1';
+			}else{
+				setTimeout(()=>{
+					document.getElementById('scroll').scrollTop = 0;
+				},200)
+			}
+		}
+	},
+	mounted() {
+		this.getList();
+		this.getDepartment();
+	},
+	methods: {
+	    setTime(val){
+			if(val&&val.length>0){
+				this.config.ranking.condition.start_date= val[0]; //结束时间
+				this.config.ranking.condition.end_date= val[1]+86399000; //结束时间
+			}else{
+				this.config.ranking.condition.start_date= ''; //结束时间
+				this.config.ranking.condition.end_date= ''; //结束时间
+			}
+		},
+		//编辑
+	   compile(item){
+		   this.isCompile=true;//是否编辑	
+		   // this.selectItem=item;
+		   this.isPz=true;//是否编辑	
+		   this.formData={
+				id:item.id,//修改与删除时,必传 不传则为新增
+				name: item.name, //不是删除则必填 配置名称 1-20个字符
+				remark: item.remark, //备注信息 最多20个字符 默认空
+				del: 0, //是否为删除操作 1 是 其他否 默认0
+				remake_code: 0 ,//是否重新生成校验码 1 是 默认0
+				config:JSON.stringify(item.config)
+		   }
+	   },
+	   copy (index) {
+		  //创建input标签
+		  var input = document.createElement('input')
+		  //将input的值设置为需要复制的内容
+		  input.value =index==1? this.previewUrl:index==2? this.code:this.previewUrl2;
+		  //添加input标签
+		  document.body.appendChild(input)
+		  //选中input标签
+		  input.select()
+		  //执行复制
+		  document.execCommand('copy')
+		  //成功提示信息
+		  this.$message.success('已复制')
+		  //移除input标签
+		  document.body.removeChild(input)
+		},
+	   refresh(){
+		   this.$confirm('刷新后原有密码将会失效,确定要刷新吗?', '提示', {
+		   	confirmButtonText: '确定',
+		   	cancelButtonText: '取消',
+		   	type: 'warning'
+		   }).then(() => {
+				let data={
+					id:this.selectItem.id,
+					name: this.selectItem.name, //不是删除则必填 配置名称 1-20个字符
+					remark: this.selectItem.remark, //备注信息 最多20个字符 默认空
+					del: 0, //是否为删除操作 1 是 其他否 默认0
+					remake_code: 1 ,//是否重新生成校验码 1 是 默认0
+					config:JSON.stringify(this.selectItem.config)
+				}
+				this.$axios('post', '/api/integral/site/edit_screen', data).then(res => {
+					if (res.data.code == 1) {
+						this.code=res.data.data.code
+						this.getList();
+					}
+				})
+		   });
+		   
+		},
+		preview(item,index){
+			// this.previewUrl='http://localhost:8080/#/screen';
+			this.previewUrl=process.env.VUE_APP_BASE_API+'/pc/#/screen';
+			
+			let corpId=window.btoa(this.$getCache('corpId'))
+			this.previewUrl2=process.env.VUE_APP_BASE_API+'/pc/#/screenSan?corpId='+corpId;
+			if (process.env.NODE_ENV === 'development') {
+				this.previewUrl=process.env.VUE_APP_BASE_API+'#/screen';
+				this.previewUrl2=process.env.VUE_APP_BASE_API+'#/screenSan?corpId='+corpId;
+			}
+			if(index==1){
+				window.open(this.previewUrl+'?preview=1', '_blank');
+			}else{
+				this.selectItem=item;
+				this.code=item.code;
+				this.isPreview=true;
+			}
+		},
+		submitMembers() {
+			this.$refs.members.confirm(); //调用组件的confirm();
+		},
+		//获取部门
+		getDepartment() {
+			this.$axios('get', '/api/department/tree').then(res => {
+				this.dept_tree = this.getTreeData(res.data.data.list);
+			});
+		},
+		// 递归判断列表,把最后的children设为undefined
+		getTreeData(data) {
+			for (var i = 0; i < data.length; i++) {
+				if (data[i]._child.length < 1) {
+					// children若为空数组,则将children设为undefined
+					data[i]._child = undefined;
+				} else {
+					// children若不为空数组,则继续 递归调用 本方法
+					this.getTreeData(data[i]._child);
+				}
+			}
+			return data;
+		},
+		// 附件上传
+		beforeUpload(file) {
+			const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
+			const isLt2M = file.size / 1024 / 1024 < 5;
+			if (!isJPG) {
+				this.$message.error('上传图只能是 JPEG,PNG,JPG 格式!');
+			}
+			if (!isLt2M) {
+				this.$message.error('上传图片大小不能超过 5MB!');
+			}
+			return isJPG && isLt2M;
+		},
+		handleFilesSuccess(response, file, fileList) {
+			this.config.company.logo=response.url
+		},
+		saveFirst(fromName) {
+			this.$refs[fromName].validate(valid => {
+				if (valid) {
+					let formData = this.formData;
+					if(!this.isCompile){
+						formData.config = JSON.stringify(this.defaultConfig);
+					}
+					this.$axios('post', '/api/integral/site/edit_screen', formData).then(res => {
+						this.$message.success(this.isCompile?'已编辑':'已添加');
+						
+					}).finally(() => {
+						this.isPz=false;
+						this.getList();	
+					});
+				}
+			});
+		},
+		deleteSet(e) {
+			this.$confirm('确定要删除吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.$axios('POST', '/api/integral/site/edit_screen', { id: e.id,del:1 }).then(res => {
+					if (res.data.code == 1) {
+						this.$message.success('删除成功');
+						this.getList();
+					}
+				});
+			});
+		},
+		submit(fromName) {
+			if (!this.config.title) {
+				this.$message.error('请输入标题');
+				return false;
+			}
+			
+			if (!this.config.company.name) {
+				this.$message.error('请输入组织名称和logo设置 “名称”');
+				return false;
+			}
+			
+			if(this.config.ranking_type=='ranking'){
+				if (!this.config.ranking.name) {
+					this.$message.error('请输入排行榜设置 “名称”');
+					return false;
+				}
+				if(!this.config.ranking_total.name){
+					this.config.ranking_total.name='累计B分排名'
+				}
+				if(this.config.ranking.condition.date == 1&&!this.config.ranking.condition.start_date){
+					if(this.config.ranking.condition.time.length!=0){
+						let time=this.config.ranking.condition.time
+						this.config.ranking.condition.start_date= time[0]; //结束时间
+						this.config.ranking.condition.end_date= time[1]+86399000; //结束时间
+					}else{
+						this.$message.error('请选择排行榜设置 “时间”');
+						return false;
+					}
+				}
+			}else{
+				if (!this.config.ranking_total.name) {
+					this.$message.error('请输入排行榜设置 “名称”');
+					return false;
+				}
+				if(!this.config.ranking.name){
+					this.config.ranking.name='排行榜'
+				}
+			}
+			
+			if (!this.config.event.name) {
+				this.$message.error('请输入积分快讯设置 “名称”');
+				return false;
+			}
+			if (this.config.active.base_ratio>100) {
+				this.$message.error('活跃度设置 “标尺” 不能超过100');
+				return false;
+			}
+			if (!this.config.active.base_ratio) {
+				this.$message.error('活跃度设置 “标尺” 不能为空,请输入1~100');
+				return false;
+			}
+			if (this.config.event.source_type.length==0) {
+				this.$message.error('请输入积分快讯设置 “来源” 至少选择一项');
+				return false;
+			}
+			let data={
+				id:this.selectItem.id,
+				name: this.selectItem.name, //不是删除则必填 配置名称 1-20个字符
+				remark: this.selectItem.remark, //备注信息 最多20个字符 默认空
+				del: 0, //是否为删除操作 1 是 其他否 默认0
+				remake_code: 0 ,//是否重新生成校验码 1 是 默认0
+				config:JSON.stringify(this.config)
+			}
+			// console.log(data)
+			// return false
+			this.$axios('post', '/api/integral/site/edit_screen', data).then(res => {
+				if (res.data.code == 1) {
+					this.$message.success("保存成功");
+					this.getList();
+				}
+			}).finally(() => {
+				this.dialogVisible = false;
+				this.setLoading = false;
+			});
+			
+		},
+		openSet(item) {
+			if(!item.config.ranking_total){
+				item.config.ranking_total={
+					name: "累计B分排名",  //不超过十个字
+					condition: { //筛选条件
+						dept: [],   //限定部门ID列表  空全公司
+						deptArr: [],
+						point_id: "2",//2AF 3BF,
+						position: "employee",//employee manager  all//员工 管理员  全部
+						exclusion: [],//不参与排名用户ID数组,
+					}
+				}
+				item.config.ranking_type='ranking'
+			}
+			this.$nextTick(()=>{
+				this.config=JSON.parse(JSON.stringify(item.config));
+				this.selectItem=item;
+				this.employee_selected.employee=item.config.ranking.condition.employee;
+				this.dialogVisible = true;
+			})
+		},
+		getList() {
+			this.loading = true;
+			this.$axios('get', '/api/integral/site/screen')
+				.then(res => {
+					this.list = res.data.data.list;
+				})
+				.finally(err => {
+					this.loading = false;
+				});
+		},
+		closeDept(){
+			// this.$nextTick(() => {
+			// 	this.$refs.dept1.dropDownVisible = false;
+			// 	this.$refs.dept2.dropDownVisible = false;
+			// 	this.$refs.dept3.dropDownVisible = false;
+			// 	this.$refs.dept4.dropDownVisible = false;
+			// });
+		},
+		// 选择奖扣对象
+		move_employee_confirm(data) {
+			this.employee_selected = { dept: [], employee: [] };
+			this.config.ranking.condition.employeeName = '';
+			if (data.employee !== null && data.employee.length != 0) {
+				let exclusion = [];
+				this.employee_selected = data;
+				this.config.ranking.condition.employee=data.employee
+				data.employee.forEach(element => {
+					this.config.ranking.condition.employeeName += element.name + ',';
+					exclusion.push(element.id);
+				});
+				this.config.ranking.condition.exclusion = exclusion;
+			} else {
+				this.config.ranking.condition.exclusion = [];
+				this.config.ranking.condition.employee=[];
+			}
+			this.show_employee_selector = false;
+		},
+		noPersonnelListTips() {
+			this.show_employee_selector = true;
+		},
+		myFunction(e) {
+			let scrollTop = document.getElementById('scroll').scrollTop;
+			if (this.config.ranking.condition.date == 1) {
+				if (scrollTop < 85) {
+					this.activeBor = '1';
+				} else if (scrollTop > 85 && scrollTop < 355) {
+					this.activeBor = '2';
+				} else if (scrollTop >= 355 && scrollTop < 800) {
+					this.activeBor = '3';
+				} else if (scrollTop >= 800 && scrollTop < 900) {
+					this.activeBor = '4';
+				} else if (scrollTop >= 900 && scrollTop < 960) {
+					this.activeBor = '5';
+				} else if (scrollTop >= 960) {
+					this.activeBor = '6';
+				}
+			} else {
+				if (scrollTop < 85) {
+					this.activeBor = '1';
+				} else if (scrollTop >= 85 && scrollTop < 355) {
+					this.activeBor = '2';
+				} else if (scrollTop >= 355 && scrollTop < 760) {
+					this.activeBor = '3';
+				} else if (scrollTop >= 760 && scrollTop < 860) {
+					this.activeBor = '4';
+				} else if (scrollTop >= 860 && scrollTop < 900) {
+					this.activeBor = '5';
+				} else if (scrollTop >= 900) {
+					this.activeBor = '6';
+				}
+			}
+		},
+		activeQie(index) {
+			if (this.config.ranking.condition.date == 1) {
+				if (index == '1') {
+					document.getElementById('scroll').scrollTop = 0;
+				} else if (index == '2') {
+					document.getElementById('scroll').scrollTop = 87;
+				} else if (index == 3) {
+					document.getElementById('scroll').scrollTop = 357;
+				} else if (index == 4) {
+					document.getElementById('scroll').scrollTop = 802;
+				} else if (index == 5) {
+					document.getElementById('scroll').scrollTop = 902;
+				} else if (index == 6) {
+					document.getElementById('scroll').scrollTop = 1078;
+				}
+			} else {
+				if (index == 1) {
+					document.getElementById('scroll').scrollTop = 0;
+				} else if (index == 2) {
+					document.getElementById('scroll').scrollTop = 87;
+				} else if (index == 3) {
+					document.getElementById('scroll').scrollTop = 357;
+				} else if (index == 4) {
+					document.getElementById('scroll').scrollTop = 762;
+				} else if (index == 5) {
+					document.getElementById('scroll').scrollTop = 862;
+				} else if (index == 6) {
+					document.getElementById('scroll').scrollTop = 1038;
+				}
+			}
+		},
+	}
+	
+};
+</script>
+<style scoped lang="scss">
+.activeBor {
+	// background-color: #;
+	color: #2490fd;
+	border: 1px solid #2490fd !important;
+	box-shadow: 0 0 3px #2490fd;
+}
+.border1 {
+	border: 1px solid #ccc;
+	border-radius: 3px;
+	margin: 5px;
+	text-align: center;
+	cursor: pointer;
+}
+.avatar-uploader ::v-deep .el-upload {
+	border: 1px dashed #d9d9d9;
+	border-radius: 6px;
+	cursor: pointer;
+	position: relative;
+	overflow: hidden;
+}
+.avatar-uploader ::v-deep .el-upload:hover {
+	border-color: #409eff;
+}
+.avatar-uploader-icon {
+	font-size: 28px;
+	color: #8c939d;
+	width: 100px;
+	height: 100px;
+	line-height: 100px;
+	text-align: center;
+}
+.avatar {
+	width: 100px;
+	height: 100px;
+	display: block;
+}
+.dialog ::v-deep .el-dialog__body {
+	padding: 20px;
+}
+.width250 {
+	width: 250px;
+}
+.kuai {
+	margin-bottom: 30px;
+}
+.kuai .formBox {
+	padding-left: 20px;
+}
+.form ::v-deep .el-form-item {
+	margin-bottom: 20px;
+}
+.form ::v-deep .el-form-item__label {
+	color: #777777;
+}
+.formTitle {
+	font-size: 16px;
+	font-weight: 700;
+	margin-bottom: 10px;
+	color: #222;
+}
+.diy-tip1 {
+	margin-bottom: 10px !important;
+	background: #f0f9eb !important;
+	color: #333 !important;
+	border: 1px solid #67c23a !important;
+	padding: 9px !important;
+	min-width: 800px;
+	border-radius: 4px;
+}
+.el-dialog__body {
+	position: relative;
+	top: -20px;
+}
+.widthInput {
+	width: 150px;
+}
+.title {
+	margin: 10px 0;
+	margin-top: 0;
+	font-size: 14px;
+	font-weight: 700;
+	padding-left: 13px;
+}
+.initia_title {
+	font-size: 20px;
+	color: rgba(48, 49, 51, 1);
+	font-family: PingFangSC-Regular;
+}
+.initia_title_1 {
+	color: #e6a23c;
+	font-size: 14px;
+	margin-top: 10px;
+}
+.lookQrcode {
+	color: #606266;
+	cursor: pointer;
+	transition: all 0.3s;
+	font-weight: 700;
+}
+.lookQrcode:hover {
+	color: #2490fd;
+}
+.name {
+	max-width: 200px;
+	margin-right: 10px;
+}
+</style>

+ 537 - 0
src/views/subassembly/set/systemLayout.vue

@@ -0,0 +1,537 @@
+<template>
+	<div class="all padding-20" v-loading="loading">
+		
+		<el-tabs v-model="activeName" @tab-click="handleClick" class="tab-container">
+			<el-tab-pane label="基本设置" name="first">
+				<div class="integralApproval" style="margin-top: 30px;">
+					<b>积分审批</b>
+					<div>当前系统审批流程 <span class="blue cursor" @click="approvalProcess">查看图例</span></div>
+					<div class="fontColorC"><span>指定规则的审批或奖扣分,均可直接通过</span></div>
+				</div>
+				
+				<div class="integralApproval">
+					<b>积分复核<el-switch style="margin-left:30px;" :active-value="1" :inactive-value="0" v-model="event_review_status"></el-switch></b>
+					<div style="line-height: 22px;"  v-if="event_review_status">
+						<div class="fontColorC" style="margin-bottom: 5px;">开启后,以下来源的积分需要在<span class="orange">复核通过</span>后才计入排名和统计<br/>哪些来源的积分需要复核(至少选择一项)</div>
+						<div class="flex-box-ce">
+						  <el-checkbox v-model="event_apply_review" label="积分申请" border size="small"></el-checkbox>
+						  <el-checkbox v-model="event_entry_review" label="积分奖扣" border size="small"></el-checkbox>
+						  <el-checkbox v-model="event_task_review" label="任务" border size="small"></el-checkbox>
+						</div>
+						<div style="margin: 12px 0;">
+							<div style="margin-bottom: 10px;">复核人员选择 <span style="font-size: 12px;" class="fontColorB">(仅系统管理员可更改此配置)</span></div>
+							<el-radio-group  v-model="is_review_manager" style="display: block;">
+							    <el-radio :disabled="!isCreator" :label="1">积分管理员、公司管理员、系统管理员均可操作复核</el-radio>
+								<div style="margin-bottom: 8px;"></div>
+							    <el-radio :disabled="!isCreator" :label="2">指定人员可操作复核</el-radio>
+							</el-radio-group>
+							<div class="input-box font-flex-word" @click="openUserSelect" v-if="is_review_manager==2">
+								<span class="fontColorC" v-if="event_special.length==0">请选择指定人员</span>
+								<template v-else>
+									<span v-for="(item,index) in event_special" :key="index">{{item.name}}<span v-if="index!=event_special.length-1">,</span></span>
+								</template>
+							</div>
+						</div>
+						<el-checkbox v-model="event_review_point">允许复核人调整分值</el-checkbox>
+					</div>
+				</div>
+				<div class="integralApproval">
+					<b>福利模块<el-switch style="margin-left:30px;" :active-value="1" :inactive-value="0" v-model="shop_status"></el-switch></b>
+					<div  class="fontColorC">
+						<div>开启后,通过“功勋点”可兑换公司的福利奖品;</div>
+						<div>员工可通过公司定期统一发放或挣更多个人B分来获得功勋点</div>
+					</div>
+				</div>
+				
+				<div class="integralApproval">
+					<b>
+						提交积分时,必须选择积分规则
+						<el-switch style="margin-left:30px;" v-model="ruleOnoff"></el-switch>
+					</b>
+					<div  class="fontColorC">
+						<div>开启后,申请积分或奖扣积分时,必须选择积分规则提交;</div>
+						<div>此配置不影响积分审批和任务发布</div>
+					</div>
+				</div>
+				<div class="integralApproval">
+					<b>
+						指定规则的审批或奖扣分免审
+						<el-switch style="margin-left:30px;" v-model="examine"></el-switch>
+					</b>
+					<div  class="fontColorC">
+						<div>开启后,按照系统已有的积分规则制度提交的审批或者奖扣可直接通过;</div>
+						<div>即使审批人/录分人的权限分不足,也能审批通过</div>
+					</div>
+				</div>
+				<div class="integralApproval">
+					<b>
+						A分转B分
+						<el-switch style="margin-left:30px;" v-model="isApB"></el-switch>
+					</b>
+					<div class="flex-box flex-v-ce" v-if="isApB">
+						1A分=<el-input v-model.number="pointNum" autofocus="0" size="mini" class="pointNum" oninput="value=value.replace(/[^\d]/g,'')"></el-input>B分
+					</div>
+					<div class="fontColorC">
+						<div>开启后,每奖/扣1条A分,额外产生一条分值按比例转换后的B分记录;</div>
+						<div>例如:设置1A分=10B分时,因表现出色奖10A分的同时,额外奖100B分。</div>
+					</div>
+				</div>
+				<div class="integralApproval">
+					<b>
+						管理者审批计入奖扣分目标
+						<el-switch style="margin-left:30px;" v-model="task_review"></el-switch>
+					</b>
+					<div  class="fontColorC">
+						<div>系统默认的管理者奖扣目标只包含管理者主动给员工奖扣的积分;</div>
+						<div>开启后,审批员工申请的积分和任务也会记入Ta的奖扣分目标内</div>
+					</div>
+				</div>
+				<div class="integralApproval">
+					<b>管理者奖扣分目标结算时间(不达标自动扣分)</b>
+					<div class="flex-box flex-v-ce" style="margin-top:10px;">
+						每月
+						<el-select v-model="task_schedule_day" size="mini" style="margin: 0 10px;width: 80px;" placeholder="请选择截止日期">
+							<el-option v-for="item in columns" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+						结算上个月的管理者奖扣,不达标的自动扣分
+					</div>
+					<div class="fontColorC">
+						<div>结算产生的积分事件均记录为上月的管理者积分,例如6月5号结算5月份的管理者奖扣:</div>
+						<div>如果5月份管理者“张三”存在目标不达标,将进行扣分,扣分事件计入5月份的积分排名和统计中</div>
+						<div class="orange">*注:如上月已结算扣分,修改结算时间不会再次结算,请企业根据自身情况合理设置结算时间</div>
+					</div>
+				</div>
+			</el-tab-pane>
+			<el-tab-pane label="通知设置" name="second">
+				<div class="integralApproval">
+					<div v-for="(item, index) in informText" :key="index" style="margin-top:30px;">
+						<p  class="flex-box-ce">
+							<b>{{ item.title }}</b>
+							<el-switch v-if="item.switchs == 0" style="margin:-6px 0 0 30px;" v-model="individualPoints"></el-switch>
+							<el-switch v-if="item.switchs == 1" style="margin:-6px 0 0 30px;" v-model="pointManagement"></el-switch>
+							<el-switch v-if="item.switchs == 2" style="margin:-6px 0 0 30px;" v-model="taskToInform"></el-switch>
+							<el-switch v-if="item.switchs == 3" style="margin:-6px 0 0 30px;" v-model="approvalNotice"></el-switch>
+						</p>
+						<p>{{ item.ram }}</p>
+						<p style="margin-top: 5px;" v-if="item.checkboxs && individualPoints">
+							<el-checkbox v-model="checked">{{ item.checkboxs }}</el-checkbox>
+						</p>
+					</div>
+				</div>
+			</el-tab-pane>
+			<el-tab-pane label="操作历史" name="history">
+				<el-form :inline="true">
+					<el-form-item style="float: right;margin-bottom: 0;">
+						<el-input size="medium" v-model="formData.keywords" placeholder="请输入内容" max="200" @keyup.enter.native="his_int()" class="persons_name">
+							<el-button size="medium" slot="append" icon="el-icon-search" @click="his_int()"></el-button>
+						</el-input>
+					</el-form-item>
+				</el-form>
+				<el-table :data="list" style="width: 100%" v-loading="hisload">
+					<el-table-column label="内容" prop="content"></el-table-column>
+					<el-table-column prop="create_time" label="时间" width="180px"></el-table-column>
+					<template slot="empty">
+						<noData></noData>
+					</template>
+				</el-table>
+				<center style="padding: 20px 0;">
+					<el-pagination
+					background
+					@size-change="handleSizeChange"
+					@current-change="handleCurrentChange"
+					:page-sizes="[10, 20, 50, 100]"
+					layout="total, sizes, prev, pager, next"
+					:page-size="formData.page_size"
+					:current-page="formData.page"
+					:total="total"
+					></el-pagination>
+				</center>
+			</el-tab-pane>
+		</el-tabs>
+		<div class="pop-up">
+			<el-button type="primary" class="save" v-if="activeName == 'first' || activeName == 'second'" @click="saveFirst(activeName)">保存</el-button>
+		</div>
+		<el-dialog title="系统审批流程" :visible.sync="dialogVisible" width="770px" top="3vh" :before-close="handleClose">
+			<svg-icon icon-class="approval_process" style="font-size:730px;" />
+		</el-dialog>
+		
+		<el-dialog title="人员选择" :visible.sync="manageScope_show" top="5vh" width="700px">
+			<EmployeeSelector
+				v-if="manageScope_show"
+				ref="Employee2"
+				:max="10"
+				:isChecKedAll="false"
+				:selected="selected_manage"
+				@confirm="manage_confirm"
+			></EmployeeSelector>
+			<span slot="footer">
+				<el-button @click="manageScope_show=false">取消</el-button>
+				<el-button type="primary" :loading="scope_loading" :disabled="scope_loading" @click="sub_manageScope">完成</el-button>
+			</span>
+		</el-dialog>
+	
+	</div>
+</template>
+<script>
+
+
+
+import EmployeeSelector from '@/components/EmployeeSelector.vue';
+export default {
+	components:{EmployeeSelector},
+	data() {
+		return {
+			loading: false,
+			activeName: 'first',
+			examine: false,
+			ruleOnoff: false,
+			shop_status:0,//是否开启福利模块
+
+			checked: false, //积分日报展示A分数据
+			individualPoints: false, //个人积分日报
+			pointManagement: false, //积分管理周报
+			taskToInform: false, //任务通知
+			approvalNotice: false, //审批通知
+			informText: [
+				{ title: '个人积分通知', switchs: 0, ram: '每天推送个人积分的排名和奖扣分情况(不参与积分排名的除外)', checkboxs: '积分日报展示A分数据' },
+				{ title: '向管理者推送积分周报', switchs: 1, ram: '每周一给管理者推送上周的管理周报' },
+				{ title: '任务通知', switchs: 2, ram: '每天定时推送收到任务的通知' },
+				{ title: '审批通知', switchs: 3, ram: '每天定时推送收到审批的通知' }
+			],
+			dialogVisible: false,
+			//A转B
+			pointNum: 0,
+			isApB: false,
+
+			// 管理者奖扣记入
+			task_review: false,
+
+			// 操作历史
+			hisload: false,
+			list: null,
+      		total: null,
+			formData: {
+				keywords: '',
+				page: 1,
+				page_size: 10
+			},
+			
+			// 复核相关
+			event_review_status:1,//是否开启复核 1 开启 0或其他 不开启
+			event_task_review:1,//审批是否开启复核 1 开启 0或其他不开启
+			event_apply_review:1,//任务积分是否开启复核 1 开启 0或其他不开启
+			event_entry_review:1,//录入积分,是否开启复核 1 开启 0或其他不开启
+			event_review_point:1,//复核积分,是否允许修改分值 1 可以 0或其他不可以
+			
+			is_review_manager:1,
+			event_review_manager:1,//是否管理员复核 0-否 1-是
+			event_review_special:1,//是否指定人员复核 0-否 1-是
+			event_special:[], //指定复核的人员id列表
+			
+			
+			columns: [
+				{ name: '1号', value: 1 },
+				{ name: '2号', value: 2 },
+				{ name: '3号', value: 3 },
+				{ name: '4号', value: 4 },
+				{ name: '5号', value: 5 },
+				{ name: '6号', value: 6 },
+				{ name: '7号', value: 7 },
+				{ name: '8号', value: 8 },
+				{ name: '9号', value: 9 },
+				{ name: '10号', value: 10 },
+				{ name: '11号', value: 11 },
+				{ name: '12号', value: 12 },
+				{ name: '13号', value: 13 },
+				{ name: '14号', value: 14 },
+				{ name: '15号', value: 15 },
+				{ name: '16号', value: 16 },
+				{ name: '17号', value: 17 },
+				{ name: '18号', value: 18 },
+				{ name: '19号', value: 19 },
+				{ name: '20号', value: 20 },
+				{ name: '21号', value: 21 },
+				{ name: '22号', value: 22 },
+				{ name: '23号', value: 23 },
+				{ name: '24号', value: 24 },
+				{ name: '25号', value: 25 },
+				{ name: '26号', value: 26 },
+				{ name: '27号', value: 27 },
+				{ name: '28号', value: 28 },
+				// { name: '29号', value: 29 },
+				// { name: '30号', value: 30 },
+				// { name: '31号', value: 31 }
+			],
+			task_schedule_day:1,
+			
+			manageData:[],
+			manageScope_show:false,
+			scope_loading:false,
+			selected_manage: { employee: [], dept: [] },
+			isCreator:this.$getIsCreator('creator'),
+		};
+	},
+	watch:{
+		is_review_manager(val){
+			this.event_review_manager=0;//是否管理员复核 0-否 1-是
+			this.event_review_special=0;//是否指定人员复核 0-否 1-是
+			val==1? this.event_review_manager=1:this.event_review_special=1
+		}
+	},
+	mounted() {
+		this.manageList();
+		this.cheakAx('first');
+	},
+	methods: {
+		manage_confirm(val){
+			if(val.employee.length>0){
+				this.event_special=val.employee;
+			}else{
+				this.event_special=[];
+			}
+			this.scope_loading = false;
+			this.manageScope_show = false
+		},
+		openUserSelect(){
+			if(!this.$getIsCreator('creator')){
+				return false
+			}
+			this.selected_manage.employee=this.event_special;
+			this.manageScope_show=true;
+		},
+		sub_manageScope(){
+			this.scope_loading = true
+			this.$refs.Employee2.confirm();
+		},
+		//管理列表
+		manageList(){
+			let params = {
+				roles: ['creator', 'admin', 'point_manager', 'dept_manager']
+			}
+			this.$axios('get', '/api/employee/role_employee', params).then(res =>{
+				if(res.data.code == 1){
+					this.manageData = res.data.data.list
+				}
+			})
+		},
+		hisList() {
+			let params = this.formData
+			this.hisload = true
+			this.$axios('get', '/api/log/operation/list', params).then(res =>{
+				if(res.data.code == 1){
+					let list = res.data.data.list
+					this.list = list.list
+					this.total = list.total
+				}
+			}).finally(_=>{
+				this.hisload = false
+			})
+		},
+		approvalProcess() {
+			this.dialogVisible = true;
+		},
+		handleClose(none) {
+			none();
+		},
+		handleClick(tab, event) {
+			if(this.activeName == 'history'){
+				this.hisList()
+			}else{
+				this.cheakAx(this.activeName);
+			}
+		},
+		saveFirst(name) {
+			let data = {};
+			if (name == 'first') {
+				data.specified_rule_item = this.ruleOnoff ? 1 : 0;
+				data.rule_limit_check = this.examine ? 0 : 1;
+				data.task_review = this.task_review ? 1 : 0;
+				data.shop_status = this.shop_status;//是否开启福利模块
+				if (this.isApB) {
+					if (this.pointNum == 0 || !this.pointNum) {
+						this.$message({
+							message: 'A转B分,分值不能空或者零',
+							type: 'error'
+						});
+						return;
+					}
+				}
+				this.isApB ? (data.a2b = this.pointNum) : (data.a2b = 0);
+				data.event_review_status=this.event_review_status;//是否开启复核 1 开启 0或其他 不开启
+				data.event_task_review=this.event_task_review? 1 : 0;//审批是否开启复核 1 开启 0或其他不开启
+				data.event_apply_review=this.event_apply_review? 1 : 0;//任务积分是否开启复核 1 开启 0或其他不开启
+				data.event_entry_review=this.event_entry_review? 1 : 0;//录入积分,是否开启复核 1 开启 0或其他不开启
+				data.event_review_point=this.event_review_point? 1 : 0;//复核积分,是否允许修改分值 1 可以 0或其他不可以
+				
+				data.event_review_manager=this.event_review_manager;//是否管理员复核 0-否 1-是
+				data.event_review_special=this.event_review_special;//是否指定人员复核 0-否 1-是
+				data.event_special=this.event_special.map(e=>{
+					return e.id
+				}); //指定复核的人员id列表
+				data.task_schedule_day=this.task_schedule_day  //月结日期
+				if(this.event_review_status&&!data.event_task_review&&!data.event_apply_review&&!data.event_entry_review){
+					this.$message({
+						message: '复核来源至少选择一项',
+						type: 'error'
+					});
+					return;
+				}
+				// if(this.event_review_special&&data.event_special.length==0){
+				// 	this.$message.error('请选择指定复核人员');
+				// 	return;
+				// }
+			} else {
+				data.report_integral_daily = this.individualPoints ? 1 : 0;
+				this.individualPoints ? (data.report_integral_daily_a = this.checked ? 1 : 0) : '';
+				data.report_integral_weekly = this.pointManagement ? 1 : 0;
+				data.report_work_daily = this.taskToInform ? 1 : 0;
+				data.report_review_daily = this.approvalNotice ? 1 : 0;
+			}
+			this.loading = true;
+			this.$axios('post', '/api/integral/site/config', data).then(res => {
+				this.$message({
+					message: res.data.msg,
+					type: 'success'
+				});
+			}).finally(() => {
+				this.loading = false;
+				this.cheakAx('first');
+			});
+		},
+		cheakAx(name) {
+			this.loading = true;
+			this.$axios('get', '/api/integral/site/config').then(res => {
+				let data = res.data.data;
+				this.$store.dispatch('setConfig', res.data.data);
+				if (name == 'first') {
+					if(data.specified_rule_item){
+						this.ruleOnoff = data.specified_rule_item == 1 ? true : false;
+					}else{
+						this.ruleOnoff = false
+					}
+					this.shop_status=data.shop_status;//是否开启福利模块
+					this.examine = data.rule_limit_check == 0 ? true : false;
+					this.isApB = data.a2b == 0 ? false : true;
+					this.task_review = data.task_review == 1 ? true : false;
+					this.pointNum = data.a2b;
+					
+					this.event_review_status=data.event_review_status;//是否开启复核 1 开启 0或其他 不开启
+					this.event_task_review=data.event_task_review== 1 ? true : false;//审批是否开启复核 1 开启 0或其他不开启
+					this.event_apply_review=data.event_apply_review== 1 ? true : false;//任务积分是否开启复核 1 开启 0或其他不开启
+					this.event_entry_review=data.event_entry_review== 1 ? true : false;//录入积分,是否开启复核 1 开启 0或其他不开启
+					this.event_review_point=data.event_review_point== 1 ? true : false;//复核积分,是否允许修改分值 1 可以 0或其他不可以
+					
+					this.is_review_manager=data.event_review_manager== 1 ? 1 : 2;
+					this.event_review_manager=data.event_review_manager;//是否管理员复核 0-否 1-是
+					this.event_review_special=data.event_review_special;//是否指定人员复核 0-否 1-是
+					this.event_special=data.event_special; //指定复核的人员id列表
+					
+					
+					this.task_schedule_day=data.task_schedule_day;
+				} else {
+					this.individualPoints = data.report_integral_daily == 1 ? true : false;
+					this.checked = this.individualPoints ? (data.report_integral_daily_a == 1 ? true : false) : false;
+					this.pointManagement = data.report_integral_weekly == 1 ? true : false;
+					this.taskToInform = data.report_work_daily == 1 ? true : false;
+					this.approvalNotice = data.report_review_daily == 1 ? true : false;
+				}
+			}).finally(err => {
+				this.loading = false;
+			});
+		},
+		// 页码变更
+		handleCurrentChange(val) {
+			this.formData.page = val;
+			this.hisList()
+		},
+		handleSizeChange(val) {
+			this.formData.page_size = val;
+			this.hisList()
+		},
+		his_int(val) {
+			this.formData.page = 1;
+			this.hisList()
+		},
+	}
+};
+</script>
+
+<style scoped lang="scss">
+.input-box{
+	-webkit-appearance: none;
+	background-color: #FFF;
+	background-image: none;
+	border-radius: 4px;
+	border: 1px solid #DCDFE6;
+	box-sizing: border-box;
+	color: #606266;
+	display: inline-block;
+	font-size: inherit;
+	height: 36px;
+	line-height: 36px;
+	outline: 0;
+	padding: 0 15px;
+	transition: border-color .2s cubic-bezier(.645,.045,.355,1);
+	width: 360px;
+	cursor: pointer;
+	margin-top: 8px;
+}	
+.el-input__inner {
+	height: 35px;
+	line-height: 35px;
+}
+.integralApproval {
+	margin-bottom: 40px;
+	.pointNum {
+		width: 100px;
+		margin: 0 10px;
+	}
+	b {
+		font-size: 16px;
+		margin-bottom: 12px;
+		display: block;
+	}
+	p {
+		a {
+			color: #1795f9;
+			padding-left: 15px;
+			cursor: pointer;
+		}
+	}
+	.initia_mark {
+		background: #191919;
+		border-radius: 50%;
+		width: 14px;
+		height: 14px;
+		color: #fff;
+		display: inline-block;
+		font-size: 12px;
+		line-height: 14px;
+		text-align: center;
+		margin-left: 4px;
+		cursor: default;
+	}
+}
+.toolCont {
+	max-width: 280px;
+}
+
+.save {
+	// margin-top: 30px;
+	width: 100px;
+	font-size: 15px;
+}
+.pop-up{
+  position: sticky;
+  bottom: -10px;
+  z-index: 999;
+  padding: 10px 0;
+  background-color: #fff;
+}
+.tab-container ::v-deep .el-tabs__item {
+	font-size: 16px;
+}
+.tab-container ::v-deep .el-tabs__nav-wrap::after {
+	background: #fff;
+}
+</style>

+ 988 - 0
src/views/subassembly/set/voluntarilyPoint.vue

@@ -0,0 +1,988 @@
+<template>
+	<div>
+		<el-alert class="diy-tip" title="什么是自动积分?" @close="tips_close" v-if="tips_show" type="success" description show-icon>
+			<p>系统按照设定的时间(每月/每周/每日) 自动给员工添加B分,比如某员工有一个工程师证,得到公司的认可,公司就会每月给他加分</p>
+		</el-alert>
+		<div class="all">
+			<div class="flex-box">
+				<div class="terr-left">
+					<div><el-button size="medium" @click="add_grouping()" type="primary">新增加分组</el-button></div>
+					<div><el-button size="medium" @click="add_rules_detail" type="primary">新增加分项</el-button></div>
+
+					<!-- 循环分组 -->
+					<el-col :span="24" style="padding-right: 0;" v-loading="rule_trees_load">
+						<el-menu :default-active="default_active" class="rule_name" :unique-opened="true">
+							<el-submenu :index="index.toString()" :key="index" v-for="(item, index) in rule_list">
+								<template slot="title">
+									<div style="width: 80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; height: 47px;line-height: 47px;">
+										<i class="el-icon-edit-outline title_top" @click.stop="edit_grouping(item)"></i>
+										<span class="title_top">{{ item.name }}</span>
+									</div>
+								</template>
+								<el-menu-item
+									:key="index2"
+									:index="returnIndex(index, index2)"
+									v-for="(data, index2) in item.child"
+									@click="open_rights(data)"
+									style="height: 47px;line-height: 47px;"
+								>
+									<div style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap">
+										<span slot="title">{{ data.remark }}</span>
+									</div>
+								</el-menu-item>
+							</el-submenu>
+						</el-menu>
+					</el-col>
+				</div>
+
+				<div class="terr-right border-right flex-1">
+					<el-col :span="24" v-show="rule_list.length == 0 || isShowAdd" style="text-align: center;margin: 0 auto;position: relative;top: 30%;">
+						<p><img src="@/assets/image/nodata_default.png" width="200px" alt="" /></p>
+						<p style="color: #909399;">
+							还没有
+							<span v-if="rule_list.length == 0">加分组和</span>
+							加分项
+						</p>
+						<p style="color: #909399;">
+							<span v-if="rule_list.length == 0">先</span>
+							<span style="color: #26A2FF;cursor:pointer;" v-if="rule_list.length == 0" @click="add_grouping()">【新增加分组】</span>
+							<span v-if="rule_list.length == 0">再</span>
+							<span v-if="rule_list.length !== 0">请</span>
+							<span style="color: #26A2FF;cursor:pointer" @click="add_rules_detail">【新增加分项】</span>
+						</p>
+					</el-col>
+
+					<el-col v-if="!isShowAdd && right_rules_detail.remark">
+						<el-row>
+							<el-col :span="24" style="font-size:20px;color:#303133;line-height:36px;">
+								{{ right_rules_detail.remark }}
+								<span style="padding-left: 10px;">{{ right_rules_detail.min_point }}B分</span>
+								<el-button plain style="padding:10px 12px; margin-left: 10px;" @click="edit_rules()">编辑</el-button>
+							</el-col>
+						</el-row>
+						<div class="flex-box btns flex-v-ce">
+							<div class="flex-1">
+								<el-button size="medium" @click="del_item" type="danger" plain>批量移除</el-button>
+								<el-button size="medium" type="primary" @click="add_employee_show = true">添加人员</el-button>
+								<el-button size="medium" type="primary" plain @click="toleadShw = true">导入自动积分</el-button>
+							</div>
+							<el-button size="medium" type="primary" plain @click="openR">执行当前周期加分</el-button>
+							<div style="padding-left: 10px;">
+								<el-select size="medium" v-model="employee_id" filterable clearable placeholder="请输入或选择人员">
+									<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+								</el-select>
+							</div>
+						</div>
+						<el-table ref="multipleTable" :data="table_list" tooltip-effect="dark" style="width: 100%;margin-top:20px;" @selection-change="handleSelectionChange">
+							<el-table-column type="selection" width="45"></el-table-column>
+							<el-table-column label="姓名">
+								<template slot-scope="scope">
+									<div style="display:flex">
+										<span class="fl">
+											<userImage
+												width="50px"
+												height="50px"
+												:user_name="scope.row.employee.name"
+												:img_url="scope.row.employee.img_url"
+												v-if="scope.row.employee"
+											></userImage>
+										</span>
+										<span style="margin-left: 10px; line-height: 50px; display: inline-block" v-if="scope.row.employee">{{ scope.row.employee.name }}</span>
+									</div>
+								</template>
+							</el-table-column>
+							<el-table-column prop="cycle_remark" label="加分周期"></el-table-column>
+							<el-table-column prop="update_time" label="更新时间">
+								<template slot-scope="scope">
+									<div>{{ getUpdate(scope.row.update_time) }}</div>
+								</template>
+							</el-table-column>
+							<template slot="empty">
+								<noData></noData>
+							</template>
+						</el-table>
+
+						<!-- 分页 -->
+						<div style=" text-align: center; padding: 20px;">
+							<el-pagination
+								background
+								layout="total, prev, pager, next"
+								:current-page="page"
+								@current-change="handleCurrentChange"
+								:page-sizes="[10, 20, 50, 100]"
+								:page-size.sync="pagesize"
+								:hide-on-single-page="true"
+								:total="total"
+							></el-pagination>
+						</div>
+					</el-col>
+				</div>
+			</div>
+
+			<!-- 可写公共组建: -->
+			<!-- 新增加分组弹出框 -->
+			<el-dialog :close-on-click-modal="false" :title="grouping_type ? '编辑加分组' : '新增加分组'" :visible.sync="dialogVisible">
+				<el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">
+					<el-form-item label="加分组名称" prop="name" :rules="[{ required: true, message: '请输入加分组名称' }]">
+            <el-input v-model="numberValidateForm.name" placeholder="请输入加分组名称" maxlength="30" show-word-limit />
+          </el-form-item>
+				</el-form>
+				<span slot="footer" class="dialog-footer" style=" overflow: hidden;">
+					<el-button
+						class="fl"
+						type="danger"
+						v-show="grouping_type"
+						@click="del_grouping(numberValidateForm)"
+						style="float:left"
+						:loading="disabled"
+						:disabled="disabled"
+					>
+						删除
+					</el-button>
+					<el-button @click="dialogVisible = false">取 消</el-button>
+					<el-button type="primary" @click="submitForm('numberValidateForm')" :loading="disabled" :disabled="disabled">确 定</el-button>
+				</span>
+			</el-dialog>
+
+			<!-- 新增加分项 -->
+			<el-dialog :title="rules_detail_title ? '编辑加分项' : '新增加分项'" :visible.sync="dialogFormVisible" width="500px">
+				<el-form :model="rules_detail_form" ref="rules_detail_form" :rules="rules_rules" label-width="120px">
+					<el-form-item label="加分项名称" :label-width="formLabelWidth" prop="remark">
+						<el-input v-model="rules_detail_form.remark" placeholder="请输入加分项名称"></el-input>
+					</el-form-item>
+					<el-form-item label="加分组" :label-width="formLabelWidth" prop="rule_id">
+						<el-select v-model="rules_detail_form.rule_id" style="width: 100%;" placeholder="请选择加分组">
+							<el-option v-for="item in rule_list" :key="item.value" :label="item.name" :value="item.id"></el-option>
+						</el-select>
+					</el-form-item>
+					<el-form-item label="B分" prop="min_point">
+						<el-input
+							v-model="rules_detail_form.min_point"
+							placeholder="请输入B分分值"
+							oninput="if(this.value=='0'){this.value='';}else{this.value=this.value.replace(/[^0-9]/g,'')}"
+						></el-input>
+						<!-- <span data-v-a17f1960 style="display: block; font-size: 12px; color: rgb(96, 98, 102);text-align: left;">固定加分加B分</span> -->
+					</el-form-item>
+					<!-- <el-form-item label="是否与考勤挂钩" prop="is_attendance"><el-switch v-model="is_attendance"></el-switch></el-form-item> -->
+					<div style="overflow: hidden;">
+						<el-button
+							type="danger"
+							v-show="rules_detail_title"
+							class="fl"
+							@click="del_rules_detail(rules_detail_form)"
+							style="float:left"
+							:loading="disabled"
+							:disabled="disabled"
+						>
+							删除
+						</el-button>
+
+						<el-button
+							v-if="rules_detail_title"
+							class="fr"
+							type="primary"
+							@click="editRule('rules_detail_form')"
+							style="float:right"
+							:loading="disabled"
+							:disabled="disabled"
+						>
+							确 定
+						</el-button>
+						<el-button v-else class="fr" type="primary" @click="editRule('rules_detail_form')" style="float:right" :loading="disabled" :disabled="disabled">
+							确 定
+						</el-button>
+						<el-button class="fr" @click="rules_detail_close('rules_detail_form')" style="float:right">取 消</el-button>
+					</div>
+				</el-form>
+			</el-dialog>
+
+			<el-dialog title="添加人员" :visible.sync="add_employee_show" :before-close="add_employee_close" width="700px">
+				<el-form :model="add_employee_form" ref="add_employee_form" label-width="80px">
+					<el-form-item label="加分周期" :rules="[{ required: true, message: '请选择加分周期', trigger: 'change' }]">
+						<el-select v-model="task_cycle_name" placeholder="请选择加分周期">
+							<el-option v-for="item in task_cycle" :key="item.value" :label="item.name" :value="item.value"></el-option>
+						</el-select>
+					</el-form-item>
+					<div v-loading="staff_loading">
+						<EmployeeSelector
+							v-if="add_employee_show"
+							:max="add_employee_max"
+							:user_no_select="false"
+							@confirm="add_employee_confirm"
+							ref="Employee"
+						></EmployeeSelector>
+					</div>
+					<el-form-item style="text-align: right; margin-bottom: 0;margin-top: 20px;">
+						<el-button @click="add_employee_close()">取消</el-button>
+						<el-button type="primary" @click="sub_add_employee('add_employee_form')" :loading="disabled" :disabled="disabled">完成</el-button>
+					</el-form-item>
+				</el-form>
+			</el-dialog>
+
+			<toLead :visible.sync="toleadShw" :nowIndex.sync="nowIndex" :tolead="toleadResult" @confirm="tealConfirm" :export_type="'auto_point'" :dstyle="'padding: 40px 80px;'">
+				<template slot="1">
+					<el-row v-if="nowIndex == 1">
+						<el-col :span="12">
+							<div style="text-align: center;line-height: 34px;">
+								<p>1、导出模板,填写好规则</p>
+								<p><img src="../../assets/image/rules_mould.png" alt="" /></p>
+								<p>规则表</p>
+								<p>
+									<a target="_blank" :href="publicBASE_API + '/api/download/point_auto'"><el-button type="primary">下载模板</el-button></a>
+								</p>
+							</div>
+						</el-col>
+						<el-col :span="12">
+							<div style="text-align: center;line-height: 34px;">
+								<p>2、上传填好的规则表</p>
+								<p><img src="../../assets/image/rules_mould1.png" alt="" /></p>
+								<p>仅支持xls、xlsx格式文件</p>
+								<el-upload
+									class="upload-demo"
+									:headers="ATOKEN"
+									:data="{ type: 'auto_integral' }"
+									ref="upload"
+									:limit="1"
+									:action="action"
+									:on-remove="handleRemove"
+									:on-success="handleSuccess"
+									:before-upload="beforeFilesUpload"
+									:file-list="fileList"
+									:on-progress="handleOnthecross"
+								>
+									<el-button slot="trigger" type="primary">选取文件</el-button>
+								</el-upload>
+								<!-- <p><el-button type="primary" @click="submitUpload" :loading="save_loading" v-show="import_btn_show" block>导入</el-button></p> -->
+							</div>
+						</el-col>
+					</el-row>
+				</template>
+			</toLead>
+		</div>
+	</div>
+</template>
+
+<script>
+import EmployeeSelector from '@/components/EmployeeSelector';
+
+import toLead from '@/components/toLead';
+export default {
+	data() {
+		return {
+			pd_tianjia: false,
+			default_active: '0-0',
+			table_list: [],
+			tips_show: false,
+			rule_trees_load: false,
+			dialogVisible: false,
+
+			rules_detail_show: false, //是否弹出添加人员弹窗
+			add_employee_visible: false,
+			add_employee_max: 0,
+			add_employee_show: false,
+
+			task_cycle_name: '',
+			add_employee_form: {
+				employee_ids: []
+			},
+			ids:[],
+
+			isShowAdd: false,
+			del_arr: {
+				ids: []
+			},
+			val_page: '', //存入某一页文本框选中的数量
+			page: 1, //默认页数  为1
+			total: 0, //返回的总数据
+			pagesize: 10, //每页显示的数据
+			table_loading: false,
+			staff_loading: false,
+
+			dialogFormVisible: false,
+			form: {
+				name: '',
+				region: '',
+				date1: '',
+				date2: '',
+				delivery: false,
+				type: [],
+				resource: '',
+				desc: ''
+			},
+			formLabelWidth: '120px',
+
+			numberValidateForm: {
+				name: ''
+			},
+			disabled: false, //按钮不能被多次点击
+			grouping_type: '',
+			rules_detail_title: '',
+			rule_list: [], //分类集合
+			item_list: [], //规则集合
+
+			right_rules_detail: {},
+
+			add_employee_id: '',
+			rules_detail_form: {
+				rule_id: '',
+				range_type: '1',
+				prize_type: '1',
+				min_point: '',
+				remark: '',
+				is_attendance: '0',
+				cycle_type: '2',
+				pt_id: '3'
+			},
+			is_attendance: false,
+			rules_rules: {
+				remark: [
+					{
+						required: true,
+						message: '请输入规则名称',
+						trigger: 'blur'
+					},
+					{
+						max: 100,
+						message: '分类名称不能大于100个字符',
+						trigger: 'blur'
+					}
+				],
+				min_point: [
+					{
+						required: true,
+						message: '请输入积分',
+						trigger: 'blur'
+					}
+				],
+				rule_id: [
+					{
+						required: true,
+						message: '请选择分类',
+						trigger: 'blur'
+					}
+				]
+			},
+			task_cycle: [
+				{
+					name: '每天0点自动加分',
+					value: 1
+				},
+				{
+					name: '每周一自动加分',
+					value: 2
+				},
+				{
+					name: '每月1号自动加分',
+					value: 3
+				},
+				{
+					name: '每年1月1号自动加分',
+					value: 4
+				}
+			],
+			action: process.env.VUE_APP_BASE_API + 'api/integral/auto/import',
+			publicBASE_API: process.env.VUE_APP_BASE_API,
+			save_loading: false,
+			ATOKEN: { 'A-TOKEN': this.$getToken(), Accept: 'application/vnd.test.v2+json' },
+			import_btn_show: false,
+			fileList: [],
+			file: null,
+			import_rules_show: false, //导出弹窗
+
+			keyword: '',
+			employee_map: [],
+			employee_id: '',
+			selectData: {},
+			//导入相关
+			toleadShw: false,
+			nowIndex: 1,
+			toleadResult: {}
+		};
+	},
+	components: {
+		EmployeeSelector,
+		toLead
+	},
+	created() {
+		this.getEmployee();
+	},
+	watch: {
+		toleadShw(val) {
+			if (val) this.nowIndex = 1;
+		},
+		employee_id(val) {
+			this.page = 1;
+			this.open_right(this.selectData);
+		}
+	},
+	mounted() {
+		if (this.$getCache('voluntarilyPoint')) {
+			this.tips_show = false;
+		} else {
+			this.tips_show = true;
+		}
+		this.get_role_lists(true);
+	},
+	methods: {
+		openR(){
+			this.$axios('post', '/api/integral/auto/manual', { ids: JSON.stringify(this.ids), date:this.$moment().format('YYYYMMDD') }).then(res => {
+				this.$message({ type: 'success', message: '加分执行中,请稍后到【积分事件】中查看'});
+			}).finally(err => {});
+		},
+		//获取员工列表
+		getEmployee() {
+			this.$axios('get', '/api/employee/index', { dept_id: 0, keywords: '', page: 1, page_size: 3000, is_official: 1 })
+				.then(res => {
+					let list = res.data.data.list;
+					this.employee_map = list;
+				})
+				.finally(err => {});
+		},
+		getUpdate(date) {
+			return this.$moment.unix(date).format('YYYY-MM-DD HH:mm:ss');
+		},
+		// 搜索
+		onFilterChanged() {},
+		close_import() {
+			this.import_rules_show = false;
+			this.import_btn_show = false;
+			this.$refs.upload.clearFiles();
+		},
+		submitUpload() {
+			this.save_loading = true;
+			let params = {
+				file: this.file
+			};
+			this.$axios('post', '/api/integral/auto/import', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						// this.import_rules_show = false;
+						this.close_import(); //成功之后关闭并清除选中的文件
+						this.$message.success({ message: res.data.msg });
+						this.get_rule_trees();
+					} else {
+						this.$message({ type: 'error', message: res.data.msg });
+					}
+				})
+				.catch(() => {})
+				.finally(() => {
+					this.save_loading = false;
+				});
+		},
+		//导入
+		beforeFilesUpload(file) {
+			const $ext_list = ['xlsx', 'xls'];
+			let len = file.name.split('.').length - 1;
+			const $ext_name = file.name.split('.')[len];
+			if ($ext_list.indexOf($ext_name) != -1) {
+			} else {
+				this.toleadResult.id = 0;
+				this.toleadResult.name = '文件格式上传错误,仅支持上传xlsx,xls)';
+				this.nowIndex = 3;
+				// this.$message.warning('文件格式上传错误,仅支持上传xlsx,xls)');
+				return false;
+			}
+		},
+		tealConfirm() {
+			this.page = 1;
+			this.open_right(this.selectData);
+		},
+		handleOnthecross(event, file, fileList) {
+			this.nowIndex = 2;
+		},
+		handleSuccess(response) {
+			if (response.code == 1) {
+				response.data.id = 1;
+			} else {
+				response.data.id = 0;
+				response.data.name = response.msg;
+			}
+			this.toleadResult = response.data;
+			this.nowIndex = 3;
+			return;
+			if (response.code == 1) {
+				if (response.data.length > 0) {
+					var htmls = response.data;
+					var str = "<div class='red'></div>";
+					htmls.forEach(item => {
+						str += `<div>${item.errors}</div>`;
+					});
+					this.close_import();
+					this.$notify.error({
+						title: '导入错误',
+						dangerouslyUseHTMLString: true,
+						message: str,
+						duration: 0,
+						offset: 50,
+						customClass: 'notifyBox'
+					});
+				} else {
+					this.file = response.data;
+					this.$message.success({ message: response.msg });
+					this.close_import();
+					this.page = 1;
+					this.open_right(this.selectData);
+				}
+			} else {
+				this.$message.error({ message: response.msg });
+				this.close_import();
+			}
+		},
+		handleRemove(file, fileList) {
+			if (fileList !== null && fileList.length != 0) {
+				this.import_btn_show = true;
+			} else {
+				this.import_btn_show = false;
+			}
+		},
+
+		returnIndex(str, str2) {
+			return str + '-' + str2;
+		},
+		handleCurrentChange(val) {
+			this.page = val;
+			this.open_right();
+		},
+		open_rights(data) {
+			this.page = 1;
+			this.selectData = data;
+			this.open_right(data);
+		},
+		// 组建
+		add_employee_confirm(val) {
+			this.add_employee_form.employee_ids = [];
+			if (val.employee.length !== 0) {
+				val.employee.forEach(element => {
+					this.add_employee_form.employee_ids.push(element.id);
+				});
+			}
+		},
+
+		// 添加成员点击取消
+		add_employee_close() {
+			this.add_employee_show = false;
+		},
+
+		// 添加成员点击完成
+		sub_add_employee(form) {
+			let self = this;
+			if (!self.task_cycle_name) {
+				self.$message.error('请选择加分周期');
+				return false;
+			}
+			this.$refs.Employee.confirm(); //调用组件的confirm();
+			if (this.add_employee_form.employee_ids.length <= 0) {
+				this.$message.error('请选择员工');
+				return false;
+			}
+			let data = {
+				employee_ids: this.add_employee_form.employee_ids,
+				task_cycle: self.task_cycle_name,
+				item_id: self.add_employee_id,
+				rule_id: self.add_rulse_id
+			};
+			self.$refs[form].validate(valid => {
+				if (valid) {
+					if (data.rule_id == '' || data.item_id == '') {
+						self.$message.error('请先选择细则');
+					} else {
+						this.disabled = true;
+						self.staff_loading = true;
+						self.$axios('post', '/api/integral/auto/add', data)
+							.then(res => {
+								if (res.data.code == 1) {
+									self.$message.success('此次操作成功' + res.data.data.success + '条,失败' + res.data.data.error + '条,已经存在的' + res.data.data.exist + '条');
+									self.open_right();
+								} else {
+									self.$message.error(res.data.msg);
+								}
+							})
+							.finally(() => {
+								self.add_employee_show = false;
+								self.staff_loading = false;
+								this.disabled = false;
+							});
+					}
+				} else {
+					return false;
+				}
+			});
+		},
+		handleSelectionChange(val) {
+			this.del_arr.ids = [];
+			val.forEach(element => {
+				this.del_arr.ids.push(element.id);
+			});
+			this.val_page = val;
+		},
+		// 批量删除
+		del_item() {
+			let self = this;
+			if (self.del_arr.ids.length !== 0) {
+				self.$confirm('此操作将永久删除该人员的自动加分, 是否继续?', '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					self.$axios('post', '/api/integral/auto/delete/many', self.del_arr)
+						.then(res => {
+							if (res.data.code == 1) {
+								self.$message.success(res.data.msg);
+								// 判断当页的总数与选中的数量是否相等,如果相等,此页就无数据,就请求上一页的数据
+								if (this.table_list.length == this.val_page.length) {
+									if (this.page !== 1) {
+										//判断不在第一页的时候执行
+										this.page = this.page - 1;
+									}
+								}
+								self.open_right();
+							} else {
+								self.$message.error(res.data.msg);
+							}
+						})
+						.finally(() => {
+							self.loading = false;
+						});
+				});
+			} else {
+				self.$message.error('请选择要移除的人员');
+			}
+		},
+		// 关闭提示语
+		tips_close() {
+			this.$setCache('voluntarilyPoint', 'true');
+			this.tips_show = false;
+		},
+		//新增加分项
+		add_rules_detail() {
+			this.rules_detail_form = {
+				rule_id: '',
+				range_type: '1',
+				prize_type: '1',
+				min_point: '',
+				remark: '',
+				is_attendance: '0',
+				cycle_type: '2',
+				pt_id: '3'
+			};
+			this.dialogFormVisible = true;
+			this.rules_detail_title = false;
+		},
+		//编辑加分项
+		editRule(form) {
+			let self = this;
+			let data = null;
+			self.rules_detail_form.max_point = self.rules_detail_form.min_point;
+			if (this.rules_detail_title == false) {
+				data = {
+					items: [self.rules_detail_form]
+				};
+			} else {
+				self.rules_detail_form.item_id = self.rules_detail_form.id;
+				data = self.rules_detail_form;
+				data.sync = 2;
+			}
+			self.$refs[form].validate(valid => {
+				if (valid) {
+					this.disabled = true;
+					// if (this.is_attendance) {
+					// 	self.rules_detail_form.is_attendance = 1;
+					// } else {
+					// 	self.rules_detail_form.is_attendance = 0;
+					// }
+					var url = this.rules_detail_title ? 'api/integral/rule/items/edit' : '/api/integral/rule/items';
+					self.$axios('post', url, data)
+						.then(res => {
+							// setTimeout(() => {
+							// 	this.is_attendance = false;
+							// }, 300);
+							if (res.data.code == 1) {
+								self.$message.success(res.data.msg);
+								self.rules_detail_show = false;
+								if (this.rules_detail_title) {
+									//当为编辑时
+									if (self.rules_detail_form.rule_id != self.right_rules_detail.rule_id) {
+										//当编辑规则修改了上级时
+										self.get_role_lists(true);
+									} else {
+										//正常编辑
+										self.get_role_lists();
+										self.right_rules_detail.remark = data.remark;
+										self.right_rules_detail.min_point = data.min_point;
+									}
+								} else {
+									//当为添加时
+									self.add_employee_id = res.data.data.item_id; //规则ID
+									self.add_rulse_id = self.rules_detail_form.rule_id; //分类ID
+									self.get_role_lists(true, true);
+									setTimeout(() => {
+										self.add_employee_show = true;
+									}, 600);
+								}
+							} else {
+								self.$message.error(res.data.msg);
+							}
+						})
+						.finally(() => {
+							this.dialogFormVisible = false;
+							self.disabled = false;
+						});
+				} else {
+					return false;
+				}
+			});
+		},
+		//点击取消
+		rules_detail_close(form) {
+			this.dialogFormVisible = false;
+			this.rules_detail_show = false;
+			this.$refs[form].resetFields();
+		},
+		//获取右边表格数据
+		open_right(data, updata) {
+			let self = this;
+			self.table_loading = true;
+			this.isShowAdd = false;
+			if (data && !updata) {
+				self.add_employee_id = data.id;
+				self.add_rulse_id = data.rule_id;
+				self.right_rules_detail = data;
+			} else if (updata) {
+				self.right_rules_detail = data;
+			} else {
+				self.add_employee_id = self.right_rules_detail.id;
+				self.add_rulse_id = self.right_rules_detail.rule_id;
+			}
+			var params = {
+				item_id: self.add_employee_id || '',
+				employee_id: self.employee_id || '',
+				page: self.page,
+				page_size: Number(this.pagesize)
+			};
+			self.$axios('get', '/api/integral/auto/list', params)
+				.then(res => {
+					if (res.data.code == 1) {
+						self.table_list = res.data.data.list || [];
+						this.ids=self.table_list.map(item=>{
+							return item.id
+						})
+						
+						self.total = res.data.data.total;
+					} else {
+						self.$message.error(res.data.msg);
+					}
+				})
+				.finally(() => {
+					self.table_loading = false;
+				});
+		},
+
+		//  编辑规则
+		edit_rules() {
+			this.rules_detail_title = true;
+			this.dialogFormVisible = true;
+			this.rules_detail_form = JSON.parse(JSON.stringify(this.right_rules_detail));
+			// this.is_attendance = this.rules_detail_form.is_attendance == '0' ? false : true;
+		},
+		// 删除规则
+		del_rules_detail(item) {
+			this.$confirm('此操作将永久删除该加分项, 是否继续?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.disabled = true;
+				this.$axios('post', '/api/integral/rule/items/destroy', { item_ids: JSON.stringify([item.id]) })
+					.then(res => {
+						if (res.data.code == 1) {
+							this.$message.success('删除成功');
+							this.rules_detail_show = false;
+							this.get_role_lists(true);
+						} else {
+							this.$message.error(res.data.msg);
+							this.get_role_lists();
+						}
+					})
+					.finally(() => {
+						this.dialogFormVisible = false;
+						this.disabled = false;
+					});
+			});
+		},
+
+		//新增加分组展示不同渲染
+		add_grouping() {
+			this.numberValidateForm = {
+				name: ''
+			};
+			this.dialogVisible = true;
+			this.grouping_type = false;
+		},
+		// 新增加分组
+		submitForm(formName) {
+			this.$refs[formName].validate(valid => {
+				if (valid) {
+					let data = this.grouping_type
+						? {
+								rule_id: this.numberValidateForm.id,
+								pid: '0',
+								name: this.numberValidateForm.name
+						  }
+						: {
+								cycle_type: '2',
+								pid: '0',
+								name: this.numberValidateForm.name
+						  };
+					this.disabled = true;
+					var url = this.grouping_type ? '/api/integral/rule/edit' : '/api/integral/rule';
+					this.$axios('post', url, data)
+						.then(res => {
+							if (res.data.code == '1') {
+								this.get_role_lists();
+								this.$message.success(this.grouping_type ? '修改积分规则' : res.data.msg);
+							}
+						})
+						.finally(() => {
+							this.dialogVisible = false;
+							this.disabled = false;
+						});
+				} else {
+					return false;
+				}
+			});
+		},
+		//修改分组
+		edit_grouping(item) {
+			this.dialogVisible = true;
+			this.numberValidateForm = JSON.parse(JSON.stringify(item));
+			this.grouping_type = true;
+		},
+		//删除分组
+		del_grouping(item) {
+			this.$confirm('此操作将永久删除该分类, 是否继续?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			})
+				.then(() => {
+					this.disabled = true;
+					this.$axios('post', '/api/integral/rule/destroy', { rule_id: item.id })
+						.then(res => {
+							if (res.data.code == 1) {
+								this.get_role_lists();
+								this.$message.success('删除成功');
+							}
+						})
+						.finally(() => {
+							this.dialogVisible = false;
+							this.disabled = false;
+						});
+				})
+				.catch(() => {
+					setTimeout(() => {
+						this.dialogVisible = false;
+					}, 300);
+				});
+		},
+		// 获取初始化数据
+		get_role_lists(is, noUpdata) {
+			this.table_loading = true;
+			this.rule_trees_load = true;
+			this.$axios('get', '/api/integral/rule/trees', { cycle_type: '2' })
+				.then(res => {
+					var rule_list = res.data.data.rule_tree || [];
+					var item_list = res.data.data.item_list || [];
+					var itemListAll = [];
+					for (let i in item_list) {
+						for (let k in item_list[i]) {
+							itemListAll.push(item_list[i][k]);
+						}
+					}
+					rule_list.map(item => {
+						item.child = itemListAll.filter(item2 => {
+							return item2.rule_id == item.id;
+						});
+					});
+					this.rule_list = rule_list;
+					this.item_list = itemListAll;
+					if (is) {
+						this.default_active = '';
+						if (rule_list[0].child[0]) {
+							this.right_rules_detail = {};
+							this.table_list = [];
+							this.page = 1;
+							this.selectData = rule_list[0].child[0];
+							this.open_right(rule_list[0].child[0], noUpdata);
+							setTimeout(() => {
+								this.default_active = '0-0';
+							}, 500);
+						} else {
+							this.right_rules_detail = {};
+							this.isShowAdd = true;
+						}
+					}
+				})
+				.finally(err => {
+					setTimeout(() => {
+						this.rule_trees_load = false;
+						this.table_loading = false;
+					}, 700);
+				});
+		}
+	}
+};
+</script>
+
+<style scoped="scoped" lang="scss">
+.rule_name {
+	border-right: 0;
+	margin-top: 16px;
+	li {
+		border-bottom: 1px #f8f8f8 solid;
+		overflow: hidden;
+		white-space: nowrap;
+		text-overflow: ellipsis;
+		::v-deep .el-submenu__title {
+			padding: 0 10px !important;
+			i.el-submenu__icon-arrow.el-icon-arrow-down {
+				color: #909399 !important;
+			}
+		}
+	}
+}
+::v-deep .el-submenu__title {
+	height: 47px !important;
+	line-height: 47px !important;
+}
+.rule_list {
+	position: relative;
+	display: table-cell;
+}
+
+.rule_list:after {
+	content: ' ';
+	position: absolute;
+	top: 0;
+	left: 0;
+	bottom: 0;
+	width: 1px;
+	background: #ebeef5;
+}
+.terr-right {
+	min-height: calc(100vh - 224px);
+	.name {
+		height: 100%;
+		font-size: 18px;
+		margin-right: 20px;
+	}
+
+	.btns {
+		padding-top: 20px;
+	}
+}
+.terr-left button {
+	margin: 0 auto;
+	display: block;
+	margin-bottom: 10px;
+}
+</style>

+ 41 - 34
src/views/task/allTask.vue

@@ -2,22 +2,27 @@
 	<div>
 		<div class="box">
 			<el-tabs v-model="formData.status">
-				<el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
+				<el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label"
+					:name="item.name"></el-tab-pane>
 			</el-tabs>
 			<FormBox style="margin-bottom: 10px;">
 				<div class="form-item">
 					<div class="form-label">执行人</div>
 					<div class="form-search">
-						<el-select size="medium" v-model="formData.employee_id" filterable clearable placeholder="请输入执行人">
-						  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="formData.employee_id" filterable clearable
+							placeholder="请输入执行人">
+							<el-option v-for="item in employee_map" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">审批人</div>
 					<div class="form-search">
-						<el-select size="medium" v-model="formData.reviewer_id" filterable clearable placeholder="请输入审批人">
-						  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="formData.reviewer_id" filterable clearable
+							placeholder="请输入审批人">
+							<el-option v-for="item in employee_map" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
@@ -25,7 +30,8 @@
 					<div class="form-label">积分类型</div>
 					<div class="form-search">
 						<el-select size="medium" v-model="formData.pt_id" placeholder="请选择积分类型">
-							<el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							<el-option v-for="item in point_type" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
@@ -33,28 +39,32 @@
 					<div class="form-label">排序</div>
 					<div class="form-search">
 						<el-select size="medium" v-model="formData.sort_by" placeholder="请选择排序">
-							<el-option v-for="item in sort_by" :key="item.id" :label="item.name" :value="item.code"></el-option>
+							<el-option v-for="item in sort_by" :key="item.id" :label="item.name"
+								:value="item.code"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">内容搜索</div>
 					<div class="form-search">
-						<el-input size="medium" v-model="formData.content" clearable placeholder="请输入" max="20"></el-input>
+						<el-input size="medium" v-model="formData.content" clearable placeholder="请输入"
+							max="20"></el-input>
 					</div>
 				</div>
-			</FormBox>	
+			</FormBox>
 
 			<div>
-				<div class="orange" style="padding-left: 10px;" v-if="config.event_review_status&&config.event_task_review">复核开启后,积分需管理员复核后才计入排名和统计</div>
-				<el-table :data="list" ref="elTable" style="width: 100%" v-loading="loading"  @sort-change="sortChange">
+				<div class="orange" style="padding-left: 10px;"
+					v-if="config.event_review_status&&config.event_task_review">复核开启后,积分需管理员复核后才计入排名和统计</div>
+				<el-table :data="list" ref="elTable" style="width: 100%" v-loading="loading" @sort-change="sortChange">
 					<el-table-column label="执行人" prop="employee_id">
-					  <template slot-scope="scope">
-					   <div class="flex-box-ce">
-					      <userImage  :id="scope.row.employee_id" width="50px" height="50px"  :user_name="scope.row.employee_name" ></userImage>
-					      <span style="line-height: 50px; padding-left: 10px;">{{scope.row.employee_name}}</span>
-					    </div>
-					  </template>
+						<template slot-scope="scope">
+							<div class="flex-box-ce">
+								<userImage :id="scope.row.employee_id" width="50px" height="50px"
+									:user_name="scope.row.employee_name"></userImage>
+								<span style="line-height: 50px; padding-left: 10px;">{{scope.row.employee_name}}</span>
+							</div>
+						</template>
 					</el-table-column>
 					<el-table-column label="任务内容" prop="task_name">
 						<template slot-scope="scope">
@@ -63,10 +73,10 @@
 					</el-table-column>
 					<el-table-column label="积分" prop="base_point" sortable="custom">
 						<template slot-scope="scope">
-							<span class="red" v-if="scope.row.point_config.base_point > 0">
+							<span class="green" v-if="scope.row.point_config.base_point > 0">
 								+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 							</span>
-							<span class="green" v-else>
+							<span class="red" v-else>
 								{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 							</span>
 						</template>
@@ -75,7 +85,8 @@
 					<el-table-column label="审批人" prop="reviewer_name"></el-table-column>
 					<el-table-column label="操作" prop="owner_id">
 						<template slot-scope="scope">
-							<el-link type="primary" :underline="false" @click.stop="openDetail(scope.row)" class="blue">查看任务</el-link>
+							<el-link type="primary" :underline="false" @click.stop="openDetail(scope.row)"
+								class="blue">查看任务</el-link>
 							<!-- <el-link style="margin-left: 10px;" v-if="formData.status=='reviewed'||formData.status=='complete'" type="primary" :underline="false" @click.stop="openDetailXq(scope.row)">查看审批</el-link> -->
 						</template>
 					</el-table-column>
@@ -86,27 +97,22 @@
 			</div>
 
 			<center style="padding: 20px 0;">
-				<el-pagination
-					background
-					@size-change="handleSizeChange"
-					@current-change="handleCurrentChange"
-					:page-sizes="[10, 20, 50, 100]"
-					layout="total, sizes, prev, pager, next"
-					:current-page="formData.page"
-					:page-size="formData.page_size"
-					:total="total"
-				></el-pagination>
+				<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+					:page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next"
+					:current-page="formData.page" :page-size="formData.page_size" :total="total"></el-pagination>
 			</center>
 		</div>
 
-		<el-drawer :custom-class="'drawer_details'" :visible.sync="completeShow" wrapperClosable :with-header="false" size="500px">
+		<el-drawer :custom-class="'drawer_details'" :visible.sync="completeShow" wrapperClosable :with-header="false"
+			size="500px">
 			<div class="details_title flex-box-ce">
 				<span class="flex-1">完成任务</span>
-				<i  @click="completeShow=false" style="cursor: pointer;" class="el-icon-close"></i>
+				<i @click="completeShow=false" style="cursor: pointer;" class="el-icon-close"></i>
 			</div>
 			<div class="details_content">
 				<el-form :model="detail_form" ref="detail_form" label-width="80px">
-					<el-form-item label="任务备注" prop="remark" :rules="[{ required: true, message: '请填写任务备注(限20字)', trigger: 'blur' }]">
+					<el-form-item label="任务备注" prop="remark"
+						:rules="[{ required: true, message: '请填写任务备注(限20字)', trigger: 'blur' }]">
 						<el-input v-model="detail_form.remark" type="textarea" max="20"></el-input>
 					</el-form-item>
 					<el-form-item>
@@ -118,7 +124,8 @@
 		</el-drawer>
 
 		<!-- 详情弹窗 -->
-		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
+		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'">
+		</taskDetailsPopup>
 		<!-- 审批详情 -->
 		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
 	</div>

+ 36 - 45
src/views/task/get_task.vue

@@ -8,7 +8,7 @@
 			</el-tabs>
 
 			<el-table :data="list" v-loading="loading" class="cursor" @row-click="openDetail">
-				
+
 				<el-table-column label="任务内容" prop="task_name">
 					<template slot-scope="scope">
 						<span class="font-flex-word" style="max-width: 200px;">{{scope.row.task_name}}</span>
@@ -16,86 +16,77 @@
 				</el-table-column>
 				<el-table-column label="积分" v-if="active=='myTask'">
 					<template slot-scope="scope">
-						<span class="red" v-if="scope.row.point_config.base_point > 0">
-						   +{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
+						<span class="green" v-if="scope.row.point_config.base_point > 0">
+							+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 						</span>
-						<span class="green" v-else>
+						<span class="red" v-else>
 							{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 						</span>
 					</template>
 				</el-table-column>
 				<el-table-column label="积分" v-else>
 					<template slot-scope="scope">
-						<span v-if="scope.row.base_point > 0" class="red">+{{scope.row.base_point}} {{$getTypsName(scope.row.pt_id)}}</span>
-						<span v-else class="green">{{scope.row.base_point}} {{$getTypsName(scope.row.pt_id)}}</span>
+						<span v-if="scope.row.base_point > 0" class="green">+{{scope.row.base_point}}
+							{{$getTypsName(scope.row.pt_id)}}</span>
+						<span v-else class="red">{{scope.row.base_point}} {{$getTypsName(scope.row.pt_id)}}</span>
 					</template>
 				</el-table-column>
 				<el-table-column label="截止时间" prop="expire_time"></el-table-column>
 				<el-table-column label="操作" prop="owner_id" v-if="active=='waiting'">
 					<template slot-scope="scope">
 						<el-link :underline="false">查看</el-link>
-						<el-link type="primary" style="padding-left: 10px;" :underline="false" v-if="!userInfo.is_creator&&scope.row.owner_id!=userInfo.id&&scope.row.reviewer_id!=userInfo.id">抢任务</el-link>
+						<el-link type="primary" style="padding-left: 10px;" :underline="false"
+							v-if="!userInfo.is_creator&&scope.row.owner_id!=userInfo.id&&scope.row.reviewer_id!=userInfo.id">抢任务</el-link>
 					</template>
 				</el-table-column>
 				<el-table-column label="操作" prop="owner_id" v-if="active=='myTask'">
 					<template slot-scope="scope">
-						<el-link type="primary" v-if="scope.row.status==1" :underline="false" @click.stop="completeBtn(scope.row)">完成任务</el-link>
+						<el-link type="primary" v-if="scope.row.status==1" :underline="false"
+							@click.stop="completeBtn(scope.row)">完成任务</el-link>
 						<span v-else>--</span>
 					</template>
 				</el-table-column>
 				<template slot="empty">
 					<noData></noData>
 				</template>
-				
+
 			</el-table>
-			
+
 			<center style="padding: 20px 0;">
-				<el-pagination
-					background
-					@size-change="handleSizeChange"
-					@current-change="handleCurrentChange"
-					:page-sizes="[10, 20, 50, 100]"
-					layout="total, sizes, prev, pager, next"
-					:current-page="formData.page"
-					:page-size="formData.page_size"
-					:total="total"
-				></el-pagination>
+				<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+					:page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next"
+					:current-page="formData.page" :page-size="formData.page_size" :total="total"></el-pagination>
 			</center>
 		</div>
-		
-		
+
+
 		<!-- 抢单任务详情弹窗 -->
-		<rewardTaskDetailsPopup :visible.sync="detailShow"  v-if="detailShow" :id="detailId" :title="'任务详情'"></rewardTaskDetailsPopup>
-		
+		<rewardTaskDetailsPopup :visible.sync="detailShow" v-if="detailShow" :id="detailId" :title="'任务详情'">
+		</rewardTaskDetailsPopup>
+
 		<!-- 详情弹窗 -->
-		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
-		
-		<el-drawer :custom-class="'drawer_details'" :visible.sync="completeShow" wrapperClosable :with-header="false" size="500px">
+		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'">
+		</taskDetailsPopup>
+
+		<el-drawer :custom-class="'drawer_details'" :visible.sync="completeShow" wrapperClosable :with-header="false"
+			size="500px">
 			<div class="details_title flex-box-ce">
 				<span class="flex-1">完成任务</span>
-				<i  @click="completeShow=false" style="cursor: pointer;" class="el-icon-close"></i>
+				<i @click="completeShow=false" style="cursor: pointer;" class="el-icon-close"></i>
 			</div>
 			<div class="details_content">
 				<el-form :model="detail_form" ref="detail_form" label-width="80px">
-					<el-form-item label="任务备注" prop="remark" :rules="[{ required: true, message: '请填写任务备注(限200字)', trigger: 'blur' }]">
-						<el-input v-model="detail_form.remark" type="textarea" :rows="4"  maxlength="200" show-word-limit></el-input>
+					<el-form-item label="任务备注" prop="remark"
+						:rules="[{ required: true, message: '请填写任务备注(限200字)', trigger: 'blur' }]">
+						<el-input v-model="detail_form.remark" type="textarea" :rows="4" maxlength="200"
+							show-word-limit></el-input>
 					</el-form-item>
 					<el-form-item label="图片">
-						<upload
-							:headers="Xtoken"
-							class="avatar-uploader"
-							:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
-							:show-file-list="true"
-							:file-list="detail_form.fileList"
-							:on-success="handleFilesSuccess"
-							:on-preview="onFilePreView"
-							:before-upload="beforeUpload"
-							:on-remove="onFileRemove"
-							:limit="3"
-							accept="image/jpeg,image/png"
-							:multiple="true"
-							ref="clearPicture"
-						>
+						<upload :headers="Xtoken" class="avatar-uploader"
+							:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'" :show-file-list="true"
+							:file-list="detail_form.fileList" :on-success="handleFilesSuccess"
+							:on-preview="onFilePreView" :before-upload="beforeUpload" :on-remove="onFileRemove"
+							:limit="3" accept="image/jpeg,image/png" :multiple="true" ref="clearPicture">
 							<el-button size="small" type="primary">点击上传</el-button>
 							(最多选择3张)
 						</upload>

+ 31 - 28
src/views/task/myExamine.vue

@@ -2,14 +2,17 @@
 	<div>
 		<div class="box">
 			<el-tabs v-model="formData.status">
-				<el-tab-pane  :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
+				<el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label"
+					:name="item.name"></el-tab-pane>
 			</el-tabs>
 			<FormBox style="margin-bottom: 10px;">
 				<div class="form-item">
 					<div class="form-label">执行人</div>
 					<div class="form-search">
-						<el-select size="medium" v-model="formData.employee_id" filterable clearable placeholder="请输入执行人">
-						  <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="formData.employee_id" filterable clearable
+							placeholder="请输入执行人">
+							<el-option v-for="item in employee_map" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
@@ -17,7 +20,8 @@
 					<div class="form-label">积分类型</div>
 					<div class="form-search">
 						<el-select size="medium" v-model="formData.pt_id" placeholder="请选择积分类型">
-							<el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+							<el-option v-for="item in point_type" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
@@ -25,28 +29,32 @@
 					<div class="form-label">排序</div>
 					<div class="form-search">
 						<el-select size="medium" v-model="formData.sort" placeholder="请选择排序">
-							<el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
+							<el-option v-for="item in sort" :key="item.id" :label="item.name"
+								:value="item.code"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">内容搜索</div>
 					<div class="form-search">
-						<el-input size="medium" v-model="formData.content" clearable placeholder="请输入" max="200"></el-input>
+						<el-input size="medium" v-model="formData.content" clearable placeholder="请输入"
+							max="200"></el-input>
 					</div>
 				</div>
 			</FormBox>
 
 			<div>
-				<div class="orange" style="padding-left: 10px;" v-if="config.event_review_status">复核开启后,积分需管理员复核后才计入排名和统计</div>
+				<div class="orange" style="padding-left: 10px;" v-if="config.event_review_status">
+					复核开启后,积分需管理员复核后才计入排名和统计</div>
 				<el-table :data="list" style="width: 100%" v-loading="loading">
 					<el-table-column label="执行人" prop="employee_id">
-					  <template slot-scope="scope">
-					   <div class="flex-box-ce">
-					      <userImage  width="50px" :id="scope.row.employee_id" height="50px"  :user_name="scope.row.employee_name" ></userImage>
-					      <span style="line-height: 50px; padding-left: 10px;">{{scope.row.employee_name}}</span>
-					    </div>
-					  </template>
+						<template slot-scope="scope">
+							<div class="flex-box-ce">
+								<userImage width="50px" :id="scope.row.employee_id" height="50px"
+									:user_name="scope.row.employee_name"></userImage>
+								<span style="line-height: 50px; padding-left: 10px;">{{scope.row.employee_name}}</span>
+							</div>
+						</template>
 					</el-table-column>
 					<el-table-column label="任务内容" prop="task_name">
 						<template slot-scope="scope">
@@ -55,10 +63,10 @@
 					</el-table-column>
 					<el-table-column label="积分">
 						<template slot-scope="scope">
-							<span class="red" v-if="scope.row.point_config.base_point > 0">
+							<span class="green" v-if="scope.row.point_config.base_point > 0">
 								+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 							</span>
-							<span class="green" v-else>
+							<span class="red" v-else>
 								{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 							</span>
 						</template>
@@ -66,7 +74,8 @@
 					<el-table-column label="截止时间" prop="expire_time"></el-table-column>
 					<el-table-column label="操作" prop="owner_id">
 						<template slot-scope="scope">
-							<el-link type="primary" :underline="false" @click.stop="openDetail(scope.row)" class="blue">查看任务</el-link>
+							<el-link type="primary" :underline="false" @click.stop="openDetail(scope.row)"
+								class="blue">查看任务</el-link>
 							<!-- <el-link style="margin-left: 10px;" v-if="formData.status=='complete'" type="primary" :underline="false" @click.stop="openDetailXq(scope.row)">去审批</el-link> -->
 							<!-- <el-link style="margin-left: 10px;" v-if="formData.status=='reviewed'" type="primary" :underline="false" @click.stop="openDetailXq(scope.row)">查看审批</el-link> -->
 						</template>
@@ -78,22 +87,16 @@
 			</div>
 
 			<center style="padding: 20px 0;">
-				<el-pagination
-					background
-					@size-change="handleSizeChange"
-					@current-change="handleCurrentChange"
-					:page-sizes="[10, 20, 50, 100]"
-					layout="total, sizes, prev, pager, next"
-					:current-page="formData.page"
-					:page-size="formData.page_size"
-					:total="total"
-				></el-pagination>
+				<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+					:page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next"
+					:current-page="formData.page" :page-size="formData.page_size" :total="total"></el-pagination>
 			</center>
 		</div>
 
 		<!-- 详情弹窗 -->
-		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
-		
+		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'">
+		</taskDetailsPopup>
+
 		<!-- 审批详情 -->
 		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
 	</div>

+ 127 - 103
src/views/task/my_issue.vue

@@ -2,7 +2,8 @@
 	<div>
 		<div class="box">
 			<el-tabs v-model="status">
-				<el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
+				<el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label"
+					:name="item.name"></el-tab-pane>
 			</el-tabs>
 			<div>
 				<el-dropdown @command="downClick">
@@ -20,32 +21,38 @@
 				<div class="form-item" v-if="status == 'assign'">
 					<div class="form-label">状态</div>
 					<div class="form-search">
-						<el-select  size="medium" v-model="formData.status" placeholder="请选择">
-							<el-option v-for="item in task_status" :key="item.id" :label="item.name" :value="item.code"></el-option>
+						<el-select size="medium" v-model="formData.status" placeholder="请选择">
+							<el-option v-for="item in task_status" :key="item.id" :label="item.name"
+								:value="item.code"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item" v-if="status == 'assign' || status == 'repetitive'">
 					<div class="form-label">执行人</div>
 					<div class="form-search">
-						<el-select  size="medium" v-model="formData.executor_id" clearable filterable placeholder="请输入或选择执行人">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="formData.executor_id" clearable filterable
+							placeholder="请输入或选择执行人">
+							<el-option v-for="item in employee_map" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">审批人</div>
 					<div class="form-search">
-						<el-select size="medium" v-model="formData.reviewer_id" clearable filterable placeholder="请输入或选择审批人">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="formData.reviewer_id" clearable filterable
+							placeholder="请输入或选择审批人">
+							<el-option v-for="item in employee_map" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item" v-if="status == 'assign' || status == 'reward'">
 					<div class="form-label">积分类型</div>
 					<div class="form-search">
-						<el-select  size="medium" v-model="formData.pt_id" placeholder="请选择">
-							<el-option v-for="item in point_types" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="formData.pt_id" placeholder="请选择">
+							<el-option v-for="item in point_types" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
@@ -53,7 +60,8 @@
 					<div class="form-label">排序</div>
 					<div class="form-search">
 						<el-select size="medium" v-model="formData.sort" placeholder="请选择排序">
-							<el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
+							<el-option v-for="item in sort" :key="item.id" :label="item.name"
+								:value="item.code"></el-option>
 						</el-select>
 					</div>
 				</div>
@@ -61,14 +69,16 @@
 					<div class="form-label">排序</div>
 					<div class="form-search">
 						<el-select size="medium" v-model="formData.order_by" placeholder="请选择排序">
-							<el-option v-for="item in order_by" :key="item.id" :label="item.name" :value="item.code"></el-option>
+							<el-option v-for="item in order_by" :key="item.id" :label="item.name"
+								:value="item.code"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">内容搜索</div>
 					<div class="form-search">
-						<el-input  size="medium" clearable  v-model="formData.content" placeholder="请输入" max="200"></el-input>
+						<el-input size="medium" clearable v-model="formData.content" placeholder="请输入"
+							max="200"></el-input>
 					</div>
 				</div>
 			</FormBox>
@@ -78,31 +88,30 @@
 					<el-table-column label="执行人" prop="task_name" width="250px">
 						<template slot-scope="scope">
 							<div style="display:flex">
-								<userImage
-									:img_url="scope.row.employee_img_url"
-									:id="scope.row.employee_id"
-									:user_name="scope.row.employee_name"
-									width="50px"
-									height="50px"
-								></userImage>
-								<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.employee_name }}的{{ scope.row.pt_name }}任务</span>
+								<userImage :img_url="scope.row.employee_img_url" :id="scope.row.employee_id"
+									:user_name="scope.row.employee_name" width="50px" height="50px"></userImage>
+								<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.employee_name }}的{{
+									scope.row.pt_name }}任务</span>
 							</div>
 						</template>
 					</el-table-column>
 					<el-table-column label="任务内容" prop="task_name">
-						<template slot-scope="scope">		
+						<template slot-scope="scope">
 							<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.task_name }}</span>
 						</template>
 					</el-table-column>
 					<el-table-column label="积分" prop="base_point" width="100px">
 						<template slot-scope="scope">
-							<span v-if="scope.row.point_config && scope.row.point_config.review_point > 0" class="red">
+							<span v-if="scope.row.point_config && scope.row.point_config.review_point > 0"
+								class="color_green">
 								+{{ scope.row.point_config.review_point }} {{ scope.row.pt_name }}
 							</span>
 							<span v-else>
 								<span v-if="scope.row.point_config && scope.row.point_config.base_point">
-									<span class="red" v-if="scope.row.point_config.base_point > 0">+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}</span>
-									<span class="color_green" v-else>{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}</span>
+									<span class="color_green" v-if="scope.row.point_config.base_point > 0">+{{
+										scope.row.point_config.base_point }} {{ scope.row.pt_name }}</span>
+									<span class="red" v-else>{{ scope.row.point_config.base_point }} {{
+										scope.row.pt_name }}</span>
 								</span>
 							</span>
 						</template>
@@ -123,16 +132,18 @@
 						</template>
 					</el-table-column>
 
-					<el-table-column  label="操作" align="center" width="80px">
+					<el-table-column label="操作" align="center" width="80px">
 						<template slot-scope="scope">
 							<el-dropdown placement="bottom" :show-timeout="150" :hide-timeout="150">
 								<span class="el-dropdown-links">···</span>
 								<el-dropdown-menu slot="dropdown">
 									<el-dropdown-item :disabled="false" v-if="scope.row.status == 1">
-										<el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad" @click.stop="issueAmend1(scope.row)">修改</el-button>
+										<el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad"
+											@click.stop="issueAmend1(scope.row)">修改</el-button>
 									</el-dropdown-item>
 									<el-dropdown-item :disabled="false">
-										<el-button type="text" class="color-red" v-loading.fullscreen.lock="bodyLoad" @click.stop="deletes(scope.row, 0)">删除</el-button>
+										<el-button type="text" class="color-red" v-loading.fullscreen.lock="bodyLoad"
+											@click.stop="deletes(scope.row, 0)">删除</el-button>
 									</el-dropdown-item>
 								</el-dropdown-menu>
 							</el-dropdown>
@@ -148,14 +159,15 @@
 			<div v-show="status == 'reward'">
 				<el-table :data="list" style="width: 100%" v-loading="loading" @row-click="rewardTasksClick">
 					<el-table-column label="任务内容" prop="task_name" min-width="200px">
-						<template slot-scope="scope">	
+						<template slot-scope="scope">
 							<span class="font-flex-word">{{ scope.row.task_name }}</span>
 						</template>
 					</el-table-column>
 					<el-table-column label="积分" prop="base_point">
 						<template slot-scope="scope">
-							<span v-if="scope.row.base_point > 0" class="red">+{{ scope.row.base_point }} {{ scope.row.pt_name }}</span>
-							<span v-else class="color_green">{{ scope.row.base_point }} {{ scope.row.pt_name }}</span>
+							<span v-if="scope.row.base_point > 0" class="color_green">+{{ scope.row.base_point }} {{
+								scope.row.pt_name }}</span>
+							<span v-else class="red">{{ scope.row.base_point }} {{ scope.row.pt_name }}</span>
 						</template>
 					</el-table-column>
 					<el-table-column label="截止时间" prop="expire_time">
@@ -166,13 +178,14 @@
 					<el-table-column>
 						<template slot="header">
 							<span>抢单人数
-							<el-tooltip class="item" effect="dark" content="已抢单人数/可抢单名额" placement="top-start">
-								<i class="el-icon-warning fontColorC"></i>
-							</el-tooltip>
+								<el-tooltip class="item" effect="dark" content="已抢单人数/可抢单名额" placement="top-start">
+									<i class="el-icon-warning fontColorC"></i>
+								</el-tooltip>
 							</span>
 						</template>
 						<template slot-scope="scope">
-							<span v-if="scope.row.total_chance" @click.stop="openTable(scope.row)" class="qd-num">{{ scope.row.total_chance-scope.row.chance }}/{{ scope.row.total_chance }}</span>
+							<span v-if="scope.row.total_chance" @click.stop="openTable(scope.row)" class="qd-num">{{
+								scope.row.total_chance-scope.row.chance }}/{{ scope.row.total_chance }}</span>
 							<span v-else>--</span>
 						</template>
 					</el-table-column>
@@ -186,16 +199,16 @@
 							<span>状态
 								<el-tooltip class="item" effect="dark" placement="top-start">
 									<div slot="content">
-										正在抢单:仍可以进行抢单的任务<br/>
+										正在抢单:仍可以进行抢单的任务<br />
 										抢单结束:抢单人数已满或任务截止时间已过期
 									</div>
 									<i class="el-icon-warning fontColorC"></i>
 								</el-tooltip>
 							</span>
 						</template>
-						<template slot-scope="scope">	
-							<span class="orange" v-if="scope.row.composite_state == 1">正在抢单</span>			
-							<span class="fontColorC" v-else>抢单结束</span>			
+						<template slot-scope="scope">
+							<span class="orange" v-if="scope.row.composite_state == 1">正在抢单</span>
+							<span class="fontColorC" v-else>抢单结束</span>
 						</template>
 					</el-table-column>
 
@@ -204,19 +217,22 @@
 							<el-dropdown placement="bottom" :show-timeout="150" :hide-timeout="150">
 								<span class="el-dropdown-links">···</span>
 								<el-dropdown-menu slot="dropdown">
-									<el-dropdown-item :disabled="false" v-if="scope.row.composite_state == 1&&scope.row.total_chance==scope.row.chance">
-										<el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad" @click.stop="offerARewardAmend2(scope.row)">修改</el-button>
+									<el-dropdown-item :disabled="false"
+										v-if="scope.row.composite_state == 1&&scope.row.total_chance==scope.row.chance">
+										<el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad"
+											@click.stop="offerARewardAmend2(scope.row)">修改</el-button>
 									</el-dropdown-item>
 									<el-dropdown-item :disabled="false">
-										<el-button type="text" class="color-red" v-loading.fullscreen.lock="bodyLoad" @click.stop="deletes(scope.row, 1)">删除</el-button>
+										<el-button type="text" class="color-red" v-loading.fullscreen.lock="bodyLoad"
+											@click.stop="deletes(scope.row, 1)">删除</el-button>
 									</el-dropdown-item>
 								</el-dropdown-menu>
 							</el-dropdown>
 						</template>
 					</el-table-column>
 
-					<template slot="empty">		
-				<noData></noData>
+					<template slot="empty">
+						<noData></noData>
 					</template>
 				</el-table>
 			</div>
@@ -227,25 +243,30 @@
 						<template slot-scope="scope">
 							<span v-for="(item, index) in scope.row.target_info" :key="index">
 								<span v-if="scope.row.target_info.length == 1 && index == 0">{{ item.name }}</span>
-								<span v-if="scope.row.target_info.length > 1 && index == 0">{{ item.name }}等{{ scope.row.target_info.length }}人</span>
+								<span v-if="scope.row.target_info.length > 1 && index == 0">{{ item.name }}等{{
+									scope.row.target_info.length }}人</span>
 							</span>
 							<span v-if="scope.row.target_info.length==0" class="fontColorC">--</span>
 						</template>
 					</el-table-column>
 					<el-table-column label="任务内容" prop="remark">
-						<template slot-scope="scope">		
-							<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.name || scope.row.remark }}</span>
+						<template slot-scope="scope">
+							<span class="font-flex-word" style="max-width: 200px;">{{ scope.row.name || scope.row.remark
+								}}</span>
 						</template>
 					</el-table-column>
 					<el-table-column label="任务积分" prop="point_config.base_point" width="130px">
 						<template slot-scope="scope">
-							<span v-if="scope.row.point_config.base_point > 0" class="red">+{{ scope.row.point_config.base_point }} {{ $getTypsName(scope.row.pt_id) }}</span>
-							<span v-else class="color_green">{{ scope.row.point_config.base_point }} {{ $getTypsName(scope.row.pt_id) }}</span>
+							<span v-if="scope.row.point_config.base_point > 0" class="color_green">+{{
+								scope.row.point_config.base_point }} {{ $getTypsName(scope.row.pt_id) }}</span>
+							<span v-else class="red">{{ scope.row.point_config.base_point }} {{
+								$getTypsName(scope.row.pt_id) }}</span>
 						</template>
 					</el-table-column>
 					<el-table-column label="重复周期" prop="task_cycle" width="220px">
 						<template slot-scope="scope">
-							<span v-if="scope.row.task_cycle == '1'">每天0点自动发布,{{ dayTime(scope.row.task_cycle_value) }}截止</span>
+							<span v-if="scope.row.task_cycle == '1'">每天0点自动发布,{{ dayTime(scope.row.task_cycle_value)
+								}}截止</span>
 							<span v-if="scope.row.task_cycle == '2'">
 								<span>每周一自动发布,周{{ weekList[scope.row.task_cycle_value - 1] }}截止</span>
 							</span>
@@ -259,100 +280,103 @@
 							<span class="red" v-else>已暂停</span>
 						</template>
 					</el-table-column>
-					<el-table-column prop="base_point" label="操作"  width="80px">
+					<el-table-column prop="base_point" label="操作" width="80px">
 						<template slot-scope="scope">
 							<div class="flex-box-ce">
 								<el-dropdown placement="bottom" :show-timeout="150" :hide-timeout="150">
 									<span class="el-dropdown-links">···</span>
 									<el-dropdown-menu slot="dropdown">
-										<el-dropdown-item ><el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad" @click.stop="copyTask(scope.row)">复制</el-button></el-dropdown-item>
-										<el-dropdown-item >
-											<el-button type="text" class="color-blue" v-loading.fullscreen.lock="bodyLoad" @click.stop="enable(scope.row)">{{scope.row.enable==1? '暂停任务':'启用任务'}}</el-button>
+										<el-dropdown-item><el-button type="text" class="color-blue"
+												v-loading.fullscreen.lock="bodyLoad"
+												@click.stop="copyTask(scope.row)">复制</el-button></el-dropdown-item>
+										<el-dropdown-item>
+											<el-button type="text" class="color-blue"
+												v-loading.fullscreen.lock="bodyLoad"
+												@click.stop="enable(scope.row)">{{scope.row.enable==1?
+												'暂停任务':'启用任务'}}</el-button>
 										</el-dropdown-item>
-										<el-dropdown-item ><el-button type="text" class="color-red" v-loading.fullscreen.lock="bodyLoad" @click.stop="deletes(scope.row, 2)">删除</el-button></el-dropdown-item>
+										<el-dropdown-item><el-button type="text" class="color-red"
+												v-loading.fullscreen.lock="bodyLoad"
+												@click.stop="deletes(scope.row, 2)">删除</el-button></el-dropdown-item>
 									</el-dropdown-menu>
 								</el-dropdown>
 							</div>
 						</template>
 					</el-table-column>
-					<template slot="empty">		
+					<template slot="empty">
 						<noData></noData>
 					</template>
 				</el-table>
 			</div>
 
 			<center style="padding: 20px 0;">
-				<el-pagination
-					background
-					@size-change="handleSizeChange"
-					@current-change="handleCurrentChange"
-					:page-sizes="[10, 20, 50, 100]"
-					layout="total, sizes, prev, pager, next"
-					:page-size="formData.page_size"
-					:current-page="formData.page"
-					:total="total"
-				></el-pagination>
+				<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+					:page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next"
+					:page-size="formData.page_size" :current-page="formData.page" :total="total"></el-pagination>
 			</center>
 		</div>
 		<!-- 指派任务 -->
-		<temporaryTask :dialogVisible.sync="dialogVisible" :trees_ab="trees_v2_ab_module" :isFy="isFy" :modifyData="fyData" :showTitle="'指派任务'"></temporaryTask>
+		<temporaryTask :dialogVisible.sync="dialogVisible" :trees_ab="trees_v2_ab_module" :isFy="isFy"
+			:modifyData="fyData" :showTitle="'指派任务'"></temporaryTask>
 		<!-- 指派任务-修改 -->
-		<temporaryTaskAmend :dialogVisible.sync="dialogVisibleAmend" :trees_ab="trees_v2_ab_module" :showTitle="'任务编辑'" :modifyData="modifyData"></temporaryTaskAmend>
-		
+		<temporaryTaskAmend :dialogVisible.sync="dialogVisibleAmend" :trees_ab="trees_v2_ab_module" :showTitle="'任务编辑'"
+			:modifyData="modifyData"></temporaryTaskAmend>
+
 		<!-- 抢单任务 -->
-		<rewardTask :dialogVisible.sync="rewardTaskShow" :isFy="isFy" :modifyData="fyData" :trees_ab="trees_v2_ab_module" :showTitle="'抢单任务'"></rewardTask>
+		<rewardTask :dialogVisible.sync="rewardTaskShow" :isFy="isFy" :modifyData="fyData"
+			:trees_ab="trees_v2_ab_module" :showTitle="'抢单任务'"></rewardTask>
 		<!-- 抢单任务-修改 -->
-		<rewardTaskAmend
-			:dialogVisible.sync="rewardTaskAmendShow"
-			:trees_ab="trees_v2_ab_module"
-			ref="rewardTasks"
-			:showTitle="'任务编辑'"
-			:rewardTaskAmendData="rewardTaskAmendData"
-		></rewardTaskAmend>
+		<rewardTaskAmend :dialogVisible.sync="rewardTaskAmendShow" :trees_ab="trees_v2_ab_module" ref="rewardTasks"
+			:showTitle="'任务编辑'" :rewardTaskAmendData="rewardTaskAmendData"></rewardTaskAmend>
 
 		<!-- 详情弹窗 -->
-		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
+		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'">
+		</taskDetailsPopup>
 
 		<!-- 重复任务详情弹窗 -->
-		<repeatTaskDetailsPopup :visible.sync="showRepetitiveTasksPopup" v-if="showRepetitiveTasksPopup" :id="detailId" :title="'重复任务详情'"></repeatTaskDetailsPopup>
+		<repeatTaskDetailsPopup :visible.sync="showRepetitiveTasksPopup" v-if="showRepetitiveTasksPopup" :id="detailId"
+			:title="'重复任务详情'"></repeatTaskDetailsPopup>
 
 		<!-- 抢单任务详情弹窗 -->
-		<rewardTaskDetailsPopup :visible.sync="showRewardTaskDetailsPopup" v-if="showRewardTaskDetailsPopup" :id="detailId" :title="'任务详情'"></rewardTaskDetailsPopup>
-	
+		<rewardTaskDetailsPopup :visible.sync="showRewardTaskDetailsPopup" v-if="showRewardTaskDetailsPopup"
+			:id="detailId" :title="'任务详情'"></rewardTaskDetailsPopup>
+
 		<!-- 对齐我的目标详情 -->
 		<el-dialog title="抢单人员详情" :visible.sync="isShowTable" :append-to-body="true" width="750px" top="5%">
-		  <div>
-		      <div class="fontColorC" style="padding: 10px;font-size: 16px;">
-				  {{tableList.length}}人已抢单,其中<span class="blue">{{returnNum}}</span>人已完成
-			  </div>
-			  <el-table :data="tableList" style="width: 100%;height: 550px;overflow: auto;">
+			<div>
+				<div class="fontColorC" style="padding: 10px;font-size: 16px;">
+					{{tableList.length}}人已抢单,其中<span class="blue">{{returnNum}}</span>人已完成
+				</div>
+				<el-table :data="tableList" style="width: 100%;height: 550px;overflow: auto;">
 					<el-table-column prop="name" label="执行人">
-					  <template slot-scope="scope">
-						  <div class="flex-box">
-							<userImage :user_name="scope.row.employee_name" :img_url="scope.row.img_url" width="40px" height="40px"></userImage>
-							<span style="line-height: 40px; padding-left: 10px;">{{ scope.row.employee_name }}</span>
-						  </div>
-					  </template>
+						<template slot-scope="scope">
+							<div class="flex-box">
+								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.img_url"
+									width="40px" height="40px"></userImage>
+								<span style="line-height: 40px; padding-left: 10px;">{{ scope.row.employee_name
+									}}</span>
+							</div>
+						</template>
 					</el-table-column>
 					<el-table-column label="部门" prop="dept"></el-table-column>
 					<el-table-column label="抢单时间" prop="create_time"></el-table-column>
 					<el-table-column label="执行情况" width="100px">
-					  <template slot-scope="scope">
-						 <span v-if="scope.row.status==1" class="orange">进行中</span>
-						 <span v-if="scope.row.status==2" class="blue">已完成</span>
-						 <span v-if="scope.row.status==3" class="fontColorB">退回</span>
-						 <span v-if="scope.row.status==4" class="green">已审批</span>
-						 <span v-if="scope.row.status==5" class="fontColorB">发布者已撤回</span>
-					  </template>
+						<template slot-scope="scope">
+							<span v-if="scope.row.status==1" class="orange">进行中</span>
+							<span v-if="scope.row.status==2" class="blue">已完成</span>
+							<span v-if="scope.row.status==3" class="fontColorB">退回</span>
+							<span v-if="scope.row.status==4" class="green">已审批</span>
+							<span v-if="scope.row.status==5" class="fontColorB">发布者已撤回</span>
+						</template>
 					</el-table-column>
 					<template slot="empty">
 						<noData></noData>
 					</template>
-			  </el-table>
-		  </div>
-		  <div class="flex-box-end" style="margin-top: 20px;">
-		  	<el-button @click="isShowTable=false">关 闭</el-button>
-		  </div>
+				</el-table>
+			</div>
+			<div class="flex-box-end" style="margin-top: 20px;">
+				<el-button @click="isShowTable=false">关 闭</el-button>
+			</div>
 		</el-dialog>
 	</div>
 </template>

+ 40 - 48
src/views/task/my_task.vue

@@ -2,32 +2,36 @@
 	<div>
 		<div class="box">
 			<el-tabs v-model="formData.status">
-				<el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
+				<el-tab-pane :disabled="loading" v-for="(item, index) in tabsOption" :key="index" :label="item.label"
+					:name="item.name"></el-tab-pane>
 			</el-tabs>
 			<FormBox style="margin-bottom: 10px;">
 				<div class="form-item">
 					<div class="form-label">积分类型</div>
 					<div class="form-search">
-						<el-select  size="medium" v-model="formData.pt_id" placeholder="请选择积分类型">
-							<el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="formData.pt_id" placeholder="请选择积分类型">
+							<el-option v-for="item in point_type" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
-				</div>			
+				</div>
 				<div class="form-item">
 					<div class="form-label">排序</div>
 					<div class="form-search">
-						<el-select  size="medium" v-model="formData.sort" placeholder="请选择排序">
-							<el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
+						<el-select size="medium" v-model="formData.sort" placeholder="请选择排序">
+							<el-option v-for="item in sort" :key="item.id" :label="item.name"
+								:value="item.code"></el-option>
 						</el-select>
 					</div>
-				</div>			
+				</div>
 				<div class="form-item">
 					<div class="form-label">内容搜索</div>
 					<div class="form-search">
-						<el-input  size="medium" clearable v-model="formData.content" placeholder="请输入" max="200"></el-input>
+						<el-input size="medium" clearable v-model="formData.content" placeholder="请输入"
+							max="200"></el-input>
 					</div>
-				</div>	
-			</FormBox>	
+				</div>
+			</FormBox>
 
 			<div v-if="formData.status == 'running'">
 				<el-table :data="list" style="width: 100%" v-loading="loading" @row-click="openDetail">
@@ -38,10 +42,10 @@
 					</el-table-column>
 					<el-table-column label="积分">
 						<template slot-scope="scope">
-							<span class="red" v-if="scope.row.point_config.base_point > 0">
+							<span class="green" v-if="scope.row.point_config.base_point > 0">
 								+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 							</span>
-							<span class="green" v-else>
+							<span class="red" v-else>
 								{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 							</span>
 
@@ -51,7 +55,8 @@
 					<el-table-column label="审批人" prop="reviewer_name"></el-table-column>
 					<el-table-column label="操作" prop="owner_id">
 						<template slot-scope="scope">
-							<el-link type="primary" :underline="false" @click.stop="completeBtn(scope.row)">完成任务</el-link>
+							<el-link type="primary" :underline="false"
+								@click.stop="completeBtn(scope.row)">完成任务</el-link>
 						</template>
 					</el-table-column>
 					<template slot="empty">
@@ -69,10 +74,10 @@
 					</el-table-column>
 					<el-table-column label="积分">
 						<template slot-scope="scope">
-							<span class="red" v-if="scope.row.point_config.base_point > 0">
+							<span class="green" v-if="scope.row.point_config.base_point > 0">
 								+{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 							</span>
-							<span class="green" v-else>
+							<span class="red" v-else>
 								{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
 							</span>
 
@@ -82,9 +87,9 @@
 					<el-table-column label="审批人" prop="reviewer_name"></el-table-column>
 					<el-table-column label="状态" prop="review_status">
 						<template slot-scope="scope">
-							  <div class="orange" v-if="scope.row.review_status == 0">待处理</div>
-							  <div class="green" v-if="scope.row.review_status ==1">已通过</div>
-							  <div class="red" v-if="scope.row.review_status == 2">已驳回</div>
+							<div class="orange" v-if="scope.row.review_status == 0">待处理</div>
+							<div class="green" v-if="scope.row.review_status ==1">已通过</div>
+							<div class="red" v-if="scope.row.review_status == 2">已驳回</div>
 						</template>
 					</el-table-column>
 					<template slot="empty">
@@ -94,45 +99,31 @@
 			</div>
 
 			<center style="padding: 20px 0;">
-				<el-pagination
-					background
-					@size-change="handleSizeChange"
-					@current-change="handleCurrentChange"
-					:page-sizes="[10, 20, 50, 100]"
-					layout="total, sizes, prev, pager, next"
-					:current-page="formData.page"
-					:page-size="formData.page_size"
-					:total="total"
-				></el-pagination>
+				<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+					:page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next"
+					:current-page="formData.page" :page-size="formData.page_size" :total="total"></el-pagination>
 			</center>
 		</div>
 
-		<el-drawer :custom-class="'drawer_details'" :visible.sync="completeShow" wrapperClosable :with-header="false" size="500px">
+		<el-drawer :custom-class="'drawer_details'" :visible.sync="completeShow" wrapperClosable :with-header="false"
+			size="500px">
 			<div class="details_title flex-box-ce">
 				<span class="flex-1">完成任务</span>
-				<i  @click="completeShow=false" style="cursor: pointer;" class="el-icon-close"></i>
+				<i @click="completeShow=false" style="cursor: pointer;" class="el-icon-close"></i>
 			</div>
 			<div class="details_content">
 				<el-form :model="detail_form" ref="detail_form" label-width="80px">
-					<el-form-item label="任务备注" prop="remark" :rules="[{ required: true, message: '请填写任务备注(限200字)', trigger: 'blur' }]">
-						<el-input v-model="detail_form.remark" type="textarea" :rows="4"  maxlength="200" show-word-limit></el-input>
+					<el-form-item label="任务备注" prop="remark"
+						:rules="[{ required: true, message: '请填写任务备注(限200字)', trigger: 'blur' }]">
+						<el-input v-model="detail_form.remark" type="textarea" :rows="4" maxlength="200"
+							show-word-limit></el-input>
 					</el-form-item>
 					<el-form-item label="图片">
-						<upload
-							:headers="Xtoken"
-							class="avatar-uploader"
-							:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'"
-							:show-file-list="true"
-							:file-list="detail_form.fileList"
-							:on-success="handleFilesSuccess"
-							:on-preview="onFilePreView"
-							:before-upload="beforeUpload"
-							:on-remove="onFileRemove"
-							:limit="3"
-							accept="image/jpeg,image/png"
-							:multiple="true"
-							ref="clearPicture"
-						>
+						<upload :headers="Xtoken" class="avatar-uploader"
+							:action="'https://' + 'integralsys.oss-cn-shenzhen.aliyuncs.com'" :show-file-list="true"
+							:file-list="detail_form.fileList" :on-success="handleFilesSuccess"
+							:on-preview="onFilePreView" :before-upload="beforeUpload" :on-remove="onFileRemove"
+							:limit="3" accept="image/jpeg,image/png" :multiple="true" ref="clearPicture">
 							<el-button size="small" type="primary">点击上传</el-button>
 							(最多选择3张)
 						</upload>
@@ -146,7 +137,8 @@
 		</el-drawer>
 
 		<!-- 详情弹窗 -->
-		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
+		<taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'">
+		</taskDetailsPopup>
 	</div>
 </template>
 

+ 53 - 45
src/views/workbench/approval_batch.vue

@@ -3,7 +3,7 @@
 		<div class="diy_tip_bg">
 			<el-alert class="diy-tip" type="success" @close="tips_close" v-if="tips_show">
 				<p style="font-size: 14px;">批量审批仅支持快速处理任务审批和已指定规则的积分审批,其余情况的审批单请到【待我审批】处理
-				  </br>权限分不足时,请进入【审批详情】→【通过】→【递交审批】给上级
+					</br>权限分不足时,请进入【审批详情】→【通过】→【递交审批】给上级
 				</p>
 			</el-alert>
 		</div>
@@ -12,41 +12,51 @@
 				<div class="form-item">
 					<div class="form-label">姓名搜索</div>
 					<div class="form-search">
-						<el-select size="medium" v-model="target_id" filterable collapse-tags clearable placeholder="请输入或选择人员">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="target_id" filterable collapse-tags clearable
+							placeholder="请输入或选择人员">
+							<el-option v-for="item in employee_map" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">内容搜索</div>
 					<div class="form-search">
-						<el-input size="medium" max="20" v-model="formData.keyword" placeholder="请输入" clearable></el-input>
+						<el-input size="medium" max="20" v-model="formData.keyword" placeholder="请输入"
+							clearable></el-input>
 					</div>
 				</div>
-			</FormBox>		
+			</FormBox>
 			<div style="margin: 10px 0;">
 				<el-button size="medium" type="primary" plain @click="pass">批量通过</el-button>
 				<el-button size="medium" type="danger" plain @click="reject">批量驳回</el-button>
 			</div>
-			<el-table :data="list" style="width: 100%;cursor: pointer;"  v-loading="loading" @selection-change="deleteEvents" @row-click="openDetail">
+			<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading"
+				@selection-change="deleteEvents" @row-click="openDetail">
 				<el-table-column width="50" type="selection"></el-table-column>
-					<el-table-column label="" prop="task_name">
-						<template slot-scope="scope">
-							<div class="flex-box flex-v-ce">
-								<userImage width="50px" height="50px"  :id="scope.row.employee_id" :user_name="scope.row.employee_name"></userImage>
-								<div style="margin-left: 5px;">
-									<span class="tableTitle" v-show="scope.row.source_type == 1">{{ scope.row.employee_name }}的积分任务</span>
-									<span class="tableTitle" v-show="scope.row.source_type == 2">{{ scope.row.employee_name }}的积分申请</span>
-									<span class="tableTitle" v-show="scope.row.source_type == 3">{{ scope.row.employee_name }}的积分奖扣</span>
-									<span class="tableTitle" v-show="scope.row.source_type == 4">{{ scope.row.employee_name }}的绩效工作</span>
-								</div>
+				<el-table-column label="" prop="task_name">
+					<template slot-scope="scope">
+						<div class="flex-box flex-v-ce">
+							<userImage width="50px" height="50px" :id="scope.row.employee_id"
+								:user_name="scope.row.employee_name"></userImage>
+							<div style="margin-left: 5px;">
+								<span class="tableTitle" v-show="scope.row.source_type == 1">{{ scope.row.employee_name
+									}}的积分任务</span>
+								<span class="tableTitle" v-show="scope.row.source_type == 2">{{ scope.row.employee_name
+									}}的积分申请</span>
+								<span class="tableTitle" v-show="scope.row.source_type == 3">{{ scope.row.employee_name
+									}}的积分奖扣</span>
+								<span class="tableTitle" v-show="scope.row.source_type == 4">{{ scope.row.employee_name
+									}}的绩效工作</span>
 							</div>
-						</template>
-					</el-table-column>
+						</div>
+					</template>
+				</el-table-column>
 				<el-table-column prop="point" label="积分" align="center">
 					<template slot-scope="scope">
-						<span class="red" v-if="scope.row.point > 0">+{{ scope.row.point }} {{$getTyps(scope.row.pt_id).name}}</span>
-						<span class="green" v-else>{{ scope.row.point }} {{$getTyps(scope.row.pt_id).name}}</span>
+						<span class="green" v-if="scope.row.point > 0">+{{ scope.row.point }}
+							{{$getTyps(scope.row.pt_id).name}}</span>
+						<span class="red" v-else>{{ scope.row.point }} {{$getTyps(scope.row.pt_id).name}}</span>
 					</template>
 				</el-table-column>
 				<el-table-column label="审批内容" prop="remark" min-width="200">
@@ -65,28 +75,21 @@
 				</template>
 			</el-table>
 			<center style="padding: 20px 0;">
-				<el-pagination
-					background
-					@size-change="handleSizeChange"
-					@current-change="handleCurrentChange"
-					:current-page="formData.page"
-					:page-sizes="[10, 20, 50, 100]"
-					layout="total, sizes, prev, pager, next"
-					:page-size="formData.page_size"
-					:total="total"
-				></el-pagination>
+				<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+					:current-page="formData.page" :page-sizes="[10, 20, 50, 100]"
+					layout="total, sizes, prev, pager, next" :page-size="formData.page_size"
+					:total="total"></el-pagination>
 			</center>
 		</div>
 		<examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
 		<el-dialog title="审批驳回" :visible.sync="rejectShow" width="520px">
-			<div style="text-align: center;margin-bottom: 10px;" class="fontColorB">已选中{{selectionID.length}}条审批单,确认全部驳回吗?</div>
+			<div style="text-align: center;margin-bottom: 10px;" class="fontColorB">
+				已选中{{selectionID.length}}条审批单,确认全部驳回吗?</div>
 			<el-form :model="rejectForm" ref="rejectForm" label-width="80px" style="margin-top: 20px;">
-				<el-form-item
-					label="审批意见"
-					prop="remark"
-					:rules="[{ required: true, message: '请输入审批意见', trigger: 'blur' }, { min: 3, max: 50, message: '长度在 3 到 50 个字符', trigger: 'blur' }]"
-				>
-					<el-input type="textarea" :rows="4" v-model="rejectForm.remark" placeholder="请输入审批意见(限50字)"></el-input>
+				<el-form-item label="审批意见" prop="remark"
+					:rules="[{ required: true, message: '请输入审批意见', trigger: 'blur' }, { min: 3, max: 50, message: '长度在 3 到 50 个字符', trigger: 'blur' }]">
+					<el-input type="textarea" :rows="4" v-model="rejectForm.remark"
+						placeholder="请输入审批意见(限50字)"></el-input>
 				</el-form-item>
 				<el-form-item style="text-align: right; margin-bottom: 0">
 					<el-button @click="rejectShow = false">取消</el-button>
@@ -95,23 +98,25 @@
 			</el-form>
 		</el-dialog>
 		<!-- 审批结果 -->
-		<el-dialog title="提交结果" :visible.sync="isResult"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+		<el-dialog title="提交结果" :visible.sync="isResult" width="800" :close-on-click-modal="false"
+			:close-on-press-escape="false" :show-close="false">
 			<div v-if="!isShowError">
 				<el-progress :text-inside="true" :stroke-width="24" :percentage="percentage"></el-progress>
 				<div style="margin-top: 20px;border: 1px solid #f1f1f1;">
 					<div class="flex-box-ce results" style="font-weight: 600;">
-						<div  style="border-right: 1px solid #f1f1f1;width: 50px;">序号</div>
+						<div style="border-right: 1px solid #f1f1f1;width: 50px;">序号</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
 						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">审批内容</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">积分</div>
-						<div class="flex-2" >处理结果</div>
+						<div class="flex-2">处理结果</div>
 					</div>
 					<div class="flex-box-ce results" v-for="(item, index) in results" :key="index">
-						<div  style="border-right: 1px solid #f1f1f1;width: 50px;">{{results.length-index}}</div>
+						<div style="border-right: 1px solid #f1f1f1;width: 50px;">{{results.length-index}}</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.name }}</div>
-						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.remark.customize || item.remark.rule }}</div>
+						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.remark.customize ||
+							item.remark.rule }}</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
-						    {{ item.point>0? '+'+item.point:item.point }} 
+							{{ item.point>0? '+'+item.point:item.point }}
 							<span>{{ item.pt_id==3? 'B分':'A分' }}</span>
 						</div>
 						<div class="flex-2 green" v-if="item.status == 1">{{ item.msg }}</div>
@@ -119,13 +124,16 @@
 					</div>
 				</div>
 				<span slot="footer">
-					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length==resultList.length"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length==resultList.length">
+						<el-button type="primary" @click="isResult = false" size="small">确 定</el-button>
+					</div>
 				</span>
 			</div>
 			<div v-else>
 				<div style="text-align: center;" class="red">服务器繁忙,请稍后再试</div>
 				<span slot="footer">
-					<div class="flex-box-end" style="margin-top: 20px;"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;"><el-button type="primary"
+							@click="isResult = false" size="small">确 定</el-button></div>
 				</span>
 			</div>
 		</el-dialog>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 414 - 437
src/views/workbench/integral_review.vue


+ 114 - 121
src/views/workbench/review.vue

@@ -9,113 +9,97 @@
 				<div class="form-item">
 					<div class="form-label">姓名搜索</div>
 					<div class="form-search">
-						<el-select size="medium" v-model="select_employee_id" filterable clearable placeholder="请输入或选择人员">
-							<el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="select_employee_id" filterable clearable
+							placeholder="请输入或选择人员">
+							<el-option v-for="item in employee_map" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">所在部门</div>
 					<div class="form-search">
-						<el-cascader
-							size="medium"
-							v-model="dept_name"
-							:options="dept_tree"
+						<el-cascader size="medium" v-model="dept_name" :options="dept_tree"
 							:props="{ checkStrictly: true, multiple: true, value: 'id', label: 'name', children: '_child' }"
-							ref="dept"
-							filterable
-							collapse-tags
-							clearable
-							placeholder="全公司"
-						></el-cascader>
+							ref="dept" filterable collapse-tags clearable placeholder="全公司"></el-cascader>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">积分类型</div>
 					<div class="form-search">
-						<el-select  size="medium" v-model="formData.pt_id" clearable placeholder="请选择积分类型">
-							<el-option v-for="item in getTypes()" :key="item.name" :label="item.name" :value="item.id"></el-option>
+						<el-select size="medium" v-model="formData.pt_id" clearable placeholder="请选择积分类型">
+							<el-option v-for="item in getTypes()" :key="item.name" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">事件来源</div>
 					<div class="form-search">
-							<el-select size="medium" v-model="formData.source_type" clearable placeholder="全部">
-								<el-option v-for="item in source_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
-							</el-select>
+						<el-select size="medium" v-model="formData.source_type" clearable placeholder="全部">
+							<el-option v-for="item in source_type" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
+						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">规则分类</div>
 					<div class="form-search">
-						<el-cascader
-							v-model="rule"
-							:options="rule_trees"
-							:props="props"
-							@change="rule_null"
-							size="medium"
-							ref="rule"
-							clearable
-							placeholder="全部规则分类"
-						></el-cascader>
+						<el-cascader v-model="rule" :options="rule_trees" :props="props" @change="rule_null"
+							size="medium" ref="rule" clearable placeholder="全部规则分类"></el-cascader>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">
 						<el-tooltip effect="dark" placement="top">
-						  <template slot="content">
-							默认仅显示组织架构中“已启用”人员的积分事件,未启用、已离职等人员的积分事件可以通过“未启用&未授权”筛选查看
-						  </template>
-						  <span>人员状态	<i class="el-icon-warning"></i></span>
+							<template slot="content">
+								默认仅显示组织架构中“已启用”人员的积分事件,未启用、已离职等人员的积分事件可以通过“未启用&未授权”筛选查看
+							</template>
+							<span>人员状态 <i class="el-icon-warning"></i></span>
 						</el-tooltip>
 					</div>
 					<div class="form-search">
 						<el-select size="medium" v-model="formData.is_enable">
-							<el-option  label="已启用" :value="1"></el-option>
-							<el-option  label="未授权&未启用" :value="0"></el-option>
+							<el-option label="已启用" :value="1"></el-option>
+							<el-option label="未授权&未启用" :value="0"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">发生时间</div>
 					<div class="form-search">
-						<el-date-picker
-							v-model="time_slot"
-							type="daterange"
-							size="medium"
-							value-format="yyyy-MM-dd"
-							range-separator="至"
-							start-placeholder="开始日期"
-							end-placeholder="结束日期"
-						></el-date-picker>
+						<el-date-picker v-model="time_slot" type="daterange" size="medium" value-format="yyyy-MM-dd"
+							range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
 					</div>
 				</div>
 				<div class="form-item" v-if="active=='noreview'">
 					<div class="form-label">复核状态</div>
 					<div class="form-search">
-						<el-select class="date-picker-width" size="medium" v-model="dc_status"  placeholder="全部">
-							<el-option v-for="item in reviewArr" :key="item.id" :label="item.name" :value="item.id"></el-option>
+						<el-select class="date-picker-width" size="medium" v-model="dc_status" placeholder="全部">
+							<el-option v-for="item in reviewArr" :key="item.id" :label="item.name"
+								:value="item.id"></el-option>
 						</el-select>
 					</div>
 				</div>
 				<div class="form-item">
 					<div class="form-label">内容搜索</div>
 					<div class="form-search">
-						<el-input size="medium" clearable max="20" v-model="formData.keyword" placeholder="请输入"></el-input>
+						<el-input size="medium" clearable max="20" v-model="formData.keyword"
+							placeholder="请输入"></el-input>
 					</div>
 				</div>
-<!--				<div class="form-item">-->
-<!--					<div class="form-label">分值查询</div>-->
-<!--					<div class="form-search">-->
-<!--						<el-input size="medium" type="number" clearable v-model="formData.point" placeholder="请输入"></el-input>-->
-<!--					</div>-->
-<!--				</div>-->
+				<!--				<div class="form-item">-->
+				<!--					<div class="form-label">分值查询</div>-->
+				<!--					<div class="form-search">-->
+				<!--						<el-input size="medium" type="number" clearable v-model="formData.point" placeholder="请输入"></el-input>-->
+				<!--					</div>-->
+				<!--				</div>-->
 
 
 			</FormBox>
 			<div style="padding: 10px 0;position: relative;z-index: 1;background-color: #fff;" v-if="active=='review'">
-				<el-button plain  size="medium" :disabled="deleteDisabled" @click="deleteInBatches" type="primary">批量复核通过</el-button>
+				<el-button plain size="medium" :disabled="deleteDisabled" @click="deleteInBatches"
+					type="primary">批量复核通过</el-button>
 				<span style="padding-left: 20px;">
 					<span class="orange" v-if="!isOpen"><i class="el-icon-warning-outline"></i> 正在连接服务器,请稍候...</span>
 					<span v-else class="green"><i class="el-icon-connection"></i> 成功连接服务器,可操作使用!</span>
@@ -124,20 +108,25 @@
 			</div>
 			<!-- 表格 -->
 			<div>
-				<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @row-click="open_detail" @selection-change="deleteEvents">
+				<el-table :data="list" style="width: 100%;cursor: pointer;" v-loading="loading" @row-click="open_detail"
+					@selection-change="deleteEvents">
 					<el-table-column v-if="active=='review'" type="selection" width="55"></el-table-column>
 					<el-table-column prop="employee_name" label="姓名" align="left" min-width="125px">
 						<template slot-scope="scope">
 							<div class="flex-box">
-								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url" width="50px" height="50px"></userImage>
-								<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.employee_name }}</span>
+								<userImage :user_name="scope.row.employee_name" :img_url="scope.row.employee_img_url"
+									width="50px" height="50px"></userImage>
+								<span style="line-height: 50px; padding-left: 10px;">{{ scope.row.employee_name
+									}}</span>
 							</div>
 						</template>
 					</el-table-column>
-					<el-table-column prop="dept" show-overflow-tooltip label="部门" align="left" min-width="120px"></el-table-column>
+					<el-table-column prop="dept" show-overflow-tooltip label="部门" align="left"
+						min-width="120px"></el-table-column>
 					<el-table-column prop="point" label="积分" align="left" min-width="120px">
 						<template slot-scope="scope">
-							<span :class="scope.row.point < 0 ? 'green' : 'red'">{{ scope.row.point }} {{ point_name(scope.row.pt_id) }}</span>
+							<span :class="scope.row.point < 0 ? 'red' : 'green'">{{ scope.row.point }} {{
+								point_name(scope.row.pt_id) }}</span>
 						</template>
 					</el-table-column>
 					<el-table-column prop="remark" label="事件内容" align="left" min-width="280px">
@@ -176,13 +165,15 @@
 					</el-table-column>
 					<el-table-column prop="create_time" label="操作" min-width="140px" v-if="active=='review'">
 						<template slot-scope="scope">
-							<el-link :underline="false" type="primary" :disabled="setLoading" @click.stop="pass(scope.row)">通过</el-link>
-							<el-link :underline="false" type="danger" :disabled="setLoading" style="padding: 0 10px;" @click.stop="noPass(scope.row)">不通过</el-link>
-							<el-dropdown  @command="setGrade(scope.row)" v-if="event_review_point==1">
-							  <i class="el-icon-more"></i>
-							  <el-dropdown-menu slot="dropdown">
-							    <el-dropdown-item>调整分数</el-dropdown-item>
-							  </el-dropdown-menu>
+							<el-link :underline="false" type="primary" :disabled="setLoading"
+								@click.stop="pass(scope.row)">通过</el-link>
+							<el-link :underline="false" type="danger" :disabled="setLoading" style="padding: 0 10px;"
+								@click.stop="noPass(scope.row)">不通过</el-link>
+							<el-dropdown @command="setGrade(scope.row)" v-if="event_review_point==1">
+								<i class="el-icon-more"></i>
+								<el-dropdown-menu slot="dropdown">
+									<el-dropdown-item>调整分数</el-dropdown-item>
+								</el-dropdown-menu>
 							</el-dropdown>
 						</template>
 					</el-table-column>
@@ -197,42 +188,38 @@
 					</template>
 				</el-table>
 				<center class="pagination">
-					<el-pagination
-						background
-						@size-change="handleSizeChange"
-						@current-change="handleCurrentChange"
-						:current-page="formData.page"
-						:page-sizes="[10, 20, 50,100]"
-						layout="total, sizes, prev, pager, next"
-						:page-size="pageLimit"
-						:total="total"
-					></el-pagination>
+					<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
+						:current-page="formData.page" :page-sizes="[10, 20, 50,100]"
+						layout="total, sizes, prev, pager, next" :page-size="pageLimit" :total="total"></el-pagination>
 				</center>
 			</div>
 		</div>
-		
-		
+
+
 		<!-- 不通过 -->
 		<el-dialog title="填写原因" width="480px" top="15vh" :visible.sync="isNo" :close-on-click-modal="false">
 			<el-form ref="newForm" label-width="110px">
 				<el-form-item label="不通过原因" prop="content">
-					<el-input v-model="comment" placeholder="请输入不通过原因" type="textarea" rows="4" maxlength="50" show-word-limit></el-input>
+					<el-input v-model="comment" placeholder="请输入不通过原因" type="textarea" rows="4" maxlength="50"
+						show-word-limit></el-input>
 				</el-form-item>
 			</el-form>
 			<div slot="footer" class="dialog-footer flex-box-end">
 				<el-button @click="isNo = false">取 消</el-button>
-				<el-button type="primary"  @click="saveNo()">确 定</el-button>
+				<el-button type="primary" @click="saveNo()">确 定</el-button>
 			</div>
 		</el-dialog>
-		
+
 		<!-- 调整分数 -->
 		<el-dialog title="调整分数" width="480px" top="15vh" :visible.sync="isPrizeShow" :close-on-click-modal="false">
 			<el-form ref="newForm2" :rules="rules" :model="newForm" label-width="110px">
 				<el-form-item label="分数" prop="point">
-					<el-input v-model="newForm.point" maxlength="10" placeholder="请输入分数" auto-complete="off" @input="newForm.point=newForm.point.replace(/[^(\-)0-9]/g,'')"></el-input>
+					<el-input v-model="newForm.point" maxlength="10" placeholder="请输入分数" auto-complete="off"
+						@input="newForm.point=newForm.point.replace(/[^(\-)0-9]/g,'')"></el-input>
 				</el-form-item>
 				<el-form-item label="调整原因" prop="comment">
-					<el-input v-model="newForm.comment" placeholder="请输入调整原因" type="textarea" rows="4" maxlength="50" show-word-limit></el-input>
+					<el-input v-model="newForm.comment" placeholder="请输入调整原因" type="textarea" rows="4" maxlength="50"
+						show-word-limit></el-input>
 				</el-form-item>
 			</el-form>
 			<div slot="footer" class="dialog-footer flex-box-end">
@@ -240,36 +227,38 @@
 				<el-button type="primary" @click="subGroupForm('newForm2')">确定并通过</el-button>
 			</div>
 		</el-dialog>
-		
-		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'" direction="rtl">
+
+		<el-drawer title="事件详情" :visible.sync="detail_popup" ref="drawer" :with-header="false" :width="'500px'"
+			direction="rtl">
 			<div class="drawer_title flex-box-ce">
 				<span class="flex-1">事件详情</span>
-				<i  @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
+				<i @click="detail_popup=false" style="cursor: pointer;" class="el-icon-close"></i>
 			</div>
 			<div class="detail_popup" v-loading="detail_loading" v-if="detail_info !== null">
 				<el-row style="padding-bottom:10px;border-bottom:1px #f8f8f8 solid;">
 					<div class="flex-box flex-v-ce">
-						<userImage :user_name="detail_info.employee_name" width="50px" height="50px" fontSize="1"></userImage>
-						<span style="font-size: 18px;line-height:50px; margin-left:10px;margin-right:4px;">{{ detail_info.employee_name }}</span>
-						<span class="red point" v-show="detail_info.point >= 0">+{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
-						<span class="green point" v-show="detail_info.point < 0">{{ detail_info.point }} {{ point_name(detail_info.pt_id) }}</span>
+						<userImage :user_name="detail_info.employee_name" width="50px" height="50px" fontSize="1">
+						</userImage>
+						<span style="font-size: 18px;line-height:50px; margin-left:10px;margin-right:4px;">{{
+							detail_info.employee_name }}</span>
+						<span class="green point" v-show="detail_info.point >= 0">+{{ detail_info.point }} {{
+							point_name(detail_info.pt_id) }}</span>
+						<span class="red point" v-show="detail_info.point < 0">{{ detail_info.point }} {{
+							point_name(detail_info.pt_id) }}</span>
 					</div>
 				</el-row>
 
 				<el-row v-show="detail_info.rule_list">
 					<el-col :span="6">事件内容</el-col>
-					<el-col :span="18" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize || detail_info.remark.rule) }}</el-col>
+					<el-col :span="18" v-if="detail_info.remark">{{ detail_info.remark && (detail_info.remark.customize
+						|| detail_info.remark.rule) }}</el-col>
 				</el-row>
 
 				<el-row v-show="detail_info.files && detail_info.files.length > 0">
 					<el-col :span="18" :offset="6">
-						<el-image
-							v-for="(itme, index) in detail_info.files"
-							:key="index"
-							style="width: 80px; height: 80px;margin: 0 5px;"
-							:src="itme"
-							:preview-src-list="detail_info.files"
-						></el-image>
+						<el-image v-for="(itme, index) in detail_info.files" :key="index"
+							style="width: 80px; height: 80px;margin: 0 5px;" :src="itme"
+							:preview-src-list="detail_info.files"></el-image>
 					</el-col>
 				</el-row>
 
@@ -303,15 +292,12 @@
 					<el-col :span="18">{{ detail_info.complete_task.remark }}</el-col>
 				</el-row>
 
-				<el-row v-show="detail_info.complete_task && detail_info.complete_task.files && detail_info.complete_task.files.length > 0">
+				<el-row
+					v-show="detail_info.complete_task && detail_info.complete_task.files && detail_info.complete_task.files.length > 0">
 					<el-col :span="18" :offset="6">
-						<el-image
-							v-for="(itme, index) in detail_info.complete_task.files"
-							:key="index"
-							style="width: 80px; height: 80px;margin: 0 5px;"
-							:src="itme"
-							:preview-src-list="detail_info.complete_task.files"
-						></el-image>
+						<el-image v-for="(itme, index) in detail_info.complete_task.files" :key="index"
+							style="width: 80px; height: 80px;margin: 0 5px;" :src="itme"
+							:preview-src-list="detail_info.complete_task.files"></el-image>
 					</el-col>
 				</el-row>
 
@@ -327,14 +313,20 @@
 					</el-row>
 					<el-row>
 						<el-col :span="6">积分</el-col>
-						<el-col :span="18" v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{ detail_info.rule_item.min_point }}</el-col>
+						<el-col :span="18"
+							v-show="detail_info.rule_item.min_point == detail_info.rule_item.max_point">{{
+							detail_info.rule_item.min_point }}</el-col>
 						<el-col :span="18" v-show="detail_info.rule_item.min_point != detail_info.rule_item.max_point">
 							{{ detail_info.rule_item.min_point }} ~ {{ detail_info.rule_item.max_point }}
 						</el-col>
 					</el-row>
 				</div>
-				<div v-show="detail_info.process"><Steps :process="detail_info.process"></Steps></div>
-				<div v-show="detail_info.dc_remark.flow"><Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review></div>
+				<div v-show="detail_info.process">
+					<Steps :process="detail_info.process"></Steps>
+				</div>
+				<div v-show="detail_info.dc_remark.flow">
+					<Review :process="detail_info.dc_remark.flow" :status="detail_info.dc_status"></Review>
+				</div>
 				<div style="text-align: center;margin-top: 30px;" v-if="detail_info.source_type == 10 && see_log">
 					<el-button type="primary" size="medium" @click="showLog = true">
 						查看日志详情内容
@@ -342,7 +334,8 @@
 					</el-button>
 				</div>
 			</div>
-			<div v-if="!this.$authoritys('employee') && !this.$authoritys('dept_manager')" style="position: absolute; bottom: 20px; display: block; right: 20px;">
+			<div v-if="!this.$authoritys('employee') && !this.$authoritys('dept_manager')"
+				style="position: absolute; bottom: 20px; display: block; right: 20px;">
 				<el-button @click="close_integral_event">取消</el-button>
 				<el-button type="danger" @click="del_integral_event(detail_info)">删除</el-button>
 			</div>
@@ -362,34 +355,32 @@
 			<div v-if="ding_report.images.length > 0">
 				<div class="key" style="margin-bottom: 20px;">图片</div>
 				<div class="flex-box flex-d-wrap">
-					<el-image
-						v-for="(item, index) in ding_report.images"
-						:key="index"
-						style="width: 100px; height: 100px;margin-right:8px"
-						:src="item"
-						:preview-src-list="ding_report.images"
-					></el-image>
+					<el-image v-for="(item, index) in ding_report.images" :key="index"
+						style="width: 100px; height: 100px;margin-right:8px" :src="item"
+						:preview-src-list="ding_report.images"></el-image>
 				</div>
 			</div>
 		</el-dialog>
 
-		<el-dialog title="提交结果" :visible.sync="isResult"  width="800" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
+		<el-dialog title="提交结果" :visible.sync="isResult" width="800" :close-on-click-modal="false"
+			:close-on-press-escape="false" :show-close="false">
 			<div>
 				<el-progress :text-inside="true" :stroke-width="24" :percentage="percentage"></el-progress>
-				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;" class="scroll-bar">
+				<div style="margin-top: 20px;border: 1px solid #f1f1f1;max-height: 500px;overflow-y: auto;"
+					class="scroll-bar">
 					<div class="flex-box-ce results" style="font-weight: 600;">
 						<div style="border-right: 1px solid #f1f1f1;width: 50px;">序号</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">奖扣对象</div>
 						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">事件内容</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">积分</div>
-						<div class="flex-2" >处理结果</div>
+						<div class="flex-2">处理结果</div>
 					</div>
 					<div class="flex-box-ce results" v-for="(item, index) in results" :key="index">
 						<div style="border-right: 1px solid #f1f1f1;width: 50px;">{{results.length-index}}</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">{{ item.name }}</div>
 						<div class="flex-2" style="border-right: 1px solid #f1f1f1;">{{ item.remark }}</div>
 						<div class="flex-1" style="border-right: 1px solid #f1f1f1;">
-							{{ item.point>0? '+'+item.point:item.point }} 
+							{{ item.point>0? '+'+item.point:item.point }}
 							<span>{{ item.pt_id==3? 'B分':'A分' }}</span>
 						</div>
 						<div class="flex-2 green" v-if="item.msg=='提交成功'">{{ item.msg }}</div>
@@ -397,11 +388,13 @@
 					</div>
 				</div>
 				<span slot="footer">
-					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length==resultList.length"><el-button type="primary" @click="isResult = false" size="small">确 定</el-button></div>
+					<div class="flex-box-end" style="margin-top: 20px;" v-show="results.length==resultList.length">
+						<el-button type="primary" @click="isResult = false" size="small">确 定</el-button>
+					</div>
 				</span>
 			</div>
 		</el-dialog>
-	
+
 	</div>
 </template>
 <script>

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů