Browse Source

积分事件/特殊字符限制

walter 9 months ago
parent
commit
321c4b5b30

+ 2 - 2
src/components/SelectRule.vue

@@ -148,7 +148,7 @@ export default {
   },
   methods: {
     handleClose(item){
-      console.log(item)
+      // console.log(item)
     },
     checkedChange(val){
       let selectIds=this.selectArrItem.map(e=>e.id);
@@ -242,7 +242,7 @@ export default {
         //选择指定部门规则,创始人,公司,积分专员不限制
         data['dep_ids'] = JSON.stringify(this.deptIds);
       }
-      console.log(this.deptIds,)
+      // console.log(this.deptIds,)
       this.$axiosUser('get', '/api/pro/integral/rule/trees', data).then(res => {
         this.rule_tree = this.getTreeData2(res.data.data.rule_tree);
         this.item_list = res.data.data.item_list;

+ 6 - 2
src/point/views/common/applicationIntegrationPopup.vue

@@ -59,7 +59,7 @@
               :prop="'items.' + index + '.remark'"
               :rules="[{ required: true, message: '请输入事件内容'}, { min: 2, max: 300, message: '长度在 2 到 300 个字符'}]"
             >
-              <el-input type="textarea" clearable maxlength="300" show-word-limit rows="4" placeholder="请输入事件内容" v-model="item.remark"></el-input>
+              <el-input type="textarea" clearable maxlength="300" show-word-limit rows="4" placeholder="请输入事件内容" v-model="item.remark" @input="onRemarkInput(item)"></el-input>
               <el-button @click="item.remark=''" type="danger" plain size="mini" style="position: absolute;right: 0px;bottom: -30px;z-index: 99999;">清空</el-button>
             </el-form-item>
 
@@ -172,6 +172,7 @@ import moment from 'moment';
 import EmployeeSelector from '@/components/EmployeeSelector';
 import uploadOss from '@/components/upload';
 import SelectRule from '@/components/SelectRule';
+import {specialFilter} from "../../../utils";
 
 export default {
   name: 'applicationIntegration',
@@ -300,7 +301,7 @@ export default {
             items.push(this.isItemId(e.id))
           }else{
             let item = JSON.parse(JSON.stringify(this.item));
-            item.remark = e.remark;
+            item.remark = specialFilter(e.remark);
             item.rule_id = e.rule_id;
             item.item_id = e.id;
             item.ruleData= e;
@@ -582,6 +583,9 @@ export default {
         };
       })
       this.$emit('update:visible', false);
+    },
+    onRemarkInput(item){
+      item.remark = specialFilter(item.remark)
     }
   }
 };

+ 6 - 2
src/point/views/common/bonusPointsPopup.vue

@@ -67,7 +67,7 @@
               :prop="'items.' + index + '.remark'"
               :rules="[{ required: true, message: '请输入事件内容'}, { min: 2, max: 300, message: '长度在 2 到 300 个字符'}]"
             >
-              <el-input type="textarea" clearable maxlength="300" show-word-limit rows="4" placeholder="请输入事件内容" v-model="item.remark"></el-input>
+              <el-input type="textarea" clearable maxlength="300" show-word-limit rows="4" placeholder="请输入事件内容" v-model="item.remark" @input="onRemarkInput(item)"></el-input>
               <el-button @click="item.remark=''" type="danger" plain size="mini" style="position: absolute;right: 0px;bottom: -30px;z-index: 99999;">清空</el-button>
             </el-form-item>
 
@@ -236,6 +236,7 @@ import moment from 'moment';
 import EmployeeSelector from '@/components/EmployeeSelector';
 import uploadOss from '@/components/upload';
 import SelectRule from '@/components/SelectRule';
+import {specialFilter} from "../../../utils";
 export default {
   name: 'bonusPointsForm',
   // 数据
@@ -446,7 +447,7 @@ export default {
             items.push(this.isItemId(e.id))
           }else{
             let item = JSON.parse(JSON.stringify(this.item));
-            item.remark = e.remark;
+            item.remark = specialFilter(e.remark);
             item.name = e.remark;
             item.rule_id = e.rule_id;
             item.item_id = e.id;
@@ -774,6 +775,9 @@ export default {
       this.selectItem=[];
       this.rule_list_value=[];
       this.$emit('update:visible', false);
+    },
+    onRemarkInput(item){
+      item.remark = specialFilter(item.remark)
     }
   }
 };

+ 14 - 3
src/point/views/common/examinePopup.vue

@@ -176,7 +176,7 @@
             }
           ]"
         >
