rule_item_edit.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <template>
  2. <div class="rule_item_edit_box">
  3. <van-nav-bar title="修改规则" left-text="返回" @click-left="$route_back" left-arrow right-text="删除" @click-right="del"></van-nav-bar>
  4. <div class="body_com has_header">
  5. <scroller>
  6. <van-cell-group>
  7. <van-cell><Mtextarea v-model="item.remark" placeholder="输入规则内容" :text_max="300" :imgs_max="3" @input="onRemarkInput"></Mtextarea></van-cell>
  8. </van-cell-group>
  9. <van-cell-group>
  10. <van-cell title="分值" class="cell-right-4rem">
  11. <van-radio-group v-model="item.range_type" class="radio_button" direction="horizontal" slot="right-icon">
  12. <van-radio class="list" :name="1">固定分</van-radio>
  13. <van-radio class="list" :name="2">范围分</van-radio>
  14. </van-radio-group>
  15. </van-cell>
  16. <template v-if="item.range_type == 1">
  17. <NumberInput v-model="item.min_point" title="输入分值" name="输入分值" required v-validate="'required'"></NumberInput>
  18. </template>
  19. <template v-else>
  20. <NumberInput v-model="item.min_point" title="最小分值" name="最小分值" required v-validate="'required'"></NumberInput>
  21. <NumberInput v-model="item.max_point" title="最大分值" name="最大分值" required v-validate="'required'"></NumberInput>
  22. </template>
  23. </van-cell-group>
  24. <van-cell-group class="choose"><CategorySelectorCell required title="选择分类" v-model="rule_cate" :max="2" :multi="false"></CategorySelectorCell></van-cell-group>
  25. <van-cell-group>
  26. <van-cell title="积分类型" class="cell-right-4rem">
  27. <van-radio-group v-model="item.pt_id" direction="horizontal" slot="right-icon" class="radio_button">
  28. <van-radio v-for="(item, index) in types_list" class="list" :name="item.id" :key="index">{{ item.name }}</van-radio>
  29. </van-radio-group>
  30. </van-cell>
  31. </van-cell-group>
  32. <div style="padding:0.32rem;"><van-button size="large" @click="data_verify" type="info">保存</van-button></div>
  33. </scroller>
  34. </div>
  35. </div>
  36. </template>
  37. <script>
  38. import Mtextarea from '@/components/Mtextarea';
  39. import NumberInput from '@/components/NumberInput';
  40. import CategorySelectorCell from '@/components/CategorySelectorCell';
  41. import Vue from 'vue';
  42. import { Switch } from 'vant';
  43. import {specialFilter} from "../../../utils/helper";
  44. Vue.use(Switch);
  45. export default {
  46. name: 'rule_item_edit',
  47. components: {
  48. Mtextarea,
  49. CategorySelectorCell,
  50. NumberInput
  51. },
  52. data() {
  53. return {
  54. data: {
  55. items: []
  56. },
  57. cycle: false,
  58. rule_cate: [],
  59. item: {
  60. rule_id: 0,
  61. prize_type: 1,
  62. range_type: 1,
  63. min_point: 0,
  64. max_point: 0,
  65. remark: '',
  66. is_attendance: 0,
  67. cycle_type: 1,
  68. pt_id: 0
  69. },
  70. send_loading: false,
  71. types_list: [],
  72. id: 0
  73. };
  74. },
  75. watch: {
  76. cycle(val) {
  77. if (val) {
  78. this.item.cycle_type = 2;
  79. } else {
  80. this.item.cycle_type = 1;
  81. }
  82. },
  83. rule_cate(val) {
  84. if (val.length > 0) {
  85. this.item.rule_id = val[0].id;
  86. } else {
  87. this.item.rule_id = 0;
  88. }
  89. }
  90. },
  91. methods: {
  92. data_verify() {
  93. let self = this;
  94. self.$validator.validateAll().then(result => {
  95. if (!result) {
  96. self.$notify({ type: 'danger', message: self.$validator.errors.items[0].msg });
  97. } else {
  98. self.send();
  99. }
  100. });
  101. },
  102. del() {
  103. let self = this;
  104. this.$dialog
  105. .confirm({
  106. title: '删除规则信息吗',
  107. message: '确定要删除当前规则信息吗?'
  108. })
  109. .then(() => {
  110. self.$toast.loading({
  111. mask: true,
  112. message: '处理中...'
  113. });
  114. this.$axiosUser('delete', '/api/pro/integral/rule/items', { item_id: self.id }).then(res => {
  115. self.$toast.clear();
  116. if (res.data.code == 1) {
  117. self.$toast.success('删除成功');
  118. setTimeout(() => {
  119. self.$route_back();
  120. }, 300);
  121. } else {
  122. self.$toast(res.data.msg);
  123. }
  124. });
  125. })
  126. .catch(() => {
  127. // on cancel
  128. });
  129. },
  130. send() {
  131. let self = this;
  132. self.data.items = [];
  133. if (self.item.range_type == 1) {
  134. self.item.max_point = self.item.min_point;
  135. }
  136. if (self.item.range_type == 1 && self.item.min_point == 0) {
  137. self.$notify({ type: 'danger', message: '固定积分必须是个正整数' });
  138. return false;
  139. }
  140. if(this.item.range_type == 2&&(this.item.min_point == 0||this.item.max_point == 0)){
  141. this.$notify({ type: 'danger', message: '分值不能为零' })
  142. return false
  143. }
  144. self.data.items.push(self.item);
  145. self.send_loading = true;
  146. self.$toast.loading({
  147. message: '正在处理'
  148. });
  149. self.item.item_id = self.item.id;
  150. this.$axiosUser('put', '/api/pro/integral/rule/items', self.item)
  151. .then(res => {
  152. self.send_loading = false;
  153. self.$toast.clear();
  154. if (res.data.code == 1) {
  155. self.$toast.success('修改成功');
  156. setTimeout(() => {
  157. self.$route_back();
  158. }, 300);
  159. } else {
  160. self.$toast(res.data.msg);
  161. }
  162. })
  163. .catch(e => {
  164. self.send_loading = false;
  165. self.$toast.clear();
  166. });
  167. },
  168. get_point_types() {
  169. this.types_list = [];
  170. let list = this.$getTypes;
  171. for (let i in list) {
  172. if (list[i].code != 'JX') {
  173. this.types_list.push(list[i]);
  174. }
  175. }
  176. },
  177. onRemarkInput(v){
  178. this.item.remark = specialFilter(v)
  179. }
  180. },
  181. created() {
  182. if (this.$route.query.id) {
  183. this.id = this.$route.query.id;
  184. this.item = JSON.parse(localStorage.getItem('rule_' + this.id));
  185. this.item.pt_id=Number(this.$route.query.pt_id)
  186. if (this.item.cycle_type == 2) {
  187. this.cycle = true;
  188. }
  189. if (this.item.rule_id) {
  190. this.rule_cate = [{ id: this.item.rule_id * 1, name: this.$route.query.rule_name }];
  191. }
  192. }
  193. this.item.remark = specialFilter(this.item.remark)
  194. this.get_point_types();
  195. }
  196. };
  197. </script>
  198. <style scoped>
  199. .body_com {
  200. height: calc(100% - 0.92rem);
  201. position: relative;
  202. }
  203. </style>