voluntarilyPoint.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859
  1. <template>
  2. <div>
  3. <el-alert class="diy-tip" title="什么是自动积分?" @close="tips_close" v-if="tips_show" type="success" description show-icon>
  4. <p>系统按照设定的时间(每月/每周/每日) 自动给员工添加B分,比如某员工有一个工程师证,得到公司的认可,公司就会每月给他加分</p>
  5. </el-alert>
  6. <div class="all">
  7. <div class="flex-box">
  8. <div class="terr-left">
  9. <div><el-button size="medium" @click="add_grouping()" plain>新增加分组</el-button></div>
  10. <div><el-button size="medium" @click="add_rules_detail" plain>新增加分项</el-button></div>
  11. <!-- 循环分组 -->
  12. <el-col :span="24" style="padding-right: 0;" v-loading="rule_trees_load">
  13. <el-menu :default-active='default_active' class="rule_name" :unique-opened="true">
  14. <el-submenu :index="index.toString()" v-for="(item, index) in rule_list" :key="index" >
  15. <template slot="title">
  16. <div style="width: 80%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; height: 47px;line-height: 47px;" >
  17. <i class="el-icon-edit-outline title_top" @click.stop="edit_grouping(item)"></i>
  18. <span class="title_top">{{ item.name }}</span>
  19. </div>
  20. </template>
  21. <span :index="i.toString()" v-for="(d, i) in item_list" :key="i" v-show="d[0].rule_id == item.id">
  22. <el-menu-item :index="i1.toString()" v-for="(data, i1) in d" :key="i1" @click="open_right(data)" style="height: 47px;line-height: 47px;">
  23. <div style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap">
  24. <span slot="title">{{ data.remark }}</span>
  25. </div>
  26. </el-menu-item>
  27. </span>
  28. <!-- <el-menu-item :index="i.toString()" v-for="(data,i) in item.data" :key="i" @click="open_right(data)" >{{data.name}}</el-menu-item> -->
  29. </el-submenu>
  30. </el-menu>
  31. </el-col>
  32. </div>
  33. <div class="terr-right border-right flex-1" v-loading="table_loading">
  34. <el-col :span="24" v-show="rule_list.length == 0 || item_list.length == 0 || diyige == true" style="text-align: center;margin: 0 auto;position: relative;top: 30%;">
  35. <p><img src="@/assets/image/nodata_default.png" width="200px" alt="" /></p>
  36. <p style="color: #909399;">
  37. 还没有<span v-if="rule_list.length == 0">加分组和</span>加分项
  38. </p>
  39. <p style="color: #909399;">
  40. <span v-if="rule_list.length == 0">先</span>
  41. <span style="color: #26A2FF;cursor:pointer;" v-if="rule_list.length == 0" @click="add_grouping()">【新增加分组】</span>
  42. <span v-if="rule_list.length == 0">再</span>
  43. <span v-if="rule_list.length !== 0">请</span>
  44. <span style="color: #26A2FF;cursor:pointer" @click="add_rules_detail">【新增加分项】</span>
  45. </p>
  46. </el-col>
  47. <el-col v-if="item_list.length != 0 && diyige == false" >
  48. <el-row>
  49. <el-col :span="24" style="font-size:20px;color:#303133;line-height:36px;">
  50. {{ right_rules_detail.remark }}
  51. <span style="padding-left: 10px;">{{ right_rules_detail.min_point }}B分</span>
  52. <el-button plain style="padding:10px 12px; margin-left: 10px;" @click="edit_rules(item_info)">编辑</el-button>
  53. </el-col>
  54. </el-row>
  55. <div class="flex-box btns flex-v-ce">
  56. <el-button size="small" @click="del_item" type="danger" plain>批量移除</el-button>
  57. <el-button size="small" type="primary" @click="add_employee_show_TJ">添加人员</el-button>
  58. </div>
  59. <el-table
  60. ref="multipleTable"
  61. :data="table_list"
  62. v-loading="table_loading"
  63. tooltip-effect="dark"
  64. style="width: 100%;margin-top:20px;"
  65. @selection-change="handleSelectionChange"
  66. >
  67. <el-table-column type="selection" width="45"></el-table-column>
  68. <el-table-column label="姓名">
  69. <template slot-scope="scope">
  70. <div style="display:flex">
  71. <span class="fl">
  72. <userImage
  73. :id="scope.row.employee_id"
  74. width="50px"
  75. height="50px"
  76. :user_name="scope.row.employee.name"
  77. :img_url="scope.row.employee.img_url"
  78. v-if="scope.row.employee"
  79. ></userImage>
  80. </span>
  81. <span style="margin-left: 10px; line-height: 50px; display: inline-block" v-if="scope.row.employee">{{ scope.row.employee.name }}</span>
  82. </div>
  83. </template>
  84. </el-table-column>
  85. <el-table-column prop="cycle_remark" label="加分周期"></el-table-column>
  86. <template slot="empty">
  87. <noData></noData>
  88. </template>
  89. </el-table>
  90. <!-- 分页 -->
  91. <div style=" text-align: center; padding: 20px;">
  92. <el-pagination
  93. background
  94. layout="total, prev, pager, next"
  95. :current-page="page"
  96. @current-change="handleCurrentChange"
  97. :page-size.sync="pagesize"
  98. :hide-on-single-page="true"
  99. :total="total"
  100. ></el-pagination>
  101. </div>
  102. </el-col>
  103. </div>
  104. </div>
  105. <!-- 可写公共组建: -->
  106. <!-- 新增加分组弹出框 -->
  107. <el-dialog :close-on-click-modal="false" :title="grouping_type ? '编辑加分组' : '新增加分组'" :visible.sync="dialogVisible" width="40%">
  108. <el-form :model="numberValidateForm" ref="numberValidateForm" label-width="100px" class="demo-ruleForm">
  109. <el-form-item label="加分组名称" prop="name" :rules="[{ required: true, message: '请输入加分组名称' }]">
  110. <el-input type="age" v-model="numberValidateForm.name" autocomplete="off" placeholder="请输入加分组名称"></el-input>
  111. </el-form-item>
  112. </el-form>
  113. <span slot="footer" class="dialog-footer" style=" overflow: hidden;">
  114. <el-button class="fl" type="danger" v-show="grouping_type" @click="del_grouping(numberValidateForm)" style="float:left" :disabled="disabled">删除</el-button>
  115. <el-button @click="dialogVisible = false">取 消</el-button>
  116. <el-button type="primary" @click="submitForm('numberValidateForm')" :disabled="disabled">确 定</el-button>
  117. </span>
  118. </el-dialog>
  119. <!-- 新增加分项 -->
  120. <el-dialog :title="rules_detail_title ? '编辑加分项' : '新增加分项'" :visible.sync="dialogFormVisible" width="500px">
  121. <el-form :model="rules_detail_form" ref="rules_detail_form" :rules="rules_rules" label-width="120px">
  122. <el-form-item label="加分项名称" :label-width="formLabelWidth" prop="remark" :rules="[{ required: true, message: '请输入加分项名称' }]">
  123. <el-input v-model="rules_detail_form.remark" placeholder="请输入加分项名称" autocomplete="off"></el-input>
  124. </el-form-item>
  125. <el-form-item label="加分组" :label-width="formLabelWidth" prop="rule_id" :rules="[{ required: true, message: '请选择加分组' }]">
  126. <el-select v-model="rules_detail_form.rule_id" style="width: 100%;" placeholder="请选择加分组">
  127. <el-option v-for="item in rule_list" :key="item.value" :label="item.name" :value="item.id"></el-option>
  128. </el-select>
  129. </el-form-item>
  130. <el-form-item label="B分" prop="min_point" :rules="[{ required: true, message: '请输入B分分值' }]">
  131. <el-input
  132. v-model="rules_detail_form.min_point"
  133. placeholder="请输入B分分值"
  134. oninput="if(this.value=='0'){this.value='';}else{this.value=this.value.replace(/[^0-9]/g,'')}"
  135. ></el-input>
  136. <!-- <span data-v-a17f1960 style="display: block; font-size: 12px; color: rgb(96, 98, 102);text-align: left;">固定加分加B分</span> -->
  137. </el-form-item>
  138. <!-- <el-form-item label="是否与考勤挂钩" prop="is_attendance"><el-switch v-model="is_attendance"></el-switch></el-form-item> -->
  139. <div style="overflow: hidden;">
  140. <el-button type="danger" v-show="rules_detail_title" class="fl" @click="del_rules_detail(rules_detail_form)" style="float:left" :disabled="disabled">
  141. 删除
  142. </el-button>
  143. <el-button v-if="rules_detail_title" class="fr" type="primary" @click="editRule('rules_detail_form')" style="float:right" :disabled="disabled">
  144. 确 定
  145. </el-button>
  146. <el-button v-else class="fr" type="primary" @click="next('rules_detail_form')" style="float:right" :disabled="disabled">确 定</el-button>
  147. <el-button class="fr" @click="rules_detail_close('rules_detail_form')" style="float:right">取 消</el-button>
  148. </div>
  149. </el-form>
  150. </el-dialog>
  151. <el-dialog title="添加人员" :visible.sync="add_employee_show" :before-close="add_employee_close" width="700px">
  152. <el-form :model="add_employee_form" ref="add_employee_form" label-width="80px">
  153. <el-form-item label="加分周期" :rules="[{ required: true, message: '请选择加分周期', trigger: 'change' }]">
  154. <el-select v-model="task_cycle_name" placeholder="请选择加分周期">
  155. <el-option v-for="item in task_cycle" :key="item.value" :label="item.name" :value="item.value"></el-option>
  156. </el-select>
  157. </el-form-item>
  158. <div v-loading="staff_loading">
  159. <EmployeeSelector1
  160. :max="add_employee_max"
  161. :can_select_dept="false"
  162. :visible.sync="add_employee_visible"
  163. @confirm="add_employee_confirm"
  164. ref="Employee"
  165. ></EmployeeSelector1>
  166. </div>
  167. <el-form-item style="text-align: right; margin-bottom: 0;margin-top: 20px;">
  168. <el-button @click="add_employee_close()">取消</el-button>
  169. <el-button type="primary" @click="sub_add_employee('add_employee_form')" :disabled="disabled">完成</el-button>
  170. </el-form-item>
  171. </el-form>
  172. </el-dialog>
  173. </div>
  174. </div>
  175. </template>
  176. <script>
  177. import EmployeeSelector1 from '@/components/EmployeeSelector';
  178. import noData from '@/components/noData';
  179. export default {
  180. data() {
  181. return {
  182. pd_tianjia:false,
  183. dianji:{},
  184. openeds:['1'],
  185. default_active:'',
  186. diyige:false,
  187. // grouping_Json:[],
  188. jieguoId: '',
  189. table_list: [],
  190. tips_show: false,
  191. item_info: {},
  192. rule_trees_load: false,
  193. dialogVisible: false,
  194. rules_detail_show: false, //是否弹出添加人员弹窗
  195. add_employee_visible: false,
  196. add_employee_max: 0,
  197. add_employee_show: false,
  198. task_cycle_name: 1,
  199. add_employee_form: {
  200. employee_ids: []
  201. },
  202. del_arr: {
  203. ids: []
  204. },
  205. val_page: '', //存入某一页文本框选中的数量
  206. page: 1, //默认页数 为1
  207. total: 0, //返回的总数据
  208. pagesize: 10, //每页显示的数据
  209. table_loading: false,
  210. staff_loading: false,
  211. dialogFormVisible: false,
  212. form: {
  213. name: '',
  214. region: '',
  215. date1: '',
  216. date2: '',
  217. delivery: false,
  218. type: [],
  219. resource: '',
  220. desc: ''
  221. },
  222. formLabelWidth: '120px',
  223. numberValidateForm: {
  224. name: ''
  225. },
  226. disabled: false, //按钮不能被多次点击
  227. grouping_type: '',
  228. rules_detail_title: '',
  229. rule_list: [], //分类集合
  230. item_list: [], //规则集合
  231. right_rules_detail: {},
  232. add_employee_id: '',
  233. rules_detail_form: {
  234. rule_id: '',
  235. range_type: '1',
  236. prize_type: '0',
  237. min_point: '',
  238. remark: '',
  239. is_attendance: '0',
  240. cycle_type: '2',
  241. pt_id: '3'
  242. },
  243. is_attendance: false,
  244. rules_rules: {
  245. remark: [
  246. {
  247. required: true,
  248. message: '请输入规则名称',
  249. trigger: 'blur'
  250. },
  251. {
  252. max: 100,
  253. message: '分类名称不能大于100个字符',
  254. trigger: 'blur'
  255. }
  256. ],
  257. min_point: [
  258. {
  259. required: true,
  260. message: '请输入积分',
  261. trigger: 'blur'
  262. }
  263. ],
  264. rule_id: [
  265. {
  266. required: true,
  267. message: '请选择分类',
  268. trigger: 'blur'
  269. }
  270. ]
  271. },
  272. task_cycle: [
  273. {
  274. name: '每天自动加分',
  275. value: 1
  276. },
  277. {
  278. name: '每周自动加分',
  279. value: 2
  280. },
  281. {
  282. name: '每月自动加分',
  283. value: 3
  284. }
  285. ]
  286. };
  287. },
  288. components: {
  289. EmployeeSelector1,
  290. noData
  291. },
  292. watch:{
  293. // right_rules_detail(newVal, oldVal){
  294. // console.log(this.default_active)
  295. // this.default_active = '0'
  296. // console.log(newVal, oldVal)
  297. // }
  298. },
  299. created() {},
  300. mounted() {
  301. if (localStorage.getItem('voluntarilyPoint')) {
  302. this.tips_show = false;
  303. } else {
  304. this.tips_show = true;
  305. }
  306. this.get_role_lists();
  307. },
  308. methods: {
  309. handleCurrentChange(val) {
  310. this.page = val;
  311. this.open_right();
  312. },
  313. // 组建
  314. add_employee_confirm(val) {
  315. this.add_employee_form.employee_ids = [];
  316. if (val.employee.length !== 0) {
  317. val.employee.forEach(element => {
  318. this.add_employee_form.employee_ids.push(element.id);
  319. });
  320. }
  321. },
  322. // 添加成员点击取消
  323. add_employee_close() {
  324. this.add_employee_show = false;
  325. },
  326. // 点击添加人员
  327. add_employee_show_TJ() {
  328. this.add_employee_show = true; //弹出添加人员框
  329. var params = {
  330. item_id: this.add_employee_id || '',
  331. employee_id: this.employee_id || ''
  332. };
  333. this.$axios('get','/api/integral/auto/list', params).then(res => {});
  334. },
  335. // 添加成员点击完成
  336. sub_add_employee(form) {
  337. let self = this;
  338. if (!self.task_cycle_name) {
  339. self.$message.error('请选择加分周期');
  340. return false;
  341. }
  342. this.$refs.Employee.confirm(); //调用组件的confirm();
  343. if (this.add_employee_form.employee_ids.length <= 0) {
  344. this.$message.error('请选择员工');
  345. return false;
  346. }
  347. let data = {
  348. employee_ids: this.add_employee_form.employee_ids,
  349. task_cycle: self.task_cycle_name,
  350. item_id: self.add_employee_id,
  351. rule_id: self.add_rulse_id
  352. };
  353. self.$refs[form].validate(valid => {
  354. if (valid) {
  355. if (data.rule_id == '' || data.item_id == '') {
  356. self.$message.error('请先选择细则');
  357. } else {
  358. this.disabled = true;
  359. self.staff_loading = true;
  360. self.$axios('post','/api/integral/auto/add',data).then(res => {
  361. this.disabled = false;
  362. self.table_loading = false;
  363. self.staff_loading = false;
  364. if (res.data.code == 1) {
  365. // 不需要了
  366. // sessionStorage.setItem('task_cycle_name', (self.task_cycle_name))//存入用户上次请求成功的加分周期。
  367. self.add_employee_show = false;
  368. self.$message.success('此次操作成功' + res.data.data.success + '条,失败' + res.data.data.error + '条,已经存在的' + res.data.data.exist + '条');
  369. // self.err_open_right();
  370. // self.open_right();
  371. self.get_role_lists();
  372. if(this.pd_tianjia == true){
  373. let user_FH = JSON.parse(localStorage.getItem("user_FH"))
  374. for (const key in user_FH) {
  375. for (let i = 0; i < user_FH[key].length; i++) {
  376. if (i == 0) {
  377. this.default_active = '0'
  378. this.open_right(user_FH[key][i]);
  379. setTimeout(()=>{
  380. this.default_active = ''
  381. this.pd_tianjia = false
  382. },500)
  383. return false
  384. }
  385. }
  386. }
  387. }
  388. } else {
  389. self.$message.error(res.data.msg);
  390. }
  391. })
  392. .finally(() => {
  393. self.loading = false;
  394. });
  395. }
  396. } else {
  397. return false;
  398. }
  399. });
  400. },
  401. editDetails() {},
  402. handleSelectionChange(val) {
  403. this.del_arr.ids = [];
  404. val.forEach(element => {
  405. this.del_arr.ids.push(element.id);
  406. });
  407. this.val_page = val;
  408. },
  409. add_item() {},
  410. // 批量删除
  411. del_item() {
  412. let self = this;
  413. if (self.del_arr.ids.length !== 0) {
  414. self.$confirm('此操作将永久删除该人员的自动加分, 是否继续?', '提示', {
  415. confirmButtonText: '确定',
  416. cancelButtonText: '取消',
  417. type: 'warning'
  418. }).then(() => {
  419. self.$axios('post','/api/integral/auto/delete/many',self.del_arr).then(res => {
  420. if (res.data.code == 1) {
  421. self.$message.success(res.data.msg);
  422. // 判断当页的总数与选中的数量是否相等,如果相等,此页就无数据,就请求上一页的数据
  423. if (this.table_list.length == this.val_page.length) {
  424. if (this.page !== 1) {
  425. //判断不在第一页的时候执行
  426. this.page = this.page - 1;
  427. }
  428. }
  429. self.get_role_lists();
  430. } else {
  431. self.$message.error(res.data.msg);
  432. }
  433. })
  434. .finally(() => {
  435. self.loading = false;
  436. });
  437. });
  438. } else {
  439. self.$message.error('请选择要移除的人员');
  440. }
  441. },
  442. // 关闭提示语
  443. tips_close() {
  444. localStorage.setItem('voluntarilyPoint', 'true');
  445. this.tips_show = false;
  446. },
  447. //新增规则
  448. add_rules_detail() {
  449. this.dialogFormVisible = true;
  450. this.rules_detail_title = false;
  451. },
  452. editRule(form) {
  453. let self = this;
  454. let data = null;
  455. self.rules_detail_form.max_point = self.rules_detail_form.min_point;
  456. if (this.rules_detail_title == false) {
  457. data = {
  458. items: [self.rules_detail_form]
  459. };
  460. } else {
  461. self.rules_detail_form.item_id = self.rules_detail_form.id;
  462. data = self.rules_detail_form;
  463. }
  464. self.$refs[form].validate(valid => {
  465. if (valid) {
  466. this.disabled = true;
  467. if (this.is_attendance) {
  468. self.rules_detail_form.is_attendance = 1;
  469. } else {
  470. self.rules_detail_form.is_attendance = 0;
  471. }
  472. var url=this.rules_detail_title ? 'api/integral/rule/items/edit' : '/api/integral/rule/items';
  473. self.$axios('post',url,data).then(res => {
  474. this.disabled = false;
  475. this.dialogFormVisible = false;
  476. setTimeout(() => {
  477. this.is_attendance = false;
  478. }, 300);
  479. if (res.data.code == 1) {
  480. self.$message.success(res.data.msg);
  481. self.rules_detail_show = false;
  482. self.jieguoId = res.data.data.item_id;
  483. self.add_rulse_id = self.rules_detail_form.rule_id;
  484. self.get_role_lists();
  485. if (this.rules_detail_title == false) {
  486. setTimeout(() => {
  487. self.add_employee_show = true;
  488. }, 600);
  489. }
  490. } else {
  491. this.disabled = false;
  492. this.dialogFormVisible = false;
  493. self.$message.error(res.data.msg);
  494. }
  495. })
  496. .catch(e => {
  497. this.disabled = false;
  498. this.dialogFormVisible = false;
  499. })
  500. .finally(() => {
  501. self.loading = false;
  502. });
  503. } else {
  504. return false;
  505. }
  506. });
  507. },
  508. // 点击确定提交积分规则
  509. next(form) {
  510. let self = this;
  511. let data = null;
  512. self.rules_detail_form.max_point = self.rules_detail_form.min_point;
  513. if (this.rules_detail_title == false) {
  514. data = {
  515. items: [self.rules_detail_form]
  516. };
  517. } else {
  518. self.rules_detail_form.item_id = self.rules_detail_form.id;
  519. data = self.rules_detail_form;
  520. }
  521. self.$refs[form].validate(valid => {
  522. if (valid) {
  523. this.disabled = true;
  524. if (this.is_attendance) {
  525. self.rules_detail_form.is_attendance = 1;
  526. } else {
  527. self.rules_detail_form.is_attendance = 0;
  528. }
  529. var url=this.rules_detail_title ? 'api/integral/rule/items/edit' : '/api/integral/rule/items';
  530. self.$axios('post',url,data).then(res => {
  531. this.disabled = false;
  532. this.dialogFormVisible = false;
  533. setTimeout(() => {
  534. this.is_attendance = false;
  535. }, 300);
  536. if (res.data.code == 1) {
  537. self.$message.success(res.data.msg);
  538. self.rules_detail_show = false;
  539. // self.jieguoId = res.data.data.item_id;
  540. self.add_employee_id = res.data.data.item_id;
  541. self.add_rulse_id = self.rules_detail_form.rule_id;
  542. // this.get_role_lists()
  543. if (this.rules_detail_title == false) {
  544. setTimeout(() => {
  545. self.add_employee_show = true;
  546. }, 600);
  547. }
  548. } else {
  549. this.disabled = false;
  550. this.dialogFormVisible = false;
  551. self.$message.error(res.data.msg);
  552. }
  553. })
  554. .catch(e => {
  555. this.disabled = false;
  556. this.dialogFormVisible = false;
  557. })
  558. .finally(() => {
  559. self.loading = false;
  560. setTimeout(() => {
  561. this.pd_tianjia = true
  562. }, 600);
  563. });
  564. } else {
  565. return false;
  566. }
  567. });
  568. },
  569. //点击取消
  570. rules_detail_close(form) {
  571. this.dialogFormVisible = false;
  572. this.rules_detail_show = false;
  573. this.$refs[form].resetFields();
  574. },
  575. open_right(data) {
  576. this.dianji = data
  577. this.diyige = false
  578. let self = this;
  579. self.table_loading = true;
  580. if (data) {
  581. self.add_employee_id = data.id;
  582. self.add_rulse_id = data.rule_id;
  583. self.right_rules_detail = data;
  584. }
  585. var params = {
  586. item_id: self.add_employee_id || '',
  587. employee_id: self.employee_id || '',
  588. page: self.page,
  589. page_size: Number(this.pagesize)
  590. };
  591. self.$axios('get','/api/integral/auto/list', params).then(res => {
  592. if (res.data.code == 1) {
  593. self.table_list = res.data.data.list || [];
  594. self.total = res.data.data.total;
  595. this.rule_trees_load = false;
  596. this.table_loading = false;
  597. } else {
  598. self.$message.error(res.data.msg);
  599. }
  600. })
  601. .finally(() => {
  602. setTimeout(()=>{
  603. self.table_loading = false;
  604. },500)
  605. });
  606. },
  607. // 编辑规则
  608. edit_rules(data) {
  609. this.rules_detail_title = true;
  610. this.dialogFormVisible = true;
  611. this.rules_detail_title = true;
  612. this.rules_detail_form = JSON.parse(JSON.stringify(this.right_rules_detail));
  613. this.is_attendance = this.rules_detail_form.is_attendance == '0' ? false : true;
  614. },
  615. // 删除规则
  616. del_rules_detail(item) {
  617. this.$confirm('此操作将永久删除该加分项, 是否继续?', '提示', {
  618. confirmButtonText: '确定',
  619. cancelButtonText: '取消',
  620. type: 'warning'
  621. }).then(() => {
  622. this.disabled = true;
  623. this.$axios('post','/api/integral/rule/items/destroy',{item_id: item.id}).then(res => {
  624. this.dialogFormVisible = false;
  625. this.disabled = false;
  626. if (res.data.code == 1) {
  627. this.$message.success(res.data.msg);
  628. this.rules_detail_show = false;
  629. this.get_role_lists('a');
  630. } else {
  631. this.dialogFormVisible = false;
  632. this.disabled = false;
  633. this.$message.error(res.data.msg);
  634. this.get_role_lists();
  635. }
  636. })
  637. .catch(err => {
  638. this.dialogFormVisible = false;
  639. this.disabled = false;
  640. })
  641. .finally(() => {
  642. this.loading = false;
  643. });
  644. });
  645. },
  646. //新增加分组展示不同渲染
  647. add_grouping() {
  648. this.dialogVisible = true;
  649. this.grouping_type = false;
  650. },
  651. // 新增加分组
  652. submitForm(formName) {
  653. this.$refs[formName].validate(valid => {
  654. if (valid) {
  655. let data = this.grouping_type
  656. ? {
  657. rule_id: this.numberValidateForm.id,
  658. pid: '0',
  659. name: this.numberValidateForm.name
  660. }
  661. : {
  662. cycle_type: '2',
  663. pid: '0',
  664. name: this.numberValidateForm.name
  665. };
  666. this.disabled = true;
  667. var url=this.grouping_type ? 'api/integral/rule/edit' : '/api/integral/rule';
  668. this.$axios('post',url,data).then(res => {
  669. this.dialogVisible = false;
  670. this.disabled = false;
  671. if (res.data.code == '1') {
  672. this.get_role_lists();
  673. this.$message.success(this.grouping_type ? '修改积分规则' : res.data.msg);
  674. } else {
  675. this.dialogVisible = false;
  676. this.disabled = false;
  677. }
  678. })
  679. .catch(err => {
  680. this.dialogVisible = false;
  681. this.disabled = false;
  682. });
  683. } else {
  684. console.log('error submit!!');
  685. return false;
  686. }
  687. });
  688. },
  689. //修改分组
  690. edit_grouping(item) {
  691. this.dialogVisible = true;
  692. this.numberValidateForm = JSON.parse(JSON.stringify(item));
  693. this.grouping_type = true;
  694. },
  695. //删除分组
  696. del_grouping(item) {
  697. this.$confirm('此操作将永久删除该分类, 是否继续?', '提示', {
  698. confirmButtonText: '确定',
  699. cancelButtonText: '取消',
  700. type: 'warning'
  701. }).then(() => {
  702. this.disabled = true;
  703. this.$axios('post','api/integral/rule/destroy',{rule_id: item.id}).then(res => {
  704. this.dialogVisible = false;
  705. this.disabled = false;
  706. if (res.data.code == 1) {
  707. this.get_role_lists();
  708. this.$message.success('删除成功');
  709. }
  710. }).catch(err => {
  711. this.dialogVisible = false;
  712. this.disabled = false;
  713. });
  714. }).catch(() => {
  715. setTimeout(() => {
  716. this.dialogVisible = false;
  717. }, 300);
  718. });
  719. },
  720. // 获取分组
  721. get_role_lists(index) {
  722. this.table_loading = true;
  723. this.rule_trees_load = true;
  724. // this.openeds = ['0'];//修改后 修改高亮选中项
  725. this.$axios('get','/api/integral/rule/trees', {cycle_type: '2'}).then(res => {
  726. localStorage.setItem("user_FH",JSON.stringify(res.data.data.item_list));
  727. this.is_attendance = this.rules_detail_form.is_attendance == '0' ? false : true;
  728. this.rule_list = res.data.data.rule_tree;
  729. this.item_list = res.data.data.item_list;
  730. this.rule_trees_load = false;
  731. if (this.item_list !== null) {
  732. for(let i in this.item_list){
  733. for(let a in this.item_list[i]){
  734. if(index == 'a'){
  735. for (const key in this.item_list) {
  736. for (let arr = 0; arr < this.item_list[key].length; arr++) {
  737. if (arr == 0) {
  738. this.default_active = '0'
  739. this.open_right(this.item_list[key][arr]);
  740. setTimeout(()=>{
  741. this.default_active = ''
  742. },500)
  743. return false;
  744. }
  745. }
  746. }
  747. }else{
  748. if(this.dianji.id == this.item_list[i][a].id){
  749. this.open_right(this.item_list[i][a]);
  750. return false;
  751. }
  752. }
  753. }
  754. }
  755. }
  756. }).finally(err=>{
  757. setTimeout(()=>{
  758. this.rule_trees_load = false;
  759. this.table_loading = false;
  760. },700)
  761. });
  762. }
  763. }
  764. };
  765. </script>
  766. <style scoped="scoped" lang="scss">
  767. .rule_name {
  768. border-right: 0;
  769. margin-top: 16px;
  770. li {
  771. border-bottom: 1px #f8f8f8 solid;
  772. overflow: hidden;
  773. white-space: nowrap;
  774. text-overflow: ellipsis;
  775. ::v-deep .el-submenu__title {
  776. padding: 0 10px !important;
  777. i.el-submenu__icon-arrow.el-icon-arrow-down {
  778. color: #909399 !important;
  779. }
  780. }
  781. li:hover .el-submenu__title {
  782. background: #e7f6ff;
  783. }
  784. ul {
  785. li.is-active {
  786. background-color: #e7f6ff !important;
  787. }
  788. }
  789. }
  790. ::v-deep .is-opened .el-submenu__title .title_top {
  791. color: #409eff !important;
  792. }
  793. ::v-deep .is-opened .el-menu .el-menu-item span {
  794. color: #333;
  795. }
  796. ::v-deep .is-opened .el-menu .is-active span {
  797. color: #409eff;
  798. }
  799. }
  800. ::v-deep .el-submenu__title {
  801. height: 47px !important;
  802. line-height: 47px !important;
  803. }
  804. .rule_list {
  805. position: relative;
  806. display: table-cell;
  807. }
  808. .rule_list:after {
  809. content: ' ';
  810. position: absolute;
  811. top: 0;
  812. left: 0;
  813. bottom: 0;
  814. width: 1px;
  815. background: #ebeef5;
  816. }
  817. .terr-right {
  818. min-height: calc(100vh - 224px);
  819. .name {
  820. height: 100%;
  821. font-size: 18px;
  822. margin-right: 20px;
  823. }
  824. .btns button {
  825. margin-top: 20px;
  826. margin-right: 5px;
  827. }
  828. }
  829. .terr-left button {
  830. margin: 0 auto;
  831. display: block;
  832. margin-bottom: 10px;
  833. }
  834. </style>