-          <el-input type="textarea" :rows="4" v-model="rejectForm.remark" placeholder="请输入审批意见(限50字)" maxlength="50" show-word-limit></el-input>
+          <el-input type="textarea" :rows="4" v-model="rejectForm.remark" placeholder="请输入审批意见(限50字)" maxlength="50" show-word-limit @input="onRejectRemarkInput"></el-input>
         </el-form-item>
 
         <div class="flex-box-end">
@@ -302,7 +302,7 @@
           prop="remark"
           :rules="[{ required: true, message: '请输入审批意见'}, { max: 100, message: '长度不能超过 100 个字符'}]"
         >
-          <el-input :rows="4" type="textarea" v-model="adoptForm.remark" placeholder="说点什么(限100字)"></el-input>
+          <el-input :rows="4" type="textarea" v-model="adoptForm.remark" placeholder="说点什么(限100字)" @input="onApprovalRemarkInput"></el-input>
         </el-form-item>
         <div style="padding-left: 80px">奖票用于优秀表现和重要事项的表彰</div>
         <el-form-item label="发放奖票"><el-switch :disabled="!isFirstStep" v-model="adoptForm.switch" active-color="#13ce66"></el-switch></el-form-item>
@@ -340,7 +340,7 @@
           />
         </el-form-item>
         <el-form-item v-if="detail_info.source_type != 4" label="审批意见" prop="remark" :rules="[{ max: 100, message: '长度不能超过 100 个字符'}]">
-          <el-input :rows="4" type="textarea" v-model="adoptForm.remark" placeholder="说点什么(限100字)"></el-input>
+          <el-input :rows="4" type="textarea" v-model="adoptForm.remark" placeholder="说点什么(限100字)" @input="onApprovalRemarkInput"></el-input>
         </el-form-item>
 
         <center>
@@ -371,6 +371,7 @@
               :show-word-limit="true"
               placeholder="原因说明"
               v-model="formRejectRewrite.remark"
+              @input="onRewriteRemarkInput"
             />
           </el-form-item>
         </el-form>
@@ -393,6 +394,7 @@ import EmployeeSelector from '@/components/EmployeeSelector';
 import Steps from '@/components/Steps.vue';
 import moment from 'moment';
 import Template from "../../../examine/components/Template.vue";
+import {specialFilter} from "../../../utils";
 export default {
   name: 'examinePopup',
   data() {
@@ -918,6 +920,15 @@ export default {
         default:
           return 'warning'
       }
+    },
+    onApprovalRemarkInput(val){
+      this.adoptForm.remark = specialFilter(val)
+    },
+    onRejectRemarkInput(val){
+      this.rejectForm.remark = specialFilter(val)
+    },
+    onRewriteRemarkInput(val){
+      this.formRejectRewrite.remark = specialFilter(val)
     }
   }
 };

+ 12 - 2
src/point/views/setting/fixed_integral.vue

@@ -5,6 +5,7 @@
         <el-alert class="diy-tip" title="什么是自动积分?" type="success" description show-icon>
           <p>系统按照设定的时间(每月/每周/每日) 自动给员工添加的积分,比如某员工有一个工程师证,得到公司的认可,公司就会每月给他加分<span class="blue cursor" style="padding-left: 20px;" @click="$openUrl(2)">如何设置自动积分?</span></p>
           <p>每个周期开始自动加分,超过加分时间点将顺延到下一个周期加分,请提前设置加分项。如每月1号自动加分,10号才设置加分项,需等到次月1号才会自动加分</p>
+          <p>当前系统只允许提交如下内容:数字、中文、英文字母、下划线、空格以及以下特殊字符<code>:,.!@{}[]()<></code></p>
         </el-alert>
       </el-col>
     </el-row>
@@ -95,7 +96,7 @@
 
     <el-dialog :title="grouping_type == 'add' ? '新增加分组' : '编辑加分组'" :visible.sync="grouping_show" :close-on-click-modal="false" width="500px">
       <el-form :model="grouping" ref="grouping" :rules="grouping_rules" label-width="100px">
-        <el-form-item label="加分组名称" prop="name"><el-input v-model="grouping.name" maxlength="10" show-word-limit placeholder="请输入加分组名称"></el-input></el-form-item>
+        <el-form-item label="加分组名称" prop="name"><el-input v-model="grouping.name" maxlength="10" show-word-limit placeholder="请输入加分组名称" @input="onGroupNameInput"></el-input></el-form-item>
         <div style="overflow: hidden;">
           <el-button class="fl" :disabled="btn_disabled" type="danger" v-show="grouping_type == 'edit'" @click="del_grouping(grouping)">删除</el-button>
           <el-button class="fr" :disabled="btn_disabled" type="primary" @click="grouping_btn('grouping')">确定</el-button>
