From 6d837c791e3c303e9176575559a2bb41af6154f5 Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期四, 25 四月 2024 18:45:00 +0800
Subject: [PATCH] 检查计费公式的校验,常用符号不能相邻,被除数不能为0,可选数据不能相邻等逻辑校验
---
src/views/employeeSalary/salaryPlan/components/addDialog.vue | 445 +++++++++++++++++++++++++++++++++---------------------
1 files changed, 271 insertions(+), 174 deletions(-)
diff --git a/src/views/employeeSalary/salaryPlan/components/addDialog.vue b/src/views/employeeSalary/salaryPlan/components/addDialog.vue
index cd33fac..17dd835 100644
--- a/src/views/employeeSalary/salaryPlan/components/addDialog.vue
+++ b/src/views/employeeSalary/salaryPlan/components/addDialog.vue
@@ -30,7 +30,7 @@
v-for="item in workTypeList"
:key="item.ID"
:label="item.workName"
- :value="item"
+ :value="{ value: item.ID, label: item.workName }"
>
</el-option>
</el-select>
@@ -55,21 +55,27 @@
@click="handleUnitShow"
></i>
</el-form-item>
- <el-form-item prop="salaryFormula" label="璁¤垂鍏紡瀹氫箟">
+ <el-form-item prop="salaryFormulaHtml" label="璁¤垂鍏紡瀹氫箟">
<!-- <el-input
type="textarea"
:autosize="{ minRows: 4, maxRows: 6}"
disabled
placeholder="璇疯緭鍏ュ唴瀹�"
- v-model="form.salaryFormula"
+ v-model="form.salaryFormulaHtml"
>
</el-input> -->
- <div class="formula-input" v-html="form.salaryFormula"></div>
- <el-button class='formula-btn' type="text" @click="checkFormula()">妫�鏌ュ叕寮�</el-button>
+ <div class="formula-input" v-html="form.salaryFormulaHtml"></div>
+ <el-button class="formula-btn" type="text" @click="checkFormula()"
+ >妫�鏌ュ叕寮�</el-button
+ >
</el-form-item>
- <div class="formula-error" >
- <span v-if="form.error==1"> 鏃犻敊璇紝鍙斁蹇冧娇鐢� ! </span>
- <span v-if="form.error==2"> 鍏紡鏈夐敊璇紝璇锋鏌� ! </span>
+ <div class="formula-error">
+ <span v-if="form.error == 1" class="color_blue">
+ 鏃犻敊璇紝鍙斁蹇冧娇鐢� !
+ </span>
+ <span v-if="form.error == 2" class="color_red">
+ 鍏紡鏈夐敊璇紝璇锋鏌� !
+ </span>
</div>
<div class="formula-box">
<div class="table-bottom-tabs">
@@ -97,35 +103,51 @@
<div class="formula-bottom-box">
<div class="formula-l">
<div class="formula-p">鍙�夋暟鎹�</div>
- <div class="formula-bottom" v-if="activeName==1">
- <div :class="item.width==2?'formula-item-100':'formula-item'" v-for='item in formulaName' :key="item.name">
+ <div class="formula-bottom" v-if="activeName == 1">
+ <div
+ :class="item.width == 2 ? 'formula-item-100' : 'formula-item'"
+ v-for="item in formulaName"
+ :key="item.name"
+ >
<span @click="formulaClick(item)"> {{ item.name }}</span>
- <i
- v-if="item.type==1"
- class="el-icon-setting margin_left_5px cursor_pointer"
- style="font-size: 18px; color: gray"
- @click="handleSlikSetShow"
- ></i>
+ <i
+ v-if="item.type == 1"
+ class="el-icon-setting margin_left_5px cursor_pointer"
+ style="font-size: 18px; color: gray"
+ @click="handleSlikSetShow"
+ ></i>
</div>
</div>
- <div class="formula-bottom" v-if="activeName==2">
- <div :class="item.width==2?'formula-item-100':'formula-item'" v-for='item in formulaNameTwo' :key="item.name">
- <span @click="formulaClick(item)"> {{ item.name }}</span>
- <i
- v-if="item.type==2"
- class="el-icon-setting margin_left_5px cursor_pointer"
- style="font-size: 18px; color: gray"
- @click="handleConstSetShow(2)"
- ></i>
+ <div class="formula-bottom" v-if="activeName == 2">
+ <div
+ :class="item.width == 2 ? 'formula-item-100' : 'formula-item'"
+ v-for="item in formulaNameTwo"
+ :key="item.name"
+ >
+ <span @click="formulaClick(item)"> {{ item.name }}</span>
+ <i
+ v-if="item.type == 2"
+ class="el-icon-setting margin_left_5px cursor_pointer"
+ style="font-size: 18px; color: gray"
+ @click="handleConstSetShow(2)"
+ ></i>
</div>
</div>
</div>
<div class="formula-r">
<div class="formula-p">甯哥敤绗﹀彿/浜ч噺</div>
<div class="formula-bottom">
- <div :class="item.width==2?'formula-item-100':'formula-item'" v-for='item in formulaSymbol' :key="item.name">
- <span v-if="item.type==3" @click="handleConstSetShow(3)"> {{ item.name }}</span>
- <span v-else @click="formulaClick(item)"> {{ item.name }}</span>
+ <div
+ :class="item.width == 2 ? 'formula-item-100' : 'formula-item'"
+ v-for="item in formulaSymbol"
+ :key="item.name"
+ >
+ <span v-if="item.type == 3" @click="handleConstSetShow(3)">
+ {{ item.name }}</span
+ >
+ <span v-else @click="formulaClick(item)">
+ {{ item.name }}</span
+ >
</div>
</div>
</div>
@@ -154,7 +176,7 @@
@confirmValueSave="confirmValueSave"
:constType="constType"
:editRow="form"
- :title="constType==2?'閰嶇疆':'杈撳叆'"
+ :title="constType == 2 ? '閰嶇疆' : '杈撳叆'"
></ConstantSetDialog>
</div>
</template>
@@ -167,14 +189,14 @@
} from "@/api/employeeSalary/salaryPlan.js";
import { getWorkTypeList } from "@/api/employeeManage/employeeInfo.js";
import BomDialog from "@/views/employeeSalary/salaryPlan/components/bomDialog.vue";
-import SilkSetDialog from "@/views/employeeSalary/salaryPlan/components/SilkSetDialog.vue";
-import ConstantSetDialog from "@/views/employeeSalary/salaryPlan/components/ConstantSetDialog.vue";
+import SilkSetDialog from "@/views/employeeSalary/salaryPlan/components/SilkSetDialog.vue";
+import ConstantSetDialog from "@/views/employeeSalary/salaryPlan/components/ConstantSetDialog.vue";
export default {
- components: {
+ components: {
BomDialog,
SilkSetDialog,
- ConstantSetDialog
- },
+ ConstantSetDialog,
+ },
props: {
editRow: {
type: Object,
@@ -188,91 +210,92 @@
workTypes: [],
salaryType: "",
salaryFormula: "",
- error:'',
- purchaseTypeList:[1],
- cycle:1,
+ salaryFormulaHtml: "",
+ error: "",
+ purchaseTypeList: [1],
+ cycle: '1',
},
activeName: 1,
- formulaName:[
+ formulaName: [
{
- name:'鏃ヤ骇涓濋噺',
+ name: "鏃ヤ骇涓濋噺",
},
{
- name:'閲庣氦鏁伴噺',
- type:1,
+ name: "閲庣氦鏁伴噺",
+ type: 1,
},
{
- name:'鐢熶笣鍗曚环',
+ name: "鐢熶笣鍗曚环",
},
{
- name:'閲庣氦鍗曚环',
+ name: "閲庣氦鍗曚环",
},
{
- name:'妗舵暟(鏃�)',
+ name: "妗舵暟(鏃�)",
},
{
- name:'鍑哄嫟澶╂暟',
+ name: "鍑哄嫟澶╂暟",
},
{
- name:'鍚岀粍鎸¤溅宸ユ湀骞冲潎宸ヨ祫',
- width:2
+ name: "鍚岀粍鎸¤溅宸ユ湀骞冲潎宸ヨ祫",
+ width: 2,
},
{
- name:'鍚岀粍杞﹀ご宸ュ伐璧�',
- width:2
- }
- ],
- formulaNameTwo:[
- {
- name:'宸ヤ綔鏃ュ姞鐝椂闀�',
- },
- {
- name:'婊″嫟濂�',
- type:2,
- },
- {
- name:'浼戞伅鏃ュ姞鐝椂闀�',
- },
- {
- name:'璇峰亣澶╂暟',
- },
- {
- name:'甯﹀緬澶╂暟',
- },
- {
- name:'宸ラ緞',
- },
- {
- name:'鍑哄嫟澶╂暟',
+ name: "鍚岀粍杞﹀ご宸ュ伐璧�",
+ width: 2,
},
],
- formulaSymbol:[
+ formulaNameTwo: [
{
- name:'+',
- background:'background_red',
+ name: "宸ヤ綔鏃ュ姞鐝椂闀�",
},
{
- name:'-',
- background:'background_red',
+ name: "婊″嫟濂�",
+ type: 2,
},
{
- name:'/',
- background:'background_red',
+ name: "浼戞伅鏃ュ姞鐝椂闀�",
},
{
- name:'*',
- background:'background_red',
+ name: "璇峰亣澶╂暟",
},
{
- name:'(',
+ name: "甯﹀緬澶╂暟",
},
{
- name:')',
+ name: "宸ラ緞",
},
{
- name:'甯搁噺鏁板瓧',
- type:3,
- width:2
+ name: "鍑哄嫟澶╂暟",
+ },
+ ],
+ formulaSymbol: [
+ {
+ name: "+",
+ background: "background_red",
+ },
+ {
+ name: "-",
+ background: "background_red",
+ },
+ {
+ name: "/",
+ background: "background_red",
+ },
+ {
+ name: "*",
+ background: "background_red",
+ },
+ {
+ name: "(",
+ },
+ {
+ name: ")",
+ },
+ {
+ name: "甯搁噺鏁板瓧",
+ type: 3,
+ width: 2,
},
],
workTypeList: [], //宸ョ
@@ -290,12 +313,12 @@
salaryType: [
{ required: true, message: "璇烽�夋嫨", trigger: ["blur", "change"] },
],
- salaryFormula: [
+ salaryFormulaHtml: [
{ required: true, message: "璇烽�夋嫨", trigger: ["blur", "change"] },
],
},
unitList: [],
- constType:'',
+ constType: "",
};
},
computed: {},
@@ -319,40 +342,107 @@
this.activeName = activeName;
},
// 鐐瑰嚮鐢熶骇鏁版嵁鍜岃�冨嫟鍙婅ˉ璐存暟鎹� 璧嬪�艰璐瑰叕寮忓畾涔�
- formulaClick(item,value){
- let string=''
- let name=(item.type==3&&item.name=='甯搁噺鏁板瓧')?value:item.name
- if(item.background){
- string="<span class='formula-input-item background_red color_fff'>"+ name +"</span>"
- }else{
- string="<span class='formula-input-item background_e3e3e3'>"+ name +"</span>"
+ formulaClick(item, value) {
+ let string = "";
+ let name = item.type == 3 && item.name == "甯搁噺鏁板瓧" ? value : item.name;
+ if (item.background) {
+ string =
+ "<span class='formula-input-item background_red color_fff'>" +
+ name +
+ "</span>";
+ } else {
+ string =
+ "<span class='formula-input-item background_e3e3e3'>" +
+ name +
+ "</span>";
}
- this.form.salaryFormula= this.form.salaryFormula+string;
- this.$forceUpdate()
+ this.form.salaryFormula = this.form.salaryFormula + name + "锛�";
+ this.form.salaryFormulaHtml = this.form.salaryFormulaHtml + string;
+ this.$forceUpdate();
},
- checkFormula(){
+ checkFormula() {
+ if (this.form.salaryFormula) {
+ let string = true;
+ let isString = '+-*/';
+ let arr = this.form.salaryFormula.split("锛�");
+ arr=arr.splice(0,arr.length-1)
+ for (let i=0;i<arr.length;i++) {
+ if (arr[i] != "") {
+ // 闄ゆ暟涓嶈兘涓�0, 绗﹀彿閭h竟闇�瑕佹湁鍊�
+ if (isString.indexOf(arr[i]) != -1 || arr[i] == "(") {
+ if (i != 0) {
+ if (isString.indexOf(arr[i - 1]) != -1) {
+ string = false;
+ break;
+ }
+ }
+ if (i == arr.length - 1) {
+ string = false;
+ break;
+ }
+ if (i < arr.length - 1) {
+ if (isString.indexOf(arr[i + 1]) != -1) {
+ string = false;
+ break;
+ } else if (arr[i] == "/" && arr[i + 1] == 0) {
+ string = false;
+ break;
+ }
+ }
+ } else if (arr[i] == ")") {
+ if (i < arr.length - 1) {
+ if (isString.indexOf(arr[i+1]) == -1) {
+ string = false;
+ break;
+ }
+ }
+ } else {
+ if (i != 0) {
+ if (isString.indexOf(arr[i - 1]) == -1 && arr[i - 1] != "(") {
+ string = false;
+ break;
+ }
+ }
+ if (i < arr.length - 1) {
+ if (isString.indexOf(arr[i + 1]) == -1 && arr[i + 1] != ")") {
+ string = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (!string) {
+ this.form.error = 2;
+ } else {
+ this.form.error = 1;
+ }
+ }
},
- confirmValueSave(form,type){
- if(type==1){
- this.form.purchaseTypeList=form.purchaseTypeList;
- }else if(type==2){
- this.form.cycle=form.cycle
- }else if(type==3){
- this.formulaClick({
- name:'甯搁噺鏁板瓧',
- type:3,
- width:2
- },form.number)
+ confirmValueSave(form, type) {
+ if (type == 1) {
+ this.form.purchaseTypeList = form.purchaseTypeList;
+ } else if (type == 2) {
+ this.form.cycle = form.cycle+'';
+ } else if (type == 3) {
+ this.formulaClick(
+ {
+ name: "甯搁噺鏁板瓧",
+ type: 3,
+ width: 2,
+ },
+ form.number
+ );
}
},
// 閲庣氦鏁伴噺
- handleSlikSetShow(){
+ handleSlikSetShow() {
this.$refs.silkSetDialog.islook = true;
},
// 婊″嫟濂�
- handleConstSetShow(val){
- this.constType=val;
+ handleConstSetShow(val) {
+ this.constType = val;
this.$refs.constantSetDialog.islook = true;
},
// 鍗曚綅
@@ -387,9 +477,10 @@
workTypes: [],
salaryType: "",
salaryFormula: "",
- error:'',
- purchaseTypeList:[1],
- cycle:1,
+ salaryFormulaHtml: "",
+ error: "",
+ purchaseTypeList: [1],
+ cycle: '1',
};
this.$nextTick(() => {
this.$refs["form"].resetFields();
@@ -421,8 +512,11 @@
this.$refs[formName].validate((valid) => {
if (valid) {
let form = JSON.parse(JSON.stringify(this.form));
- if(form.purchaseTypeList.length==0){
- this.$message.error('璇风偣鍑婚噹绾ゆ暟閲忛厤缃敓涓濇爣鍑嗭紒')
+ let arr = form.salaryFormula.split("锛�");
+ arr=arr.splice(0,arr.length-1)
+ form.salaryFormula=arr.join("锛�")
+ if (form.purchaseTypeList.length == 0) {
+ this.$message.error("璇风偣鍑婚噹绾ゆ暟閲忛厤缃敓涓濇爣鍑嗭紒");
return true;
}
saveSalaryPlan(form).then((res) => {
@@ -448,78 +542,81 @@
width: 90%;
margin-bottom: 40px;
margin: 0 auto;
- .formula-box{
- height:auto;
- width:calc(100% - 110px);
- font-size:14px;
- line-height:25px;
- padding-left:110px;
- .formula-bottom-box{
- width:100%;
- height:auto;
- overflow:hidden;
- margin-bottom:30px;
- .formula-p{
- line-height:40px;
+ .formula-box {
+ height: auto;
+ width: calc(100% - 110px);
+ font-size: 14px;
+ line-height: 25px;
+ padding-left: 110px;
+ .formula-bottom-box {
+ width: 100%;
+ height: auto;
+ overflow: hidden;
+ margin-bottom: 30px;
+ .formula-p {
+ line-height: 40px;
}
- .formula-l,.formula-r{
- height:auto;
- float:left;
+ .formula-l,
+ .formula-r {
+ height: auto;
+ float: left;
}
- .formula-l{
- width:calc(75% - 10px);
- margin-right:20px;
+ .formula-l {
+ width: calc(75% - 10px);
+ margin-right: 20px;
}
- .formula-r{
- width:calc(25% - 10px);
+ .formula-r {
+ width: calc(25% - 10px);
}
- .formula-item-100{
- width:100%;
- margin-bottom:10px;
- span{
+ .formula-item-100 {
+ width: 100%;
+ margin-bottom: 10px;
+ span {
cursor: pointer;
- padding:5px 10px;
+ padding: 5px 10px;
}
}
- .formula-item{
- width:calc(50% - 5px);
- margin-bottom:10px;
- float:left;
+ .formula-item {
+ width: calc(50% - 5px);
+ margin-bottom: 10px;
+ float: left;
&:nth-of-type(odd) {
margin-right: 10px;
}
- span{
+ span {
cursor: pointer;
- padding:5px 10px;
+ padding: 5px 10px;
}
}
- .formula-bottom{
- padding:15px 10px;
- background:#f3f3f3;
- overflow:hidden;
+ .formula-bottom {
+ padding: 15px 10px;
+ background: #f3f3f3;
+ overflow: hidden;
}
}
}
- .formula-input{
- width:calc(100% - 100px);
- height:100px;
- padding:10px 10px;
- overflow-y:auto;
- background:#F5F7FA;
- border:1px solid #E4E7ED;
- cursor:not-allowed;
- float:left;
- margin-right:20px;
- }
- .formula-btn{
- float:left;
- margin-top:80px;
- }
- .formula-error{
- width:100%;
- line-height:28px;
- font-size:12px;
- }
+ .formula-input {
+ width: calc(100% - 100px);
+ height: 100px;
+ padding: 10px 10px;
+ overflow-y: auto;
+ background: #f5f7fa;
+ border: 1px solid #e4e7ed;
+ cursor: not-allowed;
+ float: left;
+ margin-right: 20px;
+ }
+ .formula-btn {
+ float: left;
+ margin-top: 80px;
+ }
+ .formula-error {
+ width: calc(100% - 110px);
+ line-height: 28px;
+ font-size: 14px;
+ margin-left: 110px;
+ margin-bottom: 10px;
+ }
}
::v-deep {
--
Gitblit v1.8.0