ソースを参照

2024.3.13 细节调整 二

guojy 1 年間 前
コミット
513f921e8d

+ 12 - 38
src/components/organization/Post.vue

@@ -93,35 +93,21 @@
     		<el-button type="primary" @click="confirm('params')">确 定</el-button>
     	</div>
     </el-dialog>
-    <el-dialog :close-on-click-modal="false" title="添加人员" :visible.sync="add_employee_show" :before-close="add_employee_close" width="700px" top="5%">
-      <el-form :model="add_employee_form" ref="add_employee_form" label-width="80px">
-        <div><EmployeeSelectorTwo :selected="selected" :max="add_employee_max" :can_select_dept="can_select_dept" :visible.sync="add_employee_visible" ref="Employee"></EmployeeSelectorTwo></div>
-        <el-form-item style="text-align: right; margin-bottom: 0;margin-top: 20px;">
-          <el-button :disabled="btn_disabled" @click="add_employee_close()">取消</el-button>
-          <el-button :disabled="btn_disabled" type="primary" @click="sub_add_employee('add_employee_form')">完成</el-button>
-        </el-form-item>
-      </el-form>
-    </el-dialog>
-  </div>
+    <EmployeeSelector :selected="selected" @confirm='add_employee_confirm' title="添加人员" :visible.sync="add_employee_show"></EmployeeSelector>
   </div>
 </template>
 
 <script>
-import EmployeeSelectorTwo from '@/components/EmployeeSelectorTwo';
+import EmployeeSelector from '@/components/EmployeeSelector';
 import { Editor, Toolbar, getEditor, removeEditor, createEditor } from '@wangeditor/editor-for-vue';
 import cloneDeep from 'lodash.clonedeep';
 import {_debounce} from '@/utils/auth';
 export default {
   name: 'Post',
-  components: {Editor, Toolbar,EmployeeSelectorTwo},
+  components: {Editor, Toolbar,EmployeeSelector},
   data() {
-    let PerformTheNumber = true; //五秒执行一次变量
     return {
       add_employee_show:false,
-      add_employee_visible: false,
-      add_employee_form: {
-        post_ids: []
-      },
       post_id:null,
       btn_disabled: false,
       add_employee_max: 2000,
@@ -129,7 +115,6 @@ export default {
         employee:[],
         dept:[]
       },
-      can_select_dept:false,
 
       total: 0,
       page: 1,
@@ -242,32 +227,21 @@ export default {
       this.post_id = e.id;
       this.getPostPerson()
     },
-    add_employee_close() {
-      this.add_employee_show = false;
-    },
+    //子组件数据传递到父组件
     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);
-        });
-      }
-    },
-
-    // 添加人员 提交数据
-    sub_add_employee(form) {
-      this.$refs.Employee.confirm(); //调用组件的confirm();
+      let employee_ids=val.employee.map(item=>{
+        return item.id
+      })
       let data = {
-        employee_ids: this.add_employee_form.employee_ids.join(','),
+        employee_ids: employee_ids.toString(),
         post_id: this.post_id,
       };
       this.$axiosUser('post', '/api/pro/post/bind_employee', data).then(res => {
-              this.add_employee_show = false;
-              this.$message.success('修改成功');
-              // this.open_right(this.handleCurrent);
-            })
-    },
+        this.add_employee_show = false;
+        this.$message.success('修改成功');
+      })
 