@@ -108,7 +109,7 @@
       <div style="text-align: center;margin-bottom: 10px;" class="orange" v-show="rules_detail_title == '编辑加分项'">如加分周期是“月”:系统将在每月1号的24点前,自动完成加分</div>
       <el-form :model="rules_detail_form" ref="rules_detail_form" :rules="rules_rules" label-width="120px">
         <el-form-item label="加分项名称" prop="remark">
-          <el-input v-model="rules_detail_form.remark" maxlength="50" show-word-limit placeholder="请输入加分项名称"></el-input>
+          <el-input v-model="rules_detail_form.remark" maxlength="50" show-word-limit placeholder="请输入加分项名称" @input="onDetailRemarkInput"></el-input>
         </el-form-item>
         <el-form-item label="分组" prop="rule_id">
           <el-select v-model="rules_detail_form.rule_id" style="width: 100%;" placeholder="请选择分组">
@@ -189,6 +190,7 @@
 
 <script>
 import EmployeeSelectorTwo from '@/components/EmployeeSelectorTwo';
+import {specialFilter} from "../../../utils";
 import { type } from 'os';
 let PerformTheNumber = true; //五秒执行一次变量
 export default {
@@ -684,6 +686,7 @@ export default {
             rule_list.forEach(item => {
               item.child = item_list['rule_' + item.id] || [];
             });
+            //打开第一个有细则记录的分类
             rule_list.some((item, index) => {
               if (item.child.length > 0) {
                 this.open_right(item.child[0]);
@@ -763,6 +766,7 @@ export default {
       this.rules_detail_form = JSON.parse(JSON.stringify(this.right_rules_detail));
       this.rules_detail_form.is_attendance=this.rules_detail_form.is_attendance.toString();
       this.rules_detail_form.sync = '2';
+      this.rules_detail_form.remark = specialFilter(this.rules_detail_form.remark)
     },
 
     // 新增规则
@@ -779,6 +783,12 @@ export default {
         pt_id: '3'
       };
       this.rules_detail_show = true;
+    },
+    onGroupNameInput(val){
+      this.grouping.name = specialFilter(val)
+    },
+    onDetailRemarkInput(val){
+      this.rules_detail_form.remark = specialFilter(val)
     }
   },
   mounted() {

+ 13 - 2
src/point/views/setting/rule_manage.vue

@@ -4,6 +4,7 @@
     <el-alert class="diy-tip"  type="success"  description show-icon>
       <strong style="font-size: 14px;">积分规则是什么?如何制定?<span class="blue cursor" @click="$openUrl(16)">查看视频</span> </strong>
       <p>添加规则时请先【添加规则分类】,再【添加规则】;或者直接【导入规则】</p>
+      <p>当前系统只允许提交如下内容:数字、中文、英文字母、空格以及以下特殊字符<code>:,.!@{}[]()<>-_</code></p>
     </el-alert>
 
     <!-- 中间内容 -->
@@ -80,7 +81,7 @@
     >
       <el-form :model="dept_formdata" ref="dept_formdata" :rules="dept_formdata_rules" label-width="80px">
         <el-form-item label="规则分类" prop="name">
-          <el-input v-model="dept_formdata.name" maxlength="20" show-word-limit style="width: 500px;" placeholder="分类名称"></el-input>
+          <el-input v-model="dept_formdata.name" maxlength="20" show-word-limit style="width: 500px;" placeholder="分类名称" @input="onRuleNameInput"></el-input>
         </el-form-item>
         <el-form-item label="上级分类">
           <el-cascader
@@ -127,7 +128,7 @@
     <el-dialog :title="rule_type == 'add' ? '添加规则' : '编辑规则'" :visible.sync="rule_show" @close="rule_close('rules_detail_form')" :close-on-click-modal="false" width="700px">
       <el-form :model="rules_detail_form" ref="rules_detail_form" :rules="rules" label-width="80px">
         <el-form-item label="规则内容" prop="remark">
-          <el-input v-model="rules_detail_form.remark" placeholder="请输入规则内容" maxlength="300" show-word-limit type="textarea" :rows="3"></el-input>
+          <el-input v-model="rules_detail_form.remark" placeholder="请输入规则内容" maxlength="300" show-word-limit type="textarea" :rows="3" @input="onRuleRemarkInput"></el-input>
         </el-form-item>
         <el-form-item label="所属分类" prop="rule_id">
           <div style="position: relative;">
@@ -249,6 +250,7 @@
 <script>
 import EmployeeSelector from '@/components/EmployeeSelector';
 import {_debounce} from '@/utils/auth';
+import {specialFilter} from "../../../utils";
 let PerformTheNumber = true; //五秒执行一次变量
 export default {
   name: 'rule_category',
@@ -443,6 +445,7 @@ export default {
     keyword:_debounce(function(val){
       this.get_department_list();
     }),
+
   },
   methods: {
     showDept() {
@@ -971,6 +974,7 @@ export default {
       this.class_show = true;
       this.class_type = 'edit';
       this.dept_formdata = JSON.parse(JSON.stringify(this.class_item));
+      this.dept_formdata.name = specialFilter(this.dept_formdata.name)
       let dept_ids = [];
       if (this.dept_formdata.departments.length > 0) {
         this.dept_formdata.departments.forEach(element => {
@@ -1237,6 +1241,7 @@ export default {
     editDetails(val) {
       this.rule_type = 'edit';
       this.rules_detail_form = JSON.parse(JSON.stringify(val));
+      this.rules_detail_form.remark = specialFilter(this.rules_detail_form.remark)
       if (this.rules_detail_form.min_point == this.rules_detail_form.max_point) {
         this.rules_detail_form.range_type = '1';
       } else {
@@ -1271,6 +1276,12 @@ export default {
         }
       }
       return data;
+    },
+    onRuleRemarkInput(val){
+      this.rules_detail_form.remark = specialFilter(val)
+    },
+    onRuleNameInput(val){
+      this.dept_formdata.name = specialFilter(val)
     }
   },
   mounted() {

+ 11 - 1
src/point/views/statistics/integral_event.vue

@@ -70,7 +70,10 @@
               ></el-date-picker>
             </div>
             <div class="sleItem flex-box-ce">
-              <el-select v-model="select_employee_id" filterable clearable placeholder="请输入或选择人员" style="width: 250px;margin-right: 10px;">
+              <el-select v-model="select_employee_id" filterable clearable placeholder="受益人员" style="width: 250px;margin-right: 10px;">
+                <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
+              </el-select>
+              <el-select v-model="select_recorder_id" filterable clearable placeholder="录入人" style="width: 250px;margin-right: 10px;">
                 <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
               </el-select>
               <el-input v-model="formData.keyword" style="width: 250px;" placeholder="输入关键字查找" maxlength="100" @keyup.enter.native="keyWordSelect" class="persons_name">
@@ -758,6 +761,7 @@ export default {
       rule_list: [], //自动积分分类列表
       noticeRole:!this.$supremeAuthority('dept_manager') && !this.$supremeAuthority('employee'),
       select_employee_id: '',
+      select_recorder_id: '',
       employee_map: this.$getEmployeeMap(),
       integralUpload:this.$serverdomain + '/api/pro/upload/excel',
       titleVals: '',
@@ -887,6 +891,11 @@ export default {
       this.formData.employee_ids = val;
       this.get_integral_list(this.formData);
     },
+    select_recorder_id(val) {
+      this.formData.page = 1
+      this.formData.recorder_id= val
+      this.get_integral_list(this.formData)
+    }
   },
   methods: {
     returnStr(id){
@@ -1050,6 +1059,7 @@ export default {
           (this.formData.rule_id ? '&rule_ids=' + this.formData.rule_id : '') +
           (this.formData.pt_id ? '&pt_id=' + this.formData.pt_id : '') +
           (this.formData.employee_ids ? '&employee_ids=' + this.formData.employee_ids : '') +
+          (this.formData.recorder_id ? '&recorder_id=' + this.formData.recorder_id : '') +
           (this.formData.dept_id ? '&dept_ids=' + this.formData.dept_id : '') +
           (this.formData.start_day ? '&start_day=' + this.formData.start_day : '') +
           (this.formData.end_day ? '&end_day=' + this.formData.end_day : '') +

+ 5 - 0
src/utils/index.js

@@ -321,3 +321,8 @@ export function deepClone(source) {
 export function uniqueArr(arr) {
   return Array.from(new Set(arr))
 }
+
+
+export function specialFilter(inputStr){
+  return inputStr.replace(/[^(\w\d\s\u4e00-\u9fa5:、,.!@{}<>+?\-\(\)\[\])]/g,"")
+}