فهرست منبع

feat: 1.0.02迭代版本

ystl_myq 2 ماه پیش
والد
کامیت
a319c8b2cb

+ 6 - 0
src/api/assessment.ts

@@ -80,3 +80,9 @@ export const automaticCollection = params => {
     params
   });
 };
+// 考核指标管理表头设置
+export const setTableHeader = data => {
+  return http.request<addDept>("post", "/assessment/setTableHeader", {
+    data
+  });
+};

BIN
src/assets/login/logo.png


BIN
src/assets/login/logo@2x.png


BIN
src/assets/rank/logo.png


BIN
src/assets/rank/logo@2x.png


+ 24 - 3
src/components/import/index.vue

@@ -231,12 +231,19 @@ const backupUrl3 =
             style="width: 100%"
             max-height="250"
           >
-            <el-table-column label="工号" prop="hospitalCode" />
+            <el-table-column fixed label="工号" prop="hospitalCode" />
             <el-table-column label="人员" prop="realName" />
             <el-table-column label="考核模板" prop="tpName" />
             <el-table-column label="指标名称" prop="quotaName" />
             <el-table-column label="完成值" prop="finalValue" />
             <el-table-column label="得分" prop="score" />
+            <el-table-column label="目标值" prop="score" />
+            <el-table-column label="上期完成值" prop="score" />
+            <el-table-column label="上上期完成值" prop="score" />
+            <el-table-column label="增幅" prop="score" />
+            <el-table-column label="降幅" prop="score" />
+            <el-table-column label="门槛值" prop="score" />
+            <el-table-column label="挑战值" prop="score" />
           </el-table>
           <el-table
             v-if="query.assessmentType == 1"
@@ -245,12 +252,19 @@ const backupUrl3 =
             style="width: 100%"
             max-height="250"
           >
-            <el-table-column label="部门" prop="deptName" />
+            <el-table-column fixed label="部门" prop="deptName" />
             <el-table-column label="部门编号" prop="hospitalCode" />
             <el-table-column label="考核模板" prop="tpName" />
             <el-table-column label="指标名称" prop="quotaName" />
             <el-table-column label="完成值" prop="finalValue" />
             <el-table-column label="得分" prop="score" />
+            <el-table-column label="目标值" prop="score" />
+            <el-table-column label="上期完成值" prop="score" />
+            <el-table-column label="上上期完成值" prop="score" />
+            <el-table-column label="增幅" prop="score" />
+            <el-table-column label="降幅" prop="score" />
+            <el-table-column label="门槛值" prop="score" />
+            <el-table-column label="挑战值" prop="score" />
           </el-table>
           <el-table
             v-if="query.assessmentType == 2"
@@ -259,12 +273,19 @@ const backupUrl3 =
             style="width: 100%"
             max-height="250"
           >
-            <el-table-column label="用户组" prop="groupName" />
+            <el-table-column fixed label="用户组" prop="groupName" />
             <el-table-column label="用户组编号" prop="hospitalCode" />
             <el-table-column label="考核模板" prop="tpName" />
             <el-table-column label="指标名称" prop="quotaName" />
             <el-table-column label="完成值" prop="finalValue" />
             <el-table-column label="得分" prop="score" />
+            <el-table-column label="目标值" prop="score" />
+            <el-table-column label="上期完成值" prop="score" />
+            <el-table-column label="上上期完成值" prop="score" />
+            <el-table-column label="增幅" prop="score" />
+            <el-table-column label="降幅" prop="score" />
+            <el-table-column label="门槛值" prop="score" />
+            <el-table-column label="挑战值" prop="score" />
           </el-table>
         </div>
         <div class="float-right">

+ 15 - 11
src/views/evaluate/children/change/components/jishuanqi.vue

@@ -24,17 +24,19 @@
             <div class="w-[100%] text-xs mt-2">
               <div><el-text type="info">:::变量</el-text></div>
             </div>