+    },
     deleteCate(){
       this.$confirm('确定删除该岗位','提示', {
         confirmButtonText: '确定',

+ 367 - 22
src/examine/views/kouFenTj.vue

@@ -12,10 +12,27 @@
             <el-date-picker v-model="time" :clearable='false' type="daterange" value-format="yyyy-MM-dd"
               range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
           </el-form-item>
-          <el-form-item label="部门">
-            <el-cascader v-model="dept_id" :options="dept_tree" :props="{checkStrictly: true}" ref="dept"
-             filterable change-on-select clearable placeholder="全公司">
-            </el-cascader>
+          <el-form-item>
+            <div class="flex-box-ce">
+              <el-select v-model="selectTypeIndex"  placeholder="请选择" style="width: 80px;margin-right: 6px;">
+                  <el-option  label="部门"  :value="1"></el-option>
+                  <el-option  label="岗位"  :value="2"></el-option>
+              </el-select>
+              <el-cascader v-if="selectTypeIndex==1"  style="width: 250px;"v-model="dept_id" :options="dept_tree" :props="{checkStrictly: true}" ref="dept"
+               filterable change-on-select clearable placeholder="全公司">
+              </el-cascader>
+              <div class="border flex-box-ce" v-if="selectTypeIndex==2">
+                <div class="flex-1" v-if="selectPost.length == 0">请选择岗位</div>
+                <div v-else style="width: 180px;" class="font-flex-word">
+                  <span v-for="(item, index) in selectPost" :key="index">
+                    <i v-if="index != 0">,</i>{{ item.name }}
+                  </span>
+                </div>
+                <span v-if="selectPost.length >0" class="blue">{{selectPost.length}}个</span>
+                <i class="el-icon-arrow-down icon-right"></i>
+                <div @click="openPost" class="inputDc"></div>
+              </div>
+            </div>
           </el-form-item>
           <el-form-item>
             <el-input maxlength="10" placeholder="人员搜索" prefix-icon="el-icon-search" v-model="keyword"
@@ -74,6 +91,66 @@
           :page-size="page_size" :total="total"></el-pagination>
       </center> -->
     </div>
+
+
+    <!-- 选择岗位 -->
+    <el-dialog title="选择岗位"  :visible.sync="isShowRule" class="fromNormGain_sty" top="12vh" width="1000px" append-to-body>
+      <div class="flex-box">
+        <div class="flex-2 kh-left">
+          <ul class="scroll-bar ul" v-if="tabs.length > 0" style="height: 440px;overflow: auto;">
+            <li class="flex-box-ce li" v-for="(item, index) in tabs" :key="index" :class="[tabItem.id == item.id ? 'isActiveLi' : '']" @click="activeLi(item, index)">
+              <div class="index-name font-flex-word"><i class="el-icon-s-help" v-if="item.id==-1"></i> {{ item.name }}</div>
+            </li>
+          </ul>
+        </div>
+        <div class="flex-4">
+          <el-input style="width: 200px;" size="small" maxlength="100" show-word-limit v-model="postName" clearable placeholder="搜索"/>
+          <div class="table-box">
+            <el-table :data="postList" stripe fit v-loading="table_loading"  style="cursor: pointer;" @row-click="clickdatail">
+              <el-table-column width="40" fixed>
+                <template slot-scope="scope">
+                    <div style="width: 40px;text-align: center;position: relative;">
+                      <el-checkbox v-model="scope.row.checked"></el-checkbox>
+                      <div style="width: 40px;height: 40px;position: absolute;top: -10px;z-index: 999;"></div>
+                    </div>
+                </template>
+              </el-table-column>
+              <el-table-column label="岗位名称" prop="name"></el-table-column>
+              <el-table-column label="岗位职责" prop="desc_1" show-overflow-tooltip></el-table-column>
+              <template slot="empty">
+                <NoData></NoData>
+              </template>
+            </el-table>
+            <center>
+              <el-pagination
+                small
+                :page-size="post_page_size"
+                :current-page="post_page"
+                layout="prev, pager, next"
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :total="post_total">
+              </el-pagination>
+            </center>
+          </div>
+        </div>
+        <div>
+          <div class="mainEl" style="border-left: 1px solid #f1f1f1;width: 240px;padding: 10px;">
+            <div class="mainHead flex-box flex-d-center" v-if="selectItem.length > 0">
+              <span>已选择{{ selectItem.length }}个</span>
+              <span @click="Empty">清空</span>
+            </div>
+            <div class="mainTag">
+              <el-tag v-for="(item, index) in selectItem" :key="index" closable :disable-transitions="true" @close="TagClose(item, index)">{{ item.name }}</el-tag>
+            </div>
+          </div>
+        </div>
+      </div>
+      <span slot="footer">
+        <el-button @click="isShowRule=false">取 消</el-button>
+        <el-button type="primary" @click="ruleConfirm">确认</el-button>
+      </span>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -93,8 +170,7 @@
         page_size: 10,
         dept_id: 0,
         formData: {dept_ids: 0,},
-        // time: [this.$moment().startOf('month').format('YYYY-MM-DD'), this.$moment().endOf('month').format('YYYY-MM-DD')],
-        time: ['2022-01-12', this.$moment().endOf('month').format('YYYY-MM-DD')],
+        time: [this.$moment().startOf('month').format('YYYY-MM-DD'), this.$moment().endOf('month').format('YYYY-MM-DD')],
         list: [],
         listAll:[],
         keyword: '',
@@ -117,6 +193,21 @@
           '扣分(分)':'sm_deduce_point',
           '扣分次数':'sm_deduce_count',
         },
+
+        post_total: 0,
+        post_page: 1,
+        post_page_size: 7,
+        tabItem:{name:'销售'},
+        tabs:[{name:'全部分类',id:-1}],
+        table_loading:false,
+        postList:[],
+        isShowRule:false,
+        selectItem:[],
+        selectPost:[],
+        selectId:'',
+        postName:'',
+
+        selectTypeIndex:1,
       };
     },
     watch: {
@@ -131,6 +222,10 @@
         this.page = 1;
         this.get_list();
       },
