Browse Source

feat: 考核模板

ystl_myq 7 months ago
parent
commit
81b561d832

+ 99 - 0
src/api/draw.ts

@@ -0,0 +1,99 @@
+import { http } from "@/utils/http";
+
+type addDeptList = {
+  code: number;
+  msg: string;
+  data: Array<ChartsList>;
+};
+type ChartsList = {
+  id: string;
+  name: string;
+  cycle: string;
+  cycleValue: string;
+  assessmentType: number;
+  assessmentStatus: number;
+  isDelete: number;
+  assessmentObjectName: string;
+  assessmentObjectId: string;
+  dimensionList: Array<dimensionList>;
+};
+type dimensionList = {
+  dimName: string;
+  dimId: string;
+  totalSore: number;
+  quotaList: Array<quotaList>;
+};
+type quotaList = {
+  quotaId: string;
+  quotaName: string;
+  quotaWeight: string;
+  quotaScore: number;
+  finalValue: number;
+  startValue: number;
+  challengeValue: number;
+  ranking: number;
+  assessmentName: string;
+  assessmentId: string;
+  assessmentModelName: string;
+  assessmentModelId: string;
+  assessmentObjectId: string;
+  assessmentObjectName: string;
+  dimId: string;
+  dimensionName: string;
+  code: number;
+  msg: string;
+};
+// 所有考核
+export const getAssessmentList = params => {
+  return http.request<addDeptList>(
+    "get",
+    "/specialPortrait/getAssessmentList",
+    { params }
+  );
+};
+// 排名专题画像
+export const getChartsList = params => {
+  return http.request<addDeptList>("get", "/specialPortrait/getChartsList", {
+    params
+  });
+};
+// 考核活动查询考核模板
+export const getModelListByAssessmentId = params => {
+  return http.request<addDeptList>(
+    "get",
+    "/specialPortrait/getModelListByAssessmentId",
+    {
+      params
+    }
+  );
+};
+// 员工维度专题画像
+export const getPersonDimensionChartsList = params => {
+  return http.request<addDeptList>(
+    "get",
+    "/specialPortrait/getPersonDimensionChartsList",
+    {
+      params
+    }
+  );
+};
+// 员工画像维度详情专题画像
+export const getPersonDimensionChartsRanking = params => {
+  return http.request<addDeptList>(
+    "get",
+    "/specialPortrait/getPersonDimensionChartsRanking",
+    {
+      params
+    }
+  );
+};
+// 根据考核模板查询所有被考核对象
+export const getUserListObjectByModelId = params => {
+  return http.request<quotaList>(
+    "get",
+    "/specialPortrait/getUserListObjectByModelId",
+    {
+      params
+    }
+  );
+};

+ 20 - 4
src/api/templateInfo.ts

@@ -10,6 +10,15 @@ type templateInfoList = {
   msg: string;
   data: Array<any>;
 };
