From a3094611deac91e0ec35bcfe3f3fdd3bdf993466 Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期五, 26 四月 2024 16:18:40 +0800
Subject: [PATCH] 考勤统计模块 增加月份对应的星期的数据处理+对应考勤统计的样式调整
---
src/views/employeeSalary/salaryPlan/components/addDialog.vue | 514 ++++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 396 insertions(+), 118 deletions(-)
diff --git a/src/views/employeeSalary/salaryPlan/components/addDialog.vue b/src/views/employeeSalary/salaryPlan/components/addDialog.vue
index aa2a3bc..d78d102 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,16 +55,41 @@
@click="handleUnitShow"
></i>
</el-form-item>
- <el-form-item prop="salaryFormula" label="璁¤垂鍏紡瀹氫箟">
- <el-input
+ <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>
+ </el-input> -->
+ <div class="formula-input" v-html="form.salaryFormulaHtml"></div>
+ <div class="formula-btn-right">
+ <el-button
+ class="formula-btn-t"
+ type="text"
+ :disabled="form.salaryFormulaHtml.length > 0 ? false : true"
+ @click="deleteFormula()"
+ >娓呴櫎</el-button
+ >
+ <el-button
+ class="formula-btn"
+ :disabled="form.salaryFormulaHtml.length > 0 ? false : true"
+ type="text"
+ @click="checkFormula()"
+ >妫�鏌ュ叕寮�</el-button
+ >
+ </div>
</el-form-item>
+ <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">
<div
@@ -91,22 +116,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">
- <span @click="formulaClick(item)"> {{ item.name }}</span>
+ <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>
</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>
+ <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 @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>
@@ -124,6 +178,19 @@
:workList="unitList"
title="璁¢噺鍗曚綅"
></BomDialog>
+ <SilkSetDialog
+ ref="silkSetDialog"
+ @confirmValueSave="confirmValueSave"
+ :editRow="form"
+ title="閰嶇疆"
+ ></SilkSetDialog>
+ <ConstantSetDialog
+ ref="constantSetDialog"
+ @confirmValueSave="confirmValueSave"
+ :constType="constType"
+ :editRow="form"
+ :title="constType == 2 ? '閰嶇疆' : '杈撳叆'"
+ ></ConstantSetDialog>
</div>
</template>
@@ -135,8 +202,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";
export default {
- components: { BomDialog },
+ components: {
+ BomDialog,
+ SilkSetDialog,
+ ConstantSetDialog,
+ },
props: {
editRow: {
type: Object,
@@ -144,90 +217,98 @@
},
data() {
return {
- islook: true,
+ islook: false,
form: {
name: "",
workTypes: [],
salaryType: "",
salaryFormula: "",
+ 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:1,
- },
- {
- name:'浼戞伅鏃ュ姞鐝椂闀�',
- },
- {
- name:'璇峰亣澶╂暟',
- },
- {
- name:'甯﹀緬澶╂暟',
- },
- {
- name:'宸ラ緞',
- },
- {
- name:'鍑哄嫟澶╂暟',
+ name: "鍚岀粍杞﹀ご宸ュ伐璧�",
+ width: 2,
},
],
- formulaSymbol:[
+ formulaNameTwo: [
{
- name:'+',
+ name: "宸ヤ綔鏃ュ姞鐝椂闀�",
},
{
- name:'-',
+ name: "婊″嫟濂�",
+ type: 2,
},
{
- name:'/',
+ name: "浼戞伅鏃ュ姞鐝椂闀�",
},
{
- name:'*',
+ name: "璇峰亣澶╂暟",
},
{
- name:'(',
+ name: "甯﹀緬澶╂暟",
},
{
- name:')',
+ name: "宸ラ緞",
},
{
- name:'甯搁噺鏁板瓧',
- type:1,
- 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: [], //宸ョ
@@ -245,11 +326,12 @@
salaryType: [
{ required: true, message: "璇烽�夋嫨", trigger: ["blur", "change"] },
],
- salaryFormula: [
+ salaryFormulaHtml: [
{ required: true, message: "璇烽�夋嫨", trigger: ["blur", "change"] },
],
},
unitList: [],
+ constType: "",
};
},
computed: {},
@@ -271,6 +353,170 @@
methods: {
tabClickBottom(activeName) {
this.activeName = activeName;
+ },
+ formInfo() {
+ if (this.islook) {
+ this.form = {
+ name: "",
+ workTypes: [],
+ salaryType: "",
+ salaryFormula: "",
+ salaryFormulaHtml: "",
+ error: "",
+ purchaseTypeList: [1],
+ cycle: "1",
+ };
+ this.$nextTick(() => {
+ this.$refs["form"].resetFields();
+ if (this.editRow.id) {
+ this.form = JSON.parse(JSON.stringify(this.editRow));
+ let salaryFormula = this.form.salaryFormula
+ ? this.form.salaryFormula
+ : "";
+ this.form.salaryFormulaHtml = "";
+ this.form.salaryFormula = "";
+ this.form.purchaseTypeList = [1];
+ let arr = salaryFormula ? salaryFormula.split("锛�") : [];
+ this.getSalaryFormulaHtml(arr);
+ }
+ });
+ }
+ },
+ getSalaryFormulaHtml(arr) {
+ let formulaNameArr = this.formulaName
+ .concat(this.formulaNameTwo)
+ .concat(this.formulaSymbol);
+ if (arr.length > 0) {
+ for (let i in arr) {
+ for (let j in formulaNameArr) {
+ let reg2 =
+ /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/;
+ if (reg2.test(arr[i])) {
+ this.formulaClick(
+ { name: "甯搁噺鏁板瓧", type: 3, width: 2 },
+ arr[i]
+ );
+ } else if (formulaNameArr[j].name == arr[i]) {
+ this.formulaClick(formulaNameArr[j]);
+ }
+ }
+ }
+ }
+ },
+ // 鐐瑰嚮鐢熶骇鏁版嵁鍜岃�冨嫟鍙婅ˉ璐存暟鎹� 璧嬪�艰璐瑰叕寮忓畾涔�
+ 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 + name + "锛�";
+ this.form.salaryFormulaHtml = this.form.salaryFormulaHtml + string;
+ this.$forceUpdate();
+ },
+ deleteFormula() {
+ let salaryFormula = this.form.salaryFormula
+ ? this.form.salaryFormula
+ : "";
+ let arr = salaryFormula.split("锛�");
+ arr = arr.splice(0, arr.length - 1);
+ arr = arr.splice(0, arr.length - 1);
+ this.form.salaryFormulaHtml = "";
+ this.form.salaryFormula = "";
+ this.getSalaryFormulaHtml(arr);
+ },
+ 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.$set(this.form, "error", 2);
+ } else {
+ this.$set(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
+ );
+ }
+ },
+ // 閲庣氦鏁伴噺
+ handleSlikSetShow() {
+ this.$refs.silkSetDialog.islook = true;
+ },
+ // 婊″嫟濂�
+ handleConstSetShow(val) {
+ this.constType = val;
+ this.$refs.constantSetDialog.islook = true;
},
// 鍗曚綅
handleUnitShow() {
@@ -297,26 +543,6 @@
this.unitList = res.data;
});
},
- formInfo() {
- if (this.islook) {
- this.form = {
- name: "",
- workTypes: [],
- salaryType: "",
- salaryFormula: "",
- };
- this.$nextTick(() => {
- this.$refs["form"].resetFields();
- if (this.editRow.id) {
- this.form = JSON.parse(JSON.stringify(this.editRow));
- this.form.groupNumber = this.form.groupNumber
- ? this.form.groupNumber
- : null;
- this.getGroupNumber(true);
- }
- });
- }
- },
getSelectDataList() {
getWorkTypeList({
page: 0,
@@ -338,7 +564,29 @@
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
+ this.checkFormula();
+ if (this.form.error == 2) {
+ this.$message.error("璇锋鏌ヨ璐瑰叕寮忓畾涔夛紒");
+ return true;
+ }
let form = JSON.parse(JSON.stringify(this.form));
+ 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;
+ }
+ let workTypes = [];
+ if (form.workTypes && form.workTypes.length > 0) {
+ for (let i in form.workTypes) {
+ workTypes.push({
+ workName: form.workTypes[i].label,
+ id: form.workTypes[i].value,
+ });
+ }
+ }
+ form.workTypes = workTypes;
saveSalaryPlan(form).then((res) => {
if (res.code == 200) {
this.$message({
@@ -362,57 +610,87 @@
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;
- .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% - 90px);
+ height: 100px;
+ padding: 10px 10px;
+ overflow-y: auto;
+ background: #f5f7fa;
+ border: 1px solid #e4e7ed;
+ cursor: not-allowed;
+ float: left;
+ }
+ .formula-btn-right {
+ width: 60px;
+ float: left;
+ position: relative;
+ .formula-btn-t {
+ margin-left: 10px;
+ }
+ .formula-btn {
+ margin-top: 40px;
+ }
+ }
+
+ .formula-error {
+ width: calc(100% - 110px);
+ line-height: 28px;
+ font-size: 14px;
+ margin-left: 110px;
+ margin-bottom: 10px;
}
}
--
Gitblit v1.8.0