Explorar o código

ehr-绩效:绩效功能问题处理

001295 hai 1 ano
pai
achega
3031f1993c

+ 9 - 1
src/api/business/ehr/pm/psnrelation.js

@@ -24,4 +24,12 @@ export function savePsnrelation(data) {
     method: 'post',
     data: data
   })
-}
+}
+
+// 同步EHR评估关系
+export function sync(id) {
+  return request({
+    url: '/ehr/pm/psnrelation/sync',
+    method: 'get'
+  })
+}

+ 5 - 0
src/main.js

@@ -67,6 +67,8 @@ import VXETable from 'vxe-table'
 import 'vxe-table/lib/style.css'
 //底部横拉条
 import horizontalScroll from 'el-table-horizontal-scroll';
+//自定义全局指令
+import onlyNumber from '@/views/business/ehr/directive/el-input';
 
 // 全局方法挂载
 Vue.prototype.getDicts = getDicts;
@@ -148,6 +150,9 @@ Vue.use(Element, {
   size: Cookies.get("size") || "medium", // set element-ui default size
 });
 
+//使用该全局指令
+Vue.use(onlyNumber);
+
 Vue.config.productionTip = false;
 
 new Vue({

+ 19 - 0
src/views/business/ehr/directive/el-input/index.js

@@ -0,0 +1,19 @@
+import onlyNumber from './onlyNumber'
+const install = Vue => {
+  Vue.directive('onlyNumber', onlyNumber)
+}
+/*
+  Vue.use( plugin )
+  安装 Vue.js 插件。如果插件是一个对象,必须提供 install 方法。
+  如果插件是一个函数,它会被作为 install 方法。install 方法调用时,会将 Vue 作为参数传入。
+  该方法需要在调用 new Vue() 之前被调用。
+  当 install 方法被同一个插件多次调用,插件将只会被安装一次。
+*/
+ 
+if (window.Vue) {
+  window['onlyNumber'] = onlyNumber
+  Vue.use(install); // eslint-disable-line
+}
+ 
+onlyNumber.install = install
+export default onlyNumber

+ 71 - 0
src/views/business/ehr/directive/el-input/onlyNumber.js

@@ -0,0 +1,71 @@
+export default {
+    inserted(el,vDir, vNode) {
+        // vDir.value 有指令的参数
+        let content;
+        //按键按下=>只允许输入 数字/小数点
+        el.addEventListener("keypress", event => {
+            let e = event || window.event;
+            let inputKey = String.fromCharCode(typeof e.charCode === 'number' ? e.charCode : e.keyCode);
+            let re = /\d|\./;
+            content = e.target.value;
+            //定义方法,阻止输入
+            function preventInput(){
+                if (e.preventDefault) {
+                    e.preventDefault();
+                } else {
+                    e.returnValue = false;
+                }
+            }
+            if (!re.test(inputKey) && !e.ctrlKey) {
+                preventInput();
+            } else if (content.indexOf(".") > 0 && inputKey == ".") {
+                //已有小数点,再次输入小数点
+                preventInput();
+            }
+        });
+        //按键弹起=>并限制最大最小
+        el.addEventListener("keyup",event => {
+            let e = event || window.event;
+            content = parseFloat(e.target.value);
+            if (!content) {
+                content = 0.00;
+            }
+            let arg_max = "";
+            let arg_min = "";
+            if (vDir.value) {
+                arg_max = parseFloat(vDir.value.max);
+                arg_min = parseFloat(vDir.value.min);
+            }
+            if(arg_max && content > arg_max){
+                e.target.value = arg_max;
+                content = arg_max;
+            }
+            if(arg_min && content < arg_min){
+                e.target.value = arg_min;
+                content = arg_min;
+            }
+        });
+        //失去焦点=>保留指定位小数
+        el.addEventListener("focusout",event=>{//此处会在 el-input 的 @change 后执行
+            let e = event || window.event;
+            content = parseFloat(e.target.value);
+            if (!content) {
+                content = 0.00;
+            }
+            let arg_precision = 0;//默认保留至整数
+            if (vDir.value.precision) {
+                arg_precision = parseFloat(vDir.value.precision);
+            }
+            e.target.value = content.toFixed(arg_precision);
+            // -- callback写法1
+            // vNode.data.model.callback = ()=>{
+            //     e.target.value = content.toFixed(arg_precision)
+            // }
+            // vNode.data.model.callback();
+            // -- callback 写法2
+            // vNode.data.model.callback(
+            //     e.target.value = content.toFixed(arg_precision)
+            // )
+        })
+    }
+}

+ 4 - 3
src/views/business/ehr/pm/mark/detail.vue

@@ -63,7 +63,8 @@
           <el-table-column :show-overflow-tooltip="!isUnfold" label="自评语" align="center" prop="selfComment"/>
           <el-table-column width="80" label="上级评分*" align="center" prop="leaderScoring">
             <template slot-scope="scope">
-              <el-input 
+              <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,'')"
@@ -71,7 +72,7 @@
                 :maxlength="3"
                 :minlength="1"
               >
-              </el-input>
+              </el-input> -->
             </template>
           </el-table-column>
           <el-table-column :show-overflow-tooltip="!isUnfold" label="上级评语*" align="center" prop="leaderComment">
@@ -185,7 +186,7 @@ export default {
       if(val == 2){
         let v = false;
         this.form.performanceItem.forEach((item) => {
-          if(!item.leaderScoring || !item.leaderComment){
+          if((!item.leaderScoring && item.leaderScoring != 0) || !item.leaderComment){
             v = true;
           }
         });

+ 3 - 2
src/views/business/ehr/pm/performance/btnCopyItem.vue

@@ -37,6 +37,7 @@ import { listPerformance,getPerformance} from "@/api/business/ehr/pm/performance
 export default {
   name: "CopyItemDialog",
   props: [],
+  props: ["id"],
   data() {
     return {
       // 查询参数
@@ -45,7 +46,7 @@ export default {
         pageSize: 10,
         staff: null,
         params:{
-          includeCurrentMonth: null,
+          neId: null,
         },
       },
       // 总条数
@@ -81,7 +82,7 @@ export default {
     },
   },
   created() {
-    this.queryParams.params.includeCurrentMonth = "N";
+    this.queryParams.params.neId = this.id;
   },
 };
 </script>

+ 12 - 10
src/views/business/ehr/pm/performance/detail.vue

@@ -2,11 +2,11 @@
   <div>
     <el-card>
       <div slot="header" class="clearfix">
-        <span style="font-weight:bold">绩效考核表</span>
+        <span style="font-weight:bold">绩效考核表</span>-{{form.name}}
         <div style="float: right; padding: 3px 0; display:flex;justify-content:space-between" type="text">
           <el-button size="mini" plain @click="btnBack">返回</el-button>
-          <el-button size="mini" plain @click="btnSubmit" v-if="this.$store.state.user.name == form.staff && (form.status == '0' || form.status == '3')">提交</el-button>
-          <CopyItemDialog style="margin: 0 10px" @setItems="setItems" v-if="this.$store.state.user.name == form.staff && form.status == '0'"></CopyItemDialog>
+          <el-button type="primary" size="mini" @click="btnSubmit" v-if="this.$store.state.user.name == form.staff && (form.status == '0' || form.status == '3')">提交</el-button>
+          <CopyItemDialog style="margin: 0 10px" @setItems="setItems" v-if="this.$store.state.user.name == form.staff && form.status == '0'" :id="rowId"></CopyItemDialog>
           <ApproveLogDialog style="margin: 0 10px" :pmId="form.id"></ApproveLogDialog>
           <el-button size="mini" plain @click="btnPreviou" v-if="ids">上一个</el-button>
           <el-button size="mini" plain @click="btnNext" v-if="ids">下一个</el-button>
@@ -34,7 +34,7 @@
           <el-descriptions-item label="个人总结">{{form.summary}}</el-descriptions-item>
         </el-descriptions>
         <div v-if="this.$store.state.user.name == form.staff && form.status == '3'">
-          个人总结*<el-input type="textarea" v-model="form.summary"></el-input>
+          个人总结*<el-input type="textarea" placeholder="总结本月工作的亮点和暗点" v-model="form.summary"></el-input>
         </div>
         <el-descriptions v-if="form.status > 4">
           <el-descriptions-item label="评语">{{form.comment}}</el-descriptions-item>
@@ -43,7 +43,8 @@
           <el-button type="primary" size="mini" @click="btnAddRow" v-if="this.$store.state.user.name == form.staff && form.status == '0'">增加指标</el-button>
           <!-- <el-button size="mini" @click="btnUnfold">{{isUnfold == true ? "收起" : "展开"}}</el-button> -->
         </div>
-        <el-table size="mini"  :data="form.performanceItem" show-summary :summary-method="getSummaries">
+        <el-table size="mini"  :data="form.performanceItem" show-summary :summary-method="getSummaries" border>
+          <el-table-column type="index" width="50" label="序号"/>
           <el-table-column width="100" :show-overflow-tooltip="!isUnfold" label="评估方面" align="center" prop="aspect">
             <template slot-scope="scope">
               <dict-tag :options="dict.type.ehr_pm_aspect" :value="scope.row.aspect"/>
@@ -72,7 +73,8 @@
           <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 
+              <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,'')"
@@ -80,7 +82,7 @@
                 :maxlength="3"
                 :minlength="1"
               >
-              </el-input>
+              </el-input> -->
             </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'">
@@ -261,7 +263,7 @@ export default {
     },
     //删行
     btnDelete(row){
-      this.$modal.confirm('是否确认删除【"' + row.aspect + '"】数据项?').then(function() {
+      this.$modal.confirm('是否确认删除第"' + row.aspect + '"行数据?').then(function() {
         return delPerformanceItem(row.id);
       }).then(() => {
         this.fetchPerformance(this.id);
@@ -322,7 +324,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];
     },
     //提交
     btnSubmit(){
@@ -346,7 +348,7 @@ export default {
       if(this.form.status == '3'){
         let v = false;
         this.form.performanceItem.forEach((item) => {
-          if(!item.selfScoring || !item.selfComment){
+          if((!item.selfScoring && item.selfScoring != 0) || !item.selfComment){
             v = true;
           }
         });

+ 7 - 0
src/views/business/ehr/pm/performance/index.vue

@@ -217,6 +217,13 @@ export default {
     //数据权限配置
     this.queryParams.params = {dataPermission:"Y"};
     this.getList();
+    //如果是跳转过来的页面带了参数flowId则直接进入填写页面
+    if(this.$route.query.flowId){
+      this.rowId = this.$route.query.performanceId;
+      this.page = 'add';
+      this.ids = [this.$route.query.performanceId];
+      this.isList = false;
+    }
   },
   methods: {
     /** 查询绩效列表 */

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

@@ -45,9 +45,9 @@
         </el-table>
       </div>
       <div class="footer">
-        <el-button type="primary" size="mini" plain @click="btnEdit" v-if="pageState == 'see'">修改</el-button>
+        <el-button type="primary" size="mini" @click="btnEdit" v-if="pageState == 'see'">修改</el-button>
         <el-button size="mini" plain @click="btnCancel" v-if="pageState != 'see'">取消</el-button>
-        <el-button type="primary" size="mini" plain @click="btnSave" v-if="pageState != 'see'">保存</el-button>
+        <el-button type="primary" size="mini" @click="btnSave" v-if="pageState != 'see'">保存</el-button>
       </div>
     </el-card>
 

+ 14 - 1
src/views/business/ehr/pm/psnrelation/index.vue

@@ -14,9 +14,13 @@
           <el-button icon="el-icon-refresh" size="mini" @click="btnResetQuery">重置</el-button>
         </el-form-item>
       </el-form>
+      <div style="float:right">
+        <el-button type="primary" size="mini" @click="btnGetRelation">同步EHR评估关系</el-button>
+      </div>
       <el-table size="mini" height="500px" v-loading="loading" :data="listData" @row-dblclick="btnDetails">
         <el-table-column label="员工编号" align="center" prop="staff" />
         <el-table-column label="员工姓名" align="center" prop="staffName" />
+        <el-table-column label="创建时间" align="center" prop="createTime" />
         <el-table-column label="操作" fixed="right" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
             <el-button
@@ -44,7 +48,7 @@
 
 <script>
 import detail from './detail.vue'
-import { listPsnrelation} from "@/api/business/ehr/pm/psnrelation";
+import { listPsnrelation,sync} from "@/api/business/ehr/pm/psnrelation";
 export default {
   name: "psnrelation",
   components: {detail},
@@ -106,6 +110,15 @@ export default {
       this.rowId = row.id;
       this.page = 'see';
       this.isList = false;
+    },
+    //获取EHR评估关系按钮
+    btnGetRelation(){
+      sync().then(response => {
+        if(response.code == 200){
+          this.$modal.msgSuccess(response.rows.length > 0 ? "同步成功" + "新增下列人员" + response.rows : "同步成功");
+          this.getList();
+        }
+      });
     }
   }
 };

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

@@ -43,9 +43,9 @@
           </el-row>
         </el-form>
         <div class="footer" v-if="form.isPublish == 'N'">
-          <el-button type="primary" size="mini" plain @click="btnEdit" v-if="pageState == 'see'">修改</el-button>
+          <el-button type="primary" size="mini" @click="btnEdit" v-if="pageState == 'see'">修改</el-button>
           <el-button size="mini" plain @click="btnCancel" v-if="pageState != 'see'">取消</el-button>
-          <el-button type="primary" size="mini" plain @click="btnSave" v-if="pageState != 'see'">保存</el-button>
+          <el-button type="primary" size="mini" @click="btnSave" v-if="pageState != 'see'">保存</el-button>
         </div>
       </div>
     </el-card>

+ 3 - 0
src/views/business/ehr/pm/verify/index.vue

@@ -73,6 +73,9 @@ export default {
         pageSize: 10,
         sourceId: null,
         staffName: null,
+        params:{
+          flowStatus: 0,
+        }
       },
       //详情id
       rowId: '',