|
@@ -12,7 +12,8 @@ import {
|
|
|
updateAssessmentQuotaDetails,
|
|
|
alterFinishValue,
|
|
|
automaticCollection,
|
|
|
- setTableHeader
|
|
|
+ setTableHeader,
|
|
|
+ getAssessmentDetails
|
|
|
} from "@/api/assessment";
|
|
|
import { getTemplateInfoList } from "@/api/templateInfo";
|
|
|
import { useRouter } from "vue-router";
|
|
@@ -116,7 +117,7 @@ const convertDepartmentDataRecursive = data => {
|
|
|
});
|
|
|
};
|
|
|
const dpetTree = ref([]);
|
|
|
-onMounted(() => {
|
|
|
+onMounted(async () => {
|
|
|
Object.assign(messageData.value, $props.message);
|
|
|
console.log("传递的值", $props.message);
|
|
|
switch (messageData.value.assessmentType) {
|
|
@@ -137,9 +138,9 @@ onMounted(() => {
|
|
|
initParams.objParams.assessmentId = $props.message.id;
|
|
|
initParams.indexParams.assessmentId = $props.message.id;
|
|
|
state.tableType = $props.message.assessmentType;
|
|
|
- getAssessmentQuotaDetailsApi();
|
|
|
- getTemplateInfoListApi();
|
|
|
- getAssessmentObjectDetailsApi();
|
|
|
+ await getAssessmentQuotaDetailsApi();
|
|
|
+ await getTemplateInfoListApi();
|
|
|
+ await getAssessmentObjectDetailsApi();
|
|
|
});
|
|
|
const treeDeptList = ref([]);
|
|
|
const assessmentTypeApi = async value => {
|
|
@@ -179,6 +180,7 @@ const getAssessmentQuotaDetailsApi = async () => {
|
|
|
initParams.Indexlist = res.data.records;
|
|
|
initParams.total1 = res.data.totalRow;
|
|
|
alterFinishValueApi();
|
|
|
+ getAssessmentDetailsApi(); // 获取考核指标详情表头信息
|
|
|
}
|
|
|
};
|
|
|
// 考核模板
|
|
@@ -453,9 +455,10 @@ const updateAssessmentQuotaDetailsApi = async row => {
|
|
|
assessmentId: null
|
|
|
});
|
|
|
if (code === 200) {
|
|
|
- getAssessmentQuotaDetailsApi();
|
|
|
ElMessage.success("修改成功");
|
|
|
+ getAssessmentQuotaDetailsApi();
|
|
|
} else {
|
|
|
+ getAssessmentQuotaDetailsApi();
|
|
|
// 这里code不等于200调用了保存信息无法探寻到
|
|
|
// ElMessage.error(msg);
|
|
|
}
|
|
@@ -465,12 +468,21 @@ const editConfig = ref({
|
|
|
trigger: "click",
|
|
|
mode: "cell",
|
|
|
showStatus: true,
|
|
|
- beforeEditMethod({ row }) {
|
|
|
- console.log("编辑123212132", row);
|
|
|
- if (row.valueInput == 4 || row.valueInput == "4") {
|
|
|
- return false;
|
|
|
- } else {
|
|
|
+ beforeEditMethod({ row, column }) {
|
|
|
+ console.log("编辑123212132", column.title);
|
|
|
+ // 完成值 挑战值 门槛值 增幅 降幅 上期完成值 上上期完成值 得分
|
|
|
+ if (
|
|
|
+ column.title == "目标值" ||
|
|
|
+ column.title == "挑战值" ||
|
|
|
+ column.title == "门槛值"
|
|
|
+ ) {
|
|
|
return true;
|
|
|
+ } else {
|
|
|
+ if (row.valueInput == 4 || row.valueInput == "4") {
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
});
|
|
@@ -484,6 +496,11 @@ const editVxe = reactive({
|
|
|
assessmentModelId: null,
|
|
|
id: null,
|
|
|
dimId: null,
|
|
|
+ addValue: null,
|
|
|
+ decValue: null,
|
|
|
+ challengeValue: null,
|
|
|
+ upperValue: null,
|
|
|
+ agupperValue: null,
|
|
|
assessmentId: null
|
|
|
});
|
|
|
// 编辑前面
|
|
@@ -499,6 +516,11 @@ const hangdleOpenClick = row => {
|
|
|
score: null,
|
|
|
assessmentObjectId: null,
|
|
|
assessmentModelId: null,
|
|
|
+ addValue: null,
|
|
|
+ decValue: null,
|
|
|
+ challengeValue: null,
|
|
|
+ upperValue: null,
|
|
|
+ agupperValue: null,
|
|
|
id: null,
|
|
|
dimId: null,
|
|
|
assessmentId: null
|
|
@@ -510,6 +532,7 @@ const editClosedEvent = row => {
|
|
|
// { row, column, newValue, oldValue }
|
|
|
const $table = tableVxeRef.value;
|
|
|
if ($table) {
|
|
|
+ console.log(1433223, row.row);
|
|
|
editVxe.relationId = row.row?.relationId;
|
|
|
editVxe.assessmentModelId = row.row?.assessmentModelId;
|
|
|
editVxe.assessmentObjectId = row.row?.assessmentObjectId;
|
|
@@ -523,8 +546,15 @@ const editClosedEvent = row => {
|
|
|
// 判断是否id相同
|
|
|
if (editVxe.score != row.row?.score) {
|
|
|
// if (row.row?.id != editVxe.id) {
|
|
|
- editVxe.score = row.row?.score;
|
|
|
+ editVxe.score = convertToNumberIfPercentage(row.row?.score);
|
|
|
editVxe.finalValue = null;
|
|
|
+ editVxe.challengeValue = null;
|
|
|
+ editVxe.startValue = null;
|
|
|
+ editVxe.addValue = null;
|
|
|
+ editVxe.decValue = null;
|
|
|
+ editVxe.upperValue = null;
|
|
|
+ editVxe.targetValue = null;
|
|
|
+ editVxe.agupperValue = null;
|
|
|
updateAssessmentQuotaDetailsApi(editVxe);
|
|
|
// }
|
|
|
}
|
|
@@ -534,13 +564,142 @@ const editClosedEvent = row => {
|
|
|
if (row.row?.finalValue) {
|
|
|
// if (row.row?.id != editVxe.id) {
|
|
|
if (editVxe.finalValue != row.row?.finalValue) {
|
|
|
- editVxe.finalValue = row.row?.finalValue;
|
|
|
+ editVxe.finalValue = convertToNumberIfPercentage(row.row?.finalValue);
|
|
|
+ editVxe.score = null;
|
|
|
+ editVxe.challengeValue = null;
|
|
|
+ editVxe.startValue = null;
|
|
|
+ editVxe.addValue = null;
|
|
|
+ editVxe.decValue = null;
|
|
|
+ editVxe.upperValue = null;
|
|
|
+ editVxe.targetValue = null;
|
|
|
+ editVxe.agupperValue = null;
|
|
|
+ updateAssessmentQuotaDetailsApi(editVxe);
|
|
|
+ }
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (row.column.title == "挑战值") {
|
|
|
+ if (row.row?.challengeValue) {
|
|
|
+ // if (row.row?.id != editVxe.id) {
|
|
|
+ if (editVxe.challengeValue != row.row?.challengeValue) {
|
|
|
+ editVxe.challengeValue = convertToNumberIfPercentage(
|
|
|
+ row.row?.challengeValue
|
|
|
+ );
|
|
|
+ editVxe.score = null;
|
|
|
+ editVxe.finalValue = null;
|
|
|
+ editVxe.startValue = null;
|
|
|
+ editVxe.addValue = null;
|
|
|
+ editVxe.decValue = null;
|
|
|
+ editVxe.upperValue = null;
|
|
|
+ editVxe.targetValue = null;
|
|
|
+ editVxe.agupperValue = null;
|
|
|
+ updateAssessmentQuotaDetailsApi(editVxe);
|
|
|
+ }
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (row.column.title == "门槛值") {
|
|
|
+ if (row.row?.startValue) {
|
|
|
+ // if (row.row?.id != editVxe.id) {
|
|
|
+ if (editVxe.startValue != row.row?.startValue) {
|
|
|
+ editVxe.startValue = convertToNumberIfPercentage(row.row?.startValue);
|
|
|
editVxe.score = null;
|
|
|
+ editVxe.finalValue = null;
|
|
|
+ editVxe.challengeValue = null;
|
|
|
+ editVxe.addValue = null;
|
|
|
+ editVxe.decValue = null;
|
|
|
+ editVxe.upperValue = null;
|
|
|
+ editVxe.targetValue = null;
|
|
|
+ editVxe.agupperValue = null;
|
|
|
updateAssessmentQuotaDetailsApi(editVxe);
|
|
|
}
|
|
|
// }
|
|
|
}
|
|
|
}
|
|
|
+ if (row.column.title == "增幅") {
|
|
|
+ if (row.row?.addValue) {
|
|
|
+ if (editVxe.addValue != row.row?.addValue) {
|
|
|
+ editVxe.addValue = convertToNumberIfPercentage(row.row?.addValue);
|
|
|
+ editVxe.startValue = null;
|
|
|
+ editVxe.score = null;
|
|
|
+ editVxe.finalValue = null;
|
|
|
+ editVxe.challengeValue = null;
|
|
|
+ editVxe.decValue = null;
|
|
|
+ editVxe.upperValue = null;
|
|
|
+ editVxe.targetValue = null;
|
|
|
+ editVxe.agupperValue = null;
|
|
|
+ updateAssessmentQuotaDetailsApi(editVxe);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (row.column.title == "降幅") {
|
|
|
+ if (row.row?.decValue) {
|
|
|
+ if (editVxe.decValue != row.row?.decValue) {
|
|
|
+ editVxe.decValue = convertToNumberIfPercentage(row.row?.decValue);
|
|
|
+ editVxe.startValue = null;
|
|
|
+ editVxe.score = null;
|
|
|
+ editVxe.finalValue = null;
|
|
|
+ editVxe.challengeValue = null;
|
|
|
+ editVxe.addValue = null;
|
|
|
+ editVxe.upperValue = null;
|
|
|
+ editVxe.agupperValue = null;
|
|
|
+ editVxe.targetValue = null;
|
|
|
+ updateAssessmentQuotaDetailsApi(editVxe);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (row.column.title == "上期完成值") {
|
|
|
+ if (row.row?.upperValue) {
|
|
|
+ if (editVxe.upperValue != row.row?.upperValue) {
|
|
|
+ editVxe.upperValue = convertToNumberIfPercentage(row.row?.upperValue);
|
|
|
+ editVxe.startValue = null;
|
|
|
+ editVxe.score = null;
|
|
|
+ editVxe.finalValue = null;
|
|
|
+ editVxe.challengeValue = null;
|
|
|
+ editVxe.addValue = null;
|
|
|
+ editVxe.decValue = null;
|
|
|
+ editVxe.agupperValue = null;
|
|
|
+ editVxe.targetValue = null;
|
|
|
+ updateAssessmentQuotaDetailsApi(editVxe);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (row.column.title == "上上期完成值") {
|
|
|
+ if (row.row?.agupperValue) {
|
|
|
+ if (editVxe.agupperValue != row.row?.agupperValue) {
|
|
|
+ editVxe.agupperValue = convertToNumberIfPercentage(
|
|
|
+ row.row?.agupperValue
|
|
|
+ );
|
|
|
+ editVxe.startValue = null;
|
|
|
+ editVxe.score = null;
|
|
|
+ editVxe.finalValue = null;
|
|
|
+ editVxe.challengeValue = null;
|
|
|
+ editVxe.addValue = null;
|
|
|
+ editVxe.decValue = null;
|
|
|
+ editVxe.upperValue = null;
|
|
|
+ editVxe.targetValue = null;
|
|
|
+ updateAssessmentQuotaDetailsApi(editVxe);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (row.column.title == "目标值") {
|
|
|
+ if (row.row?.targetValue) {
|
|
|
+ if (editVxe.targetValue != row.row?.targetValue) {
|
|
|
+ editVxe.targetValue = convertToNumberIfPercentage(
|
|
|
+ row.row?.targetValue
|
|
|
+ );
|
|
|
+ editVxe.startValue = null;
|
|
|
+ editVxe.agupperValue = null;
|
|
|
+ editVxe.score = null;
|
|
|
+ editVxe.finalValue = null;
|
|
|
+ editVxe.challengeValue = null;
|
|
|
+ editVxe.addValue = null;
|
|
|
+ editVxe.decValue = null;
|
|
|
+ editVxe.upperValue = null;
|
|
|
+ updateAssessmentQuotaDetailsApi(editVxe);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -610,6 +769,15 @@ const assessmentHeader = reactive({
|
|
|
showUpperValue: 0,
|
|
|
showAgupperValue: 0
|
|
|
});
|
|
|
+const showAssessmentHeader = reactive({
|
|
|
+ showTargetValue: 1,
|
|
|
+ showChallengeValue: 0,
|
|
|
+ showStartValue: 0,
|
|
|
+ showAddValue: 0,
|
|
|
+ showDecValue: 0,
|
|
|
+ showUpperValue: 0,
|
|
|
+ showAgupperValue: 0
|
|
|
+});
|
|
|
// 开关状态
|
|
|
// 目标值
|
|
|
const showTargetValueSwitch = computed({
|
|
@@ -672,11 +840,216 @@ const setTableHeaderApi = async () => {
|
|
|
const { code, msg } = await setTableHeader(assessmentHeader);
|
|
|
if (code === 200) {
|
|
|
getAssessmentQuotaDetailsApi();
|
|
|
+ let aa = JSON.parse(JSON.stringify(assessmentHeader));
|
|
|
+ Object.assign(showAssessmentHeader, aa);
|
|
|
ElMessage.success("表头设置成功");
|
|
|
} else {
|
|
|
ElMessage.error(msg);
|
|
|
}
|
|
|
};
|
|
|
+watch(assessmentHeader, (newVal, oldVal) => {
|
|
|
+ console.log(newVal, oldVal);
|
|
|
+});
|
|
|
+const getAssessmentDetailsApi = async () => {
|
|
|
+ const { code, data } = await getAssessmentDetails({
|
|
|
+ id: messageData.value.id
|
|
|
+ });
|
|
|
+ if (code == 200) {
|
|
|
+ assessmentHeader.showTargetValue = data.showTargetValue;
|
|
|
+ assessmentHeader.showChallengeValue = data.showChallengeValue;
|
|
|
+ assessmentHeader.showStartValue = data.showStartValue;
|
|
|
+ assessmentHeader.showAddValue = data.showAddValue;
|
|
|
+ assessmentHeader.showDecValue = data.showDecValue;
|
|
|
+ assessmentHeader.showUpperValue = data.showUpperValue;
|
|
|
+ assessmentHeader.showAgupperValue = data.showAgupperValue;
|
|
|
+ let aa = JSON.parse(JSON.stringify(assessmentHeader));
|
|
|
+ Object.assign(showAssessmentHeader, aa);
|
|
|
+ }
|
|
|
+};
|
|
|
+// 判断是否为百分数
|
|
|
+function convertToNumberIfPercentage(value) {
|
|
|
+ // 判断是否为字符串,并且是否包含百分号
|
|
|
+ if (typeof value === "string" && value.trim().endsWith("%")) {
|
|
|
+ // 去掉百分号并将剩余的部分转换为数字
|
|
|
+ const numberValue = parseFloat(value.slice(0, -1));
|
|
|
+
|
|
|
+ // 如果转换后的值是有效的数字,返回数字形式
|
|
|
+ if (!isNaN(numberValue)) {
|
|
|
+ return numberValue / 100; // 转换为小数
|
|
|
+ } else {
|
|
|
+ return value; // 如果无法转换为有效数字,返回原值
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 如果不是百分数,直接返回原值
|
|
|
+ return value;
|
|
|
+}
|
|
|
+// 数据校验
|
|
|
+const validRules = ref({
|
|
|
+ finalValue: [
|
|
|
+ {
|
|
|
+ validator: ({ cellValue }) => {
|
|
|
+ const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
|
|
|
+ const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
|
|
|
+ const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
|
|
|
+ if (
|
|
|
+ numberPattern.test(cellValue) ||
|
|
|
+ decimalPattern.test(cellValue) ||
|
|
|
+ percentagePattern.test(cellValue)
|
|
|
+ ) {
|
|
|
+ return; // 校验通过
|
|
|
+ } else {
|
|
|
+ cellValue = "";
|
|
|
+ return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ targetValue: [
|
|
|
+ {
|
|
|
+ validator: ({ cellValue }) => {
|
|
|
+ const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
|
|
|
+ const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
|
|
|
+ const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
|
|
|
+ if (
|
|
|
+ numberPattern.test(cellValue) ||
|
|
|
+ decimalPattern.test(cellValue) ||
|
|
|
+ percentagePattern.test(cellValue)
|
|
|
+ ) {
|
|
|
+ return; // 校验通过
|
|
|
+ } else {
|
|
|
+ cellValue = "";
|
|
|
+ return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ challengeValue: [
|
|
|
+ {
|
|
|
+ validator: ({ cellValue }) => {
|
|
|
+ const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
|
|
|
+ const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
|
|
|
+ const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
|
|
|
+ if (
|
|
|
+ numberPattern.test(cellValue) ||
|
|
|
+ decimalPattern.test(cellValue) ||
|
|
|
+ percentagePattern.test(cellValue)
|
|
|
+ ) {
|
|
|
+ return; // 校验通过
|
|
|
+ } else {
|
|
|
+ return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ startValue: [
|
|
|
+ {
|
|
|
+ validator: ({ cellValue }) => {
|
|
|
+ const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
|
|
|
+ const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
|
|
|
+ const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
|
|
|
+ if (
|
|
|
+ numberPattern.test(cellValue) ||
|
|
|
+ decimalPattern.test(cellValue) ||
|
|
|
+ percentagePattern.test(cellValue)
|
|
|
+ ) {
|
|
|
+ return; // 校验通过
|
|
|
+ } else {
|
|
|
+ return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ addValue: [
|
|
|
+ {
|
|
|
+ validator: ({ cellValue }) => {
|
|
|
+ const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
|
|
|
+ const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
|
|
|
+ const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
|
|
|
+ if (
|
|
|
+ numberPattern.test(cellValue) ||
|
|
|
+ decimalPattern.test(cellValue) ||
|
|
|
+ percentagePattern.test(cellValue)
|
|
|
+ ) {
|
|
|
+ return; // 校验通过
|
|
|
+ } else {
|
|
|
+ return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ decValue: [
|
|
|
+ {
|
|
|
+ validator: ({ cellValue }) => {
|
|
|
+ const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
|
|
|
+ const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
|
|
|
+ const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
|
|
|
+ if (
|
|
|
+ numberPattern.test(cellValue) ||
|
|
|
+ decimalPattern.test(cellValue) ||
|
|
|
+ percentagePattern.test(cellValue)
|
|
|
+ ) {
|
|
|
+ return; // 校验通过
|
|
|
+ } else {
|
|
|
+ return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ upperValue: [
|
|
|
+ {
|
|
|
+ validator: ({ cellValue }) => {
|
|
|
+ const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
|
|
|
+ const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
|
|
|
+ const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
|
|
|
+ if (
|
|
|
+ numberPattern.test(cellValue) ||
|
|
|
+ decimalPattern.test(cellValue) ||
|
|
|
+ percentagePattern.test(cellValue)
|
|
|
+ ) {
|
|
|
+ return; // 校验通过
|
|
|
+ } else {
|
|
|
+ return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ agupperValue: [
|
|
|
+ {
|
|
|
+ validator: ({ cellValue }) => {
|
|
|
+ const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
|
|
|
+ const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
|
|
|
+ const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
|
|
|
+ if (
|
|
|
+ numberPattern.test(cellValue) ||
|
|
|
+ decimalPattern.test(cellValue) ||
|
|
|
+ percentagePattern.test(cellValue)
|
|
|
+ ) {
|
|
|
+ return; // 校验通过
|
|
|
+ } else {
|
|
|
+ return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ score: [
|
|
|
+ {
|
|
|
+ validator: ({ cellValue }) => {
|
|
|
+ const numberPattern = /^[0-9]+(\.[0-9]+)?$/; // 匹配数字或小数
|
|
|
+ const decimalPattern = /^\d+(\.\d+)?$/; // 匹配小数
|
|
|
+ const percentagePattern = /^([0-9]{1,2}|100)(\.[0-9]{1,2})?%$/; // 匹配百分数
|
|
|
+ if (
|
|
|
+ numberPattern.test(cellValue) ||
|
|
|
+ decimalPattern.test(cellValue) ||
|
|
|
+ percentagePattern.test(cellValue)
|
|
|
+ ) {
|
|
|
+ return;
|
|
|
+ } else {
|
|
|
+ return new Error("格式错误,请输入一个有效的数字、小数或百分数"); // 校验不通过
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+});
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
@@ -823,7 +1196,22 @@ const setTableHeaderApi = async () => {
|
|
|
<el-tab-pane label="考核指标" name="second">
|
|
|
<div class="w-full flex items-center justify-between">
|
|
|
<div class="w-1/2 flex items-center justify-between">
|
|
|
- <el-text class="w-1/5">考核模板</el-text>
|
|
|
+ <!-- <el-text class="w-1/5">考核模板</el-text> -->
|
|
|
+ <el-select
|
|
|
+ v-model="initParams.indexParams.modelName"
|
|
|
+ placeholder="请选择考核模板"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ style="width: 400px"
|
|
|
+ @change="getAssessmentQuotaDetailsApi"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="itemTmp in initParams.tmpList"
|
|
|
+ :key="itemTmp.id"
|
|
|
+ :label="itemTmp.assessmentModelName"
|
|
|
+ :value="itemTmp.assessmentModelName"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
<el-input
|
|
|
v-model="initParams.indexParams.userName"
|
|
|
class="ml-1"
|
|
@@ -860,6 +1248,7 @@ const setTableHeaderApi = async () => {
|
|
|
show-overflow
|
|
|
keep-source
|
|
|
:edit-config="editConfig"
|
|
|
+ :edit-rules="validRules"
|
|
|
:data="initParams.Indexlist"
|
|
|
@edit-closed="editClosedEvent"
|
|
|
@selection-change="changeSelection"
|
|
@@ -925,37 +1314,116 @@ const setTableHeaderApi = async () => {
|
|
|
<vxe-column field="name" fixed title="指标名称" width="180" />
|
|
|
<vxe-column field="scoreRule" fixed title="评价标准" width="180" />
|
|
|
<vxe-column field="source" fixed title="数据来源" width="180" />
|
|
|
- <vxe-column field="targetValue" fixed title="目标值" width="180" />
|
|
|
- <!-- <vxe-column
|
|
|
+ <vxe-column
|
|
|
+ v-if="showAssessmentHeader.showTargetValue"
|
|
|
+ field="targetValue"
|
|
|
+ fixed
|
|
|
+ title="目标值"
|
|
|
+ :edit-render="{
|
|
|
+ name: 'input'
|
|
|
+ }"
|
|
|
+ width="180"
|
|
|
+ />
|
|
|
+ <vxe-column
|
|
|
field="finalValue"
|
|
|
fixed
|
|
|
title="完成值"
|
|
|
- :edit-render="{ name: 'input' }"
|
|
|
+ :edit-render="{
|
|
|
+ name: 'input'
|
|
|
+ }"
|
|
|
width="180"
|
|
|
>
|
|
|
<template #default="{ row }">
|
|
|
<div @click="hangdleOpenClick(row)">
|
|
|
- {{ row.finalValue }}
|
|
|
+ {{ convertToNumberIfPercentage(row.finalValue) }}
|
|
|
</div>
|
|
|
</template>
|
|
|
</vxe-column>
|
|
|
<vxe-column
|
|
|
- field="score"
|
|
|
+ v-if="showAssessmentHeader.showChallengeValue"
|
|
|
+ field="challengeValue"
|
|
|
fixed
|
|
|
- title="得分"
|
|
|
- :edit-render="{ name: 'input' }"
|
|
|
+ title="挑战值"
|
|
|
+ :edit-render="{
|
|
|
+ name: 'input'
|
|
|
+ }"
|
|
|
width="180"
|
|
|
>
|
|
|
<template #default="{ row }">
|
|
|
<div @click="hangdleOpenClick(row)">
|
|
|
- {{ row.score }}
|
|
|
+ {{ row.challengeValue }}
|
|
|
</div>
|
|
|
</template>
|
|
|
- </vxe-column> -->
|
|
|
+ </vxe-column>
|
|
|
<vxe-column
|
|
|
- field="finalValue"
|
|
|
+ v-if="showAssessmentHeader.showStartValue"
|
|
|
+ field="startValue"
|
|
|
fixed
|
|
|
- title="完成值"
|
|
|
+ title="门槛值"
|
|
|
+ :edit-render="{
|
|
|
+ name: 'input'
|
|
|
+ }"
|
|
|
+ width="180"
|
|
|
+ >
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div @click="hangdleOpenClick(row)">
|
|
|
+ {{ row.startValue }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column
|
|
|
+ v-if="showAssessmentHeader.showAddValue"
|
|
|
+ field="addValue"
|
|
|
+ fixed
|
|
|
+ title="增幅"
|
|
|
+ :edit-render="{
|
|
|
+ name: 'input'
|
|
|
+ }"
|
|
|
+ width="180"
|
|
|
+ >
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div @click="hangdleOpenClick(row)">
|
|
|
+ {{ row.addValue }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column
|
|
|
+ v-if="showAssessmentHeader.showDecValue"
|
|
|
+ field="decValue"
|
|
|
+ fixed
|
|
|
+ title="降幅"
|
|
|
+ :edit-render="{
|
|
|
+ name: 'input'
|
|
|
+ }"
|
|
|
+ width="180"
|
|
|
+ >
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div @click="hangdleOpenClick(row)">
|
|
|
+ {{ row.decValue }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column
|
|
|
+ v-if="showAssessmentHeader.showUpperValue"
|
|
|
+ field="upperValue"
|
|
|
+ fixed
|
|
|
+ title="上期完成值"
|
|
|
+ :edit-render="{
|
|
|
+ name: 'input'
|
|
|
+ }"
|
|
|
+ width="180"
|
|
|
+ >
|
|
|
+ <template #default="{ row }">
|
|
|
+ <div @click="hangdleOpenClick(row)">
|
|
|
+ {{ row.upperValue }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </vxe-column>
|
|
|
+ <vxe-column
|
|
|
+ v-if="showAssessmentHeader.showAgupperValue"
|
|
|
+ field="agupperValue"
|
|
|
+ fixed
|
|
|
+ title="上上期完成值"
|
|
|
:edit-render="{
|
|
|
name: 'input'
|
|
|
}"
|
|
@@ -963,7 +1431,7 @@ const setTableHeaderApi = async () => {
|
|
|
>
|
|
|
<template #default="{ row }">
|
|
|
<div @click="hangdleOpenClick(row)">
|
|
|
- {{ row.finalValue }}
|
|
|
+ {{ row.agupperValue }}
|
|
|
</div>
|
|
|
</template>
|
|
|
</vxe-column>
|
|
@@ -988,7 +1456,7 @@ const setTableHeaderApi = async () => {
|
|
|
{{ dayjs(row.updateTime).format("YYYY-MM-DD HH:mm:ss") }}
|
|
|
</template>
|
|
|
</vxe-column>
|
|
|
- <vxe-column field="" title="操作1" fixed="right" width="180">
|
|
|
+ <vxe-column field="" title="操作" fixed="right" width="180">
|
|
|
<template #header>
|
|
|
操作
|
|
|
<!-- 在表头操作后面添加图标 -->
|