+      selectTypeIndex(val) {
+        this.page = 1;
+        this.get_list();
+      },
       dept_id(val) {
         this.page = 1;
         if (val.length > 0) {
@@ -151,9 +246,89 @@
         if (!val) {
           this.get_list();
         }
-      }
+      },
+      postName: {
+        deep: true,
+        handler: _debounce(function(val) {
+          this.post_page=1;
+          this.post_page_size=7;
+          this.getTableData();
+        })
+      },
     },
     methods: {
+      openPost(){
+        this.tabItem = JSON.parse(JSON.stringify(this.tabs[0]));
+        this.selectItem=JSON.parse(JSON.stringify(this.selectPost));
+        this.isShowRule = true
+      },
+
+      //清除右侧tag
+      TagClose(item, index) {
+        this.selectItem.splice(index, 1);
+      },
+      Empty() {
+        this.selectItem = [];
+        this.postList.forEach(item=>{
+          item.checked=false
+        })
+      },
+      clickdatail(item){
+        item.checked=!item.checked;
+        if(item.checked){
+          this.selectItem.push(item);
+        }else{
+          this.selectItem.forEach((e, index) => {
+            if (e.id == item.id) {
+              this.selectItem.splice(index, 1);
+            }
+          });
+        }
+      },
+      activeLi(item, index) {
+        this.tabItem = JSON.parse(JSON.stringify(item));
+        this.post_page=1;
+        this.post_page_size=7;
+        this.getTableData();
+      },
+      getPostType() {
+        this.tabs=[{name:'全部分类',id:-1}];
+        this.$axiosUser('get', '/api/pro/post/post_cate_list').then(res => {
+            this.tabs.push(...res.data.data)
+            this.tabItem = JSON.parse(JSON.stringify(this.tabs[0]));
+            this.getTableData();
+        })
+      },
+      getTableData() {
+        this.table_loading=true;
+        let data={
+          page:this.post_page,
+          page_size:this.post_page_size,
+          cate_id:this.tabItem.id,
+          name:this.postName
+        }
+        this.$axiosUser('get', '/api/pro/post/cate_post_list',data).then(res => {
+            let list=res.data.data.list;
+            let selectItem=this.selectItem;
+            list.forEach(item=>{
+              item.checked=false
+              for (var i in selectItem) {
+                if (selectItem[i].id == item.id) {
+                  item.checked = true;
+                }
+              }
+            })
+            this.postList=list;
+            this.post_total=res.data.data.total
+        }).finally(()=>{
+            this.table_loading=false;
+        });
+      },
+      ruleConfirm(){
+        this.selectPost=JSON.parse(JSON.stringify(this.selectItem));
+        this.isShowRule = false;
+        this.get_list();
+      },
       returnArr(){
       	return this.list;
       },
@@ -183,13 +358,14 @@
       },
       onmessageWS(e){
         let that=this;
-        if(e.type=='sm_reporter'){
+        if(e.type=='sm_sro'){
           if(e.code==1){
-
-          }else if(e.code==2){
-            let result=e.result
-            // this.list = list;
-            // this.listAll = list;
+            let list = e.result.list;
+            list.forEach(item=>{
+              item.time=this.$moment(this.time[0]).format('MM-DD')+'~'+this.$moment(this.time[1]).format('MM-DD');
+            })
+            this.list = list
+            this.listAll = list
             this.loading = false;
           }else{
             this.errorage('x',e.msg)
@@ -202,7 +378,7 @@
               type:'error',
               callback: action => {
                   that.not_reuse_employee_id=[];//复用结果
-                  that.$socketApi.closewebsocket();
+                  that.$socketApiTow.closewebsocket();
               }
             });
         }
@@ -221,16 +397,22 @@
         }
       },
       get_list() {
-        return false
         this.loading = true;
         let data={
-          type:'sm_reporter',
+          type:'sm_sro',
           keyword: this.keyword,
-          dept_ids: this.formData.dept_ids.toString(),
           start_date: this.time[0],
           end_date: this.time[1],
         }
-        this.$socketApi.sendData(data,this.onmessageWS)
+        if(this.selectTypeIndex==1){
+          data.dept_ids=this.formData.dept_ids.toString();
+        }else{
+          let post_ids=this.selectPost.map(e=>{
+            return e.id
+          })
+          data.post_ids=post_ids.toString();
+        }
+        this.$socketApiTow.sendData(data,this.onmessageWS)
         return false
         // let data = {
         //   page: this.page,
@@ -252,6 +434,18 @@
           this.loading = false;
         });
       },