-            <div v-for="item in rolesList.data" :key="item.id">
-              <div
-                :class="[
-                  'cursor-pointer text-xs mt-1',
-                  { bgBack: bgColor === item.id }
-                ]"
-                @click="lookRoles(item)"
-              >
-                <el-text class="">{{ item.name }}</el-text>
+            <el-scrollbar height="200px">
+              <div v-for="item in rolesList.data" :key="item.id">
+                <div
+                  :class="[
+                    'cursor-pointer text-xs mt-1',
+                    { bgBack: bgColor === item.id }
+                  ]"
+                  @click="lookRoles(item)"
+                >
+                  <el-text class="">{{ item.name }}</el-text>
+                </div>
               </div>
-            </div>
+            </el-scrollbar>
           </div>
           <div class="w-3/5 ml-2 h-60 flex flex-col">
             <div class="w-[100%] text-xs h-24 bg-white rounded-md">
@@ -224,7 +226,9 @@ const rolesList = reactive({
     { name: "挑战值", id: 6 },
     { name: "完成值", id: 7 },
     { name: "增幅", id: 8 },
-    { name: "降幅", id: 9 }
+    { name: "降幅", id: 9 },
+    { name: "上期完成值", id: 10 },
+    { name: "上上期完成值", id: 11 }
   ],
   value: "",
   num: null

+ 52 - 15
src/views/evaluate/children/change/components/settingIndexDrawer.vue

@@ -19,7 +19,16 @@ import type { DrawerProps, FormItemProps, FormProps } from "element-plus";
 // const itemLabelPosition = ref<FormItemProps["labelPosition"]>("");
 const drawer = ref(false);
 const disabledValue = ref(true);
-const GONG_SHI = ["完成值", "目标值", "门槛值", "挑战值", "增幅", "降幅"];
+const GONG_SHI = [
+  "完成值",
+  "目标值",
+  "门槛值",
+  "挑战值",
+  "增幅",
+  "降幅",
+  "上期完成值",
+  "上上期完成值"
+];
 // 判断 score 字符串是否包含 GONG_SHI 中的关键字
 function containsKeywordInScore(score, keywordss) {
   // 确保 score 是字符串,keywords 是数组
@@ -170,7 +179,16 @@ const conditionVerifyApi = async () => {
     grade.value = "";
     console.log("params", params);
 
-    const keywords = ["完成值", "目标值", "门槛值", "挑战值", "增幅", "降幅"];
+    const keywords = [
+      "完成值",
+      "目标值",
+      "门槛值",
+      "挑战值",
+      "增幅",
+      "降幅",
+      "上期完成值",
+      "上上期完成值"
+    ];
     let str = params.formula.noConditionFormula;
     // 创建一个正则表达式,匹配这些关键词
     const regex = new RegExp(keywords.join("|"), "g");
@@ -269,7 +287,9 @@ const countComputed = async () => {
           "门槛值",
           "挑战值",
           "增幅",
-          "降幅"
+          "降幅",
+          "上期完成值",
+          "上上期完成值"
         ];
         let str = params.formula.noConditionFormula;
         // 创建一个正则表达式,匹配这些关键词
@@ -485,7 +505,9 @@ const rolesList = reactive({
     { name: "挑战值", id: 6 },
     { name: "完成值", id: 7 },
     { name: "增幅", id: 8 },
-    { name: "降幅", id: 9 }
+    { name: "降幅", id: 9 },
+    { name: "上期完成值", id: 10 },
+    { name: "上上期完成值", id: 11 }
   ],
   value: "",
   num: null
@@ -657,7 +679,16 @@ const addItemDataList = (
   changeAddMay();
 };
 // 多条件公式验证
-const keywords = ["目标值", "完成值", "挑战值", "门槛值", "增幅", "降幅"];
+const keywords = [
+  "目标值",
+  "完成值",
+  "挑战值",
+  "门槛值",
+  "增幅",
+  "降幅",
+  "上期完成值",
+  "上上期完成值"
+];
 // 处理字符串,提取关键词
 function extractKeywords(value) {
   // 如果是字符串,处理包含的关键词
@@ -867,6 +898,9 @@ const changeAddMay = () => {
   });
   Object.assign(addmanyChange, addmanyChangeOldVal);
 };
+const formulaFocus = () => {
+  calculatorShow.value = true;
+};
 // { deep: true };
 </script>
 
@@ -937,6 +971,7 @@ const changeAddMay = () => {
                       v-model="params.formula.noConditionFormula"
                       class="ml-2 mr-2"
                       style="width: 240px"
+                      @focus="formulaFocus"
                     />
                     <el-text>
                       <el-button type="primary" @click="conditionVerifyApi"
@@ -953,17 +988,19 @@ const changeAddMay = () => {
                       <div class="w-[100%] text-xs mt-2">
                         <div><el-text type="info">:::变量</el-text></div>
                       </div>
-                      <div v-for="item in rolesList.data" :key="item.id">
-                        <div
-                          :class="[
-                            'cursor-pointer text-xs mt-1',
-                            { bgBack: bgColor === item.id }
-                          ]"
-                          @click="lookRoles(item)"
-                        >
-                          <el-text class="">{{ item.name }}</el-text>
+                      <el-scrollbar height="200px">
+                        <div v-for="item in rolesList.data" :key="item.id">
+                          <div
+                            :class="[
+                              'cursor-pointer text-xs mt-1',
+                              { bgBack: bgColor === item.id }
+                            ]"
+                            @click="lookRoles(item)"
+                          >
+                            <el-text class="">{{ item.name }}</el-text>
+                          </div>
                         </div>
-                      </div>
+                      </el-scrollbar>
                     </div>
                     <div class="w-3/5 ml-2 h-60 flex flex-col">
                       <div class="w-[100%] text-xs h-24 bg-white rounded-md">

+ 197 - 28
src/views/evaluate/children/change/mould/manageObject.vue

@@ -3,7 +3,7 @@ defineOptions({
   name: "evaluateChangeManageObject"
 });
 import { getState, getStateType, assessmentStatus } from "@/config/tag";
-import { ref, reactive, onMounted, watch } from "vue";
+import { ref, reactive, onMounted, watch, computed } from "vue";
 import {
   getAssessmentQuotaDetails,
   delAssessmentObject,
@@ -11,7 +11,8 @@ import {
   postAddAssessmentObject,
   updateAssessmentQuotaDetails,
   alterFinishValue,
-  automaticCollection
+  automaticCollection,
+  setTableHeader
 } from "@/api/assessment";
 import { getTemplateInfoList } from "@/api/templateInfo";
 import { useRouter } from "vue-router";
@@ -117,6 +118,7 @@ const convertDepartmentDataRecursive = data => {
 const dpetTree = ref([]);
 onMounted(() => {
   Object.assign(messageData.value, $props.message);
+  console.log("传递的值", $props.message);
   switch (messageData.value.assessmentType) {
     case 0:
       initParams.assessmentType = "员工";
@@ -138,8 +140,6 @@ onMounted(() => {
   getAssessmentQuotaDetailsApi();
   getTemplateInfoListApi();
   getAssessmentObjectDetailsApi();
-  console.log("messageData.value", typeof state.tableType);
-  console.log("messageData.value", state.tableType);
 });
 const treeDeptList = ref([]);
 const assessmentTypeApi = async value => {
@@ -594,6 +594,89 @@ const automaticCollectionApi = async () => {
     ElMessage.error(msg);
   }
 };
+const assessmentHeader = reactive({
+  id: "",
+  name: "",
+  cycle: "",
+  cycleValue: "",
+  assessmentType: 0,
+  assessmentStatus: 0,
+  isDelete: 0,
+  showTargetValue: 1,
+  showChallengeValue: 0,
+  showStartValue: 0,
+  showAddValue: 0,
+  showDecValue: 0,
+  showUpperValue: 0,
+  showAgupperValue: 0
+});
+// 开关状态
+// 目标值
+const showTargetValueSwitch = computed({
+  get: () => assessmentHeader.showTargetValue === 1,
+  set: value => {
+    assessmentHeader.showTargetValue = value ? 1 : 0;
+  }
+});
+// 挑战值
+const showChallengeValueSwitch = computed({
+  get: () => assessmentHeader.showChallengeValue === 1,
+  set: value => {
+    assessmentHeader.showChallengeValue = value ? 1 : 0;
+  }
+});
+// 门槛值
+const showStartValueSwitch = computed({
+  get: () => assessmentHeader.showStartValue === 1,
+  set: value => {
+    assessmentHeader.showStartValue = value ? 1 : 0;
+  }
+});
+// 增幅值
+const showAddValueSwitch = computed({
+  get: () => assessmentHeader.showAddValue === 1,
+  set: value => {
+    assessmentHeader.showAddValue = value ? 1 : 0;
+  }
+});
+// 降幅值
+const showDecValueSwitch = computed({
+  get: () => assessmentHeader.showDecValue === 1,
+  set: value => {
+    assessmentHeader.showDecValue = value ? 1 : 0;
+  }
+});
+// 上期数值
+const showUpperValueSwitch = computed({
+  get: () => assessmentHeader.showUpperValue === 1,
+  set: value => {
+    assessmentHeader.showUpperValue = value ? 1 : 0;
+  }
+});
+// 上上期值
+const showAgupperValueSwitch = computed({
+  get: () => assessmentHeader.showAgupperValue === 1,
+  set: value => {
+    assessmentHeader.showAgupperValue = value ? 1 : 0;
+  }
+});
+const setTableHeaderApi = async () => {
+  Object.assign(assessmentHeader, {
+    id: $props.message.id,
+    name: $props.message.name,
+    cycle: $props.message.cycle,
+    cycleValue: $props.message.cycleValue,
+    assessmentType: $props.message.assessmentType,
+    assessmentStatus: $props.message.assessmentStatus
+  });
+  const { code, msg } = await setTableHeader(assessmentHeader);
+  if (code === 200) {
+    getAssessmentQuotaDetailsApi();
+    ElMessage.success("表头设置成功");
+  } else {
+    ElMessage.error(msg);
+  }
+};
 </script>
 
 <template>
@@ -905,33 +988,119 @@ const automaticCollectionApi = async () => {
               {{ dayjs(row.updateTime).format("YYYY-MM-DD HH:mm:ss") }}
             </template>
           </vxe-column>
-          <vxe-column field="" title="操作" fixed="right" width="180">
+          <vxe-column field="" title="操作1" fixed="right" width="180">
+            <template #header>
+              操作
+              <!-- 在表头操作后面添加图标 -->
+              <el-dropdown placement="top-start" trigger="click">
+                <el-icon class="mt-1 w-20 h-10">
+                  <Setting />
+                </el-icon>
+                <template #dropdown>
+                  <el-dropdown-menu>
+                    <div class="w-[200px] p-1">
+                      <div class="mt-2">
+                        <el-text class="mx-1">表头设置</el-text>
+                      </div>
+                      <el-text type="info" size="small">可配置字段</el-text>
+                      <div class="w-full">
+                        <div class="w-full flex justify-evenly items-center">
+                          <div class="w-24">
+                            <el-text type="info" size="small">目标值</el-text>
+                          </div>
+                          <el-switch
+                            v-model="showTargetValueSwitch"
+                            size="small"
+                            class="ml-2"
+                          />
+                        </div>
+                        <div class="w-full flex justify-evenly items-center">
+                          <div class="w-24">
+                            <el-text type="info" size="small">增幅</el-text>
+                          </div>
+                          <el-switch
+                            v-model="showAddValueSwitch"
+                            size="small"
+                            class="ml-2"
+                          />
+                        </div>
+                        <div class="w-full flex justify-evenly items-center">
+                          <div class="w-24">
+                            <el-text type="info" size="small">降幅</el-text>
+                          </div>
+                          <el-switch
+                            v-model="showDecValueSwitch"
+                            size="small"
+                            class="ml-2"
+                          />
+                        </div>
+                        <div class="w-full flex justify-evenly items-center">
+                          <div class="w-24">
+                            <el-text type="info" size="small">挑战值</el-text>
+                          </div>
+                          <el-switch
+                            v-model="showChallengeValueSwitch"
+                            size="small"
+                            class="ml-2"
+                          />
+                        </div>
+                        <div class="w-full flex justify-evenly items-center">
+                          <div class="w-24">
+                            <el-text type="info" size="small">门槛值</el-text>
+                          </div>
+                          <el-switch
+                            v-model="showStartValueSwitch"
+                            size="small"
+                            class="ml-2"
+                          />
+                        </div>
+                        <div class="w-full flex justify-evenly items-center">
+                          <div class="w-24">
+                            <el-text type="info" size="small"
+                              >上期完成值</el-text
+                            >
+                          </div>
+                          <el-switch
+                            v-model="showUpperValueSwitch"
+                            size="small"
+                            class="ml-2"
+                          />
+                        </div>
+                        <div class="w-full flex justify-evenly items-center">
+                          <div class="w-24">
+                            <el-text type="info" size="small"
+                              >上上期完成值</el-text
+                            >
+                          </div>
+                          <el-switch
+                            v-model="showAgupperValueSwitch"
+                            size="small"
+                            class="ml-2"
+                          />
+                        </div>
+                      </div>
+                    </div>
+                    <el-dropdown-item>
+                      <div class="mt-4 ml-20 mb-2 flex float-right">
+                        <el-tag effect="light" class="mr-3" size="small"
+                          >取消</el-tag
+                        >
+                        <el-tag
+                          effect="dark"
+                          size="small"
+                          type="primary"
+                          @click="setTableHeaderApi"
+                          >确认</el-tag
+                        >
+                      </div>
+                    </el-dropdown-item>
+                  </el-dropdown-menu>
+                </template>
+              </el-dropdown>
+            </template>
             <template #default> - </template>
           </vxe-column>
         </vxe-table>
-        <!-- <el-table :data="initParams.Indexlist" style="width: 100%" max-height="250" @selection-change="changeSelection">
-          <el-table-column type="selection" width="55" />
-          <el-table-column prop="realName" label="人员" width="100" />
-          <el-table-column prop="userName" label="工号" width="180" />
-          <el-table-column prop="deptName" label="部门" width="180" />
-          <el-table-column prop="name" label="指标名称" width="180" />
-          <el-table-column prop="scoreRule" label="评价标准" width="180" />
-          <el-table-column prop="source" label="数据来源" width="180" />
-          <el-table-column prop="targetValue" label="目标值" width="180" />
-          <el-table-column prop="finalValue" label="完成值" width="180" />
-          <el-table-column prop="score" label="得分" width="180" />
-          <el-table-column prop="updateTime" label="更新时间" width="150" sortable>
-          <el-table-column prop="updateTime" label="更新时间" width="150" sortable>
-            <template #default="{ row }">
-              {{ dayjs(row.updateTime).format("YYYY-MM-DD HH:mm:ss") }}
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" width="200" fixed="right">
-            <template #default>
-              -
-            </template>
-          </el-table-column>
-        </el-table> -->
         <div class="flex justify-between item-center">
           <div class="float-left mt-5 ml-2 total">
             <!-- 共{{ initParams.total1 }}条数据 -->