voluntarilyPoint.vue 23 KB

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