哥哥玩剑魂呢 3 years ago
parent
commit
f2789e8661

+ 58 - 16
src/components/applicationIntegrationPopup.vue

@@ -32,8 +32,8 @@
 								</span>
 							</el-dialog>
 						</el-form-item>
-						<el-form-item label="指定规则"><el-switch v-model="item.rule_switch" @change="switchChange(index, item.rule_switch)"></el-switch></el-form-item>
 
+						<!-- <el-form-item label="指定规则"><el-switch v-model="item.rule_switch" @change="switchChange(index, item.rule_switch)"></el-switch></el-form-item>
 						<el-form-item
 							label="选择规则"
 							v-if="item.rule_switch"
@@ -51,9 +51,28 @@
 								clearable
 								:props="{ children: 'child', label: 'name', value: 'id' }"
 							></el-cascader>
+						</el-form-item> -->
+						<el-form-item label="指定规则"><el-switch v-model="ruleOnoff" disabled></el-switch></el-form-item>
+						<el-form-item
+							label="选择规则"
+							v-if="ruleOnoff"
+							:prop="'items.' + index + '.rule_item_list_value'"
+							:rules="[{ required: true, message: '请选择规则', trigger: 'change' }]"
+						>
+							<el-cascader
+								v-model="item.rule_item_list_value"
+								ref="ruleItem"
+								:popper-class="'itemClass'"
+								:options="rule_item_list"
+								@change="ruleItemChange"
+								:show-all-levels="false"
+								filterable
+								clearable
+								:props="{ children: 'child', label: 'name', value: 'id' }"
+							></el-cascader>
 						</el-form-item>
 
-						<el-form-item v-if="item.rule_switch && item.rule_id">
+						<el-form-item v-if="ruleOnoff && item.rule_id">
 							<div style="line-height: 24px;" v-show="item.rule_item_details.range_type == 1">
 								{{ item.rule_item_details.min_point }}
 								<span class="blue">{{ $getTypsName(item.rule_item_details.pt_id) }}</span>
