347617796@qq.com 3 năm trước cách đây
mục cha
commit
f156f65c30

+ 2 - 2
.env.production

@@ -1,6 +1,6 @@
 NODE_ENV="production"
-VUE_APP_BASE_API="https://ding.insys.g107.com/"
+VUE_APP_BASE_API="https://app107002.eapps.dingtalkcloud.com/"
 VUE_APP_APPID="55493"
-VUE_APP_WEBSCOKET="ding.insys.g107.com"
+VUE_APP_WEBSCOKET="app107002.eapps.dingtalkcloud.com"
 
 

+ 2 - 4
src/api/auth.js

@@ -85,18 +85,16 @@ export function setDeptTree(data) {
 //返回用户Code
 export function returnCode(data) {
 	let list=getEmployeeList();
-	if(!list||!list[data]){
+	if(!list||!data){
 		return data
 	}
-	if(!data){
-		return ''
-	}
 	if(Array.isArray(data)){
 		let result =data.map(e=>{
 			if(list[e]){
 				return list[e].code
 			}
 		})
+		console.log(JSON.stringify(result))
 		return JSON.stringify(result)
 	}else{
 		data=data.toString()

+ 7 - 7
src/components/evaluate/BasicMessage.vue

@@ -4,14 +4,14 @@
     <div class="demo-ruleForm">
       <div class="title">分组信息</div>
       <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="120px">
-        <el-form-item label="考表名称:" prop="name">
+        <el-form-item label="考表名称:" prop="name">
           <el-popover placement="right" width="400" trigger="hover" v-model="visible">
             <div class="fontColorB">
-              考表用来做什么?
+              考表用来做什么?
               <br />
-              相同考核周期、考核内容的员工可以放在同一考表,支持跨部门同岗位统一考核
+              相同考核周期、考核内容的员工可以放在同一考表,支持跨部门同岗位统一考核
               <br />
-              如:20个销售员可以放在同个考表里面
+              如:20个销售员可以放在同个考表里面
             </div>
             <el-input type="textarea" v-model="ruleForm.name" slot="reference" placeholder="请输入名称" class="width-250 scroll-bar"
             :autosize="{ minRows: 2, maxRows: 6}"
@@ -24,7 +24,7 @@
             <el-radio :label="item.value" v-for="(item,index) in $getCycleType()" :key="item.value" v-show="item.value!=0">{{item.label}}</el-radio>
           </el-radio-group>
         </el-form-item>
-        <el-form-item label="考表管理员">
+        <el-form-item label="考表管理员">
           <div class="border flex-box-ce">
             <div class="flex-1" v-if="Administrator.length == 0">请选择管理员</div>
             <div v-else style="width: 180px;" class="font-flex-word">
@@ -60,7 +60,7 @@
       <template slot="main">
        <ul>
           <li v-for="(item, index) in gzList" :key="index" class="li">
-              <el-popover v-if="item.disabled" class="without-outline" placement="bottom"  width="850" trigger="hover" content="该管理员具有全部考表的权限,无法取消勾选,如须调整可联系绩效系统主管理员前往“权限设置”处进行调整。">
+              <el-popover v-if="item.disabled" class="without-outline" placement="bottom"  width="850" trigger="hover" content="该管理员具有全部考表的权限,无法取消勾选,如须调整可联系绩效系统主管理员前往“权限设置”处进行调整。">
                 <el-checkbox slot="reference" v-model="item.check" class="flex-box-ce" :disabled="item.disabled">
                   <div class="flex-box-ce">
                     <userImage :user_name="item.name" :img_url="item.img_url"></userImage>
@@ -181,7 +181,7 @@ export default {
               }else{
                 item.disabled=false;
                 item.check=false;
-                if(this.data.id){//子管理的特定管理范围下是否包含当前考
+                if(this.data.id){//子管理的特定管理范围下是否包含当前考
                   if(item.group_ids.indexOf(this.data.id)>=0){
                     item.check=true;
                     Administrator.push(item);

+ 1 - 1
src/components/flow/Examine.vue

@@ -12,7 +12,7 @@
             <span v-if="item.employeeList.length > 0">{{ item.employeeList[0].name }}等({{ item.employeeList.length }})人</span>
             <span v-else>未指定人员</span>
           </div>
-          <div class="fontColorB font-flex-word" v-show="item.type == 3" style="font-size: 13px;width: 120px;">被考核人</div>
+          <div class="fontColorB font-flex-word" v-show="item.type == 3" style="width: 120px;">被考核人</div>
           <i class="el-icon-error" style="font-size: 18px;color: #C0C4CC;" @click="deleteFlow(index)"></i>
         </div>
         <div class="flow-index">

+ 101 - 14
src/components/public/ActionPlan.vue

@@ -80,7 +80,19 @@
                 placeholder="选填,请输入备注"
                 v-model="planData.remark"
               ></el-input>
-              <div class="flex-box">
+			  <div style="margin-bottom: 20px;" class="flex-box-ce fontColorF">
+			  	<el-button class="primaryBtn" icon="el-icon-paperclip" plain size="small" @click="uploadOss">附件</el-button>
+			  	<div style="padding-left:10px">附件存放在企业钉盘,请确保钉盘有足够空间</div>
+			  </div>
+			  <div class="">
+			  	<div v-for="(item, index) in planData.append" style="cursor: pointer;" :key="index" class="blue">
+			  		<span @click="openImg(item)">{{ item.fileName }}</span>
+			  		<span class="red" style="padding-left:10px" @click="deleteFile(index)">删除</span>
+			  	</div>
+			  </div>
+			  
+			  
+<!--              <div class="flex-box">
                 <uploadOss
                   :headers="Xtoken"
                   class="avatar-uploader"
@@ -94,9 +106,9 @@
                   :limit="3"
                   :multiple="true"
                 >
-                  <el-button class="primaryBtn" icon="el-icon-picture-outline" plain size="small">图片</el-button>
+                  <el-button class="primaryBtn" icon="el-icon-picture-outline" plain size="small">图片</el-button> -->
                   <!-- (最多选择3张) -->
-                </uploadOss>
+<!--                </uploadOss>
                 <div style="width: 30px;"></div>
                 <uploadOss
                   class="avatar-uploader"
@@ -112,10 +124,10 @@
                   :on-success="handleSuccess"
                   :before-upload="beforeFilesUpload"
                 >
-                  <el-button class="primaryBtn" icon="el-icon-paperclip" plain size="small">附件</el-button>
+                  <el-button class="primaryBtn" icon="el-icon-paperclip" plain size="small">附件</el-button> -->
                   <!-- (仅支持上传xlsx,xls,doc,docx,pdf,txt,最多一份附件) -->
-                </uploadOss>
-              </div>
+<!--                </uploadOss>
+              </div> -->
             </div>
           </div>
           <div v-else style="background-color: #fff;padding-top: 10px;">
@@ -202,7 +214,7 @@ export default {
         title: '',
         employee_id: '',
         images: [],
-        append: '', //附件
+        append: [], //附件
         appendName: '' //附件名称
       },
       planData2: {}, //备用数据,当不修改时使用
@@ -237,6 +249,81 @@ export default {
     }
   },
   methods: {
+	deleteFile(index) {
+		if (this.planData.append.length == 0) {
+			this.planData.append = [];
+			return false;
+		}
+		this.planData.append.splice(index, 1);
+		this.isFill = true;
+	},
+	openImg(item) {
+		let corpId = this.$getCache('corpId');
+		let loading = this.$loading({
+			lock: true,
+			text: 'Loading',
+			spinner: 'el-icon-loading'
+			// background: 'rgba(0, 0, 0, 0.7)'
+		});
+		if (item) {
+			this.$axios('get', 'api/drive/grant',{file_id:item.fileId}).then(res => {
+				this.$dd.ready(() => {
+					this.$dd.biz.cspace.preview({
+						corpId: corpId,
+						spaceId: item.spaceId,
+						fileId: item.fileId,
+						fileName: item.fileName,
+						fileSize: item.fileSize,
+						fileType: item.fileType,
+						onSuccess: function(res) {
+							console.log(JSON.stringify(res))
+						},
+						onFail: function(err) {
+							console.log(JSON.stringify(err))
+						}
+					});
+				});
+			}).finally(()=>{
+				loading.close();
+			});
+		}
+	},
+	uploadOss() {
+		let that = this;
+		let corpId = this.$getCache('corpId');
+		this.$axios('get', 'api/drive/info').then(res => {
+			let spaceId = res.data.data.space_id.toString();
+			this.$dd.ready(() => {
+				this.$dd.biz.util.uploadAttachment({
+					image: {
+						multiple: true,
+						compress: false,
+						max: 5,
+						spaceId: spaceId
+					},
+					space: {
+						corpId: corpId,
+						spaceId: spaceId,
+						max: 5
+					},
+					file: {
+						spaceId: spaceId,
+						max: 5
+					},
+					types: ['photo', 'file', 'space'], //PC端支持["photo","file","space"]
+					onSuccess: function(res) {
+						console.log(JSON.stringify(res))
+						let data = res.data;
+						that.planData.append.push(...data);
+						that.isFill = true;
+					},
+					onFail: function(err) {
+						console.log(JSON.stringify(err))
+					}
+				});
+			});
+		});
+	},  
     // 图片上传
     beforeUpload(file) {
       const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
@@ -347,7 +434,7 @@ export default {
         title: '执行计划' + (len + 1),
         remark: '',
         images: [],
-        append: '', //附件
+        append: [], //附件
         appendName: '' //附件名称
       };
       this.indexItem.schedule.unshift(obj);
@@ -381,9 +468,9 @@ export default {
         index_id: this.indexItem.id, //指标id
         title: this.planData.title, //标题
         remark: this.planData.remark, //内容
-        images: JSON.stringify(this.planData.images),
-        append: this.planData.append,
-        append_name: this.planData.append_name
+		// images: JSON.stringify(this.planData.images),
+		append: JSON.stringify(this.planData.append)
+		// append_name: this.planData.append_name
       };
       this.$axios('post', '/api/per/package/action', data).then(res => {
         this.$message.success('填写成功');
@@ -480,7 +567,7 @@ export default {
       if (index != undefined) {
         this.indexItem = this.actionPlanList[index].index[index2];
         this.planData = this.indexItem.schedule[0];
-        this.setFlie();
+        // this.setFlie();
         if (this.planData) {
           this.planData2 = JSON.parse(JSON.stringify(this.planData));
         }
@@ -490,7 +577,7 @@ export default {
           this.indexItem = this.actionPlanList[this.planIndex[0]].index[this.planIndex[1]];
           this.planData = this.indexItem.schedule[0];
           this.selectItemIndex = this.planIndex[0];
-          this.setFlie();
+          // this.setFlie();
           if (this.planData) {
             this.planData2 = JSON.parse(JSON.stringify(this.planData));
           }
@@ -498,7 +585,7 @@ export default {
         } else {
           this.indexItem = this.actionPlanList[0].index[0];
           this.planData = this.indexItem.schedule[0];
-          this.setFlie();
+          // this.setFlie();
           if (this.planData) {
             this.planData2 = JSON.parse(JSON.stringify(this.planData));
           }

+ 150 - 22
src/components/public/TrackManagement.vue

@@ -84,7 +84,17 @@
 								placeholder="选填,请输入备注"
 								v-model="planData.remark"
 							></el-input>
-							<div style="margin-bottom: 20px;">
+							<div style="margin-bottom: 20px;" class="flex-box-ce fontColorF">
+								<el-button class="primaryBtn" icon="el-icon-paperclip" plain size="small" @click="uploadOss">附件</el-button>
+								<div style="padding-left:10px">附件存放在企业钉盘,请确保钉盘有足够空间</div>
+							</div>
+							<div class="">
+								<div v-for="(item, index) in planData.append" style="cursor: pointer;" :key="index" class="blue">
+									<span @click="openImg(item)">{{ item.fileName }}</span>
+									<span class="red" style="padding-left:10px" @click="deleteFile(index)">删除</span>
+								</div>
+							</div>
+							<!-- 							<div style="margin-bottom: 20px;">
 								<uploadOss
 									:headers="Xtoken"
 									class="avatar-uploader"
@@ -99,7 +109,6 @@
 									:multiple="true"
 								>
 									<el-button class="primaryBtn" icon="el-icon-picture-outline" plain size="small">图片</el-button>
-									<!-- (最多选择3张) -->
 								</uploadOss>
 							</div>
 							<div>
@@ -118,9 +127,8 @@
 									:before-upload="beforeFilesUpload"
 								>
 									<el-button class="primaryBtn" icon="el-icon-paperclip" plain size="small">附件</el-button>
-									<!-- (仅支持上传xlsx,xls,doc,docx,pdf,txt,最多一份附件) -->
 								</uploadOss>
-							</div>
+							</div> -->
 						</div>
 					</div>
 					<div v-else style="background-color: #fff;">
@@ -156,7 +164,9 @@
 <script>
 import uploadOss from '@/components/public/upload';
 export default {
-	components: { uploadOss },
+	components: {
+		uploadOss
+	},
 	name: 'TrackManagement',
 	props: {
 		id: {
@@ -216,7 +226,7 @@ export default {
 				title: '',
 				employee_id: '',
 				images: [],
-				append: '', //附件
+				append: [], //附件
 				appendName: '' //附件名称
 			},
 			planData2: {}, //备用数据,当不修改时使用
@@ -230,7 +240,9 @@ export default {
 			isOperationTwo: true, //管理记录人是否能操作指定指标
 
 			// 上传图标与附件
-			Xtoken: { 'X-Token': this.$getToken() },
+			Xtoken: {
+				'X-Token': this.$getToken()
+			},
 			img_fileList: [], // 图片附件
 			file_fileList: [], //文件附件
 			imgs: [],
@@ -238,7 +250,8 @@ export default {
 			isShowImg: false,
 			imgUrl: '',
 
-			userData: this.$getUserData()
+			userData: this.$getUserData(),
+			spaceId: '' //上传到盯盘的spaceId
 		};
 	},
 	watch: {
@@ -281,7 +294,6 @@ export default {
 						isFiltration = false;
 						this.isOperation = true;
 					}
-					
 
 					if (isFiltration) {
 						//当只是管理记录人员时设置指定数据
@@ -312,9 +324,83 @@ export default {
 		}
 	},
 	methods: {
+		openImg(item) {
+			let corpId = this.$getCache('corpId');
+			let loading = this.$loading({
+				lock: true,
+				text: 'Loading',
+				spinner: 'el-icon-loading'
+				// background: 'rgba(0, 0, 0, 0.7)'
+			});
+			if (item) {
+				this.$axios('get', 'api/drive/grant',{file_id:item.fileId}).then(res => {
+					this.$dd.ready(() => {
+						this.$dd.biz.cspace.preview({
+							corpId: corpId,
+							spaceId: item.spaceId,
+							fileId: item.fileId,
+							fileName: item.fileName,
+							fileSize: item.fileSize,
+							fileType: item.fileType,
+							onSuccess: function(res) {
+								console.log(JSON.stringify(res))
+							},
+							onFail: function(err) {
+								console.log(JSON.stringify(err))
+							}
+						});
+					});
+				}).finally(()=>{
+					loading.close();
+				});
+			}
+		},
+		uploadOss() {
+			let that = this;
+			let corpId = this.$getCache('corpId');
+			this.$axios('get', 'api/drive/info').then(res => {
+				let spaceId = res.data.data.space_id.toString();
+				console.log(spaceId,typeof(spaceId))
+				this.$dd.ready(() => {
+					this.$dd.biz.util.uploadAttachment({
+						image: {
+							multiple: true,
+							compress: false,
+							max: 5,
+							spaceId: spaceId
+						},
+						space: {
+							corpId: corpId,
+							spaceId: spaceId,
+							max: 5
+						},
+						file: {
+							spaceId: spaceId,
+							max: 5
+						},
+						compress: true,
+						multiple: false,
+						max: 5,
+						spaceId: spaceId,
+						types: ['photo', 'file', 'space'], //PC端支持["photo","file","space"]
+						onSuccess: function(res) {
+							console.log(JSON.stringify(res))
+							let data = res.data;
+							that.planData.append.push(...data);
+							that.isFill = true;
+						},
+						onFail: function(err) {
+							console.log(JSON.stringify(err))
+						}
+					});
+				});
+			});
+		},
 		//获取上级列表
 		async superiorList(id) {
-			return this.$axios('get', '/api/per/user/manager_list', { id_code:this.$returnCode(id)});
+			return this.$axios('get', '/api/per/user/manager_list', {
+				id_code: this.$returnCode(id)
+			});
 		},
 		// 图片上传
 		beforeUpload(file) {
@@ -342,7 +428,10 @@ export default {
 			this.planData.images = [];
 			let images = [];
 			fileList.forEach((element, index) => {
-				images.push({ url: element.url, name: element.name });
+				images.push({
+					url: element.url,
+					name: element.name
+				});
 			});
 			this.planData.images = images;
 			this.isFill = true;
@@ -352,7 +441,10 @@ export default {
 			this.planData.images = [];
 			let images = [];
 			fileList.forEach((element, index) => {
-				images.push({ url: element.url, name: element.name });
+				images.push({
+					url: element.url,
+					name: element.name
+				});
 			});
 			this.planData.images = images;
 			this.isFill = true;
@@ -430,7 +522,7 @@ export default {
 				title: '',
 				remark: '',
 				images: [],
-				append: '', //附件
+				append: [], //附件
 				appendName: '' //附件名称
 			};
 			this.indexItem.mamage_record.unshift(obj);
@@ -448,9 +540,16 @@ export default {
 					this.isFill = true;
 				});
 			}
-			// console.log( this.activePlanIndex)
 			this.isFill2 = true;
 		},
+		deleteFile(index) {
+			if (this.planData.append.length == 0) {
+				this.planData.append = [];
+				return false;
+			}
+			this.planData.append.splice(index, 1);
+			this.isFill = true;
+		},
 		// 提交执行计划
 		saveActionPlan(f = function() {}) {
 			if (!this.planData.title) {
@@ -471,9 +570,9 @@ export default {
 				index_id: this.indexItem.id, //指标id
 				title: this.planData.title, //标题
 				remark: this.planData.remark, //内容
-				images: JSON.stringify(this.planData.images),
-				append: this.planData.append,
-				append_name: this.planData.append_name
+				// images: JSON.stringify(this.planData.images),
+				append: JSON.stringify(this.planData.append)
+				// append_name: this.planData.append_name
 			};
 			// return false;
 			this.$axios('post', '/api/per/package/track', data).then(res => {
@@ -573,7 +672,7 @@ export default {
 			if (index != undefined) {
 				this.indexItem = this.actionPlanList[index].index[index2];
 				this.planData = this.indexItem.mamage_record[0];
-				this.setFlie();
+				// this.setFlie();
 				this.isOperationTwo = this.indexItem.isOperation;
 				if (this.planData) {
 					this.planData2 = JSON.parse(JSON.stringify(this.planData));
@@ -583,7 +682,7 @@ export default {
 					//如果有指定下标展示
 					this.indexItem = this.actionPlanList[this.planIndex[0]].index[this.planIndex[1]];
 					this.planData = this.indexItem.mamage_record[0];
-					this.setFlie();
+					// this.setFlie();
 					this.selectItemIndex = this.planIndex[0];
 					this.isOperationTwo = this.indexItem.isOperation;
 					if (this.planData) {
@@ -593,7 +692,7 @@ export default {
 				} else {
 					this.indexItem = this.actionPlanList[0].index[0];
 					this.planData = this.indexItem.mamage_record[0];
-					this.setFlie();
+					// this.setFlie();
 					this.isOperationTwo = this.indexItem.isOperation;
 					if (this.planData) {
 						this.planData2 = JSON.parse(JSON.stringify(this.planData));
@@ -607,7 +706,12 @@ export default {
 			if (this.planData) {
 				this.img_fileList = this.planData.images;
 				if (this.planData.append) {
-					this.file_fileList = [{ name: this.planData.append_name, url: this.planData.append }];
+					this.file_fileList = [
+						{
+							name: this.planData.append_name,
+							url: this.planData.append
+						}
+					];
 				}
 			}
 		},
@@ -644,55 +748,67 @@ export default {
 <style scoped="scoped">
 ::v-deep .el-icon-picture-outline {
 }
+
 .all-derawer ::v-deep.el-drawer {
 	height: 90% !important;
 	border-radius: 10px 10px 0 0;
 	background-color: #f5f7fa;
 	min-width: 1100px !important;
 }
+
 .all-derawer ::v-deep.el-drawer__header {
 	background-color: #f5f7fa;
 	padding: 12px 20px;
 	margin-bottom: 0px;
 	font-size: 16px;
 }
+
 ::v-deep .el-upload-list__item-name {
 	max-width: 250px;
 }
+
 ::v-deep :focus {
 	outline: 0;
 }
+
 .btns {
 	position: absolute;
 	right: 20px;
 	top: 16px;
 	z-index: 999;
 }
+
 .plan-right-name {
 	color: #222;
 }
+
 .plan-right {
 	padding: 20px;
 	position: relative;
 	background-color: #f5f7fa;
 	min-height: 600px;
 }
+
 .plan-right-date {
 	text-align: center;
 	position: relative;
 	margin-bottom: 30px;
 }
+
 .plan-textarea ::v-deep textarea {
 	background-color: #f5f7fa;
 	border: none;
 }
+
 .plan-right-title {
 	border-bottom: 1px solid #f1f1f1;
 }
+
 .plan-right-title ::v-deep textarea {
 	background-color: #f5f7fa;
 	border: none;
 }
+
 .drawer-left {
 	background-color: #fff;
 	padding: 0 15px;
@@ -701,6 +817,7 @@ export default {
 	overflow: auto;
 	padding-bottom: 60px;
 }
+
 .drawer-left-title {
 	padding: 16px 0;
 	font-weight: 600;
@@ -708,28 +825,35 @@ export default {
 	color: #222;
 	border-bottom: 1px solid #f1f1f1;
 }
+
 .drawer-item {
 	padding: 16px 0;
 	cursor: pointer;
 }
+
 .drawer-item:hover {
 	background-color: #f5f7fa;
 }
+
 .drawer-left .active-drawer-item {
 	background-color: #f5f7fa;
 	border-right: 2px solid #409eff;
 }
+
 .plan-left-content:hover {
 	background-color: #f5f7fa;
 }
+
 .plan-left .active-drawer-item {
 	background-color: #f5f7fa;
 }
+
 .drawer-right-header {
 	background-color: #fff;
 	border-bottom: 1px solid #f1f1f1;
 	padding: 20px;
 }
+
 .drawer-right-main {
 	padding: 0px 20px;
 	height: 50px;
@@ -737,16 +861,19 @@ export default {
 	background-color: #fff;
 	border-bottom: 1px solid #f1f1f1;
 }
+
 .plan-title {
 	font-size: 14px;
 	color: #666666;
 	margin-top: 5px;
 }
+
 .plan-left {
 	background-color: #fff;
 	border-right: 1px solid #f1f1f1;
 	overflow: auto;
 }
+
 .remark {
 	height: 100px;
 	display: -webkit-box;
@@ -754,11 +881,12 @@ export default {
 	-webkit-line-clamp: 6;
 	overflow: hidden;
 }
+
 .plan-left-content {
 	border-bottom: 1px solid #f1f1f1;
 	padding: 10px 16px;
 	cursor: pointer;
 	width: 100%;
-	  box-sizing: border-box;
+	box-sizing: border-box;
 }
 </style>

+ 7 - 3
src/components/set/EvaluateSet.vue

@@ -26,9 +26,9 @@
           <el-table-column prop="address" label="操作">
             <template slot-scope="scope">
               <div class="is">
-                <el-link type="primary" @click="compile(scope.row,'1')">人员分组</el-link>
-                <el-link type="primary" style="margin: 0 10px;" @click="compile(scope.row,'2')">考核模板</el-link>
-                <el-link type="primary" @click="compile(scope.row,'3')">具体流程</el-link>
+                <span class="blue" @click="compile(scope.row,'1')">人员分组</span>
+                <span class="blue" style="margin: 0 10px;" @click="compile(scope.row,'2')">考核模板</span>
+                <span class="blue" @click="compile(scope.row,'3')">具体流程</span>
 
               <!-- <el-tooltip effect="dark" content="编辑" placement="top"><i class="el-icon-edit yellow" @click="compile(scope.row)"></i></el-tooltip>
                 <el-tooltip effect="dark" content="预览流程" placement="top"><i class="el-icon-tickets blue" @click="preview(scope.row)"></i></el-tooltip>
@@ -154,6 +154,7 @@ export default {
     this.getAllList();
   },
   methods: {
+	  
     openUsers() {
       this.getNoEmployee(() => {
         this.isNoUser = true;
@@ -261,6 +262,9 @@ export default {
 };
 </script>
 <style scoped="scoped">
+.is .blue{
+	cursor: pointer;
+}	
 .el-dropdown-links {
   font-size: 20px;
   cursor: pointer;

+ 16 - 27
src/index.vue

@@ -2,7 +2,7 @@
 	<el-container class="container-all">
 		<el-header class="el-header flex-box-ce">
 			<div class="logo-box flex-box flex-center-center" @click="openHome()">
-				<img src="@/assets/image/logo.png" class="logo" />
+				<!-- <img src="@/assets/image/logo.png" class="logo" /> -->
 				<div>功道云</div>
 			</div>
 			<div class="flex-1 flex-box-ce" style="padding: 0 20px;">
@@ -18,7 +18,7 @@
 		</el-header>
 
 		<el-container>
-			<el-aside v-loading="isLoading">
+			<el-aside>
 				<el-menu :default-active="activeIndex" class="el-menu-vertical-demo" :router="true" @select="activeRouter" :unique-opened="true">
 					<template v-for="(item, index) in routers">
 						<el-menu-item :index="returnIndex(index, index)" :route="item.path" :ref="item.path" :key="index">
@@ -76,15 +76,10 @@ export default {
 			getRole: this.$getRole(1),
 			keepAliveView: ['home', 'management', 'score', 'assessManagement', 'assessDetails', 'statement', 'set'], //需要缓存的组件名称列表,用逗号分隔
 			keepAliveView2: ['home', 'management', 'score', 'assessManagement', 'assessDetails', 'statement', 'set'], //需要缓存的组件名称列表,用逗号分隔
-			isDepartment: false ,//是否部门管理员
-
-			isLoading:false,
-			code:'123'
 		};
 	},
 	watch: {
 		$route(to, form) {
-			console.log(to.name,form.name)
 			// 缓存页面,达到缓存页面条件的效果
 			if (to.name == 'home' && form.name == 'assessManagement') {
 				//首页
@@ -142,6 +137,7 @@ export default {
 	},
 	methods: {
 		DDconfig(){
+			console.log("开始鉴权")
 			let str=location.href
 			str=str.split('#')[0]
 			var that =this;//为解决this作用域问题,将其在函数内赋值给that变量
@@ -149,8 +145,6 @@ export default {
 				url:str
 			}).then((res) => {
 				let data=res.data.data
-				console.log("进入鉴权"+data.timestamp);
-				console.log(JSON.stringify(data));
 				//1、鉴权
 				this.$dd.config({
 					agentId:data.agentId,
@@ -159,6 +153,8 @@ export default {
 					nonceStr: data.nonceStr, // 必填,生成签名的随机串
 					signature: data.signature, // 必填,签名
 					jsApiList : [
+						'biz.cspace.preview',
+						'biz.util.uploadAttachment',
 						'runtime.info',
 						'biz.ding.create',
 						'biz.contact.choose',
@@ -169,27 +165,24 @@ export default {
 						'biz.util.openLink',
 					] // 必填,需要使用的jsapi列表,注意:不要带dd。
 				});
+				
+				if(this.$getCache('url')){
+						let url=this.$getCache('url')
+						this.$removeCache('url')
+						setTimeout(() => {
+							this.$router.push({ path: '/' + decodeURIComponent(url) });
+						}, 200);
+				}
 				this.$dd.error(function(err) { //验证失败  
 					console.log('dd error: ' + JSON.stringify(err));
 				})
-				this.$router.replace({ path: '/index' });
 			})	
 		},
-		getEmployeeList(fun) {
+		getEmployeeList() {
 			// 部门列表
 			this.$axios('get', '/api/per/user/department').then(res => {
 				var list = res.data.data.dept_tree;
 				this.$setDeptTree(res.data.data)
-				list.forEach(item => {
-					if (item.manager_userid_list.length > 0) {
-						item.manager_userid_list.forEach(e => {
-							if (this.userInfo.user_id == e) {
-								this.isDepartment = true;
-							}
-						});
-					}
-				});
-				// fun();
 			});
 			//获取绩效人员列表(包含已被删除的人员)
 			this.$axios('get', '/api/per/user/employee_list',{page_size:0,page:0}).then(res => {
@@ -208,11 +201,7 @@ export default {
 		},
 		login() {
 			this.setRouters();
-			// this.isLoading=true;
-			this.getEmployeeList(() => {
-				// this.setRouters();
-				// this.isLoading=false;
-			});
+			this.getEmployeeList();
 		},
 		setRouters() {
 			// 刚进入来清除一些缓存
@@ -273,7 +262,7 @@ export default {
 							routers[item.name] = item;
 							return;
 						}
-						if (item.name == 'statement' && this.isDepartment) {
+						if (item.name == 'statement' && this.userInfo.manage_dept_list.length > 0) {
 							//当登录人是7.0部门管理者时写死显示绩效报表
 							routers[item.name] = item;
 							return;

+ 4 - 1
src/init.vue

@@ -41,6 +41,10 @@ export default {
 		if (corpId) {
 			this.login(corpId);
 		}
+		console.log(JSON.stringify(this.GetRequest(url)))
+		if(this.GetRequest(url).url){
+			this.$setCache("url",this.GetRequest(url).url)
+		}
 	},
 	methods: {
 		bundleOfServices(){
@@ -92,7 +96,6 @@ export default {
 							if (user.is_official==1) {
 								that.$setUserData(user);
 								that.$router.replace({ path: '/index' });
-								// that.DDconfig();
 							}else{
 								that.$router.replace({ path: '/noAccess' });
 							}

+ 2 - 2
src/views/CNC/CNC_center.vue

@@ -389,10 +389,10 @@
           >
             <p>
               2、上传统计项数据Excel表
-              <el-button type="primary" plain>选择文件</el-button>
+              <el-button type="primary" plain>上传文件</el-button>
             </p>
           </el-upload>
-          <p>3、选择文件后点击下方【上传】按钮</p>
+          <!-- <p>3、选择文件后点击下方【上传】按钮</p> -->
         </div>
         <div class="align-center" style="margin-bottom:20px; float:left; margin-left:10px;"></div>
         <div style="clear:both;"></div>

+ 6 - 0
src/views/assessManagement/classDtail.vue

@@ -230,11 +230,17 @@ export default {
     // 执行等级
     selectClass() {
       let ids = [];
+	  
+	  
       this.classList.forEach(item => {
         if (item.check) {
           ids.push(item.id);
         }
       });
+	  if(ids.length==0){
+		  this.$message.error('请选择等级配置');
+		  return false
+	  }
       this.$confirm('说明:如果等级配置内有员工未完成评分,这部分员工不会参与等级配置,评完分后可以重新执行等级配置。', '提示', {
         confirmButtonText: '执行等级配置',
         cancelButtonText: '取消',

+ 8 - 5
src/views/assessManagement/staffAssDet.vue

@@ -493,6 +493,8 @@
 		<BrawerBox drawerTitle="沟通反馈" :showDrawer.sync="communication">
 			<template slot="main">
 				<el-input type="textarea" v-model="communicationVal" rows="10" placeholder="请输入反馈内容(必填)" maxlength="200" show-word-limit></el-input>
+				<div style="height: 20px;"></div>
+				<el-checkbox v-model="ding_msg" :true-label="1" :false-label="0">发送钉钉通知</el-checkbox>
 				<div class="aite" @click="selectUser = true">@</div>
 				<el-tag style="margin: 0 5px;" v-for="(tag, index) in tags" :key="tag.id" closable @close="handleClose(tag, index)">{{ tag.name }}</el-tag>
 			</template>
@@ -713,7 +715,8 @@ export default {
 
 			publicity: 0,
 
-			isSuperior: false
+			isSuperior: false,
+			ding_msg:0
 		};
 	},
 	computed: {
@@ -1418,7 +1421,7 @@ export default {
 							item.remarks = remName;
 							item.remarkDel = item.remark.split(':')[0];
 						});
-
+						
 						if (this.atPresentFlow == 0) {
 							//如果当前节点id为0,代表此考核详情已完毕,把最后一个节点作为当前节点
 							this.atPresentFlow = data.flow[data.flow.length - 1].id;
@@ -1559,7 +1562,6 @@ export default {
 						let poiSOk = false; //评分--为true时所有评分可看
 						let poiCOk = false; //说明--为true时所有说明可看
 						duplicat.forEach(item => {
-							console.log(poiSco[item.newCode],item.newCode,item)
 							if (poiSco[item.newCode] == '1' && item.employee_id == this.userInfo.id) {
 								item.poiSco = true;
 							} else if (poiSco[item.newCode] == '2') {
@@ -1836,7 +1838,6 @@ export default {
 		},
 		//流程点击
 		processDet(data) {
-			console.log(data);
 			this.processDel = data;
 			this.isChecks = true;
 			if (data.target.length == 0) {
@@ -1896,10 +1897,12 @@ export default {
 			this.$axios('post', '/api/per/package/negotiation', {
 				id: this.employeeID,
 				content: this.communicationVal,
-				target_id: JSON.stringify(target_id)
+				target_id: JSON.stringify(target_id),
+				ding_msg:this.ding_msg,
 			}).then(res => {
 				this.$message.success('已沟通');
 				this.employeeDet();
+				this.ding_msg=0;
 				this.communication = false;
 			});
 		},

+ 13 - 1
src/views/assessManagement/updateTarget.vue

@@ -78,6 +78,8 @@
           show-word-limit
           maxlength="200"
         ></el-input>
+		<div style="height: 20px;"></div>
+		<el-checkbox v-model="ding_msg" :true-label="1" :false-label="0">发送钉钉通知</el-checkbox>
         <div class="yellow" style="margin-top: 10px;">该备注将适用于修改的所有指标</div>
       </div>
       <span slot="footer">
@@ -193,6 +195,7 @@ export default {
       isError:false,
 
       index:"1",
+	  ding_msg:0,
     };
   },
   watch: {
@@ -240,6 +243,7 @@ export default {
       this.remark='';
       this.isShowBreak=false;
       this.isError=false;
+	  this.ding_msg=0;
       this.isShowRemark=true;
     },
     opneWebSocket() {
@@ -249,7 +253,8 @@ export default {
     	if(wsData[this.resultIndex]){
         let data=wsData[this.resultIndex];
         data.remark=this.remark;
-        data.id=data.pe_id
+        data.id=data.pe_id;
+		data.ding_msg=this.ding_msg;
     		this.submit(data)
     	}
     },
@@ -357,6 +362,13 @@ export default {
 };
 </script>
 <style scoped="scoped" lang="scss">
+ ::v-deep .el-select__tags-text{
+	  max-width: 240px;
+	  overflow: hidden;
+	  text-overflow: ellipsis;
+	  white-space: nowrap;
+	  // display: inline-block;
+  }	
   .results {
   	border-bottom: 1px solid #f1f1f1;
   	text-align: center;

+ 18 - 11
src/views/job/home.vue

@@ -292,6 +292,15 @@ export default {
 		this.getAgency();
 		this.getMessage();
 		this.glIndex == '1' ? this.getManagement() : this.getScorerRecord();
+		// var url = window.location.href;
+		// var rUrl = this.GetRequest(url).url || '';
+		// this.$nextTick(function() {
+		// 	if (rUrl) {
+		// 		setTimeout(() => {
+		// 			this.$router.push({ path: '/' + decodeURIComponent(rUrl) });
+		// 		}, 200);
+		// 	}
+		// });
 	},
 	created() {
 		this.setMenu();
@@ -301,17 +310,15 @@ export default {
 		this.getAgency();
 		this.getMessage();
 		this.assessTree();
-		var url = window.location.href;
-		var rUrl = this.GetRequest(url).url || '';
-		console.log("home"+  location.href);
-		
-		this.$nextTick(function() {
-			if (rUrl) {
-				setTimeout(() => {
-					this.$router.push({ path: '/' + decodeURIComponent(rUrl) });
-				}, 200);
-			}
-		});
+		// var url = window.location.href;
+		// var rUrl = this.GetRequest(url).url || '';
+		// this.$nextTick(function() {
+		// 	if (rUrl) {
+		// 		setTimeout(() => {
+		// 			this.$router.push({ path: '/' + decodeURIComponent(rUrl) });
+		// 		}, 200);
+		// 	}
+		// });
 	},
 	watch: {
 		activeName() {

+ 9 - 7
src/views/myPerformance/adjustment.vue

@@ -7,8 +7,8 @@
 					<userImage :user_name="relevance_employee.name" :img_url="relevance_employee.img_url" fontSize="14" width="50px" height="50px"></userImage>
 					<div>
 						<div class="name" style="margin: 0 10px;">{{ relevance_employee.name }}</div>
-						<div class="name fontColorF" style="margin: 0 10px;" v-if="relevance_employee.employee_detail.dept_list.length > 0">
-							{{ relevance_employee.employee_detail.dept_list[0].dept_name }}
+						<div class="name fontColorF" style="margin: 0 10px;" v-if="relevance_employee.dept_list.length > 0">
+							{{ relevance_employee.dept_list[0].dept_name }}
 						</div>
 					</div>
 				</div>
@@ -234,6 +234,8 @@
 		<!-- 调整说明 -->
 		<el-dialog title="调整说明" :visible.sync="isAdjustment" width="500px" :close-on-click-modal="false">
 			<el-input type="textarea" v-model="adjustmentText" rows="4" placeholder="请输入内容(选填)"></el-input>
+			<div style="height: 20px;"></div>
+			<el-checkbox v-model="ding_msg" :true-label="1" :false-label="0">发送钉钉通知</el-checkbox>
 			<span slot="footer" class="dialog-footer">
 				<el-button @click="isAdjustment = false">取 消</el-button>
 				<el-button type="primary" @click="saveAdjustment()">确 定</el-button>
@@ -326,9 +328,7 @@ export default {
 			relevance_employee: {
 				name: '',
 				img_url: '',
-				employee_detail: {
-					dept_list: []
-				}
+				dept_list: []
 			},
 			id: '', //
 			isAdjustment: false, //调整说明
@@ -338,7 +338,8 @@ export default {
 
 			// 标签相关
 			tabs: [],
-			tabIds: []
+			tabIds: [],
+			ding_msg:0,
 		};
 	},
 	watch: {
@@ -480,7 +481,8 @@ export default {
 				content: this.adjustmentText,
 				dimension: this.dimensionalityList,
 				process: JSON.stringify(this.process),
-				reset_flow: 1
+				reset_flow: 1,
+				ding_msg:this.ding_msg
 			}).then(res => {
 				this.$message.success('调整成功');
 				this.$router.go(-1);

+ 8 - 6
src/views/myPerformance/adjustment2.vue

@@ -7,8 +7,8 @@
           <userImage :user_name="relevance_employee.name" :img_url="relevance_employee.img_url" fontSize="14" width="50px" height="50px"></userImage>
           <div>
             <div class="name" style="margin: 0 10px;">{{ relevance_employee.name }}</div>
-            <div class="name fontColorF" style="margin: 0 10px;" v-if="relevance_employee.employee_detail.dept_list.length > 0">
-              {{ relevance_employee.employee_detail.dept_list[0].dept_name }}
+            <div class="name fontColorF" style="margin: 0 10px;" v-if="relevance_employee.dept_list.length > 0">
+              {{ relevance_employee.dept_list[0].dept_name }}
             </div>
           </div>
         </div>
@@ -230,6 +230,8 @@
     <!-- 调整说明 -->
     <el-dialog title="调整说明" :visible.sync="isAdjustment" width="500px" :close-on-click-modal="false">
       <el-input type="textarea" v-model="adjustmentText" rows="4" placeholder="请输入内容(选填)"></el-input>
+	  <div style="height: 20px;"></div>
+	  <el-checkbox v-model="ding_msg" :true-label="1" :false-label="0">发送钉钉通知</el-checkbox>
       <span slot="footer" class="dialog-footer">
         <el-button @click="isAdjustment = false">取 消</el-button>
         <el-button type="primary" @click="saveAdjustment()">确 定</el-button>
@@ -315,9 +317,7 @@ export default {
       relevance_employee: {
         name: '',
         img_url: '',
-        employee_detail: {
-          dept_list: []
-        }
+        dept_list: []
       },
       id: '', //
       isAdjustment: false, //调整说明
@@ -327,7 +327,8 @@ export default {
 
       // 标签相关
       tabs: [],
-      tabIds: []
+      tabIds: [],
+	  ding_msg:0,
     };
   },
   watch: {
@@ -469,6 +470,7 @@ export default {
         dimension: this.dimensionalityList,
         process: JSON.stringify(this.process),
         reset_flow:0,
+		ding_msg:this.ding_msg
       }).then(res => {
         this.$message.success('调整成功');
         this.$router.go(-1);

+ 10 - 5
src/views/myPerformance/myPerformance.vue

@@ -417,7 +417,7 @@
           <el-form-item label="操作">
             <el-radio-group v-model="rFlowList.type">
               <el-radio :label="1">重置到指定节点</el-radio>
-              <el-radio :label="2">重新读取考表设置</el-radio>
+              <el-radio :label="2">重新读取考表设置</el-radio>
             </el-radio-group>
           </el-form-item>
           <el-form-item label="指标处理" v-if="rFlowList.type == 2">
@@ -461,6 +461,8 @@
     <BrawerBox drawerTitle="沟通反馈" :showDrawer.sync="communication">
       <template slot="main">
         <el-input type="textarea" v-model="communicationVal" rows="10" placeholder="请输入反馈内容(必填)" maxlength="300" show-word-limit></el-input>
+		<div style="height: 20px;"></div>
+		<el-checkbox v-model="ding_msg" :true-label="1" :false-label="0">发送钉钉通知</el-checkbox>
         <div class="aite" @click="selectUser = true">@</div>
         <el-tag style="margin: 0 5px;" v-for="(tag, index) in tags" :key="tag.id" closable @close="handleClose(tag, index)">{{ tag.name }}</el-tag>
       </template>
@@ -610,7 +612,7 @@ export default {
         type: 1, //重置类型 1 流程内重置 2 重读维度流程 重置
         node_id: '', //重置到某个节点, (type 1 必填)
         employee_id: [], //重置到节点的某个用户 0表示驳回到节点 (type 1 必填)
-        overwrite_mode: 2, //1 从原来考表覆写,2 从个人考核包重置 (type 2 必填)
+        overwrite_mode: 2, //1 从原来考表覆写,2 从个人考核包重置 (type 2 必填)
         comment: '' //审核意见
       },
       rFlowRules: {
@@ -656,6 +658,7 @@ export default {
       isPoint:false,
 
       publicity:0,
+	  ding_msg:0,
     };
   },
   computed:{
@@ -722,7 +725,7 @@ export default {
           type: 1, //重置类型 1 流程内重置 2 重读维度流程 重置
           node_id: '', //重置到某个节点, (type 1 必填)
           employee_id: [], //重置到节点的某个用户 0表示驳回到节点 (type 1 必填)
-          overwrite_mode: 1, //1 从原来考表覆写,2 从个人考核包重置 (type 2 必填)
+          overwrite_mode: 1, //1 从原来考表覆写,2 从个人考核包重置 (type 2 必填)
           comment: '' //审核意见
         };
         this.$nextTick(() => {
@@ -1739,11 +1742,13 @@ export default {
       this.$axios('post', '/api/per/package/negotiation', {
         id: this.employeeID,
         content: this.communicationVal,
-        target_id: JSON.stringify(target_id)
+        target_id: JSON.stringify(target_id),
+		ding_msg:this.ding_msg,
       }).then(res => {
         this.$message.success('已沟通');
         this.employeeDet();
         this.communication = false;
+		this.ding_msg=0;
       });
     },
     confirmCreator(e) {
@@ -1943,7 +1948,7 @@ export default {
                 data = {
                   id: this.employeeID, //个人考核包ID
                   type: rFlowList.type, //重置类型 1 流程内重置 2 重读维度流程 重置
-                  overwrite_mode: rFlowList.overwrite_mode, //1 从原来考表覆写,2 从个人考核包重置 (type 2 必填)
+                  overwrite_mode: rFlowList.overwrite_mode, //1 从原来考表覆写,2 从个人考核包重置 (type 2 必填)
                   comment: rFlowList.comment //审核意见
                 };
               }

+ 24 - 5
src/views/userSet/framework.vue

@@ -4,10 +4,7 @@
 		<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>
+				<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">
@@ -41,6 +38,7 @@
 				</div>
 				<div class="terr-right border-right flex-1">
 					<div class="margin-bottom">
+						<div style="padding-bottom: 10px;font-size: 20px;">{{deptName}}</div>
 						<el-button @click="participation()" :loading="enable_loading" size="medium" type="primary">批量启用</el-button>
 						<el-button @click="forbidden()" :loading="enable_loading" size="medium" type="danger" style="margin-right: 10px;">批量禁用</el-button>
 						<el-select v-model="status"  size="medium" style="margin-right: 10px;width: 150px;">
@@ -72,6 +70,14 @@
 								</div>
 							</template>
 						</el-table-column>
+						<el-table-column label="员工标识">
+							<template slot-scope="scope">
+								<div class="flex-box flex-v-ce">
+									<el-input v-model="scope.row.code" disabled auto-complete="off" style="width: 200px;"></el-input>
+									<span style="font-size:12px;color:#61aeff;cursor:pointer;padding-left:10px" @click="copyToClipboard(scope.row.code)">点击复制</span>
+								</div>
+							</template>
+						</el-table-column>
 						<el-table-column label="启用绩效管理" align="center">
 							<template slot="header" slot-scope="scope">
 								<el-popover placement="top-start" width="300" trigger="manual" v-model="visible">
@@ -116,7 +122,7 @@
 				</div>
 			</div>
 			<!-- 隐藏文本,用于复制ID -->
-			<!-- <input  v-model="copyIds" id="biao" style="opacity:0"/> -->
+			<input v-model="copyIds" id="biao" style="opacity:0"/>
 		</div>
 	</div>
 </template>
@@ -194,6 +200,8 @@ export default {
 			dirSupList: [],
 			selected_dirSup: { employee: [], dept: [] },
 			employeeAll:[],//人员列表
+			copyIds:'',
+			deptName:'',
 		};
 	},
 	components: {
@@ -231,6 +239,15 @@ export default {
 		});
 	},
 	methods: {
+		copyToClipboard(copyIds) {
+			this.copyIds=copyIds;
+			this.$nextTick(()=>{
+				var Url2=document.getElementById("biao");
+				Url2.select(); // 选择对象
+				document.execCommand("Copy"); // 执行浏览器复制命令
+				this.$message.success('已复制');
+			})
+		},
 		filtration() {
 		  this.$axios('get', '/api/per/user/employee_list', { dept_id: this.pid, page: 0, page_size: 10000,official:1 }).then(res => {
 			 this.employeeAll = res.data.data.list;
@@ -339,6 +356,8 @@ export default {
 		},
 		//点击部门
 		handleNodeClick(e) {
+			console.log(e)
+			this.deptName=e.name;
 			this.dept_id = e.dept_id;
 		},
 		//获取部门