voluntarilyPoint.vue 25 KB

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