@@ -196,6 +215,11 @@ export default {
 		integralType: {
 			type: Number,
 			default: 0
+		},
+		ruleOnoff: {
+			type: Boolean,
+			default: false
+			//true:选择规则; false:选择分类
 		}
 	},
 	data() {
@@ -256,12 +280,13 @@ export default {
 	},
 	components: { EmployeeSelector, uploadOss },
 	created() {
-		this.user_info = this.$getUserData();
-		var reviewerObj = this.getLocalVal(this.user_info.id);
-		var reviewerObj = reviewerObj ? JSON.parse(reviewerObj) : { id: '', name: '' };
-		this.LocalValObj = reviewerObj;
 	},
-	mounted() {
+	async mounted() {
+		this.user_info = this.$getUserData();
+		var reviewerObj = await this.getLocalVal(this.user_info.id);
+		var res = reviewerObj ? reviewerObj : { id: '', name: '' };
+		this.LocalValObj = res;
+
 		this.getRuleItemData();
 		// 初始化审批人
 		if (this.LocalValObj.id) {
@@ -273,8 +298,25 @@ export default {
 	methods: {
 		//获取缓存起来的审批人
 		getLocalVal(id) {
-			var obj = localStorage.getItem(id);
-			return obj;
+			return new Promise((resolve, reject) =>{
+				let obj;
+				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){
+							obj = data.employee_detail.superior_list.filter(x => x.id == data.employee_detail.superior_id)[0];
+							if(obj.id == this.user_info.id){
+								obj = localStorage.getItem(id)
+							}
+						}else{
+							obj = localStorage.getItem(id);
+						}
+					}
+				}).finally(_ =>{
+					resolve(obj)
+				})
+			})
+			// var obj = localStorage.getItem(id);
 		},
 		submitMembers(name) {
 			this.$refs[name][0].confirm(); //调用组件的confirm();
@@ -411,7 +453,7 @@ export default {
 			return data;
 		},
 		// 选择对象
-		employee_confirm(data) {
+		async employee_confirm(data) {
 			const item = this.dialogData.items[this.itemIndex];
 			item.employeeName = '';
 			item.employee_selected = { dept: [], employee: [] };
@@ -422,16 +464,16 @@ export default {
 				item.employee_selected.employee = [{ name: data.employee[0].name, id: data.employee[0].id, img_url: data.employee[0].img_url }];
 				item.employee_id = data.employee[0].id;
 
-				var reviewerObj = this.getLocalVal(data.employee[0].id);
-				var reviewerObj = reviewerObj ? JSON.parse(reviewerObj) : { id: '', name: '' };
+				var reviewerObj = await this.getLocalVal(data.employee[0].id);
+				var revieObj = reviewerObj ? reviewerObj : { id: '', name: '' };
 				// 清空审批人数据
-				if (reviewerObj.id) {
-					item.approval_selected = { dept: [], employee: [reviewerObj] };
+				if (revieObj.id) {
+					item.approval_selected = { dept: [], employee: [revieObj] };
 				} else {
 					item.approval_selected = { dept: [], employee: [] };
 				}
-				item.reviewer_id = reviewerObj.id;
-				item.approvalName = reviewerObj.name;
+				item.reviewer_id = revieObj.id;
+				item.approvalName = revieObj.name;
 				item.approval_employee_list = []; //当前选中人的 上级
 			}
 			item.show_employee_selector = false;

+ 46 - 1
src/components/bonusPointsPopup.vue

@@ -18,7 +18,7 @@
 							<span style="line-height: 36px;">录入明细({{ index + 1 }})</span>
 							<el-button type="text" class="fr" v-show="index > 0 || dialogData.items.length > 1" @click="delItem(index)">删除</el-button>
 						</div>
-						<el-form-item label="指定规则">
+						<!-- <el-form-item label="指定规则">
 							<el-switch @change="switchChange(index, item.rule_switch)" v-model="item.rule_switch"></el-switch>
 						</el-form-item>
 						<el-form-item
@@ -57,6 +57,46 @@
 								:show-all-levels="false"
 								:props="{ children: 'child', label: 'name', value: 'id' }"
 							></el-cascader>
+						</el-form-item> -->
+						<el-form-item label="指定规则">
+							<el-switch disabled v-model="ruleOnoff"></el-switch>
+						</el-form-item>
+						<el-form-item
+							class="test_cascader_id"
+							label="选择分类"
+							v-if="!ruleOnoff"
+							:prop="'items.' + index + '.rule_list_value'"
+							:rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]"
+						>
+							<el-cascader
+								v-model="item.rule_list_value"
+								ref="ruleCascader"
+								:popper-class="'ruleClass'"
+								filterable
+								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="ruleOnoff"
+							:prop="'items.' + index + '.rule_item_list_value'"
+							:rules="[{ required: true, message: '请选择规则', trigger: 'blur' }]"
+						>
+							<el-cascader
+								v-model="item.rule_item_list_value"
+								ref="ruleItem"
+								:popper-class="'itemClass'"
+								filterable
+								clearable
+								: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>
@@ -212,6 +252,11 @@ export default {
 			type: Number,
 			default: 0
 			// 1 是绩效分 , 2 是A分 , 3 是B分
+		},
+		ruleOnoff: {
+			type: Boolean,
+			default: false
+			//true:选择规则; false:选择分类
 		}
 	},
 	data() {

+ 15 - 13
src/home.vue

@@ -73,6 +73,11 @@
 					<el-col v-else :span="17" style="margin-top:34px;padding:0 0 10px 0;height:58px;" v-loading="authorityManagerHeaderLoad">
 						<el-col :gutter="50" style="margin:0;padding:0;" class="quick_button_box">
 							<div style="display:flex;justify-content: space-around;">
+								<p style="text-align:center;cursor:pointer;margin: 0;" @click="$router.push({ path: '/individual_statistics' })">
+									<b style="color:#26A2FF;font-size:27px;">{{ headDayBs.b ? headDayBs.b : '0' }}</b>
+									<br />
+									<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">今日B分</span>
+								</p>
 								<p style="text-align:center;cursor:pointer;margin: 0;" @click="$router.push({ path: '/individual_statistics' })">
 									<b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.b ? authorityManagerHeaders.b : '0' }}</b>
 									<br />
@@ -458,6 +463,7 @@ export default {
 
 			authorityManagerHeaderLoad: false, //管理员头部loading
 			authorityManagerHeaders: {}, //管理员头部 数据
+			headDayBs: {},//管理员头部 数据 天
 			creatorJurisdiction: this.$getIsCreator('creator'), //是否创始人
 
 			widths: '100%',
@@ -710,19 +716,15 @@ export default {
 		//管理员头部
 		authorityManagerHeader() {
 			this.authorityManagerHeaderLoad = true;
-			let params = {
-				employee_id: this.user_info.id,
-				month: this.$moment().format('YYYY-MM')
-			};
-			this.$axios('get', '/api/integral/statistics/', params, 'v2')
-				.then(res => {
-					if (res.data.code == 1) {
-						this.authorityManagerHeaders = res.data.data;
-					}
-				})
-				.finally(() => {
-					this.authorityManagerHeaderLoad = false;
-				});
+			let params1 = this.$axios('get', '/api/integral/statistics/', {employee_id: this.user_info.id, month: this.$moment().format('YYYY-MM')}, 'v2')
+			let params2 = this.$axios('get', '/api/integral/statistics/', {employee_id: this.user_info.id, day: this.$moment().format('YYYY-MM-DD')}, 'v2')
+			Promise.all([params1, params2]).then(res => {
+				this.authorityManagerHeaders = res[0].data.data;
+				this.headDayBs = res[1].data.data;
+			})
+			.finally(() => {
+				this.authorityManagerHeaderLoad = false;
+			});
 		},
 
 		//排行榜

+ 14 - 1
src/views/abPoint/apply_list.vue

@@ -172,7 +172,7 @@
 			</div>
 		</el-drawer>
 
-		<applicationIntegrationPopup title="申请积分" :visible.sync="dialogVisible" v-if="dialogVisible"></applicationIntegrationPopup>
+		<applicationIntegrationPopup title="申请积分" :ruleOnoff="ruleOnoff" :visible.sync="dialogVisible" v-if="dialogVisible"></applicationIntegrationPopup>
 	</div>
 </template>
 
@@ -184,6 +184,7 @@ import Steps from '@/components/Steps';
 export default {
 	data() {
 		return {
+			ruleOnoff: false,
 			tabs: 'complete',
 			dataList: [],
 			table_loading: false,
@@ -224,10 +225,22 @@ export default {
 		}
 	},
 	mounted() {
+		this.cheakAx()
 		this.userId = this.$getUserData().id;
 		this.get_list();
 	},
 	methods: {
+		cheakAx() {
+			this.$axios('get', '/api/integral/site/config')
+				.then(res => {
+					let data = res.data.data;
+					if(data.specified_rule_item){
+						this.ruleOnoff = data.specified_rule_item == 1 ? true : false;
+					}else{
+						this.ruleOnoff = false
+					}
+				})
+		},
 		// 撤销奖扣
 		revocation() {
 			var that = this;

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

@@ -218,7 +218,7 @@
 			</div>
 		</el-drawer>
 
-		<bonusPointsPopup :title="popuTitle" :visible.sync="popupVisible" :refresh.sync="refreshData" :integralType.sync="integralType">
+		<bonusPointsPopup :title="popuTitle" :visible.sync="popupVisible" :ruleOnoff="ruleOnoff" :refresh.sync="refreshData" :integralType.sync="integralType">
 			<div style="text-align: center;position: relative;top: -10px;" class="yellow">最多只能选择10人</div>
 		</bonusPointsPopup>
 	</div>
@@ -233,6 +233,7 @@ import Steps from '@/components/Steps';
 export default {
 	data() {
 		return {
+			ruleOnoff: false,
 			refreshData: '',
 			popuTitle: '奖扣A分',
 			popupVisible: false,
@@ -268,6 +269,7 @@ export default {
 		Steps
 	},
 	mounted() {
+		this.cheakAx()
 		this.userId=this.$getUserData().id
 		this.getData()
 	},
@@ -286,6 +288,17 @@ export default {
 		}
 	},
 	methods: {
+		cheakAx() {
+			this.$axios('get', '/api/integral/site/config')
+				.then(res => {
+					let data = res.data.data;
+					if(data.specified_rule_item){
+						this.ruleOnoff = data.specified_rule_item == 1 ? true : false;
+					}else{
+						this.ruleOnoff = false
+					}
+				})
+		},
 		// 撤销待审批
 		revocation2(){
 			var that=this;

+ 131 - 34
src/views/ranking/dept_rank.vue

@@ -6,32 +6,43 @@
 		<div class="all padding-20">
 			<el-form :inline="true">
 				<el-form-item label="时间">
-					<el-col :span="8">
-						<el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
-							<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
-						</el-select>
-					</el-col>
-					<el-col :span="16">
-						<el-date-picker
-							size="medium"
-							v-show="time_type == '2'"
-							v-model="export_from.year"
-							class="date-picker-width"
-							type="year"
-							value-format="yyyy"
-							placeholder="选择年份排名"
-						></el-date-picker>
-						<el-date-picker
-							size="medium"
-							v-show="time_type == '1' || time_type == '月份'"
-							v-model="export_from.month"
-							class="date-picker-width"
-							type="month"
-							value-format="yyyy-MM"
-							placeholder="选择月份排名"
-						></el-date-picker>
-						<season v-if="time_type == '3'" :isActive="true" class="date-picker-width" @confirm="export_quarter_confirm"></season>
-					</el-col>
+					<el-select size="medium" v-model="time_type" placeholder="请选择分类" style="width: 100px;">
+						<el-option v-for="item in time_types" :key="item.label" :label="item.label" :value="item.value"></el-option>
+					</el-select>
+				</el-form-item>
+				<el-form-item>
+					<el-date-picker
+						size="medium"
+						v-show="time_type == '2'"
+						v-model="export_from.year"
+						class="date-picker-width"
+						type="year"
+						value-format="yyyy"
+						placeholder="选择年份排名"
+					></el-date-picker>
+					<el-date-picker
+						size="medium"
+						v-show="time_type == '1' || time_type == '月份'"
+						v-model="export_from.month"
+						class="date-picker-width"
+						type="month"
+						value-format="yyyy-MM"
+						placeholder="选择月份排名"
+					></el-date-picker>
+					<season v-if="time_type == '3'" :isActive="true" class="date-picker-width" @confirm="export_quarter_confirm"></season>
+					
+					<el-date-picker
+						size="medium"
+						v-show="time_type == '4'"
+						class="date-picker-width"
+						v-model="export_from.time_range"
+						type="daterange"
+						value-format="timestamp"
+						range-separator="至"
+						start-placeholder="开始日期"
+						end-placeholder="结束日期"
+						:picker-options="instantPickerOptions"
+					></el-date-picker>
 				</el-form-item>
 				<el-form-item label="部门">
 					<el-cascader
@@ -140,11 +151,11 @@
 							v-model="Dc_Data.value1"
 							type="daterange"
 							size="medium"
-							value-format="yyyy-MM-dd"
-							format="yyyy-MM-dd"
+							value-format="timestamp"
 							range-separator="至"
 							start-placeholder="开始日期"
 							end-placeholder="结束日期"
+							:picker-options="instantPickerOptions"
 						></el-date-picker>
 					</el-form-item>
 
@@ -273,14 +284,16 @@ export default {
 			point_types: [],
 			point_type: [],
 			sort: false,
-			time_types: [{ label: '月份', value: '1' }, { label: '年份', value: '2' }, { label: '季度', value: '3' }],
+			time_types: [{ label: '月份', value: '1' }, { label: '年份', value: '2' }, { label: '季度', value: '3' }, { label: '自定义', value: '4' }],
 			props: { value: 'id', label: 'name', children: 'child', multiple: true },
 			props2: { value: 'id', label: 'name', children: 'child', checkStrictly: true},
 			time_type: '月份',
 			export_from: {
 				year: '',
 				month: moment().format('YYYY-MM'),
-				quarter: ''
+				quarter: '',
+				// time_range: [new Date(new Date().toLocaleDateString()).getTime(), new Date(new Date().toLocaleDateString()).getTime()]
+				time_range: []
 			},
 			employee_map: JSON.parse(localStorage.getItem('SET_EMPLOYEE_MAP')),
 			positions: [{ id: 0, age: 'all', name: '全部' }, { id: 1, age: 'manager', name: '管理者' }, { id: 2, age: 'employee', name: '员工' }],
@@ -297,7 +310,75 @@ export default {
 				dept_id: [{ required: true, message: '请选择部门', trigger: 'change' }],
 				position: [{ required: true, message: '请选择人员范围', trigger: 'change' }]
 			},
-			labelName: 'B分'
+			labelName: 'B分',
+			instantPickerOptions: {
+				shortcuts: [
+					{
+						text: '今天',
+						onClick(picker) {
+						const now = new Date(new Date().toLocaleDateString());
+						const start = now.getTime();
+						picker.$emit('pick', [start, start]);
+						}
+					},
+					{
+						text: '昨天',
+						onClick(picker) {
+						const now = new Date(new Date().toLocaleDateString());
+						const start = now.getTime() - 60 * 60 * 24 * 1000;
+						picker.$emit('pick', [start, start]);
+						}
+					},
+					{
+						text: '本周',
+						onClick(picker) {
+						const now = new Date(new Date().toLocaleDateString());
+						const start = now.getTime() - (now.getDay() - 1) * 24 * 60 * 60 * 1000;
+						const end = start + 7 * 24 * 60 * 60 * 1000 - 1000;
+						picker.$emit('pick', [start, end]);
+						}
+					},
+					{
+						text: '上周',
+						onClick(picker) {
+						const now = new Date(new Date().toLocaleDateString());
+						const start = now.getTime() - (now.getDay() + 6) * 24 * 60 * 60 * 1000;
+						const end = start + 7 * 24 * 60 * 60 * 1000 - 1000;
+						picker.$emit('pick', [start, end]);
+						}
+					},
+					{
+						text: '本月',
+						onClick(picker) {
+						const now = new Date();
+						const startDate = new Date(now.getFullYear(), now.getMonth(), 1);
+						const endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0);
+						picker.$emit('pick', [startDate.getTime(), endDate.getTime()]);
+						}
+					},
+					{
+						text: '上月',
+						onClick(picker) {
+						const now = new Date();
+						const startDate = new Date(now.getFullYear() - (now.getMonth() > 0 ? 0 : 1), (now.getMonth() + 11) % 12, 1);
+						const endDate = new Date(now.getFullYear(), now.getMonth(), 0);
+						picker.$emit('pick', [startDate.getTime(), endDate.getTime()]);
+						}
+					}
+				],
+				//限制只能选一年的范围
+                onPick: (obj) => {
+                    this.pickerMinDate = new Date(obj.minDate).getTime();
+                },
+				disabledDate : time => {
+                    if (this.pickerMinDate) {
+                        const day1 =  366 * 24 * 3600 * 1000
+                        let maxTime = this.pickerMinDate + day1
+                        let minTime = this.pickerMinDate - day1
+                        return time.getTime() > maxTime || time.getTime()<minTime
+                    }
+				}
+			},
 		};
 	},
 	watch: {
@@ -427,12 +508,15 @@ export default {
 					this.$set(this.formData, 'quarter', this.export_from.quarter);
 					this.formData.quarter ? '' : delete this.formData.quarter;
 					break;
+				case '4':
+					this.$set(this.formData, 'time_range', this.export_from.time_range);
+					this.formData.time_range ? '' : delete this.formData.time_range;
+					break;
 				default:
 					break;
 			}
 
 			let data = JSON.parse(JSON.stringify(this.formData));
-			console.log(data);
 			var employee_ids = data.exclusion.join(',');
 			data.exclusion = employee_ids;
 			data.page = 1;
@@ -460,15 +544,28 @@ export default {
 			if (this.time_type == 1) {
 				delete data.year;
 				delete data.quarter;
+				delete data.time_range;
 			} else if (this.time_type == 2) {
 				delete data.month;
 				delete data.quarter;
+				delete data.time_range;
 			} else if (this.time_type == '月份') {
 				delete data.year;
 				delete data.quarter;
+				delete data.time_range;
 			} else if (this.time_type == 3) {
 				delete data.month;
 				delete data.year;
+				delete data.time_range;
+			} else if (this.time_type == 4) {
+				delete data.month;
+				delete data.year;
+				delete data.quarter;
+				if(data.time_range && data.time_range.length > 0){
+					data.start_date = moment(data.time_range[0]).format('YYYY-MM-DD')
+					data.end_date = moment(data.time_range[1]).format('YYYY-MM-DD')
+				}
+				delete data.time_range
 			}
 			if (bool) {
 				data.month = moment().format('YYYY-MM');
@@ -556,8 +653,8 @@ export default {
 			// this.Dc_Data.rule_id = rule_id;
 			let data = '';
 			if (this.Dc_Data.value1) {
-				data += '&start_date=' + this.Dc_Data.value1[0];
-				data += '&end_date=' + this.Dc_Data.value1[1];
+				data += '&start_date=' + moment(this.Dc_Data.value1[0]).format('YYYY-MM-DD');
+				data += '&end_date=' + moment(this.Dc_Data.value1[1]).format('YYYY-MM-DD');
 			}
 			data += '&position=' + this.Dc_Data.DC_position;
 			this.Dc_Data.dept_name > 0 ? (data += '&dept_id=' + this.Dc_Data.dept_name) : (data += '&dept_id=0');

+ 15 - 9
src/views/ranking/individual_statistics.vue

@@ -68,6 +68,11 @@
 						<el-col :span="17" style="margin-top:34px;padding:0 0 10px 0;height:58px;" v-loading="authorityManagerHeaderLoad">
 							<el-col :gutter="50" style="margin:0;padding:0;" class="quick_button_box">
 								<div style="display:flex;justify-content: space-around;">
+									<p style="text-align:center;cursor:pointer;margin: 0;">
+										<b style="color:#26A2FF;font-size:27px;">{{ headDayBs.b ? headDayBs.b : '0' }}</b>
+										<br />
+										<span style="color:#606266;font-size:14px;padding-top:8px;display: inline-block;">今日B分</span>
+									</p>
 									<p style="text-align:center;cursor:pointer;margin: 0;">
 										<b style="color:#26A2FF;font-size:27px;">{{ authorityManagerHeaders.b ? authorityManagerHeaders.b : '0' }}</b>
 										<br />
@@ -280,6 +285,7 @@ export default {
 			personnel: {},
 			authorityManagerHeaderLoad: false, //人员loading
 			authorityManagerHeaders: {}, //人员数据
+			headDayBs: {}, //人员数据 -天
 			personnelMessage: false, //人员信息loading
 
 			//饼图
@@ -471,15 +477,15 @@ export default {
 				//年
 				params.year = this.formData.year;
 			}
-			this.$axios('get', '/api/integral/statistics/', params, 'v2')
-				.then(res => {
-					if (res.data.code == 1) {
-						this.authorityManagerHeaders = res.data.data;
-					}
-				})
-				.finally(() => {
-					this.authorityManagerHeaderLoad = false;
-				});
+			let params1 = this.$axios('get', '/api/integral/statistics/', params, 'v2')
+			let params2 = this.$axios('get', '/api/integral/statistics/', { employee_id: this.formData.employee_id, day: this.$moment().format('YYYY-MM-DD')}, 'v2')
+			Promise.all([params1, params2]).then(res => {
+				this.authorityManagerHeaders = res[0].data.data;
+				this.headDayBs = res[1].data.data;
+			})
+			.finally(() => {
+				this.authorityManagerHeaderLoad = false;
+			});
 		},
 
 		//饼图

+ 219 - 32
src/views/set/framework.vue

@@ -78,12 +78,12 @@
 							</template>
 						</el-table-column>
 						<el-table-column prop="accedence_time" label="入职时间"></el-table-column>
-						<el-table-column prop="id" label="员工标识" width="80">
+						<!-- <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">
+						</el-table-column> -->
+						<!-- <el-table-column label="是否参与排名" align="center">
 							<template slot-scope="scope">
 								<template v-if="scope.row.is_creator != 1">
 									<span
@@ -96,7 +96,7 @@
 								</template>
 								<span v-else class="fontColorB">不参与</span>
 							</template>
-						</el-table-column>
+						</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">
@@ -123,10 +123,16 @@
 								</div>
 							</template>
 						</el-table-column>
-						<el-table-column label="管理上级" align="center" width="80">
+						<!-- <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 type="primary" @click="moreMessage(scope.row.id)" :underline="false">更多信息</el-link>
+							</template>
 						</el-table-column>
 						<template slot="empty">
 							<noData></noData>
@@ -148,6 +154,67 @@
 			<!-- 隐藏文本,用于复制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:50px;">
+				<!-- <el-table-column prop="id" label="员工标识" width="80">
+					<template slot-scope="scope">
+						<el-button size="mini" type="primary">复制</el-button>
+					</template>
+				</el-table-column> -->
+				
+			<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-button size="mini" type="primary" @click="copyId(messageMore.id)">复制</el-button> -->
+				</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"
+					value-format="yyyy-MM-dd"
+					placeholder="选择日期"
+					disabled
+					></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>
+					<!-- <div class="rankingcla">参与排名在排名中显示此人</div> -->
+				</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 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">
@@ -197,6 +264,21 @@
 				<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"
+				: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>
 	</div>
 </template>
 
@@ -264,6 +346,16 @@ export default {
 			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: [] },
 		};
 	},
 	components: {
@@ -313,6 +405,22 @@ export default {
 				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[0].id
+			}
+			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
@@ -322,41 +430,118 @@ export default {
 			this.scope_loading = true
 			this.$refs.Employee2.confirm();
 		},
-		setSuperior(row){
-			console.log(row)
-			if(this.clickone){
-				return false
+		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 = {}
+							}
+							this.propList = this.nameStrList(employeeD.superior_list, '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
+			})
+			// this.$axios('get', '/api/employee/info', { id: isId })
+			// .then(res => {
+			// 	if (res.data.code == 1) {
+			// 		let data = res.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]
+			// 				console.log(this.dirSupervisor)
+			// 			}
+			// 			this.propList = this.nameStrList(employeeD.superior_list, 'name');
+			// 		}
+			// 		this.messageMore = data
+			// 	}
+			// }).finally(()=>{
+			// 	this.show_loading = false
+			// })
+		},
+		setSuperior(row){
 			this.mangeId = row.id
 			let createData = {}
 			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
-			this.clickone = true
-			this.$axios('get', '/api/employee/info', { id: row.id })
-			.then(res => {
-				if (res.data.code == 1) {
-					let supList = res.data.data.employee_detail.superior_list
-					if(createData[0]){
-						supList.some(item =>{
-							if(item.id == createData[0].id){
-								item.is_creator = true
-								return true
-							}
-						})
-					}
-					this.selected_manage.employee = supList
-					this.manageScope_show = true
-				}
-			})
-			.finally(() => {
-				this.clickone = false
-			});
+			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
+		},
+		dirSuperior(row){
+			this.dirSupList = row.employee_detail.superior_list
+			if(this.dirSupervisor.name){
+				let arr = []
+				arr.push(this.dirSupervisor)
+				this.selected_dirSup.employee = arr
+			}
+			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 = {
@@ -376,7 +561,6 @@ export default {
 					htmls.forEach(item => {
 						str += `<div>${item.姓名}:${item.line_err}</div>`;
 					});
-					console.log(str);
 					this.$notify.error({
 						title: '导入错误',
 						dangerouslyUseHTMLString: true,
@@ -445,7 +629,6 @@ export default {
 		},
 		copyToClipboard() {
 			var Url2=document.getElementById("biao");
-			console.log(Url2)
 			Url2.select(); // 选择对象
 			document.execCommand("Copy"); // 执行浏览器复制命令
 			this.$message.success('已复制');
@@ -493,7 +676,7 @@ export default {
 				.then(res => {
 					if (res.data.code == 1) {
 						this.$message.success({ message: res.data.msg });
-						this.getEmployee();
+						this.moreMessage();
 					}
 				})
 				.finally(() => {
@@ -816,4 +999,8 @@ export default {
 	line-height: 14px;
 	text-align: center;
 }
+.rankingcla{
+	font-size: 13px;
+	color: #959595;
+}
 </style>

+ 45 - 3
src/views/set/rule.vue

@@ -723,7 +723,25 @@ export default {
 				item_ids:JSON.stringify([this.rules_detail_form.id])
 			};
 			this.delRule_loading = true;
-			self.$confirm('此操作将永久删除该选项, 是否继续?', '提示').then(
+        	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 => {
@@ -782,10 +800,29 @@ export default {
 				this.$message.error('请选择积分细则');
 				return false;
 			}
-			this.$confirm('此操作将永久删除该选项, 是否继续?', '提示', {
+			// this.$confirm('此操作将永久删除该选项, 是否继续?', '提示', {
+			// 	confirmButtonText: '确定',
+			// 	cancelButtonText: '取消',
+			// 	type: 'warning'
+			// })
+        	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: '取消',
-				type: 'warning'
+				showCancelButton: true,
+				customClass: 'winClass',//弹窗样式
 			}).then(() => {
 				let data = {
 					item_ids: JSON.stringify(this.del_item_id)
@@ -1126,3 +1163,8 @@ $red: #f56c6c;
 	height:38px;
 }
 </style>
+<style lang="scss">
+	.winClass{
+		width: 500px
+	}
+</style>

+ 18 - 1
src/views/set/systemLayout.vue

@@ -10,13 +10,23 @@
 					</p>
 					<div style="margin-top:5px;" class="fontColorF"><span>指定规则的审批或奖扣分,均可直接通过</span></div>
 				</div>
+				<div class="integralApproval">
+					<b>
+						提交积分时,必须选择积分规则
+						<el-switch style="margin-left:30px;" v-model="ruleOnoff"></el-switch>
+					</b>
+					<div style="margin-top:5px;" class="fontColorF">
+						<div>开启后,申请积分或奖扣积分时,必须选择积分规则提交;</div>
+						<div>此配置不影响积分审批和任务发布</div>
+					</div>
+				</div>
 				<div class="integralApproval">
 					<b>
 						指定规则的审批或奖扣分免审
 						<el-switch style="margin-left:30px;" v-model="examine"></el-switch>
 					</b>
 					<div style="margin-top:5px;" class="fontColorF">
-						<div>开开启后,按照系统已有的积分规则制度提交的审批或者奖扣可直接通过;</div>
+						<div>开启后,按照系统已有的积分规则制度提交的审批或者奖扣可直接通过;</div>
 						<div>即使审批人/录分人的权限分不足,也能审批通过</div>
 					</div>
 				</div>
@@ -130,6 +140,7 @@ export default {
 			loading: false,
 			activeName: 'first',
 			examine: false,
+			ruleOnoff: false,
 
 			checked: false, //积分日报展示A分数据
 			individualPoints: false, //个人积分日报
@@ -199,6 +210,7 @@ export default {
 		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;
 				if (this.isApB) {
@@ -238,6 +250,11 @@ export default {
 				.then(res => {
 					let data = 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.examine = data.rule_limit_check == 0 ? true : false;
 						this.isApB = data.a2b == 0 ? false : true;
 						this.task_review = data.task_review == 1 ? true : false;