+
+      // 页面变更
+      handleCurrentChange2(val) {
+        this.post_page = val;
+        this.getTableData();
+      },
+      // 页面跳转
+      handleSizeChange2(val) {
+        this.post_page_size = val;
+        this.getTableData();
+      },
+
       // 页面变更
       handleCurrentChange(val) {
         this.page = val;
@@ -290,17 +484,92 @@
       }
     },
     mounted() {
+      this.getPostType();
       if (this.$getCache('dept_tree')) {
         this.dept_tree = this.getTreeData(this.$getCache('dept_tree'));
       }
       this.get_list();
     },
     beforeDestroy(){
-      this.$socketApi.closewebsocket();
+      this.$socketApiTow.closewebsocket();
     }
   };
 </script>
 <style scoped lang="scss">
+  .el-pagination {
+    text-align: center;
+    margin-top: 15px;
+  }
+  .mainEl {
+    .mainHead {
+      margin-bottom: 10px;
+      span:nth-child(2) {
+        color: #409EFF;
+        cursor: pointer;
+      }
+    }
+    .mainTag {
+      height: 400px;
+      overflow-x: hidden;
+      overflow-y: auto;
+      /deep/ .el-tag--medium {
+        background-color: #fff;
+        border: 1px solid #e4e4e4;
+        border-radius: 20px;
+        color: #4c4c4c;
+        margin: 5px 5px 5px 0;
+        max-width: 240px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+        position: relative;
+        padding: 0 20px 0 10px;
+      }
+      .el-tag--medium /deep/ i {
+        color: #8f8f8f;
+        position: absolute;
+        right: 5px;
+        top: 5px;
+      }
+      .el-tag--medium /deep/ i:hover {
+        background-color: #9b9b9b;
+        color: #fff;
+      }
+    }
+  }
+  .width-250 {
+    width: 350px;
+  }
+  .inputDc {
+    position: absolute;
+    top: 0;
+    right: 0;
+    left: 0;
+    bottom: 0;
+    z-index: 9;
+    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: 250px;
+    position: relative;
+    cursor: pointer;
+    line-height: 34px;
+  }
+  .border .font-flex-word{
+    color: #606266;
+  }
   .diy_tip_bg {
     background: #f5f6f9;
     overflow: hidden;
@@ -422,13 +691,89 @@
       line-height: 20px;
     }
   }
-  /deep/ .el-dialog__body {
-    padding: 0px 20px 30px;
-  }
 
   .headLi {
     padding: 4px;
     list-style: disc;
     font-size: 14px;
   }
+
+  .kh-right {
+      padding: 0 10px;
+    }
+    .pagination {
+      position: relative;
+      left: -10px;
+    }
+    .liAction {
+      background-color: #ebeef5;
+      color: #409EFF;
+    }
+    .kh-title {
+      text-align: center;
+      font-weight: 700;
+      border-bottom: 1px solid #ebeef5;
+      padding-bottom: 10px;
+    }
+    .kh-left {
+      border-right: 1px solid #ebeef5;
+    }
+    .kh-left li {
+      padding: 10px;
+      cursor: pointer;
+      border-bottom: 1px solid #ebeef5;
+    }
+    .kh-left li:hover {
+      background-color: #ebeef5;
+    }
+    .kh-Box {
+      // height: 430px;
+    }
+  .bmxx .el-dialog__body {
+    padding: 30px 100px 20px 10px !important;
+  }
+  .el-form-item__label {
+    font-weight: normal;
+  }
+  .li:hover {
+    background-color: #f5f7fa;
+  }
+  .li:hover .el-icon-more {
+    display: block;
+  }
+  .index-name {
+    width: 170px;
+  }
+  .ul {
+    max-height: calc(100vh - 230px);
+    overflow: auto;
+  }
+  .ul::-webkit-scrollbar {
+    width: 6px;
+    height: 6px;
+  }
+  .ul:hover::-webkit-scrollbar-thumb {
+    background-color: #ccc;
+  }
+  .ul::-webkit-scrollbar-track {
+    width: 6px;
+    background-color: #f1f1f1;
+    -webkit-border-radius: 2em;
+    -moz-border-radius: 2em;
+    border-radius: 2em;
+  }
+  .isActiveLi {
+    background-color: #f5f7fa;
+    color: #409EFF !important;
+    position: relative;
+  }
+  .isActiveLi::after {
+    width: 3px;
+    content: ' ';
+    background-color: #409EFF;
+    left: 0;
+    bottom: 0;
+    top: 0;
+    position: absolute;
+  }
 </style>

