auth.js 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. define({
  2. name:"auth",
  3. template:`
  4. <div class="auth">
  5. <el-form ref="auth" :model="json">
  6. <div class="vue-main-title">
  7. <div class="vue-main-title-left"></div>
  8. <div class="vue-main-title-content">权限</div>
  9. </div>
  10. <div style="margin:0 auto;width:80%;">
  11. <el-form-item label="商品规格">
  12. <div style="display:flex;padding: 12px 0 0 75px;">
  13. <el-checkbox-group v-model="goodsOptionIds" class="checkbo-group" @change="checked => handleCheckedChange(checked,'option')">
  14. <el-checkbox v-for="item in goodsOption" :key="item.id" :label="item.id + ''">{{item.title}}</el-checkbox>
  15. </el-checkbox-group>
  16. </div>
  17. <div style="margin-left: 142px;" class="form-item_tips">仅控制购买权限,浏览权限按整个商品;选全部规格按整个商品控制</div>
  18. </el-form-item>
  19. <el-form-item label="会员等级浏览权限">
  20. <div style="display:flex;padding: 12px 0 0 20px;">
  21. <el-checkbox-group v-model="levelAccessList" class="checkbo-group" @change="checked => handleCheckedChange(checked,'watch')">
  22. <el-checkbox v-for="item in levels" :key="item.id" :label="item.id + ''">{{item.level_name}}</el-checkbox>
  23. </el-checkbox-group>
  24. </div>
  25. </el-form-item>
  26. <el-form-item label="会员等级购买权限">
  27. <div style="display:flex;padding: 12px 0 0 20px;">
  28. <el-checkbox-group v-model="levelBuyList" class="checkbo-group" @change="checked => handleCheckedChange(checked,'buy')">
  29. <el-checkbox v-for="item in levels" :key="item.id" :label="item.id + ''">{{item.level_name}}</el-checkbox>
  30. </el-checkbox-group>
  31. </div>
  32. </el-form-item>
  33. <el-form-item label="会员组浏览权限">
  34. <div style="display:flex;padding: 12px 0 0 33px;">
  35. <el-checkbox-group v-model="vipAccessList" class="checkbo-group" @change="checked => handleCheckedChange(checked,'watches')">
  36. <el-checkbox v-for="item in groups" :key="item.id" :label="item.id + ''">{{item.group_name}}</el-checkbox>
  37. </el-checkbox-group>
  38. </div>
  39. </el-form-item>
  40. <el-form-item label="会员组购买权限">
  41. <div style="display:flex;padding: 12px 0 0 33px;">
  42. <el-checkbox-group v-model="vipBuyList" class="checkbo-group" @change="checked => handleCheckedChange(checked,'buys')">
  43. <el-checkbox v-for="item in groups" :key="item.id" :label="item.id + ''">{{item.group_name}}</el-checkbox>
  44. </el-checkbox-group>
  45. </div>
  46. </el-form-item>
  47. <el-form-item label="每次限购数量">
  48. <el-input style="width:400px;margin-left:48px;" v-model="json.once_buy_limit" oninput="if(value<0)value=''" type="number"></el-input>
  49. <div style="margin-left: 145px;" class="form-item_tips">每次下单限购数量</div>
  50. </el-form-item>
  51. <el-form-item label="会员限购总数">
  52. <el-input style="width:400px;margin-left:48px;" v-model="json.total_buy_limit" oninput="if(value<0)value=''" type="number"></el-input>
  53. <div style="margin-left: 145px;" class="form-item_tips">会员限购的总数</div>
  54. </el-form-item>
  55. <el-form-item label="会员每天限购数量">
  56. <el-input style="width:400px;margin-left:20px;" v-model="json.day_buy_limit" oninput="if(value<0)value=''" type="number"></el-input>
  57. <div style="margin-left: 145px;" class="form-item_tips">会员每天限购数量</div>
  58. </el-form-item>
  59. <el-form-item label="会员每周限购数量">
  60. <el-input style="width:400px;margin-left:20px;" v-model="json.week_buy_limit" oninput="if(value<0)value=''" type="number"></el-input>
  61. <div style="margin-left: 145px;" class="form-item_tips">会员每周限购数量</div>
  62. </el-form-item>
  63. <el-form-item label="会员每月限购数量">
  64. <el-input style="width:400px;margin-left:20px;" v-model="json.month_buy_limit" oninput="if(value<0)value=''" type="number"></el-input>
  65. <div style="margin-left: 145px;" class="form-item_tips">会员每月限购数量</div>
  66. </el-form-item>
  67. <el-form-item label="会员起购数量">
  68. <el-input style="width:400px;margin-left:48px;" v-model="json.min_buy_limit" oninput="if(value<0)value=''" type="number"></el-input>
  69. <div style="margin-left: 145px;" class="form-item_tips">会员单次最少购买数量,为空、0不限制</div>
  70. </el-form-item>
  71. <el-form-item label="商品每日限购总量">
  72. <el-input style="width:400px;margin-left:15px;" v-model="json.day_buy_total_limit" oninput="if(value<0)value=''" type="number"></el-input>
  73. <div style="margin-left: 145px;" class="form-item_tips">如设置为1,则今日售出1件(需已支付),会员今天无法再购买此商品</div>
  74. </el-form-item>
  75. <el-form-item label="购买倍数限制">
  76. <el-input style="width:400px;margin-left:48px;" v-model="json.buy_multiple" oninput="if(value<0)value=''" type="number"></el-input>
  77. <div style="margin-left: 145px;" class="form-item_tips">会员单次最少购买数量,为空、0不限制</div>
  78. </el-form-item>
  79. </div>
  80. </el-form>
  81. </div>
  82. `,
  83. style:`
  84. .auth .checkbo-group {
  85. display: flex;
  86. flex-flow: wrap;
  87. white-space: pre-wrap;
  88. }
  89. .auth .checkbo-group .el-checkbox {
  90. line-height: 25px;
  91. }
  92. `,
  93. props: {
  94. form: {
  95. default() {
  96. return {}
  97. }
  98. }
  99. },
  100. data(){
  101. // let intReg = /^[0-9]*$/;
  102. // let validateNum = (rule,value, callback) => {
  103. // let regular = intReg.test(value);
  104. // if(!value){
  105. // callback();
  106. // }else{
  107. // if (regular) {
  108. // callback();
  109. // }else{
  110. // callback(new Error("请输入正整数"));
  111. // }
  112. // }
  113. // };
  114. return {
  115. goodsOptionIds:[], //商品规格购物权限
  116. levelAccessList:[],//会员等级浏览权限
  117. levelBuyList:[],//会员等级购买权限
  118. vipAccessList:[],//会员组浏览权限
  119. vipBuyList:[],//会员组购买权限
  120. levels: [],
  121. groups: [],
  122. goodsOption:[],
  123. json: {
  124. show_levels: '',
  125. show_groups: '',
  126. buy_levels: '',
  127. buy_groups: '',
  128. once_buy_limit: '',
  129. total_buy_limit: '',
  130. day_buy_limit: '',
  131. week_buy_limit: '',
  132. month_buy_limit: '',
  133. min_buy_limit: '',
  134. day_buy_total_limit:'',
  135. buy_multiple:'',
  136. option_buy_limit:'',
  137. },
  138. // rules:{
  139. // once_buy_limit: {validator: validateNum },
  140. // total_buy_limit: {validator: validateNum },
  141. // day_buy_limit: {validator: validateNum },
  142. // week_buy_limit: {validator: validateNum },
  143. // month_buy_limit: {validator: validateNum },
  144. // min_buy_limit: {validator: validateNum },
  145. // },
  146. }
  147. },
  148. mounted(){
  149. if (this.form && this.form.privilege) {
  150. let data = this.form.privilege;
  151. this.json = this.pick(data, [
  152. "show_levels",
  153. "show_groups",
  154. "buy_levels",
  155. "buy_groups",
  156. 'once_buy_limit',
  157. 'total_buy_limit',
  158. 'day_buy_limit',
  159. 'week_buy_limit',
  160. 'month_buy_limit',
  161. 'min_buy_limit',
  162. 'day_buy_total_limit',
  163. 'buy_multiple',
  164. 'option_buy_limit',
  165. ]);
  166. this.levelAccessList = data.show_levels ? data.show_levels.split(",") : [''];
  167. this.vipAccessList = data.show_groups ? data.show_groups.split(",") : [''];
  168. this.levelBuyList = data.buy_levels ? data.buy_levels.split(",") : [''];
  169. this.vipBuyList = data.buy_groups ? data.buy_groups.split(",") : [''];
  170. this.goodsOptionIds = data.option_buy_limit ? data.option_buy_limit.split(",") : [''];
  171. }
  172. this.levels = this.form.levels ? JSON.parse(JSON.stringify(this.form.levels)) : [];
  173. this.groups = this.form.groups ? JSON.parse(JSON.stringify(this.form.groups)) : [];
  174. this.goodsOption = this.form.goods_option ? JSON.parse(JSON.stringify(this.form.goods_option)) : [];
  175. },
  176. methods:{
  177. pick(obj, params) {
  178. return params.reduce((iter, val) => (val in obj && (iter[val] = obj[val]?obj[val]:''), iter), {});
  179. },
  180. async validate(){
  181. return this.json;
  182. },
  183. handleCheckedChange(checked,type) {
  184. console.log(checked);
  185. let isCheckAll = false;
  186. let checkAll = [];
  187. checked.forEach((item, index) => {
  188. if (item === '' && checked.length > 1) {
  189. if (index !== 0) {
  190. isCheckAll = true;
  191. checkAll = [''];
  192. }
  193. } else {
  194. checkAll.push(item);
  195. }
  196. });
  197. let levelStr = isCheckAll ? '' : checkAll.join(',');
  198. if(type == 'option') {
  199. this.json.option_buy_limit = levelStr;
  200. this.goodsOptionIds = checkAll;
  201. }
  202. if(type == 'watch') {
  203. this.json.show_levels = levelStr;
  204. this.levelAccessList = checkAll;
  205. }
  206. if(type == 'buy') {
  207. this.json.buy_levels = levelStr;
  208. this.levelBuyList = checkAll;
  209. }
  210. if(type == 'watches'){
  211. this.json.show_groups = levelStr;
  212. this.vipAccessList = checkAll;
  213. }
  214. if(type == 'buys'){
  215. this.json.buy_groups = levelStr;
  216. this.vipBuyList = checkAll;
  217. }
  218. },
  219. }
  220. })