bonusPointsPopup.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
  1. <template>
  2. <div>
  3. <!-- 奖扣ab分弹窗 -->
  4. <el-dialog :title="title" :visible.sync="visible" :close-on-click-modal="false" :before-close="closePopup" width="600px">
  5. <div>
  6. <el-form :model="dialogData" ref="dialogData" label-width="80px" v-loading="loading">
  7. <el-form-item label="录入对象" prop="members" :rules="[{ required: true, message: '请选择录入对象', trigger: 'change' }]">
  8. <el-row>
  9. <el-col :span="18">
  10. <el-input auto-complete="off" v-model="employeeName" placeholder="请选择录入对象"></el-input>
  11. <div
  12. v-if="employee_list.length > 0"
  13. @click="show_employee_selector = true"
  14. style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"
  15. ></div>
  16. <div
  17. v-if="employee_list.length == 0"
  18. @click="noPersonnelListTips"
  19. style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"
  20. ></div>
  21. </el-col>
  22. </el-row>
  23. <EmployeeSelector
  24. :employee_not_select="employee_not_select"
  25. :employee_list="employee_list"
  26. :can_select_employee="true"
  27. :can_select_dept="false"
  28. :close_clear_data="false"
  29. :selected="employee_selected"
  30. :visible.sync="show_employee_selector"
  31. @confirm="move_employee_confirm"
  32. />
  33. </el-form-item>
  34. <div v-for="(item, index) in dialogData.items" :key="index" @click.stop="itemIndex = index">
  35. <div style="overflow: hidden;">
  36. <span style="line-height: 36px;">录入明细({{ index + 1 }})</span>
  37. <el-button type="text" class="fr" v-show="index > 0 || dialogData.items.length > 1" @click="delItem(index)">删除</el-button>
  38. </div>
  39. <el-form-item label="指定规则">
  40. <el-switch @change="switchChange(index, item.rule_switch)" v-model="item.rule_switch" active-color="#13ce66"></el-switch>
  41. </el-form-item>
  42. <el-form-item
  43. class="test_cascader_id"
  44. label="选择分类"
  45. v-if="!item.rule_switch"
  46. :prop="'items.' + index + '.rule_list_value'"
  47. :rules="[{ required: true, message: '请选择规则分类', trigger: 'blur' }]"
  48. >
  49. <el-cascader
  50. v-model="item.rule_list_value"
  51. ref="ruleCascader"
  52. :popper-class="'ruleClass'"
  53. :options="rule_list"
  54. @change="ruleChange"
  55. :props="{ children: 'child', label: 'name', value: 'id', checkStrictly: true }"
  56. ></el-cascader>
  57. </el-form-item>
  58. <el-form-item
  59. label="选择规则"
  60. v-if="item.rule_switch"
  61. :prop="'items.' + index + '.rule_item_list_value'"
  62. :rules="[{ required: true, message: '请选择规则', trigger: 'blur' }]"
  63. >
  64. <el-cascader
  65. v-model="item.rule_item_list_value"
  66. ref="ruleItem"
  67. :popper-class="'itemClass'"
  68. :options="rule_item_list"
  69. @change="ruleItemChange"
  70. :show-all-levels="false"
  71. :props="{ children: 'child', label: 'name', value: 'id' }"
  72. ></el-cascader>
  73. </el-form-item>
  74. <el-form-item>
  75. <div v-show="item.rule_item_details.range_type == 1">{{ get_point_name(ptid) }} {{ item.rule_item_details.min_point }}</div>
  76. <div v-show="item.rule_item_details.range_type == 2">
  77. {{ get_point_name(ptid) }} {{ item.rule_item_details.min_point }} ~ {{ item.rule_item_details.max_point }}
  78. </div>
  79. <div>{{ item.rule_item_details.name }}</div>
  80. </el-form-item>
  81. <el-form-item label="积分" :prop="'items.' + index + '.point'" :rules="[{ required: true, message: '请输入分值', trigger: 'blur' }]">
  82. <el-input-number v-if="item.rule_item_details.range_type == 2" :min="item.min" :max="item.max" v-model="item.point" type="number"></el-input-number>
  83. <el-input-number v-else :disabled="item.rule_item_details.range_type == 1" v-model="item.point" type="number"></el-input-number>
  84. </el-form-item>
  85. <el-form-item label="发生时间" :prop="'items.' + index + '.event_time'" :rules="[{ required: true, message: '请选择时间', trigger: 'blur' }]">
  86. <el-row>
  87. <el-col :span="18">
  88. <el-date-picker v-model="item.event_time" type="date" placeholder="请选择时间" value-format="yyyy-MM-dd"></el-date-picker>
  89. </el-col>
  90. </el-row>
  91. </el-form-item>
  92. <el-form-item
  93. label="事件内容"
  94. :prop="'items.' + index + '.remark'"
  95. :rules="[{ required: true, message: '请输入事件内容', trigger: 'blur' }, { min: 3, max: 100, message: '长度在 3 到 100 个字符', trigger: 'blur' }]"
  96. >
  97. <el-row>
  98. <el-col :span="18"><el-input type="textarea" rows="6" placeholder="请输入事件内容" style="width: 100%;" v-model="item.remark"></el-input></el-col>
  99. </el-row>
  100. </el-form-item>
  101. <el-form-item label="图片">
  102. <!-- <uploadOss
  103. :headers="Xtoken"
  104. class="avatar-uploader"
  105. :action="'https://'+'integralsys.oss-cn-shenzhen.aliyuncs.com'"
  106. :show-file-list="true"
  107. :file-list="item.fileList"
  108. :on-success="handleFilesSuccess"
  109. :on-preview="onFilePreView"
  110. :before-upload="beforeUpload"
  111. :on-remove="onFileRemove"
  112. :limit="3"
  113. :multiple="true"
  114. ref="clearPicture"
  115. >
  116. <el-button size="small" type="primary" >点击上传</el-button>(最多选择3张)
  117. </uploadOss> -->
  118. </el-form-item>
  119. <el-form-item label="递交审批">
  120. <el-row>
  121. <el-col :span="18">
  122. <el-input auto-complete="off" v-model="item.approvalName" placeholder="请选择审批人"></el-input>
  123. <div @click="item.show_approval_selector = true" style=" position: absolute; top: 0; right: 0; left: 0; bottom: 0; z-index: 9;"></div>
  124. </el-col>
  125. </el-row>
  126. <EmployeeSelector
  127. :employee_not_select="item.approval_not_select"
  128. :can_select_employee="true"
  129. :can_select_dept="false"
  130. :multi="false"
  131. :employee_list="employee_lists"
  132. :selected="item.approval_selected"
  133. :visible.sync="item.show_approval_selector"
  134. @confirm="approval_confirm"
  135. />
  136. </el-form-item>
  137. </div>
  138. <el-form-item style="margin-bottom: 0;"><div>如需录入多条,请点击“增加一条”</div></el-form-item>
  139. <el-form-item style="margin-bottom: 0;"><el-button type="primary" plain @click="addItem">+ 增加一条</el-button></el-form-item>
  140. <el-form-item style="text-align: right; margin-bottom: 0;">
  141. <el-button @click="closeDialog('dialogData')" :disabled="btn_loading">取 消</el-button>
  142. <el-button type="primary" @click="subData('dialogData')" :disabled="btn_loading">确 认</el-button>
  143. </el-form-item>
  144. </el-form>
  145. </div>
  146. </el-dialog>
  147. <el-dialog :title="'提交结果'" :visible.sync="error_list_show" :append-to-body="true" @close="error_list_SX" width="700px">
  148. <el-table :data="error_list">
  149. <el-table-column prop="target" label="员工"></el-table-column>
  150. <el-table-column prop="point" label="积分"></el-table-column>
  151. <el-table-column prop="status" label="处理状态">
  152. <template slot-scope="scope">
  153. <span :style="'color:' + (scope.row.status == 0 ? '#f70000' : '#47bf47')">{{ scope.row.status == 0 ? '提交失败' : '提交成功' }}</span>
  154. </template>
  155. </el-table-column>
  156. <el-table-column prop="msg" label="备注信息"></el-table-column>
  157. </el-table>
  158. </el-dialog>
  159. </div>
  160. </template>
  161. <script>
  162. import moment from 'moment';
  163. import EmployeeSelector from '@/components/EmployeeSelector.vue';
  164. // import uploadOss from "@/views/upload_oss/upload"
  165. export default {
  166. name: 'bonusPointsForm',
  167. // 数据
  168. model: {
  169. prop: 'list',
  170. event: 'value'
  171. },
  172. props: {
  173. title: {
  174. type: String,
  175. default: ''
  176. },
  177. visible: {
  178. type: Boolean,
  179. default: false
  180. },
  181. refresh: {
  182. type: String,
  183. default: ''
  184. },
  185. integralType: {
  186. type: Number,
  187. default: 0
  188. // 1 是绩效分 , 2 是A分 , 3 是B分
  189. }
  190. },
  191. data() {
  192. return {
  193. // imageState:'',
  194. error_list: [], //错误信息数组
  195. error_list_show: false, //错误信息弹窗
  196. Xtoken: { 'X-Token': this.$getToken() },
  197. btn_loading: false,
  198. loading: false,
  199. dialogData: {
  200. members: [],
  201. items: [
  202. {
  203. rule_switch: true,
  204. rule_id: '',
  205. item_id: '',
  206. point: '0',
  207. remark: '',
  208. event_time: moment().format('YYYY-MM-DD'),
  209. approval: '',
  210. approval_not_select: [],
  211. pt_id: this.integralType,
  212. // 积分填写限制
  213. pointShow: 1,
  214. max: 0,
  215. min: 0,
  216. // 审批人信息
  217. reviewer_id: '',
  218. approvalName: '',
  219. approval_not_select: [],
  220. approval_selected: { dept: [], employee: [] },
  221. show_approval_selector: false,
  222. // 附件
  223. fileList: [],
  224. files: [],
  225. // 规则分类 与 规则细则 名称
  226. rule_list_value: null,
  227. rule_item_list_value: null,
  228. // 规则细则详情
  229. rule_item_details: { range_type: '' }
  230. }
  231. ]
  232. },
  233. // 录入对象名称
  234. employeeName: '',
  235. employee_not_select: [],
  236. employee_selected: { dept: [], employee: [] },
  237. employee_list: [],
  238. employee_lists: [],
  239. show_employee_selector: false,
  240. // 规则分类
  241. rule_list: [],
  242. // 规则细则
  243. rule_item_list: [],
  244. flatteningIntegralRules: null,
  245. ptid: 0,
  246. point_types: JSON.parse(localStorage.getItem('SET_POINT_TYPES')),
  247. itemIndex: 0
  248. };
  249. },
  250. components: { EmployeeSelector },
  251. watch: {
  252. integralType(val) {
  253. this.dialogData.items[0].pt_id = val;
  254. this.ptid = val;
  255. // this.getRuleData();
  256. // this.getRuleItemData();
  257. },
  258. 'dialogData.members'(val) {
  259. if (val.length == 0) {
  260. this.employeeName = '';
  261. this.employee_selected = { dept: [], employee: [] };
  262. }
  263. }
  264. },
  265. mounted() {
  266. // this.point_types = JSON.parse(localStorage.getItem('SET_POINT_TYPES'));
  267. // this.employee_list = this.$store.getters.user_info.employee_detail.manage_scope;
  268. // this.employee_lists = this.$store.getters.user_info.employee_detail.superior_list;
  269. },
  270. methods: {
  271. // 20200831 图片上传 未完成
  272. // 附件上传
  273. beforeUpload(file) {
  274. const isJPG = /^image\/(jpeg|png|jpg)$/.test(file.type);
  275. const isLt2M = file.size / 1024 / 1024 < 1;
  276. if (!isJPG) {
  277. this.$message.error('上传头像图片只能是 JPG 格式!');
  278. }
  279. if (!isLt2M) {
  280. this.$message.error('上传头像图片大小不能超过 2MB!');
  281. }
  282. return isJPG && isLt2M;
  283. },
  284. onFilePreView(file) {
  285. window.open(file.response.url, '_blank');
  286. },
  287. onFileRemove(file, fileList) {
  288. this.dialogData.items[this.itemIndex].fileList = fileList;
  289. this.dialogData.items[this.itemIndex].files = [];
  290. fileList.forEach((element, index) => {
  291. this.dialogData.items[this.itemIndex].files.push(element.url);
  292. });
  293. },
  294. handleFilesSuccess(response, file, fileList) {
  295. // this.imageState = '上传成功'
  296. this.dialogData.items[this.itemIndex].fileList = fileList;
  297. this.dialogData.items[this.itemIndex].files = [];
  298. fileList.forEach((element, index) => {
  299. this.dialogData.items[this.itemIndex].files.push(element.url);
  300. });
  301. },
  302. // 图片上传
  303. // 没有人员提示
  304. noPersonnelListTips() {
  305. this.$message.error('您没有管理范围,请联系管理员');
  306. },
  307. // 当switch 改变了
  308. switchChange(index, value) {
  309. this.itemIndex = index;
  310. const item = this.dialogData.items[this.itemIndex];
  311. if (!value) {
  312. item.rule_id = '';
  313. item.item_id = '';
  314. item.rule_item_list_value = '';
  315. item.rule_item_details = { range_type: '' };
  316. } else {
  317. item.rule_id = '';
  318. item.rule_list_value = '';
  319. }
  320. },
  321. // 选择录入对象
  322. move_employee_confirm(data) {
  323. this.employee_selected = { dept: [], employee: [] };
  324. this.employeeName = '';
  325. this.dialogData.members = [];
  326. if (data.employee !== null && data.employee.length != 0) {
  327. let nameArr = [];
  328. data.employee.forEach(element => {
  329. this.employeeName += element.name + ',';
  330. this.employee_selected = data;
  331. this.dialogData.members.push(element.id);
  332. });
  333. }
  334. },
  335. // 获取规则信息
  336. getRuleData() {
  337. let data = {
  338. cycle_type: '1',
  339. pt_id: 2
  340. };
  341. this.integralType === 1 ? (data.pt_id = '1') : this.integralType === 2 ? (data.pt_id = '2') : (data.pt_id = '3');
  342. this.$axios('get', '/api/integral/rule/trees', data).then(res => {
  343. if (res.data.code == 1) {
  344. const resultData = res.data.data;
  345. this.rule_list = resultData.rule_tree;
  346. }
  347. this.rule_list = this.getTreeData(this.rule_list);
  348. })
  349. .catch(e => {
  350. this.$message.error(e.data.msg);
  351. });
  352. },
  353. // 获取规则细则
  354. getRuleItemData() {
  355. let data = {
  356. cycle_type: '1',
  357. pt_id: '1'
  358. };
  359. this.loading = true;
  360. this.integralType === 1 ? (data.pt_id = '1') : this.integralType === 2 ? (data.pt_id = '2') : (data.pt_id = '3');
  361. // const headers = {'Accept':'application/vnd.test.v2+json'}
  362. this.$axios('get', '/api/integral/rule/trees', data, 'v2').then(res => {
  363. if (res.data.code == 1) {
  364. const resultData = res.data.data;
  365. this.rule_item_list = resultData.tree;
  366. this.flatteningIntegralRules = this.getItemDetail(this.rule_item_list);
  367. this.loading = false;
  368. }
  369. })
  370. .catch(e => {
  371. this.$message.error(e.data.msg);
  372. });
  373. },
  374. // 规则细则变化关闭down
  375. ruleItemChange(value) {
  376. let ruleItemDetails = null;
  377. this.flatteningIntegralRules.forEach(element => {
  378. if (element.id == value[value.length - 1]) {
  379. ruleItemDetails = { ...element };
  380. }
  381. });
  382. const item = this.dialogData.items[this.itemIndex];
  383. const user_info = this.$store.getters.user_info;
  384. item.rule_item_details = ruleItemDetails;
  385. item.remark = ruleItemDetails.name;
  386. item.rule_id = ruleItemDetails.pid;
  387. item.item_id = value[value.length - 1];
  388. item.max = ruleItemDetails.max_point * 1;
  389. item.min = ruleItemDetails.min_point * 1;
  390. item.point = ruleItemDetails.min_point;
  391. },
  392. // 规则分类变化关闭dewn
  393. ruleChange(value) {
  394. const item = this.dialogData.items[this.itemIndex];
  395. const user_info = this.$store.getters.user_info;
  396. user_info.point_config.point_limit.forEach(element => {
  397. if (this.ptid == this.integralType) {
  398. item.max = element.point * 1;
  399. item.min = element.point * -1;
  400. }
  401. });
  402. this.$refs.ruleCascader.forEach(element => {
  403. element.dropDownVisible = false;
  404. });
  405. item.rule_id = value[value.length - 1];
  406. },
  407. // 递归判断列表,把最后的child设为undefined
  408. getTreeData(data) {
  409. for (var i = 0; i < data.length; i++) {
  410. if (data[i].child.length < 1) {
  411. // child若为空数组,则将child设为undefined
  412. data[i].child = undefined;
  413. } else {
  414. // child若不为空数组,则继续 递归调用 本方法
  415. this.getTreeData(data[i].child);
  416. }
  417. }
  418. return data;
  419. },
  420. getItemDetail(arr) {
  421. let result = [];
  422. for (const item of arr) {
  423. var res = JSON.parse(JSON.stringify(item)); // 先克隆一份数据作为第一层级的填充
  424. delete res['child'];
  425. result.push(res);
  426. if (item.child instanceof Array && item.child.length > 0) {
  427. // 如果当前child为数组并且长度大于0,才可进入getItemDetail()方法
  428. result = result.concat(this.getItemDetail(item.child));
  429. }
  430. }
  431. return result;
  432. },
  433. // 加一条
  434. addItem() {
  435. this.dialogData.items.push({
  436. rule_switch: true,
  437. rule_id: '',
  438. item_id: '',
  439. point: '0',
  440. remark: '',
  441. event_time: moment().format('YYYY-MM-DD'),
  442. approval: '',
  443. approval_not_select: [],
  444. pt_id: this.integralType,
  445. // 积分填写限制
  446. pointShow: 1,
  447. max: 0,
  448. min: 0,
  449. // 审批人信息
  450. reviewer_id: '',
  451. approvalName: '',
  452. approval_not_select: [],
  453. approval_selected: { dept: [], employee: [] },
  454. show_approval_selector: false,
  455. // 附件
  456. fileList: [],
  457. files: [],
  458. // 规则分类 与 规则细则 名称
  459. rule_list_value: null,
  460. rule_item_list_value: null,
  461. // 规则细则详情
  462. rule_item_details: { range_type: '' }
  463. });
  464. },
  465. closeDialog(formName) {
  466. this.dialogData.items.forEach(element => {
  467. element.rule_item_details = { range_type: '' };
  468. });
  469. this.$refs[formName].resetFields();
  470. this.closePopup();
  471. // this.$emit('update:visible', false)
  472. },
  473. delItem(index) {
  474. this.$confirm('你确定要删除奖扣明细' + parseInt(index + 1) + '吗?', '提示', {
  475. confirmButtonText: '确定',
  476. cancelButtonText: '取消',
  477. type: 'warning'
  478. })
  479. .then(() => {
  480. this.dialogData.items.splice(index, 1);
  481. this.$message({
  482. type: 'success',
  483. message: '删除成功!'
  484. });
  485. })
  486. .catch(() => {});
  487. },
  488. subData(formName) {
  489. this.$refs[formName].validate(valid => {
  490. if (valid) {
  491. this.btn_loading = true;
  492. this.save();
  493. }
  494. });
  495. },
  496. // 提交数据
  497. save() {
  498. let data = {
  499. members: this.dialogData.members,
  500. items: []
  501. };
  502. const user_info = this.$store.getters.user_info;
  503. const index = user_info.point_config.point_limit.findIndex(o => o.pt_id === this.integralType);
  504. console.log(this.dialogData);
  505. let employeePointLimitMin = null;
  506. let employeePointLimitMax = null;
  507. user_info.point_config.point_limit.forEach(element => {
  508. if (this.ptid == this.integralType) {
  509. employeePointLimitMax = element.point * 1;
  510. employeePointLimitMin = element.point * 1;
  511. }
  512. });
  513. const ruleLimitCheck = user_info.site_config.rule_limit_check;
  514. let maxPointPermission = 0;
  515. let creator = this.$store.getters.user_info.employee_detail.role_list.findIndex(item => item.name == 'creator') >= 0;
  516. if (user_info.point_config.point_limit.length > 0) {
  517. maxPointPermission = parseInt(user_info.point_config.point_limit[index].point);
  518. } else {
  519. if (creator) {
  520. maxPointPermission = -1;
  521. }
  522. }
  523. // 手机端逻辑
  524. // || (user_info.is_creator !== 1 && maxPointPermission == 0)
  525. try {
  526. if (index < 0 || user_info.is_creator === 1) {
  527. this.dialogData.items.forEach((element, i) => {
  528. data.items.push({
  529. rule_id: element.rule_id || 0,
  530. item_id: element.item_id || 0,
  531. point: element.point,
  532. remark: element.remark,
  533. event_time: element.event_time,
  534. pt_id: this.ptid,
  535. reviewer_id: element.reviewer_id || 0,
  536. files: element.files
  537. });
  538. });
  539. }
  540. else {
  541. this.dialogData.items.forEach((element, index) => {
  542. !element.reviewer_id ? (element.reviewer_id = 0) : '';
  543. !element.item_id ? (element.item_id = 0) : '';
  544. if (
  545. (element.reviewer_id && element.point !== 0 && element.rule_id > 0) ||
  546. (element.reviewer_id <= 0 &&
  547. element.item_id > 0 &&
  548. ruleLimitCheck &&
  549. element.point !== 0 &&
  550. element.point <= maxPointPermission &&
  551. Math.abs(element.point) <= maxPointPermission) ||
  552. (element.reviewer_id <= 0 && !ruleLimitCheck && this.integralType == 3 && element.rule_id > 0) ||
  553. (element.reviewer_id <= 0 &&
  554. element.item_id >= 0 &&
  555. element.point !== 0 &&
  556. element.point <= maxPointPermission &&
  557. Math.abs(element.point) <= maxPointPermission &&
  558. element.rule_id > 0)
  559. ) {
  560. data.items.push({
  561. rule_id: element.rule_id || 0,
  562. item_id: element.item_id || 0,
  563. point: element.point,
  564. remark: element.remark,
  565. event_time: element.event_time,
  566. pt_id: this.ptid,
  567. reviewer_id: element.reviewer_id || 0,
  568. files: element.files
  569. });
  570. } else {
  571. this.$message.error('第' + (index + 1) + '条输入积分分值超出权限,请选择审批人递交');
  572. throw new Error();
  573. }
  574. });
  575. }
  576. } catch (e) {
  577. this.btn_loading = false;
  578. return false;
  579. }
  580. this.$axios('post', this.integralType === 1 ? '' : this.integralType === 2 ? '/api/integral/review/a/entry' : '/api/integral/point/entry', data).then(res => {
  581. if (res.data.code == 1) {
  582. this.dialogData.items.forEach(element => {
  583. element.rule_item_details = { range_type: '' };
  584. });
  585. this.$refs['dialogData'].resetFields();
  586. this.$emit('update:visible', false);
  587. this.$emit('update:refresh',this.$moment().format().valueOf());
  588. this.$message.success(res.data.msg);
  589. this.closePopup();
  590. this.error_list = res.data.data.list;
  591. this.error_list_show = true;
  592. } else {
  593. this.$message.error(res.data.msg);
  594. }
  595. })
  596. .catch(e => {
  597. this.$message.close();
  598. });
  599. this.$nextTick(() => {
  600. this.btn_loading = false;
  601. });
  602. },
  603. //关闭错误信息时的回调
  604. error_list_SX() {
  605. // this.loadBaseData();
  606. // this.loadEmployeeList()
  607. },
  608. // 选择审核人
  609. approval_confirm(data) {
  610. const item = this.dialogData.items[this.itemIndex];
  611. item.approvalName = '';
  612. item.approval_selected.employee = { dept: [], employee: [] };
  613. item.reviewer_id = '';
  614. if (data.employee !== null && data.employee.length != 0) {
  615. item.approvalName = data.employee[0].name;
  616. item.approval_selected.employee = [{ name: data.employee[0].name, id: data.employee[0].id, img_url: data.employee[0].img_url }];
  617. item.reviewer_id = data.employee[0].id;
  618. }
  619. item.reviewer_id ? (item.pointShow = 3) : '';
  620. },
  621. // 获取积分名称
  622. get_point_name(id) {
  623. // let name = '';
  624. // this.point_types.forEach(element => {
  625. // if (element.id == id) {
  626. // name = element.name;
  627. // }
  628. // });
  629. // return name;
  630. },
  631. // 关闭弹窗
  632. closePopup() {
  633. //关闭重置窗口状态
  634. this.dialogData.items = [
  635. {
  636. rule_switch: true,
  637. rule_id: '',
  638. item_id: '',
  639. point: '0',
  640. remark: '',
  641. event_time: moment().format('YYYY-MM-DD'),
  642. approval: '',
  643. approval_not_select: [],
  644. pt_id: this.integralType,
  645. // 积分填写限制
  646. pointShow: 1,
  647. max: 0,
  648. min: 0,
  649. // 审批人信息
  650. reviewer_id: '',
  651. approvalName: '',
  652. approval_not_select: [],
  653. approval_selected: { dept: [], employee: [] },
  654. show_approval_selector: false,
  655. // 附件
  656. fileList: [],
  657. files: [],
  658. // 规则分类 与 规则细则 名称
  659. rule_list_value: null,
  660. rule_item_list_value: null,
  661. // 规则细则详情
  662. rule_item_details: { range_type: '' }
  663. }
  664. ];
  665. this.$emit('update:visible', false);
  666. }
  667. }
  668. };
  669. </script>
  670. <style lang="scss">
  671. .itemClass .el-cascader-menu .el-cascader-menu__wrap .el-scrollbar__view li.el-cascader-node {
  672. height: auto;
  673. max-width: 500px;
  674. .el-cascader-node__label {
  675. white-space: initial;
  676. overflow: initial;
  677. text-overflow: initial;
  678. }
  679. }
  680. </style>