+type templateInfoData = {
+  code: number;
+  msg: string;
+  data: addTemplate;
+};
+type addTemplate = {
+  tpName: string;
+  id: string;
+};
 // 分页查询
 export const getTemplateInfoList = params => {
   return http.request<templateInfoList>("get", "/templateInfo/page", {
@@ -18,17 +27,24 @@ export const getTemplateInfoList = params => {
 };
 // 添加
 export const postAddTemplate = data => {
-  return http.request<templateInfo>("post", "/templateInfo/addTemplate", {
+  return http.request<templateInfoData>("post", "/templateInfo/addTemplate", {
     data
   });
 };
 // 复制
-export const getCopyTemplate = data => {
+export const getCopyTemplate = params => {
   return http.request<templateInfo>("get", "/templateInfo/copyTemplate", {
-    data
+    params
   });
 };
 // 删除
 export const getDeleteTemplate = id => {
-  return http.request<templateInfo>("get", `/templateInfo/remove/id=${id}`);
+  return http.request<templateInfo>("get", `/templateInfo/remove/${id}`);
+};
+// 获取指标
+export const getInfoRelation = id => {
+  return http.request<templateInfo>(
+    "get",
+    `/templateIndicatorRelation/getInfo/id=${id}`
+  );
 };

+ 15 - 0
src/assets/svg/1-1.svg

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>图标/24pt/搜索备份 11</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="考核模版_基础信息" transform="translate(-602.000000, -92.000000)">
+            <g id="图标/24pt/搜索备份-11" transform="translate(602.000000, 92.000000)">
+                <rect id="矩形" fill="#0052D9" x="3" y="3" width="18" height="18" rx="2"></rect>
+                <text id="1" font-family="PingFangSC-Medium, PingFang SC" font-size="14" font-weight="400" fill="#FFFFFF">
+                    <tspan x="9.144" y="17">1</tspan>
+                </text>
+                <rect id="codesign_placeholder_name" x="0" y="0" width="24" height="24"></rect>
+            </g>
+        </g>
+    </g>
+</svg>

+ 15 - 0
src/assets/svg/1.svg

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>图标/24pt/搜索备份 10</title>
+    <g id="页面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="新建考核模版_考核指标" transform="translate(-748.000000, -92.000000)">
+            <g id="图标/24pt/搜索备份-10" transform="translate(748.000000, 92.000000)">
+                <rect id="矩形" fill="#0052D9" x="3" y="3" width="18" height="18" rx="2"></rect>
+                <text id="1" font-family="PingFangSC-Medium, PingFang SC" font-size="14" font-weight="400" fill="#FFFFFF">
+                    <tspan x="7.8" y="17">2</tspan>
+                </text>
+                <rect id="codesign_placeholder_name" x="0" y="0" width="24" height="24"></rect>
+            </g>
+        </g>
+    </g>
+</svg>

+ 15 - 0
src/assets/svg/2-2.svg

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>图标/24pt/搜索备份 10</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="考核模版_基础信息" transform="translate(-748.000000, -92.000000)">
+            <g id="图标/24pt/搜索备份-10" transform="translate(748.000000, 92.000000)">
+                <rect id="矩形" fill="#DADADA" x="3" y="3" width="18" height="18" rx="2"></rect>
+                <text id="2" font-family="PingFangSC-Medium, PingFang SC" font-size="14" font-weight="400" fill="#FFFFFF">
+                    <tspan x="7.8" y="17">2</tspan>
+                </text>
+                <rect id="codesign_placeholder_name" x="0" y="0" width="24" height="24"></rect>
+            </g>
+        </g>
+    </g>
+</svg>

+ 15 - 0
src/assets/svg/2.svg

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>图标/24pt/搜索备份 11</title>
+    <g id="页面" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="新建考核模版_考核指标" transform="translate(-602.000000, -92.000000)">
+            <g id="图标/24pt/搜索备份-11" transform="translate(602.000000, 92.000000)">
+                <rect id="矩形" fill="#DADADA" x="3" y="3" width="18" height="18" rx="2"></rect>
+                <text id="2" font-family="PingFangSC-Medium, PingFang SC" font-size="14" font-weight="400" fill="#FFFFFF">
+                    <tspan x="9.144" y="17">1</tspan>
+                </text>
+                <rect id="codesign_placeholder_name" x="0" y="0" width="24" height="24"></rect>
+            </g>
+        </g>
+    </g>
+</svg>

+ 28 - 8
src/views/evaluate/children/change/components/editMould.vue

@@ -1,5 +1,5 @@
 <script setup lang="ts">
-import { ref, reactive } from "vue";
+import { ref, reactive, watch } from "vue";
 import { ElMessageBox, ElMessage } from "element-plus";
 import { postAddDimension, getDimensionRemove } from "@/api/dimension";
 import type { DrawerProps, FormItemProps, FormProps } from "element-plus";
@@ -19,15 +19,35 @@ const formLabelAlign = reactive({
   dimName: "",
   dimWeight: "",
   mode: 1,
-  showIndicRemark: false,
-  showScoreRule: false,
-  showDatasource: false,
-  showTargetValue: false,
-  showFinalValue: false,
-  showChallengeValue: false,
-  showStartValue: false,
+  showIndicRemark: 1,
+  showScoreRule: 1,
+  showDatasource: 0,
+  showTargetValue: 0,
+  showFinalValue: 0,
+  showChallengeValue: 0,
+  showStartValue: 0,
   remark: ""
 });
+watch(
+  () => [
+    formLabelAlign.showIndicRemark,
+    formLabelAlign.showScoreRule,
+    formLabelAlign.showDatasource,
+    formLabelAlign.showTargetValue,
+    formLabelAlign.showFinalValue,
+    formLabelAlign.showChallengeValue,
+    formLabelAlign.showStartValue
+  ],
+  newValues => {
+    formLabelAlign.showIndicRemark = newValues[0] ? 1 : 0;
+    formLabelAlign.showScoreRule = newValues[1] ? 1 : 0;
+    formLabelAlign.showDatasource = newValues[2] ? 1 : 0;
+    formLabelAlign.showTargetValue = newValues[3] ? 1 : 0;
+    formLabelAlign.showFinalValue = newValues[4] ? 1 : 0;
+    formLabelAlign.showChallengeValue = newValues[5] ? 1 : 0;
+    formLabelAlign.showStartValue = newValues[6] ? 1 : 0;
+  }
+);
 const newAddItem = ref();
 const handleClose = (done: () => void) => {
   // ElMessageBox.confirm("配置项未保存,确认关闭", {

+ 80 - 32
src/views/evaluate/children/change/components/newAdd.vue

@@ -3,12 +3,17 @@ defineOptions({
   name: "evaluateNewAdd"
 });
 import { ref, reactive, onMounted } from "vue";
+import one from "@/assets/svg/2.svg";
+import two from "@/assets/svg/1.svg";
+import one1 from "@/assets/svg/2-2.svg";
+import two2 from "@/assets/svg/1-1.svg";
 import { useRouter, useRoute } from "vue-router";
 import { Edit } from "@element-plus/icons-vue";
 import { ElMessageBox, ElMessage } from "element-plus";
 import { postAddDimension, getDimensionRemove } from "@/api/dimension";
 import editMould from "./editMould.vue";
 import settingIndexDrawer from "./settingIndexDrawer.vue";
+import { postAddTemplate, getInfoRelation } from "@/api/templateInfo";
 import importIndex from "./importIndex.vue";
 import { useNav } from "@/layout/hooks/useNav";
 const { toggleSideBar } = useNav();
@@ -18,6 +23,7 @@ const formRef = ref();
 const active = ref(0);
 const editDrawer = ref();
 const editDrawerShow = ref(false);
+const titleShow = ref(false);
 // 指标设置
 const settingIndexDrawerRef = ref();
 const settingIndexDrawerShow = ref(false);
@@ -32,18 +38,40 @@ const tepName = ref();
 onMounted(() => {
   if (route.query.tpName) {
     tepNameForm.tpName = route.query.tpName;
+    tepNameForm.id = route.query.id;
   }
 });
 const tepNameForm = reactive({
-  tpName: ""
+  tpName: "",
+  id: ""
 });
+const postAddTemplateApi = async () => {
+  const res = await postAddTemplate({ ...tepNameForm });
+  if (res.code === 200) {
+    ElMessage({
+      message: "创建成功",
+      type: "success"
+    });
+    console.log("res", res.data);
+    tepNameForm.tpName = res.data.tpName;
+    tepNameForm.id = res.data.id;
+    titleShow.value = true;
+  } else {
+    ElMessage.error(res.msg);
+  }
+};
 // 考核维度卡片
-const eaxmCard = ref([
-  { name: "工作量", value: 1 }
-  // { name: "效率", value: 2 },
-  // { name: "考核维度", value: 3 },
-  // { name: "维度", value: 4 }
-]);
+const eaxmCard = ref([{ name: "工作量", value: 1 }]);
+// 获取指标信息
+const getInfoRelationApi = async () => {
+  const { code, data, msg } = await getInfoRelation(tepNameForm.id);
+  console.log("data", data);
+  if (code === 200) {
+    titleShow.value = true;
+  } else {
+    ElMessage.error(msg);
+  }
+};
 const addDimension = reactive({
   list: [
     {
@@ -90,10 +118,11 @@ const tableData = ref([
 ]);
 const save = () => {
   formRef.value.validate(valid => {
-    console.log(valid);
     if (valid) {
-      if (active.value++ > 2) {
-        active.value = 0;
+      if (tepNameForm.id) {
+        getInfoRelationApi();
+      } else {
+        postAddTemplateApi();
       }
     }
   });
@@ -184,34 +213,30 @@ const importIndexDialog = row => {
         >
       </div>
       <div class="center-box">
-        <!-- <el-menu
-          default-active="1"
-          class="el-menu-demo flex justify-evenly"
-          mode="horizontal"
-          @select="handleSelect"
-        >
-          <el-menu-item index="1">基础信息</el-menu-item>
-          <el-menu-item index="2">考核指标</el-menu-item>
-          <el-menu-item index="3">考核流程</el-menu-item>
-        </el-menu> -->
-        <el-steps
-          style="max-width: 600px"
-          :active="active"
-          finish-status="success"
-          class="m-auto"
-          simple
+        <div
+          style="max-width: 220px"
+          class="m-auto flex justify-between items-center"
         >
-          <el-step title="基础信息" :icon="Edit" />
-          <el-step title="考核指标" :icon="Edit" />
-          <!-- <el-step title="考核流程" :icon="Edit" /> -->
-        </el-steps>
+          <div
+            :class="{ 'step-success': !titleShow, 'step-error': titleShow }"
+            class="w-[100px] flex justify-center items-center"
+          >
+            <one v-if="titleShow" /><two2 v-else />基础信息
+          </div>
+          <div
+            :class="{ 'step-success': titleShow, 'step-error': !titleShow }"
+            class="w-[100px] flex justify-center items-center"
+          >
+            <two v-if="titleShow" /><one1 v-else />考核指标
+          </div>
+        </div>
       </div>
       <div class="right-box">
         <el-button type="primary" class="mr-2" @click="save()">保存</el-button>
       </div>
     </div>
     <div class="mt-2">
-      <div v-if="active == 0" class="w-[40%] m-auto mt-10">
+      <div v-if="!titleShow" class="w-[40%] m-auto mt-10">
         <el-form
           ref="formRef"
           :model="tepNameForm"
@@ -236,7 +261,7 @@ const importIndexDialog = row => {
           </el-form-item>
         </el-form>
       </div>
-      <div v-if="active == 1" class="w-[90%] m-auto mt-4">
+      <div v-else class="w-[90%] m-auto mt-4">
         <div class="relative h-10">
           <el-button class="float-right" type="primary" plain @click="createAdd"
             >创建考核维度</el-button
@@ -308,4 +333,27 @@ const importIndexDialog = row => {
   justify-content: center;
   margin: auto;
 }
+
+.step-success {
+  height: 24px;
+  padding-bottom: 5px;
+  font-size: 16px;
+  // font-family: PingFangSC-SNaNpxibold;
+  font-weight: 600;
+  line-height: 24px;
+  color: black;
+  color: #000000e6;
+  border-bottom: 2px solid #022bbd;
+}
+
+.step-error {
+  height: 24px;
+  padding-bottom: 5px;
+  font-size: 16px;
+  // font-family: PingFangSC-SNaNpxibold;
+  font-weight: 600;
+  line-height: 24px;
+  color: #0006;
+  letter-spacing: 0;
+}
 </style>

+ 1 - 0
src/views/evaluate/children/change/mould.vue

@@ -65,6 +65,7 @@ const setDelete = (row: any) => {
     .then(async () => {
       const { code } = await getDeleteTemplate(row.id);
       if (code === 200) {
+        getTemplateInfoListApi();
         ElMessage.success("删除成功");
       }
     })

+ 9 - 15
src/views/evaluate/children/change/mould/copyMould.vue

@@ -1,29 +1,19 @@
 <script setup lang="ts">
 import { ref, reactive } from "vue";
 import { ElMessageBox, ElMessage } from "element-plus";
-import { getCopyTemplate, postAddTemplate } from "@/api/templateInfo";
+import { getCopyTemplate } from "@/api/templateInfo";
 const $emit = defineEmits(["addTemplateApi"]);
 const dialogVisibleAdd = ref(false);
 const copyTitle = ref("");
-const addTem = ref({});
 // 复制
 const getCopyTemplateApi = async () => {
   const res = await getCopyTemplate(form);
   if (res.code === 200) {
-    postAddTemplateApi();
-    Object.assign(addTem.value, res.data);
+    $emit("addTemplateApi");
   } else {
     ElMessage.error(res.msg);
   }
 };
-// 添加
-const postAddTemplateApi = async () => {
-  const { code, data } = await postAddTemplate(addTem.value);
-  if (code === 200) {
-    $emit("addTemplateApi");
-    ElMessage.success("复制成功");
-  }
-};
 const copyMould = () => {
   return "复制来源:" + copyTitle.value;
 };
@@ -43,9 +33,13 @@ const saveDepartment = () => {
   getCopyTemplateApi();
 };
 const open = (item: any) => {
-  copyTitle.value = item.tpName;
-  form.name = item.tpName + "_副本";
-  form.id = item.id;
+  form.name = "";
+  form.id = "";
+  if (item) {
+    copyTitle.value = item.tpName;
+    form.name = item.tpName + "_副本";
+    form.id = item.id;
+  }
   dialogVisibleAdd.value = true;
 };
 defineExpose({