voluntarilyPoint.vue 23 KB

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