1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672 |
- <script setup lang="ts">
- import { ref, reactive, watch } from "vue";
- import { ElMessageBox, ElMessage } from "element-plus";
- import { calculator } from "./evaluate";
- import {
- getIndexInfo,
- postUpdate,
- calculateScoreByConditionMoCondition
- } from "@/api/templateInfo";
- import { conditionVerify } from "@/api/formula";
- import jishuanqi from "./jishuanqi.vue";
- import {
- postListTreeWithUser,
- postListTree,
- postListTreeWithUserApi,
- treeDept
- } from "@/api/department";
- import type { DrawerProps, FormItemProps, FormProps } from "element-plus";
- import { formulaParamsChange, echoParamsChange } from "@/utils/business";
- // const itemLabelPosition = ref<FormItemProps["labelPosition"]>("");
- const drawer = ref(false);
- const disabledValue = ref(true);
- const GONG_SHI = [
- "完成值",
- "目标值",
- "门槛值",
- "挑战值",
- "增幅",
- "降幅",
- "上期完成值",
- "上上期完成值"
- ];
- // 判断 score 字符串是否包含 GONG_SHI 中的关键字
- function containsKeywordInScore(score, keywordss) {
- // 确保 score 是字符串,keywords 是数组
- if (score && typeof score == "string") {
- const cleanedScore = score.replace(/[\s\-]/g, ""); // 去除空格和破折号
- const cleanedKeywords = keywordss.map(keyword =>
- keyword.replace(/[\s\-]/g, "")
- );
- return cleanedKeywords.some(keyword => cleanedScore.includes(keyword));
- // 遍历 keywords 数组,检查 score 是否包含其中的任何一个关键字
- } else {
- return false;
- }
- }
- const direction = ref<DrawerProps["direction"]>("rtl");
- const formLabelAlign = reactive({
- name: "",
- region: "",
- grade: "",
- compute: "1",
- type: ""
- });
- const params = reactive({
- id: "",
- tpId: "",
- dimId: "",
- indId: "",
- valueInput: "",
- scoreStandard: 0,
- designatedPersonnel: "",
- remark: "",
- scoreRule: "",
- targetValue: "",
- finalValue: "",
- formulaType: 0,
- challengeValue: "",
- startValue: "",
- datasoure: "",
- weight: "",
- valueScore: null,
- scoreValue: "",
- formula: {
- noConditionFormula: ""
- },
- personList: ""
- });
- // 详情信息
- const getIndexInfoApi = async id => {
- const { data, code, msg } = await getIndexInfo(id);
- // console.log("1111", data);
- if (code === 200) {
- Object.assign(params, data);
- if (data.designatedPersonnel) {
- params.personList = data.designatedPersonnel.split(",");
- } else {
- params.personList = "";
- }
- if (!data.formulaType) {
- params.formulaType = 0;
- }
- if (data.formulaType === 0) {
- params.formula = {
- noConditionFormula: params.formula
- };
- } else if (data.formulaType === 1) {
- Object.assign(addmanyChange, echoParamsChange(data.formulaParams));
- }
- // if (isValidJSON(data.formula)) {
- // if (params.formulaType == 0) {
- // params.formula = isValidJSON(data.formula);
- // } else if (params.formulaType == 1) {
- // let aa = JSON.parse(data.formula);
- // let bb = JSON.parse(aa.noConditionFormula);
- // Object.assign(addmanyChange, bb);
- // }
- // }
- if (!data.formula) {
- params.formula = {
- noConditionFormula: ""
- };
- } else {
- }
- } else {
- ElMessage.error(msg);
- }
- };
- const $emit = defineEmits(["refresh"]);
- // 更新指标
- const postUpdateApi = async () => {
- if (params.formulaType == 0) {
- params.formula = params.formula.noConditionFormula;
- } else {
- params.formula = {
- noConditionFormula: ""
- };
- // 判断是公式还是数字
- if (containsKeywordInScore(addmanyChange.outerConditionValue, GONG_SHI)) {
- addmanyChange.outerConditionValueExpress =
- addmanyChange.outerConditionValue;
- }
- addmanyChange.innerConditionExpression.map(inn => {
- if (containsKeywordInScore(inn?.startValue, GONG_SHI)) {
- inn.startExpress = inn.startValue;
- }
- if (containsKeywordInScore(inn?.endValue, GONG_SHI)) {
- inn.endExpress = inn.endValue;
- }
- if (containsKeywordInScore(inn?.innerScore, GONG_SHI)) {
- inn.innerScoreExpress = inn.innerScore;
- }
- if (
- containsKeywordInScore(
- inn?.scoreRuleMoreInnerVO[0]?.innerConditionValue,
- GONG_SHI
- )
- ) {
- inn.scoreRuleMoreInnerVO[0].innerConditionValueExpress =
- inn.scoreRuleMoreInnerVO[0].innerConditionValue;
- }
- inn?.scoreRuleMoreInnerVO[0]?.scoreRules.map(isc => {
- if (containsKeywordInScore(isc?.score, GONG_SHI)) {
- isc.scoreExpress = isc.score;
- }
- if (containsKeywordInScore(isc?.startValue, GONG_SHI)) {
- isc.startExpress = isc.startValue;
- }
- if (containsKeywordInScore(isc?.endValue, GONG_SHI)) {
- isc.endExpress = isc.endValue;
- }
- });
- });
- params.formula.noConditionFormula = JSON.stringify(addmanyChange);
- delete params.formula;
- params.formulaParams = formulaParamsChange(addmanyChange);
- }
- const { msg, code } = await postUpdate(params);
- if (code === 200) {
- ElMessage({
- message: "编辑成功",
- type: "success"
- });
- $emit("refresh");
- disabledValue.value = true;
- editShow.value = true;
- drawer.value = !drawer.value;
- }
- };
- // 公式验证
- const dialogFormVisibleFormula = ref(false);
- const formulaForm = ref([]);
- const grade = ref();
- const conditionVerifyApi = async () => {
- grade.value = null;
- formulaForm.value = [];
- dialogFormVisibleFormula.value = true;
- try {
- formulaForm.value = [];
- grade.value = "";
- console.log("params", params);
- const keywords = [
- "完成值",
- "目标值",
- "门槛值",
- "挑战值",
- "增幅",
- "降幅",
- "上期完成值",
- "上上期完成值"
- ];
- let str = params.formula.noConditionFormula;
- // 创建一个正则表达式,匹配这些关键词
- const regex = new RegExp(keywords.join("|"), "g");
- // 提取字符串中的所有关键词
- let matches = str.match(regex);
- console.log("匹配到的关键词:", matches);
- matches.forEach(matchItem => {
- formulaForm.value.push({
- name: matchItem,
- value: ""
- });
- });
- let result = str.replace(regex, match => {
- return `${match}`;
- });
- } catch (err) {
- //
- }
- };
- // 计算
- // 多条件公式计算
- function reverseReplace(oldValue, dataObject) {
- // 确保 formulaForm 是一个数组
- if (!Array.isArray(oldValue)) {
- throw new Error("formulaForm 应该是一个数组");
- }
- oldValue.forEach(item => {
- // 遍历外部条件和内部条件的表达式
- for (const key in dataObject) {
- const value = dataObject[key];
- if (typeof value === "string") {
- // 如果字符串中包含当前name,则替换该值
- if (value.includes(item.name)) {
- dataObject[key] = value.replace(item.name, item.value);
- }
- } else if (Array.isArray(value)) {
- // 如果是数组,递归替换数组中的每个对象
- value.forEach(innerObj => {
- for (const innerKey in innerObj) {
- const innerValue = innerObj[innerKey];
- if (
- typeof innerValue === "string" &&
- innerValue.includes(item.name)
- ) {
- innerObj[innerKey] = innerValue.replace(item.name, item.value);
- }
- }
- });
- }
- }
- });
- return dataObject;
- }
- function calculateScore(inputString) {
- // 将 formulaForm.value 转换为一个键值对映射,方便替换
- const valueMap = formulaForm.value.reduce((map, item) => {
- map[item.name] = item.value !== null ? item.value : 0; // 用 0 替代 null
- return map;
- }, {});
- // 替换字符串中的关键字为对应的 value 值
- let formula = inputString;
- for (const [key, value] of Object.entries(valueMap)) {
- if (formula.includes(key)) {
- // 使用正则替换所有匹配的关键字
- const regex = new RegExp(key, "g");
- formula = formula.replace(regex, value);
- }
- }
- try {
- // 使用 eval 计算公式
- const result = eval(formula);
- return result;
- } catch (error) {
- console.error("公式计算出错:", error);
- return null;
- }
- }
- const countComputed = async () => {
- try {
- if (params.formulaType == 0) {
- const params0: {
- formulaType: number;
- formula?: string;
- } = {
- formulaType: params.formulaType
- };
- if (params.formula && params.formula.noConditionFormula) {
- params0.formula = `(${params.formula.noConditionFormula})`;
- }
- const { code, msg } = await conditionVerify(params0);
- if (code == 200) {
- const keywords = [
- "完成值",
- "目标值",
- "门槛值",
- "挑战值",
- "增幅",
- "降幅",
- "上期完成值",
- "上上期完成值"
- ];
- let str = params.formula.noConditionFormula;
- // 创建一个正则表达式,匹配这些关键词
- const regex = new RegExp(keywords.join("|"), "g");
- let result = str.replace(regex, match => {
- // 在 formulaForm.value 中查找匹配的项
- let matchedItem = formulaForm.value.find(item => item.name === match);
- // 如果找到匹配项,返回其 value,否则返回原始匹配值
- if (matchedItem) {
- return matchedItem.value; // 替换为对应的值
- }
- return match; // 如果没有匹配项,返回原始匹配值
- });
- // calculator.calculate(result);
- // grade.value = calculator.get();
- grade.value = eval(result).toFixed(2);
- } else {
- ElMessageBox.confirm(
- "如果不修改将无法计算得分",
- "公式计算错误,修改后确认",
- {
- type: "warning"
- }
- ).then(() => {
- dialogFormVisibleFormula.value = false;
- });
- }
- } else if (params.formulaType == 1) {
- // 判断是公式还是数字
- if (containsKeywordInScore(addmanyChange.outerConditionValue, GONG_SHI)) {
- addmanyChange.outerConditionValueExpress =
- addmanyChange.outerConditionValue;
- }
- // let oldValue = JSON.parse(JSON.stringify(addmanyChange));
- // const formulaPar = JSON.stringify(oldValue);
- const params1: {
- formulaType: number;
- formulaParams?: any[];
- } = {
- formulaType: params.formulaType
- };
- if (addmanyChange) {
- params1.formulaParams = formulaParamsChange(addmanyChange);
- }
- const res = await conditionVerify(params1);
- if (res.code == 200) {
- // if (oldValue.outerConditionValue) {
- // oldValue.outerConditionValue = calculateScore(
- // oldValue.outerConditionValue
- // );
- // }
- // 暂时注释上面代码,不知道会不会影响到其他业务逻辑,待验证
- const oldValue = JSON.parse(JSON.stringify(addmanyChange));
- if (formulaForm.value && Array.isArray(formulaForm.value) && oldValue) {
- const keywordss = [
- "完成值",
- "目标值",
- "门槛值",
- "挑战值",
- "增幅",
- "降幅",
- "上期完成值",
- "上上期完成值"
- ];
- if (
- keywordss.find(item => oldValue.outerConditionValueExpress == item)
- ) {
- for (const item of formulaForm.value) {
- if (oldValue.outerConditionValueExpress === item.name) {
- oldValue.outerConditionValue = item.value;
- break;
- }
- }
- } else {
- const keywords = [
- "完成值",
- "目标值",
- "门槛值",
- "挑战值",
- "增幅",
- "降幅",
- "上期完成值",
- "上上期完成值"
- ];
- let str = oldValue.outerConditionValueExpress;
- // 创建一个正则表达式,匹配这些关键词
- const regex = new RegExp(keywords.join("|"), "g");
- let result = str.replace(regex, match => {
- // 在 formulaForm.value 中查找匹配的项
- let matchedItem = formulaForm.value.find(
- item => item.name === match
- );
- // 如果找到匹配项,返回其 value,否则返回原始匹配值
- if (matchedItem) {
- return matchedItem.value; // 替换为对应的值
- }
- return match; // 如果没有匹配项,返回原始匹配值
- });
- // calculator.calculate(result);
- // grade.value = calculator.get();
- oldValue.outerConditionValue = eval(result).toFixed(2);
- }
- }
- if (oldValue.innerConditionExpression.length > 0) {
- oldValue.innerConditionExpression.map(itEx => {
- if (itEx.startValue) {
- itEx.startValue = calculateScore(itEx.startValue);
- }
- if (itEx.endValue) {
- itEx.endValue = calculateScore(itEx.endValue);
- }
- if (itEx.innerScore) {
- itEx.innerScore = calculateScore(itEx.innerScore);
- }
- if (itEx?.scoreRuleMoreInnerVO[0]?.innerConditionValue) {
- itEx.scoreRuleMoreInnerVO[0].innerConditionValue = calculateScore(
- itEx.scoreRuleMoreInnerVO[0].innerConditionValue
- );
- }
- if (itEx?.scoreRuleMoreInnerVO[0]?.scoreRules.length > 0) {
- itEx.scoreRuleMoreInnerVO[0].scoreRules.map(itRule => {
- if (itRule.score) {
- itRule.score = calculateScore(itRule.score);
- }
- if (itRule.startValue) {
- itRule.startValue = calculateScore(itRule.startValue);
- }
- if (itRule.endValue) {
- itRule.endValue = calculateScore(itRule.endValue);
- }
- });
- }
- });
- }
- console.log(formulaForm.value, "-----");
- // let newValue = reverseReplace(formListNum, oldValue);
- // console.log(oldValue, "oldValue--最终传值");
- const { code, msg, data } = await calculateScoreByConditionMoCondition({
- ...params1,
- calculateScore: formulaForm.value.reduce((map, item) => {
- map[item.name] = item.value !== null ? item.value : 0; // 用 0 替代 null
- return map;
- }, {})
- });
- if (code == 200) {
- grade.value = data;
- }
- } else {
- ElMessageBox.confirm(
- "如果不修改将无法计算得分",
- "公式计算错误,修改后确认",
- {
- type: "warning"
- }
- ).then(() => {
- dialogFormVisibleFormula.value = false;
- });
- }
- }
- } catch (err) {
- console.log(err);
- }
- };
- // 判断是否为json
- function isValidJSON(str) {
- try {
- if (!str.includes("\\\\")) {
- return JSON.parse(str);
- } else {
- return JSON.parse(JSON.parse(str));
- }
- // return true; // 如果解析成功,返回true
- } catch (e) {
- return false; // 如果解析失败,返回false
- }
- }
- const handleClose = (done: () => void) => {
- drawer.value = false;
- disabledValue.value = true;
- editShow.value = true;
- // ElMessageBox.confirm("配置项未保存,确认关闭", {
- // type: "warning"
- // }).then(() => {
- // });
- };
- function cancelClick() {
- drawer.value = false;
- Object.assign(params, {
- id: "",
- tpId: "",
- dimId: "",
- indId: "",
- valueInput: "",
- scoreStandard: 0,
- remark: "",
- scoreRule: "",
- targetValue: "",
- finalValue: "",
- formulaType: 0,
- challengeValue: "",
- startValue: "",
- datasoure: "",
- weight: "",
- scoreValue: "",
- formula: {
- noConditionFormula: ""
- },
- personList: ""
- });
- disabledValue.value = true;
- editShow.value = true;
- }
- function confirmClick() {
- postUpdateApi();
- }
- const open = row => {
- drawer.value = true;
- params.designatedPersonnel = "";
- Object.assign(params, {
- id: "",
- tpId: "",
- dimId: "",
- indId: "",
- valueInput: "",
- scoreStandard: 0,
- designatedPersonnel: "",
- remark: "",
- scoreRule: "",
- targetValue: "",
- finalValue: "",
- formulaType: 0,
- challengeValue: "",
- startValue: "",
- datasoure: "",
- weight: "",
- valueScore: null,
- scoreValue: "",
- formula: {
- noConditionFormula: ""
- },
- personList: ""
- });
- Object.assign(addmanyChange, {
- outerConditionValue: "",
- outerConditionValueExpress: "",
- innerConditionExpression: [
- {
- startValue: null,
- endValue: null,
- select: null,
- comparisonStart: null,
- comparisonEnd: null,
- innerScore: null,
- innerScoreExpress: null,
- scoreRuleMoreInnerVO: []
- }
- ]
- });
- console.log("打印是否触发数据");
- getIndexInfoApi(row.id);
- calculatorShow.value = true;
- };
- const editShow = ref(true);
- defineExpose({
- open
- });
- const timer = ref("");
- // 公式计算
- const compute = [
- {
- value: 0,
- label: "无条件公式"
- },
- {
- value: 1,
- label: "多条件公式"
- }
- ];
- const bgColor = ref(null);
- const rolesList = reactive({
- data: [
- { name: "完成值 / 目标值", id: 1 },
- { name: "完成值 - 目标值", id: 2 },
- { name: "目标值 - 完成值", id: 3 },
- { name: "门槛值", id: 4 },
- { name: "目标值", id: 5 },
- { name: "挑战值", id: 6 },
- { name: "完成值", id: 7 },
- { name: "增幅", id: 8 },
- { name: "降幅", id: 9 },
- { name: "上期完成值", id: 10 },
- { name: "上上期完成值", id: 11 }
- ],
- value: "",
- num: null
- });
- // 监听formulaType变化
- const watchFormulaType = value => {
- if (value == 0 && typeof params.formula == "string") {
- let aa = JSON.parse(params.formula);
- params.formula = aa;
- params.formula.noConditionFormula = "";
- }
- };
- const lookRoles = item => {
- if (isValidJSON(params.formula)) {
- params.formula = JSON.parse(params.formula);
- }
- bgColor.value = item.id;
- params.formula.noConditionFormula =
- params.formula.noConditionFormula + item.name;
- };
- // 字符拼接
- const countNumber = (item: string) => {
- params.formula.noConditionFormula = params.formula.noConditionFormula + item;
- };
- // 清除
- const remove = () => {
- if (params.formula.noConditionFormula.length > 0) {
- params.formula.noConditionFormula = params.formula.noConditionFormula.slice(
- 0,
- -1
- );
- }
- };
- // 清空
- const removeVoid = () => {
- params.formula.noConditionFormula = "";
- };
- // 计算确认
- //
- const calculatorShow = ref(true);
- const count = item => {
- ElMessageBox.confirm("配置项确认保存?确认关闭", {
- type: "warning"
- }).then(() => {
- calculatorShow.value = false;
- });
- // try {
- // calculator.calculate(rolesList.value);
- // rolesList.num = calculator.get();
- // } catch (error) {
- // ElMessage({
- // message: "计算错误",
- // type: "warning"
- // });
- // console.log(error);
- // }
- };
- // 多条件公式
- const addmanyChange = reactive({
- outerConditionValue: "",
- outerConditionValueExpress: "",
- innerConditionExpression: [
- {
- startValue: null,
- endValue: null,
- select: null,
- comparisonStart: null,
- comparisonEnd: null,
- innerScore: null,
- innerScoreExpress: null,
- scoreRuleMoreInnerVO: [
- // {
- // innerConditionValue: null,
- // scoreRules: [
- // {
- // score: null,
- // startValue: null,
- // select: "",
- // endValue: null,
- // comparisonStart: null,
- // comparisonEnd: null
- // }
- // ]
- // }
- ]
- }
- ]
- });
- // 添加子条件
- const addItemFormulaList = (item, index) => {
- addmanyChange.innerConditionExpression[index].scoreRuleMoreInnerVO = [
- {
- innerConditionValue: null,
- innerConditionValueExpress: null,
- scoreRules: [
- {
- score: null,
- scoreExpress: null,
- startValue: null,
- startExpress: null,
- endValue: null,
- endExpress: null,
- select: null,
- comparisonStart: null,
- comparisonEnd: null
- }
- ]
- }
- ];
- addmanyChange.innerConditionExpression[index].innerScore = "";
- changeAddMay();
- };
- const deleteItem = index => {
- addmanyChange.innerConditionExpression.splice(index, 1);
- changeAddMay();
- };
- const dataleListItem = (index, indexList) => {
- addmanyChange.innerConditionExpression[
- index
- ].scoreRuleMoreInnerVO[0].scoreRules.splice(indexList, 1);
- changeAddMay();
- };
- // 条件变量
- const dataleListItemAll = (item, index) => {
- item.scoreRuleMoreInnerVO = [];
- changeAddMay();
- };
- const addNewItem = () => {
- addmanyChange.innerConditionExpression.push({
- startValue: null,
- endValue: null,
- select: null,
- comparisonStart: null,
- comparisonEnd: null,
- scoreRuleMoreInnerVO: []
- });
- changeAddMay();
- };
- const addNewItemOldValue = item => {
- addmanyChange.innerConditionExpression.push({
- startValue: item.endValue,
- select: null,
- endValue: null,
- comparisonStart: item.comparisonEnd == ">" ? "≥" : ">",
- comparisonEnd: null,
- scoreRuleMoreInnerVO: []
- });
- changeAddMay();
- };
- const addItemDataList = (
- index: number,
- itemList: any,
- indexList: number,
- item
- ) => {
- addmanyChange.innerConditionExpression[
- index
- ].scoreRuleMoreInnerVO[0].scoreRules.push({
- select: null,
- score: null,
- scoreExpress: null,
- startValue: itemList.endValue,
- endValue: null,
- comparisonStart: itemList.comparisonEnd,
- comparisonEnd: null
- });
- addmanyChange.innerConditionExpression[index].innerScore = "";
- changeAddMay();
- };
- // 多条件公式验证
- const keywords = [
- "目标值",
- "完成值",
- "挑战值",
- "门槛值",
- "增幅",
- "降幅",
- "上期完成值",
- "上上期完成值"
- ];
- // 处理字符串,提取关键词
- function extractKeywords(value) {
- // 如果是字符串,处理包含的关键词
- if (typeof value === "string") {
- // 提取所有关键词
- keywords.forEach(keyword => {
- if (value.includes(keyword)) {
- formulaForm.value.push({
- name: keyword,
- value: null // 可以根据需求赋值
- });
- }
- });
- }
- }
- // 遍历对象并处理
- function traverseObject(obj) {
- if (obj && typeof obj === "object") {
- for (const key in obj) {
- if (obj.hasOwnProperty(key)) {
- const value = obj[key];
- // 如果值是字符串,调用提取函数
- if (typeof value === "string") {
- extractKeywords(value);
- }
- // 如果值是数组,递归处理
- if (Array.isArray(value)) {
- value.forEach(item => traverseObject(item));
- }
- }
- }
- }
- }
- function extractKeywordsAndPush(keywordsList, inputString) {
- keywords.forEach(keyword => {
- if (
- inputString?.includes(keyword) && // 检查字符串是否包含关键字
- !formulaForm.value.some(item => item.name === keyword) // 确保没有重复
- ) {
- // 如果包含且未重复,构造对象并push到formulaForm.value
- formulaForm.value.push({
- name: keyword,
- value: null // 根据需求赋值
- });
- }
- });
- return formulaForm;
- }
- const manyConditions = () => {
- grade.value = null;
- dialogFormVisibleFormula.value = true;
- formulaForm.value = [];
- // 提取 addmanyChange 对象中的条件值
- let oldValue = addmanyChange;
- if (oldValue.outerConditionValue) {
- extractKeywordsAndPush(keywords, oldValue.outerConditionValue);
- }
- if (oldValue.innerConditionExpression.length > 0) {
- oldValue.innerConditionExpression.map(itemExp => {
- if (itemExp.startValue) {
- extractKeywordsAndPush(keywords, itemExp.startValue);
- }
- if (itemExp.endValue) {
- extractKeywordsAndPush(keywords, itemExp.endValue);
- }
- if (itemExp.innerScore) {
- extractKeywordsAndPush(keywords, itemExp.innerScore);
- }
- if (itemExp?.scoreRuleMoreInnerVO[0]?.innerConditionValue) {
- extractKeywordsAndPush(
- keywords,
- itemExp.scoreRuleMoreInnerVO[0].innerConditionValue
- );
- }
- if (itemExp?.scoreRuleMoreInnerVO.length > 0) {
- if (itemExp?.scoreRuleMoreInnerVO[0]?.scoreRules.length > 0) {
- itemExp?.scoreRuleMoreInnerVO[0]?.scoreRules.map(itSc => {
- if (itSc.score) {
- extractKeywordsAndPush(keywords, itSc.score);
- }
- if (itSc.startValue) {
- extractKeywordsAndPush(keywords, itSc.startValue);
- }
- if (itSc.endValue) {
- extractKeywordsAndPush(keywords, itSc.endValue);
- }
- });
- }
- }
- });
- }
- };
- // 计算器
- const jishuanqiRef = ref();
- const countNoConditionFormula = item => {
- addmanyChange.outerConditionValue = item;
- changeAddMay();
- };
- const jishuanqiRef1 = ref();
- const countNoConditionFormula1 = (item, index) => {
- addmanyChange.innerConditionExpression[index].endValue = item;
- changeAddMay();
- };
- const jishuanqiRef2 = ref();
- const countNoConditionFormula2 = (item, index) => {
- // innerConditionValue
- addmanyChange.innerConditionExpression[
- index
- ].scoreRuleMoreInnerVO[0].innerConditionValue = item;
- changeAddMay();
- };
- const jishuanqiRef3 = ref();
- const countNoConditionFormula3 = (item, index, indexList) => {
- addmanyChange.innerConditionExpression[
- index
- ].scoreRuleMoreInnerVO[0].scoreRules[indexList].endValue = item;
- changeAddMay();
- };
- const countNoConditionFormula4 = (item, index, indexList) => {
- addmanyChange.innerConditionExpression[
- index
- ].scoreRuleMoreInnerVO[0].scoreRules[indexList].score = item;
- changeAddMay();
- };
- const countNoConditionFormulaInnerScore = (item, index, indexList) => {
- addmanyChange.innerConditionExpression[index].innerScore = item;
- changeAddMay();
- };
- // 转换函数 --- 人员
- const convertDepartmentDataRecursive_Person = data => {
- return data.map(department => {
- const { userNameNew, userCodeNew, children, type } = department;
- // 递归处理子节点
- const processedChildren =
- children.length > 0
- ? convertDepartmentDataRecursive_Person(children)
- : [];
- // 检查子节点是否有 type 为 "user" 的节点
- const hasUserInChildren = processedChildren.some(child => !child.disabled);
- // 当前节点是否为 user 类型
- const isUser = type === "user";
- // 判断当前节点是否需要禁用
- const shouldDisable = !isUser && !hasUserInChildren;
- return {
- value: userCodeNew,
- label: userNameNew,
- children: processedChildren,
- disabled: shouldDisable
- };
- });
- };
- postListTreeWithUserApi();
- const assessmentTypeRef = ref();
- const handleRreeSelect = () => {
- const arr = assessmentTypeRef.value.getCheckedNodes().filter(item => {
- return item.children.length == 0;
- });
- params.designatedPersonnel = arr.map(item => item.value).join(",");
- };
- // 取消计算
- const quxiaoCmputed = () => {
- formulaForm.value = [];
- dialogFormVisibleFormula.value = false;
- };
- // 监听数据变化
- const changeAddMay = () => {
- let addmanyChangeOldVal = JSON.parse(JSON.stringify(addmanyChange));
- addmanyChange.innerConditionExpression.forEach((item, index, arr) => {
- if (index + 1 <= arr.length) {
- if (item.endValue) {
- if (addmanyChangeOldVal.innerConditionExpression.length > 1) {
- addmanyChangeOldVal.innerConditionExpression[index + 1].startValue =
- item?.endValue;
- addmanyChangeOldVal.innerConditionExpression[index + 1].startExpress =
- item?.endExpress;
- addmanyChangeOldVal.innerConditionExpression[
- index + 1
- ].comparisonStart = item?.comparisonEnd == "≥" ? ">" : "≥";
- }
- }
- if (item.scoreRuleMoreInnerVO.length > 0) {
- if (item.scoreRuleMoreInnerVO[0].scoreRules.length > 0) {
- item.scoreRuleMoreInnerVO[0].scoreRules.map((it, id, arrChild) => {
- if (id + 1 <= arrChild.length) {
- if (it.endValue) {
- // if (
- // addmanyChangeOldVal.innerConditionExpression[index + 1]
- // .scoreRuleMoreInnerVO.length > 0
- // ) {
- addmanyChangeOldVal.innerConditionExpression[
- index
- ].scoreRuleMoreInnerVO[0].scoreRules[id + 1].startValue =
- it?.endValue;
- addmanyChangeOldVal.innerConditionExpression[
- index
- ].scoreRuleMoreInnerVO[0].scoreRules[id + 1].startExpress =
- it?.startExpress;
- addmanyChangeOldVal.innerConditionExpression[
- index
- ].scoreRuleMoreInnerVO[0].scoreRules[id + 1].comparisonStart =
- it?.comparisonEnd == "≥" ? ">" : "≥";
- // }
- }
- }
- });
- }
- }
- }
- });
- Object.assign(addmanyChange, addmanyChangeOldVal);
- };
- const formulaFocus = () => {
- calculatorShow.value = true;
- };
- const changeValueInput = val => {
- if (val == 4 || val == "4") {
- params.valueScore = 0;
- }
- };
- // { deep: true };
- </script>
- <template>
- <div>
- <el-drawer
- v-model="drawer"
- :direction="direction"
- :before-close="handleClose"
- size="700px"
- >
- <template #header>
- <h4>指标设置</h4>
- </template>
- <template #default>
- <div>
- <el-form label-position="top" label-width="auto" :model="params">
- <el-form-item label="完成值录入人" label-position="top">
- <el-select
- v-model="params.valueInput"
- placeholder="请选择"
- @change="changeValueInput"
- >
- <el-option label="被考核人" :value="0" />
- <!-- <el-option label="上级" :value="1" /> -->
- <el-option label="指定人员" :value="2" />
- <el-option label="考核管理员" :value="3" />
- <el-option label="指标自动采集" :value="4" />
- </el-select>
- <el-tree-select
- v-if="params.valueInput == 2"
- ref="assessmentTypeRef"
- v-model="params.personList"
- multiple
- :data="convertDepartmentDataRecursive_Person(treeDept)"
- :render-after-expand="false"
- show-checkbox
- style="margin-top: 10px"
- @check-change="handleRreeSelect()"
- />
- </el-form-item>
- <el-form-item
- v-if="params.valueInput == 4"
- label="完成值计算方式"
- label-position="top"
- >
- <el-radio-group v-model="params.valueScore">
- <el-radio :value="0" size="large">统计计算</el-radio>
- <el-radio :value="1" size="large">累加计算</el-radio>
- </el-radio-group>
- </el-form-item>
- <el-form-item label="评分方式" label-position="top">
- <el-select v-model="params.scoreStandard" placeholder="请选择">
- <el-option label="手动输入" :value="0" />
- <el-option label="公式自动计算" :value="1" />
- </el-select>
- </el-form-item>
- <div v-if="params.scoreStandard === 1">
- <el-form-item label="公式类型" label-position="top">
- <el-select
- v-model="params.formulaType"
- placeholder="请选择"
- @change="watchFormulaType"
- >
- <el-option
- v-for="item in compute"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- <el-form-item
- v-if="params.formulaType === 0"
- label="公式设置"
- label-position="top"
- >
- <div>
- <div>
- <el-text>得分 =</el-text>
- <el-input
- v-model="params.formula.noConditionFormula"
- class="ml-2 mr-2"
- style="width: 240px"
- @focus="formulaFocus"
- />
- <el-text>
- <el-button type="primary" @click="conditionVerifyApi"
- >公式验证</el-button
- >
- </el-text>
- </div>
- <div
- v-if="calculatorShow"
- class="w-[500px] compute h-64 mt-1 ml-12 flex justify-evenly items-center"
- style="user-select: none"
- >
- <div class="w-1/3 h-60 pl-1 bg-white rounded-md">
- <div class="w-[100%] text-xs mt-2">
- <div><el-text type="info">:::变量</el-text></div>
- </div>
- <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>
- </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">
- <div class="p-1"><el-text>得分 = </el-text></div>
- <!-- style="height: 95px" -->
- <el-input
- v-model="params.formula.noConditionFormula"
- :rows="3"
- disabled
- type="textarea"
- placeholder='示例:"完成值" / "目标值" * 100'
- />
- </div>
- <div class="w-[100%] h-32 mt-2 rounded-md flex flex-col">
- <div class="flex justify-between h-8">
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('1')"
- >
- 1
- </div>
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('2')"
- >
- 2
- </div>
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('3')"
- >
- 3
- </div>
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('+')"
- >
- +
- </div>
- <div
- class="h-full w-[50px] text-white bg-orange-400 mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="remove"
- >
- x
- </div>
- </div>
- <div class="flex justify-between h-8 mt-1">
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('4')"
- >
- 4
- </div>
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('5')"
- >
- 5
- </div>
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('6')"
- >
- 6
- </div>
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('-')"
- >
- -
- </div>
- <div
- class="text-xs h-full w-[50px] text-white bg-orange-400 mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="removeVoid"
- >
- 清空
- </div>
- </div>
- <div class="flex justify-between h-16 mt-1">
- <div>
- <div class="flex justify-between">
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('7')"
- >
- 7
- </div>
- <div
- class="h-full ml-1 w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('8')"
- >
- 8
- </div>
- <div
- class="h-full ml-2 w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('9')"
- >
- 9
- </div>
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('*')"
- >
- *
- </div>
- </div>
- <div class="flex mt-1 justify-between">
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('0')"
- >
- 0
- </div>
- <div
- class="h-full ml-1 w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('.')"
- >
- .
- </div>
- <div
- class="h-full ml-2 w-[50px] bg-white mx-1 flex justify-between items-center rounded-lg cursor-pointer"
- >
- <div
- class="w-1/2 h-full text-center border-r text-gray-100"
- @click="countNumber('(')"
- >
- <span class="text-black"> (</span>
- </div>
- <div
- class="w-1/2 h-full text-center"
- @click="countNumber(')')"
- >
- )
- </div>
- </div>
- <div
- class="h-full w-[50px] bg-white mx-1 flex justify-center items-center rounded-lg cursor-pointer"
- @click="countNumber('/')"
- >
- /
- </div>
- </div>
- </div>
- <div
- class="h-full mr-1 w-[50px] text-white flex justify-center items-center rounded-lg cursor-pointer areYouOK"
- @click="count"
- >
- 确认
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </el-form-item>
- <el-form-item v-else label="公式设置">
- <div class="w-full">
- <div class="flex items-center">
- <el-text>条件值 = </el-text>
- <!-- <el-input
- v-model="addmanyChange.outerConditionValue"
- class="ml-2"
- style="width: 240px"
- /> -->
- <jishuanqi
- ref="jishuanqiRef"
- :outerConditionValue="addmanyChange.outerConditionValue"
- @handClick="countNoConditionFormula"
- />
- </div>
- <div class="w-full mt-2">
- <div
- v-for="(
- item, index
- ) in addmanyChange.innerConditionExpression"
- :key="index"
- >
- <div class="mt-3">
- <div class="flex">
- <el-text class="w-[15px]" type="primary">
- {{ index + 1 }}
- </el-text>
- <div class="w-[40px] ml-4">
- {{ item.startValue }}
- </div>
- <div class="mr-2">
- {{ item.comparisonStart }}
- </div>
- <div class="mr-2">条件值</div>
- <el-select
- v-model="item.comparisonEnd"
- style="width: 60px"
- placeholder=""
- :disabled="
- index + 1 ==
- addmanyChange.innerConditionExpression.length &&
- index >= 1
- ? true
- : false
- "
- >
- <el-option label=">" value=">" />
- <el-option label="≥" value="≥" />
- </el-select>
- <el-select
- v-model="item.select"
- class="ml-2"
- style="width: 80px"
- placeholder=""
- :disabled="
- index + 1 ==
- addmanyChange.innerConditionExpression.length &&
- index >= 1
- ? true
- : false
- "
- >
- <el-option label="数值" value="数值" />
- <el-option label="公式" value="公式" />
- </el-select>
- <el-input
- v-if="
- index + 1 ==
- addmanyChange.innerConditionExpression.length &&
- index >= 1
- "
- disabled
- class="ml-2 mr-5"
- style="width: 80px"
- />
- <div v-else>
- <jishuanqi
- v-if="item.select == '公式'"
- ref="jishuanqiRef"
- :index="index"
- :outerConditionValue="item.endValue"
- class="ml-2 mr-5"
- style="width: 80px"
- @handClick="countNoConditionFormula1"
- />
- <el-input
- v-else
- v-model="item.endValue"
- class="ml-2 mr-5"
- style="width: 80px"
- @blur="changeAddMay"
- />
- </div>
- <el-text v-if="item.scoreRuleMoreInnerVO.length == 0"
- >得分 =
- </el-text>
- <!-- <el-input
- v-if="
- index + 1 ==
- addmanyChange.innerConditionExpression.length &&
- index >= 1
- "
- disabled
- class="ml-2 mr-5"
- style="width: 100px"
- /> -->
- <div>
- <jishuanqi
- v-if="item.scoreRuleMoreInnerVO.length == 0"
- ref="jishuanqiRef"
- :index="index"
- :outerConditionValue="item.innerScore"
- class="ml-2 mr-6"
- style="width: 100px"
- @handClick="countNoConditionFormulaInnerScore"
- />
- </div>
- <el-text type="danger" @click="deleteItem(index)">
- <el-icon>
- <Delete />
- </el-icon>
- </el-text>
- </div>
- <div
- v-for="(itemVO, indexOV) in item.scoreRuleMoreInnerVO"
- :key="indexOV"
- >
- <div class="flex mt-2 ml-20">
- <div class="mr-2">条件值{{ index + 1 }} =</div>
- <!-- <el-input v-if="
- index + 1 ==
- addmanyChange.innerConditionExpression
- .length && index >= 1
- " disabled class="ml-2 mr-6" style="width: 208px" /> -->
- <jishuanqi
- ref="jishuanqiRef"
- :index="index"
- :outerConditionValue="itemVO.innerConditionValue"
- class="ml-2 mr-6"
- style="width: 208px"
- @handClick="countNoConditionFormula2"
- />
- <!-- <el-input v-model="itemVO.innerConditionValue" class="ml-2 mr-6" style="width: 208px" /> -->
- <el-text
- type="danger"
- @click="dataleListItemAll(item, index)"
- >
- <el-icon>
- <Delete />
- </el-icon>
- </el-text>
- </div>
- <div
- v-for="(itemList, indexList) in itemVO.scoreRules"
- :key="indexList"
- class="ml-3"
- >
- <div class="flex mt-2 ml-16 items-center">
- <div class="text_border">{{ indexList + 1 }}</div>
- <!-- manyChange.dataList[index].dataList -->
- <div class="w-[40px] ml-2">
- {{ itemList.startValue }}
- </div>
- <div class="mr-2">
- {{ itemList.comparisonStart }}
- </div>
- <div class="mr-2">条件值{{ index + 1 }}</div>
- <el-select
- v-model="itemList.comparisonEnd"
- style="width: 60px"
- placeholder=""
- :disabled="
- indexList + 1 == itemVO.scoreRules.length
- ? true
- : false
- "
- >
- <el-option label=">" value=">" />
- <el-option label="≥" value="≥" />
- </el-select>
- <el-select
- v-model="itemList.select"
- class="ml-2"
- style="width: 80px"
- placeholder=""
- :disabled="
- indexList + 1 == itemVO.scoreRules.length
- ? true
- : false
- "
- >
- <el-option label="数值" value="数值" />
- <el-option label="公式" value="公式" />
- </el-select>
- <el-input
- v-if="indexList + 1 == itemVO.scoreRules.length"
- disabled
- class="ml-2"
- style="width: 80px"
- />
- <div v-else>
- <jishuanqi
- v-if="itemList.select == '公式'"
- ref="jishuanqiRef"
- :index="index"
- :indexList="indexList"
- :outerConditionValue="itemList.endValue"
- class="ml-2"
- style="width: 80px"
- @handClick="countNoConditionFormula3"
- />
- <el-input
- v-else
- v-model="itemList.endValue"
- class="ml-2"
- style="width: 80px"
- @blur="changeAddMay"
- />
- </div>
- <div
- class="w-[150px] ml-2 mr-2 flex justify-between items-center"
- >
- <div>得分</div>
- <div>=</div>
- <!-- <el-input v-if="
- indexList + 1 == itemVO.scoreRules.length &&
- index >= 1
- " disabled class="ml-2" style="width: 80px" /> -->
- <jishuanqi
- ref="jishuanqiRef"
- :index="index"
- :indexList="indexList"
- :outerConditionValue="itemList.score"
- class="ml-2"
- style="width: 80px"
- @handClick="countNoConditionFormula4"
- />
- <!-- <el-input
- v-model="itemList.score"
- class="ml-2"
- style="width: 80px"
- /> -->
- </div>
- <el-text
- type="danger"
- @click="dataleListItem(index, indexList)"
- >
- <el-icon>
- <Delete />
- </el-icon>
- </el-text>
- </div>
- <div
- v-if="indexList + 1 == itemVO.scoreRules.length"
- class="ml-16 mt-2 text-xs cursor-pointer"
- >
- <el-text
- type="primary"
- @click="
- addItemDataList(
- index,
- itemList,
- indexList,
- item
- )
- "
- >
- <el-icon>
- <Plus />
- </el-icon>
- 添加子条件
- </el-text>
- </div>
- </div>
- </div>
- </div>
- <div
- v-if="item?.scoreRuleMoreInnerVO?.length == 0"
- class="ml-20 mt-2 text-xs cursor-pointer"
- >
- <el-text
- type="primary"
- @click="addItemFormulaList(item, index)"
- >
- <el-icon>
- <Plus />
- </el-icon>
- 添加子条件
- </el-text>
- </div>
- <div
- v-if="
- addmanyChange.innerConditionExpression.length >= 1 &&
- index + 1 ==
- addmanyChange.innerConditionExpression.length
- "
- class="mt-5 text-xs cursor-pointer"
- >
- <el-text
- type="primary"
- @click="addNewItemOldValue(item)"
- >
- <el-icon>
- <Plus />
- </el-icon>
- 添加条件
- </el-text>
- </div>
- </div>
- <div
- v-if="addmanyChange.innerConditionExpression.length < 1"
- class="mt-5 text-xs cursor-pointer"
- >
- <el-text type="primary" @click="addNewItem">
- <el-icon>
- <Plus />
- </el-icon>
- 添加条件
- </el-text>
- </div>
- <div class="float-right mr-8">
- <el-button type="primary" @click="manyConditions"
- >公式验证</el-button
- >
- </div>
- </div>
- </div>
- </el-form-item>
- </div>
- </el-form>
- </div>
- </template>
- <template #footer>
- <div>
- <el-button @click="cancelClick">取消</el-button>
- <el-button type="primary" @click="confirmClick">确认</el-button>
- </div>
- </template>
- </el-drawer>
- <!-- 公式验证 -->
- <el-dialog
- v-model="dialogFormVisibleFormula"
- title="完成值"
- width="500"
- :before-close="quxiaoCmputed"
- >
- <el-form :model="formulaForm">
- <div v-for="(itemF, indexF) in formulaForm" :key="indexF">
- <el-form-item :label="itemF.name">
- <el-input v-model="itemF.value" autocomplete="off" />
- </el-form-item>
- </div>
- <el-form-item label="得分">
- <el-input v-model="grade" class="ml-3" autocomplete="off" disabled />
- </el-form-item>
- </el-form>
- <template #footer>
- <div class="dialog-footer">
- <el-button @click="quxiaoCmputed">取消</el-button>
- <el-button type="primary" @click="countComputed"> 计算 </el-button>
- </div>
- </template>
- </el-dialog>
- </div>
- </template>
- <style lang="scss" scoped>
- .compute {
- // border: 1px solid #f3f3f3;
- background-color: #f3f3f3;
- border-radius: 5px;
- }
- .text-color {
- color: #f3f3f3;
- }
- .areYouOK {
- background-color: #409eff;
- }
- .bgBack {
- background-color: #f3f3f3;
- }
- .text_border {
- display: flex;
- align-items: center;
- justify-content: center;
- width: 14px;
- height: 14px;
- // margin-top: 5px;
- margin-right: 5px;
- font-size: 12px;
- border: 1px solid gray;
- border-radius: 50%;
- }
- </style>
|