소스 검색

EHR-绩效:等级调整批量功能

001295 1 년 전
부모
커밋
63555991c0

+ 10 - 0
src/api/business/ehr/ehr/staff.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 查询员工列表
+export function listStaff(query) {
+  return request({
+    url: '/ehr/ehr/staff/list',
+    method: 'get',
+    params: query
+  })
+}

+ 18 - 8
src/api/business/ehr/pm/gradeadjust.js

@@ -1,5 +1,14 @@
 import request from '@/utils/request'
 
+//查询等级调整待办列表
+export function toDoList(query) {
+  return request({
+    url: '/ehr/pm/gradeAdjust/toDoList',
+    method: 'get',
+    params: query
+  })
+}
+
 // 查询绩效列表
 export function listPerformance(query) {
   return request({
@@ -17,19 +26,20 @@ export function getGradeAdjustConut() {
   })
 }
 
-// 查询绩效详细
-export function getPerformance(id) {
+// 保存绩效
+export function savePm(data) {
   return request({
-    url: '/ehr/pm/gradeAdjust/' + id,
-    method: 'get'
+    url: '/ehr/pm/gradeAdjust/savePm',
+    method: 'post',
+    data: data
   })
 }
 
-// 修改绩效
-export function gradeAdjust(data) {
+// 保存流程
+export function saveFlow(data) {
   return request({
-    url: '/ehr/pm/gradeAdjust',
-    method: 'put',
+    url: '/ehr/pm/gradeAdjust/saveFlow',
+    method: 'post',
     data: data
   })
 }

+ 9 - 0
src/api/business/ehr/pm/stage.js

@@ -104,4 +104,13 @@ export function cendToSalary(data) {
     method: 'post',
     data: data
   })
+}
+
+//生成绩效
+export function createPm(data) {
+  return request({
+    url: '/ehr/pm/stage/createPm',
+    method: 'post',
+    data: data
+  })
 }

+ 38 - 123
src/views/business/ehr/pm/adjustGrade/index.vue

@@ -3,25 +3,11 @@
     <div slot="header" class="clearfix">
       <span style="font-weight:bold">等级调整</span>
       <div style="float: right; padding: 3px 0" type="text">
+        <el-button type="primary" size="mini" @click="btnAdjustMark" v-if="flow.status == 0">调整完成</el-button>
         <el-button size="mini" plain @click="btnBack">返回</el-button>
       </div>
     </div>
-    <div class="app-container" v-if="isList">
-      <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
-        <el-form-item label="员工" prop="staffName">
-          <el-input
-            v-model="queryParams.staffName"
-            clearable
-            @keyup.enter.native="btnSearch"
-          />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" icon="el-icon-search" size="mini" @click="btnSearch">搜索</el-button>
-          <el-button icon="el-icon-refresh" size="mini" @click="btnResetQuery">重置</el-button>
-        </el-form-item>
-      </el-form>
-      <div style="float:right">
-      </div>
+    <div class="app-container">
       <el-table size="mini" height="500px" v-loading="loading" :data="listData">
         <el-table-column label="编号" align="center" prop="id" />
         <el-table-column label="员工姓名" align="center" prop="staffName" />
@@ -32,65 +18,32 @@
         <el-table-column label="上级评分" align="center" prop="ldMark" />
         <el-table-column label="调整分" align="center" prop="ajMark" />
         <el-table-column label="调整分等级" align="center" prop="ajGrade" />
-        <el-table-column label="最终等级" align="center" prop="grade" />
-        <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
+        <el-table-column width="150" label="最终等级" align="center" prop="grade">
+          <template slot-scope="scope">
+            <el-select v-model="scope.row.grade" size="mini">
+              <el-option
+                v-for="dict in ehr_pm_gradeconfig"
+                :key="dict.name"
+                :label="dict.name"
+                :value="dict.name"
+              ></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column width="300" label="调整原因" align="center" prop="cause">
           <template slot-scope="scope">
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-search"
-              @click="btnAdjustMark(scope.row)"
-            >调整</el-button>
+            <el-input v-model="scope.row.cause" size="mini"></el-input>
           </template>
         </el-table-column>
       </el-table>
-      <div class="paginationClass">
-        <pagination
-          v-show="total>0"
-          :total="total"
-          :page.sync="queryParams.pageNum"
-          :limit.sync="queryParams.pageSize"
-          @pagination="getList"
-        />
-      </div>
     </div>
-
-    <el-dialog title="分数调整" :visible.sync="formOpen" width="1000px" :close-on-click-modal="false" :show-close="false">
-      <el-descriptions :column="1">
-        <el-descriptions-item label="员工编号">{{form.staff}}</el-descriptions-item>
-        <el-descriptions-item label="员工姓名">{{form.staffName}}</el-descriptions-item>
-        <el-descriptions-item label="自评分">{{form.saMark}}</el-descriptions-item>
-        <el-descriptions-item label="上级评分">{{form.ldMark}}</el-descriptions-item>
-        <el-descriptions-item label="调整分">{{form.ajMark}}</el-descriptions-item>
-        <el-descriptions-item label="调整分等级">{{form.grade}}</el-descriptions-item>
-        <el-descriptions-item label="调整分原因">{{form.ajCause}}</el-descriptions-item>
-      </el-descriptions>
-      <el-form size="mini" label-position="right" ref="form" :model="form" :rules="formRules" label-width="80px">
-        <el-form-item label="最终等级" prop="grade">
-          <el-select v-model="form.grade" >
-            <el-option
-              v-for="dict in ehr_pm_gradeconfig"
-              :key="dict.name"
-              :label="dict.name"
-              :value="dict.name"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="调整原因" prop="cause">
-          <el-input v-model="form.cause"></el-input>
-        </el-form-item>
-      </el-form>
-      <span slot="footer" class="dialog-footer">
-        <el-button size="mini" @click="btnClose">取 消</el-button>
-        <el-button size="mini" type="primary" @click="btnConfirm">确 定</el-button>
-      </span>
-    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listPerformance,getPerformance,gradeAdjust} from "@/api/business/ehr/pm/gradeadjust";
+import { listPerformance,savePm,saveFlow} from "@/api/business/ehr/pm/gradeadjust";
 import { getGradeconfig} from "@/api/business/ehr/pm/gradeconfig";