+ 2 - 12
src/okr/components/public/TaskItem.vue

@@ -78,18 +78,6 @@
                         <el-progress :stroke-width="3" v-else :show-text="false" :color="customColorMethod(item.level)" :width="20" type="circle" :percentage="Number(item.process)"></el-progress>
                         <span style="padding-left: 5px;">{{item.process}}%</span>
                       </div>
-<!--                      <template v-if="item.can_stop==1||item.can_cancel==1||item.can_finish==1||item.can_reset==1||isShowBinding">
-                        <el-dropdown @command="handleCommand($event,item)" trigger="click" class="hoverBlue">
-                         <i class="el-icon-more"></i>
-                         <el-dropdown-menu slot="dropdown">
-                            <el-dropdown-item :command="1" v-if="item.can_stop==1">暂停任务</el-dropdown-item>
-                            <el-dropdown-item :command="2" v-if="item.can_cancel==1">取消任务</el-dropdown-item>
-                            <el-dropdown-item :command="3" v-if="item.can_finish==1">完成任务</el-dropdown-item>
-                            <el-dropdown-item :command="4" v-if="item.can_reset==1">重置任务</el-dropdown-item>
-                            <el-dropdown-item :command="5" v-if="isShowBinding&&item.can_edit_normal==1">取消关联</el-dropdown-item>
-                          </el-dropdown-menu>
-                        </el-dropdown>
-                      </template> -->
                       <div  style="width: 20px;height: 20px;margin-left: 30px;"></div>
                     </template>
                     <!-- 已结束 -->
@@ -280,7 +268,9 @@ export default {
               item.day=this.$moment(item.end_date).diff(this.$moment().format('YYYY-MM-DD'), 'day');
               item.isShow=false;
             })
+            console.log("渲染了",list,this.isParent,this.isShowChild)
             this.parentList=list;
+
           }
         }else{
           let list=this.list;

+ 1 - 3
src/okr/views/project/projectDetail.vue

@@ -71,7 +71,7 @@
                     </div>
                     <div class="add-task" @click="isShowAddTask=true" v-if="isPstake">+ 添加任务</div>
                   </div>
-                  <div v-if="taskList.length>0" class="scroll-bar">
+                  <div  class="scroll-bar">
                     <TaskItem isParent isShowChild :isShow="taskShow" :list="taskList" :isSimpleShow="2" @confirm="updateTaskList"></TaskItem>
                   </div>
                   <div class="dotted-line" v-if="taskList.length==0"><div>暂无数据</div></div>
@@ -319,8 +319,6 @@
               this.taskShow=true;
             }
           },100)
-
-
         }).finally(()=>{
            this.loading = false;
         })

+ 2 - 2
src/performance/views/assessManagement/assessDetails.vue

@@ -103,7 +103,7 @@
           <span class="blue" style="cursor: pointer;" @click="isPending = true">查看名单</span>
         </div>
       </template>
-      <div v-if="navcli==3"><el-button type="primary" @click="pf()">批量开始评分</el-button></div>
+      <div v-if="navcli==3&&$getRole(1) && $isAuthoritys_jx($8)"><el-button type="primary" @click="pf()">批量开始评分</el-button></div>
 
       <el-table :data="asstabData" v-loading="assDetLoad" @row-click="assDetClick" style="width: 100%" @selection-change="handleSelectionChange">
         <el-table-column type="selection" width="55" v-if="navcli==3"></el-table-column>
@@ -166,7 +166,7 @@
               <el-button type="text" size="medium" @click.stop="theResultsOf1(scope.row,1)">调整考核结果</el-button>
               <el-button type="text" size="medium" @click.stop="theResultsOf1(scope.row,2)">调整绩效等级</el-button>
             </template>
-            <el-button type="text" v-if="navcli==3" size="medium" @click.stop="pf(scope.row)">开始评分</el-button>
+            <el-button type="text" v-if="navcli==3&&$getRole(1) && $isAuthoritys_jx($8)" size="medium" @click.stop="pf(scope.row)">开始评分</el-button>
           </template>
         </el-table-column>
       </el-table>