+import { getFlow} from "@/api/business/ehr/pm/flow";
 
 export default {
   name: "AdjustGrade",
@@ -105,41 +58,25 @@ export default {
       total: 0,
       // 表格数据
       listData: [],
-      //表单数据
-      form:{},
-      //是否显示行明细弹出层
-      formOpen:false,
-      //当行明细校验规则
-      formRules:{
-        grade: [
-          { required: true, message: "调整等级不能为空", trigger: "blur" },
-        ],
-        cause: [
-          { required: true, message: "调整原因不能为空", trigger: "blur" },
-        ],
-      },
       // 查询参数
       queryParams: {
         pageNum: 1,
-        pageSize: 10,
+        pageSize: 999999,
         sourceId: null,
         staffName: null,
       },
-      //页面显示
-      isList: true,
-      //页面状态
-      page: '',
-      //详情id
-      rowId: '',
       //等级配置数据
       ehr_pm_gradeconfig:[],
+      //流程数据
+      flow:{},
     };
   },
   created() {
-    this.queryParams.sourceId = this.$route.params.id;
-    getGradeconfig(this.$route.params.gradeconfigId).then(response => {
+    this.queryParams.sourceId = this.$route.query.id;
+    getGradeconfig(this.$route.query.gradeconfigId).then(response => {
       this.ehr_pm_gradeconfig = response.data.gradeconfigItem;
     });
+    this.fetchFlow(this.$route.query.flowId);
     this.getList();
   },
   methods: {
@@ -152,46 +89,24 @@ export default {
         this.loading = false;
       });
     },
-    /** 搜索按钮操作 */
-    btnSearch() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 重置按钮操作 */
-    btnResetQuery() {
-      this.resetForm("queryForm");
-      this.btnSearch();
-    },
-    /** 刷新 */
-    refresh(){
-      this.resetForm("queryForm");
-      this.getList();
-    },
     //调整分数
-    async btnAdjustMark(row){
-      await getPerformance(row.id).then(res => {
-        if (res.code === 200) {
-          this.form = res.data
-          this.formOpen = true;
-         }
-      })
-    },
-    //取消
-    btnClose(){
-      this.formOpen = false;
-    },
-    //确定
-    btnConfirm(){
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          gradeAdjust(this.form).then(response => {
-            this.$modal.msgSuccess("保存成功");
-            this.formOpen = false;
-            this.getList();
-          });
+    async btnAdjustMark(){
+      savePm(this.listData).then(response => {
+        
+      });
+      saveFlow(this.flow).then(response => {
+        if(response.code == 200){
+          this.$modal.msgSuccess("调整完成");
+          this.fetchFlow(this.$route.query.flowId);
         }
       });
     },
+    //查询流程
+    async fetchFlow(id){
+      await getFlow(id).then(res => {
+        this.flow = res.data;
+      })
+    },
     //返回
     btnBack(){
       this.$router.back();

+ 18 - 16
src/views/business/ehr/pm/mark/detail.vue

@@ -21,7 +21,11 @@
           <el-descriptions-item label="职位">{{form.jobName}}</el-descriptions-item>
           <el-descriptions-item label="评估周期">{{form.name}}</el-descriptions-item>
           <el-descriptions-item label="评估人">{{form.evaluatorName}}</el-descriptions-item>
-          <el-descriptions-item label="所属分组">{{form.deadlineTime}}</el-descriptions-item>
+          <el-descriptions-item label="所属分组">
+            <div v-for="dict in dict.type.ehr_pm_group" v-if="form.staffDivide == dict.value">
+              <div>{{ dict.label }}</div>
+            </div>
+          </el-descriptions-item>
         </el-descriptions>
         <el-descriptions v-if="form.status > 3">
           <el-descriptions-item label="个人总结">{{form.summary}}</el-descriptions-item>
@@ -61,21 +65,14 @@
           <el-table-column width="100" label="数据来源" align="center" prop="source" />
           <el-table-column width="80" label="自评分" align="center" prop="selfScoring"/>
           <el-table-column :show-overflow-tooltip="!isUnfold" label="自评语" align="center" prop="selfComment"/>
-          <el-table-column width="80" label="上级评分*" align="center" prop="leaderScoring">
+          <el-table-column width="80" label="上级评分" align="center" prop="leaderScoring" v-if="flow.status != 0"/>
+          <el-table-column :show-overflow-tooltip="!isUnfold" label="上级评语" align="center" prop="leaderComment" v-if="flow.status != 0"/>
+          <el-table-column width="80" label="上级评分*" align="center" prop="leaderScoring" v-if="flow.status == 0">
             <template slot-scope="scope">
-              <el-input  v-model="scope.row.leaderScoring" v-only-number="{max:100,min:0,precision:1}" size="mini"/>
-              <!-- <el-input 
-                size="mini" 
-                v-model.number="scope.row.leaderScoring"
-                onkeyup="value=value.replace(/[^\d||/.]/g,'')"
-                oninput="if(value){value=value.replace(/[^\d]/g,'')} if(value<=0){value=0} if(value>100){value=100}"
-                :maxlength="3"
-                :minlength="1"
-              >
-              </el-input> -->
+              <el-input  v-model="scope.row.leaderScoring" v-only-number="{max:saMarkMax,min:0,precision:1}" size="mini"/>
             </template>
           </el-table-column>
-          <el-table-column :show-overflow-tooltip="!isUnfold" label="上级评语*" align="center" prop="leaderComment">
+          <el-table-column :show-overflow-tooltip="!isUnfold" label="上级评语*" align="center" prop="leaderComment" v-if="flow.status == 0">
             <template slot-scope="scope">
               <el-input size="mini" type="textarea" v-model="scope.row.leaderComment"></el-input>
             </template>
@@ -106,7 +103,7 @@ import { savePerformance,superiorevaluation} from "@/api/business/ehr/pm/pmmark"
 
 export default {
   name: "PmMarkDetail",
-  dicts: ['ehr_pm_aspect','ehr_pm_role'],
+  dicts: ['ehr_pm_aspect','ehr_pm_role','ehr_pm_group'],
   data() {
     return {
       //遮罩层
@@ -127,6 +124,12 @@ export default {
       turnDownOpen:false,
     };
   },
+  computed: {
+    //自评分最大值
+    saMarkMax: function () {
+      return this.form.staffDivide == 'C1' ? 150 : 100
+    }
+	},
   created() {
     this.fetchPerformance(this.$route.query.performanceId);
     this.fetchFlow(this.$route.query.flowId);
@@ -162,7 +165,7 @@ export default {
       const { columns, data } = param;
       let val = data.reduce((sum, e) => sum + Number(e.weight || 0), 0);
       this.weightSum = val;
-      return ['合计','','','',val];
+      return ['合计','','','','',val,'','',this.form.saMark,'',this.form.ldMark];
     },
     //驳回
     btnTurnDown(){
@@ -201,7 +204,6 @@ export default {
       }
       //保存绩效数据
       let r = await savePerformance(this.form);
-      console.log("r",r);
       this.flow.status = val;
       if(this.flow.status == 2){
         this.flow.result = "已评分";

+ 0 - 1
src/views/business/ehr/pm/performance/btnCopyItem.vue

@@ -36,7 +36,6 @@
 import { listPerformance,getPerformance} from "@/api/business/ehr/pm/performance";
 export default {
   name: "CopyItemDialog",
-  props: [],
   props: ["id"],
   data() {
     return {

+ 34 - 22
src/views/business/ehr/pm/performance/detail.vue

@@ -24,7 +24,11 @@
           <el-descriptions-item label="职位">{{form.jobName}}</el-descriptions-item>
           <el-descriptions-item label="评估周期">{{form.name}}</el-descriptions-item>
           <el-descriptions-item label="评估人">{{form.evaluatorName}}</el-descriptions-item>
-          <el-descriptions-item label="所属分组">{{form.deadlineTime}}</el-descriptions-item>
+          <el-descriptions-item label="所属分组">
+            <div v-for="dict in dict.type.ehr_pm_group" v-if="form.staffDivide == dict.value">
+              <div>{{ dict.label }}</div>
+            </div>
+          </el-descriptions-item>
         </el-descriptions>
         <el-descriptions :column="6 ">
           <el-descriptions-item label="自评分" v-if="form.status > 3">{{form.saMark}}</el-descriptions-item>
@@ -73,16 +77,7 @@
           <el-table-column :show-overflow-tooltip="!isUnfold" label="自评语" align="center" prop="selfComment" v-if="form.status > 3"/>
           <el-table-column width="80" label="自评分*" align="center" prop="selfScoring" v-if="this.$store.state.user.name == form.staff && form.status == '3'">
             <template slot-scope="scope">
-              <el-input  v-model="scope.row.selfScoring" v-only-number="{max:100,min:0,precision:1}" size="mini"/>
-              <!-- <el-input 
-                size="mini" 
-                v-model.number="scope.row.selfScoring"
-                onkeyup="value=value.replace(/[^\d||/.]/g,'')"
-                oninput="if(value){value=value.replace(/[^\d]/g,'')} if(value<=0){value=0} if(value>100){value=100}"
-                :maxlength="3"
-                :minlength="1"
-              >
-              </el-input> -->
+              <el-input  v-model="scope.row.selfScoring" v-only-number="{max:saMarkMax,min:0,precision:1}" size="mini"/>
             </template>
           </el-table-column>
           <el-table-column :show-overflow-tooltip="!isUnfold" label="自评语*" align="center" prop="selfComment" v-if="this.$store.state.user.name == form.staff && form.status == '3'">
@@ -137,13 +132,7 @@
           <el-checkbox v-model="rowData.asItem" @change="handleCheckedChange"></el-checkbox>
         </el-form-item>
         <el-form-item label="权重(%)" prop="weight" v-if="!rowData.asItem">
-          <el-input 
-            v-model.number="rowData.weight"
-            onkeyup="value=value.replace(/[^\d||/.]/g,'')"
-            oninput="if(value){value=value.replace(/[^\d]/g,'')} if(value<=0){value=0} if(value>100){value=100}"
-            :maxlength="3"
-            :minlength="1"
-          >
+          <el-input  v-model.number="rowData.weight" v-only-number="{max:100,min:0,precision:0}" size="mini">
             <i slot="suffix" style="color: #000;font-style:normal;margin-right: 10px;">%</i>
           </el-input>
         </el-form-item>
@@ -171,7 +160,7 @@ import { getPerformanceItem,addPerformanceItem,updatePerformanceItem,delPerforma
 
 export default {
   name: 'detail',
-  dicts: ['ehr_pm_aspect','ehr_pm_role'],
+  dicts: ['ehr_pm_aspect','ehr_pm_role','ehr_pm_group'],
   props: ['pageStu','rowId',"ids"],
   model: {
     prop: 'isList',
@@ -220,6 +209,13 @@ export default {
       weightSum: 0,
     }
   },
+  computed: {
+    //自评分最大值
+    saMarkMax: function () {
+      //业务组最高自评分为150;非业务组最高自评分为100;
+      return this.form.staffDivide == 'C1' ? 150 : 100
+    }
+	},
   async created() {
     this.id = this.rowId;
     this.fetchPerformance(this.id);
@@ -249,11 +245,13 @@ export default {
     },
     //增行
     btnAddRow(){
-      this.rowData = {assessId: this.form.id};
+      this.rowData = {};
+      this.rowData.assessId = this.form.id;
       this.rowDataOpen = true;
     },
     //修改
     async btnEdit(row){
+      this.rowData = {};
       await getPerformanceItem(row.id).then(res => {
         if (res.code === 200) {
           this.rowData = res.data
@@ -272,10 +270,24 @@ export default {
     },
     //单行明细取消
     btnRowClose(){
+      this.rowData = {};
       this.rowDataOpen = false;
     },
     //单行明细确认
     btnRowConfirm(){
+      let sum = 100;
+      if(this.rowData.id){
+        let arr = this.form.performanceItem.filter(ele => ele.id != this.rowData.id);
+        sum = arr.reduce((sum, e) => sum + Number(e.weight || 0), 0);
+      }else{
+        sum = this.form.performanceItem.reduce((sum, e) => sum + Number(e.weight || 0), 0);
+      }
+      console.log("sum",sum);
+      console.log("sum + this.rowData.weight",sum + this.rowData.weight);
+      if(sum + this.rowData.weight > 100){
+        this.$modal.msgSuccess("总权重超过100,剩余权重比为" + (100 - sum));
+        return;
+      }
       this.$refs["rowDataForm"].validate(valid => {
         if (valid) {
           if (this.rowData.id != undefined) {
@@ -324,7 +336,7 @@ export default {
       const { columns, data } = param;
       let val = data.reduce((sum, e) => sum + Number(e.weight || 0), 0);
       this.weightSum = val;
-      return ['合计','','','','',val];
+      return ['合计','','','','',val,'','',this.form.saMark,'',this.form.ldMark];
     },
     //提交
     btnSubmit(){
@@ -387,7 +399,7 @@ export default {
     },
     //选择加减分项后
     handleCheckedChange(value){
-      this.rowData.weight = value ? 0 : null;
+      this.rowData.weight = 0;
     },
   }
 }

+ 4 - 10
src/views/business/ehr/pm/performance/index.vue

@@ -115,10 +115,9 @@
 <script>
 import detail from './detail.vue'
 import { listPerformance,getCurrentMonthId,getNextMonthId} from "@/api/business/ehr/pm/performance";
-import { getGradeAdjustConut} from "@/api/business/ehr/pm/gradeadjust";
+import { getGradeAdjustConut,toDoList} from "@/api/business/ehr/pm/gradeadjust";
 import { getPmVerifyConut} from "@/api/business/ehr/pm/pmverify";
 import { getPmMarkConut} from "@/api/business/ehr/pm/pmmark";
-import { listStage} from "@/api/business/ehr/pm/stage";
 
 export default {
   name: "assess",
@@ -145,6 +144,7 @@ export default {
         pageNum: 1,
         pageSize: 10,
         params:{
+          dataPermission: 'Y',
           oneself: true,
         },
         staffName: null,
@@ -194,10 +194,6 @@ export default {
       stageListOpen:false,
       //等级调整周期列表遮罩层
       stageListLoading: true,
-      //等级调整周期列表查询条件
-      stageListQueryParams:{
-        isAdjust:"Y"
-      },
       //待确认数量
       verifyCount: null,
       //待评分数量
@@ -214,8 +210,6 @@ export default {
     //查询待评分数量
     res = await getPmMarkConut();
     this.markCount = res.row;
-    //数据权限配置
-    this.queryParams.params = {dataPermission:"Y"};
     this.getList();
     //如果是跳转过来的页面带了参数flowId则直接进入填写页面
     if(this.$route.query.flowId){
@@ -296,14 +290,14 @@ export default {
     //查询周期列表
     getlistStage() {
       this.stageListLoading = true;
-      listStage(this.stageListQueryParams).then(response => {
+      toDoList().then(response => {
         this.stageList = response.rows;
         this.stageListLoading = false;
       });
     },
     //进入调整
     btnEntryAdjust(row){
-      this.$router.push({ name: 'AdjustGrade', params: { id: row.id,gradeconfigId: row.gradeconfigId } });
+      this.$router.push({ name: 'AdjustGrade', query: { id: row.id,gradeconfigId: row.gradeconfigId,flowId: row.flowId } });
     },
     //待确认
     btnPmVerify(){

+ 0 - 2
src/views/business/ehr/pm/psnrelation/index.vue

@@ -96,13 +96,11 @@ export default {
     /** 重置按钮操作 */
     btnResetQuery() {
       this.resetForm("queryForm");
-      this.dateRange = [];
       this.btnSearch();
     },
     /** 刷新 */
     refresh(){
       this.resetForm("queryForm");
-      this.dateRange = [];
       this.getList();
     },
     /** 进入详情 */

+ 124 - 0
src/views/business/ehr/pm/stagecontrol/btnCreatePm.vue

@@ -0,0 +1,124 @@
+<template>
+  <div>
+    <el-button size="mini" @click="click">生成绩效</el-button>
+    <el-dialog title="生成绩效" :visible.sync="open" width="1000px" :close-on-click-modal="false">
+      <el-form :model="queryParams" ref="queryForm" size="mini" :inline="true">
+        <el-form-item label="员工" prop="staffName">
+          <el-input
+            v-model="queryParams.staffName"
+            clearable
+            @keyup.enter.native="btnSearch"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="el-icon-search" size="mini" @click="btnSearch">搜索</el-button>
+          <el-button icon="el-icon-refresh" size="mini" @click="btnResetQuery">重置</el-button>
+        </el-form-item>
+      </el-form>
+      <el-table size="mini" height="500px" v-loading="loading" :data="listData">
+        <el-table-column label="员工名称" align="center" prop="staffName" />
+        <el-table-column label="员工编号" align="center" prop="staffNo" />
+        <el-table-column label="入职日期" align="center" prop="dateJoin" />
+        <el-table-column label="一级部门" align="center" prop="oneDeptName" />
+        <el-table-column label="二级部门" align="center" prop="twoDeptName" />
+        <el-table-column label="三级部门" align="center" prop="threeDeptName" />
+        <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
+          <template slot-scope="scope">
+              <el-button
+                size="mini"
+                type="text"
+                icon="el-icon-plus"
+                @click="btnCreate(scope.row)"
+              >生成</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div>
+      <pagination
+        v-show="total>0"
+        :total="total"
+        :page.sync="queryParams.pageNum"
+        :limit.sync="queryParams.pageSize"
+        @pagination="getList"
+      />
+    </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listStaff} from "@/api/business/ehr/ehr/staff";
+import { createPm} from "@/api/business/ehr/pm/stage";
+export default {
+  name: "CreatePmDialog",
+  props: ["stageId"],
+  data() {
+    return {
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        staffNo: null,
+        staffName: null,
+      },
+      // 总条数
+      total: 0,
+      // 表格数据
+      listData: [],
+      // 遮罩层
+      loading: true,
+      // 是否显示弹出层
+      open: false,
+    };
+  },
+  methods: {
+    /** 查询绩效列表 */
+    getList() {
+      this.loading = true;
+      listStaff(this.queryParams).then(response => {
+        this.listData = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 搜索按钮操作 */
+    btnSearch() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    btnResetQuery() {
+      this.resetForm("queryForm");
+      this.btnSearch();
+    },
+    //点击了当前按钮
+    click() {
+      this.open = true;
+      this.getList();
+    },
+    //生成
+    async btnCreate(row){
+      let data = {
+        stageId: this.stageId,
+        staff: row.staffNo
+      }
+      this.$confirm('确认要生成【' + row.staffName + '】的绩效吗?', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'success'
+      }).then(() => {
+        createPm(data).then(response => {
+          if(response.code == 200){
+            this.$modal.msgSuccess("生成成功");
+            this.open = false;
+          }
+        });
+      }).catch(() => {      
+      });
+    },
+  },
+  created() {
+  },
+};
+</script>
+

+ 8 - 1
src/views/business/ehr/pm/stagecontrol/detail.vue

@@ -3,7 +3,7 @@
     <el-card class="box-card">
       <div slot="header" class="clearfix">
         <span style="font-weight:bold">阶段控制</span>
-        <div style="float: right; padding: 3px 0" type="text" v-if="pageState == 'see'">
+        <div style="float: right; padding: 3px 0;display:flex;justify-content:space-between" type="text" v-if="pageState == 'see'">
           <el-button size="mini" plain @click="btnBack">返回</el-button>
           <el-button size="mini" type="primary" plain @click="btnPublish" v-if="form.isPublish == 'N'">发布</el-button>
           <el-button size="mini" type="primary" plain @click="btnFillinFinish" v-if="form.isPublish == 'Y' && form.stage == '0'">结束填写</el-button>
@@ -13,6 +13,7 @@
           <el-button size="mini" type="primary" plain @click="btnCloseGradeAdjust" v-if="form.stage == '5' && form.isAdjust == 'Y' && form.isSalary == 'N'">关闭等级调整</el-button>
           <el-button size="mini" type="primary" plain @click="btnAdjustMark" v-if="form.stage == '5' && form.isSalary == 'N'">分数调整</el-button>
           <el-button size="mini" type="primary" plain @click="btnCendToSalary" v-if="form.stage == '5' && form.isSalary == 'N'">过数到薪资</el-button>
+          <CreatePmDialog style="margin: 0 10px" :stageId="form.id" v-if="form.isPublish == 'Y' && form.stage != '5'"></CreatePmDialog>
           <el-button size="mini" plain @click="btnPreviou">上一个</el-button>
           <el-button size="mini" plain @click="btnNext">下一个</el-button>
         </div>
@@ -54,6 +55,7 @@
 </template>
 
 <script>
+import CreatePmDialog from './btnCreatePm.vue'
 import { getStage,addStage,updateStage,publishStage,fillinFinish,startSelfEvaluation,finishSelfEvaluation,openGradeAdjust,closeGradeAdjust,cendToSalary} from "@/api/business/ehr/pm/stage";
 
 export default {
@@ -64,6 +66,7 @@ export default {
     prop: 'isList',
     event: 'jugislist'
   },
+  components: {CreatePmDialog},
   data() {
     return {
       //id
@@ -238,6 +241,10 @@ export default {
       }).catch(() => {      
       });
     },
+    //生成绩效
+    btnCreatePm(){
+
+    },
     //修改
     btnEdit(){
       this.pageState = "edit";

+ 1 - 32
src/views/business/ehr/pm/stagecontrol/index.vue

@@ -84,35 +84,6 @@ export default {
         pageSize: 10,
         name: null,
       },
-      // 查询日期范围
-      dateRange: [],
-      pickerOptions: {
-        shortcuts: [{
-          text: '最近一周',
-          onClick(picker) {
-            const end = new Date();
-            const start = new Date();
-            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
-            picker.$emit('pick', [start, end]);
-          }
-        }, {
-          text: '最近一个月',
-          onClick(picker) {
-            const end = new Date();
-            const start = new Date();
-            start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
-            picker.$emit('pick', [start, end]);
-          }
-        }, {
-          text: '最近三个月',
-          onClick(picker) {
-            const end = new Date();
-            const start = new Date();
-            start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
-            picker.$emit('pick', [start, end]);
-          }
-        }]
-      },
       //页面显示
       isList: true,
       //进入详情页面状态
@@ -128,7 +99,7 @@ export default {
     /** 查询行动列表 */
     getList() {
       this.loading = true;
-      listStage(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
+      listStage(this.queryParams).then(response => {
         this.listData = response.rows;
         this.ids = response.rows.map(item => item.id);
         this.total = response.total;
@@ -143,13 +114,11 @@ export default {
     /** 重置按钮操作 */
     btnResetQuery() {
       this.resetForm("queryForm");
-      this.dateRange = [];
       this.btnSearch();
     },
     /** 刷新 */
     refresh(){
       this.resetForm("queryForm");
-      this.dateRange = [];
       this.getList();
     },
     /** 进入详情 */

+ 7 - 3
src/views/business/ehr/pm/verify/detail.vue

@@ -21,7 +21,11 @@
           <el-descriptions-item label="职位">{{form.jobName}}</el-descriptions-item>
           <el-descriptions-item label="评估周期">{{form.name}}</el-descriptions-item>
           <el-descriptions-item label="评估人">{{form.evaluatorName}}</el-descriptions-item>
-          <el-descriptions-item label="所属分组">{{form.deadlineTime}}</el-descriptions-item>
+          <el-descriptions-item label="所属分组">
+            <div v-for="dict in dict.type.ehr_pm_group" v-if="form.staffDivide == dict.value">
+              <div>{{ dict.label }}</div>
+            </div>
+          </el-descriptions-item>
         </el-descriptions>
         <!-- <div style="float:right">
           <el-button size="mini" @click="btnUnfold">{{isUnfold == true ? "收起" : "展开"}}</el-button>
@@ -76,7 +80,7 @@ import { verify} from "@/api/business/ehr/pm/pmverify";
 
 export default {
   name: "PmVerifyDetail",
-  dicts: ['ehr_pm_aspect','ehr_pm_role'],
+  dicts: ['ehr_pm_aspect','ehr_pm_role','ehr_pm_group'],
   data() {
     return {
       //遮罩层
@@ -133,7 +137,7 @@ export default {
       const { columns, data } = param;
       let val = data.reduce((sum, e) => sum + Number(e.weight || 0), 0);
       this.weightSum = val;
-      return ['合计','','','',val];
+      return ['合计','','','','',val,'','',this.form.saMark,'',this.form.ldMark];
     },
     //驳回
     btnTurnDown(){