coupon.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. let cacheData = {
  2. }
  3. $(function () {
  4. $("#jqGrid").Grid({
  5. url: '../coupon/list',
  6. rownumWidth:60,
  7. loadComplete: function(){
  8. var re_records = $("#list").getGridParam('records');
  9. if(re_records == 0 || re_records == null){
  10. if($(".norecords").html() == null){
  11. $("#list").parent().append("<div class=\"norecords\">没有符合数据</div>");
  12. }
  13. $(".norecords").show();
  14. }
  15. },
  16. colModel: [
  17. {label: 'id', name: 'id', index: 'id', key: true, hidden: true},
  18. {label: '店铺名称', name: 'brandName', index: 'brandName', width: 120},
  19. {label: '优惠券名称', name: 'name', index: 'name', width: 120},
  20. {
  21. label: '发放类型', name: 'sendType', index: 'send_type', width: 80, formatter: function (value) {
  22. if (value == 0) {
  23. return '全场赠券';
  24. } else if (value == 1) {
  25. return '会员赠券';
  26. } else if (value == 2) {
  27. return '购物赠券';
  28. } else if (value == 3) {
  29. return '注册赠券';
  30. }
  31. return '-';
  32. }
  33. },
  34. {label: '优惠券面额(元)', name: 'typeMoney', index: 'type_money', width: 80},
  35. {label: '最低消费额(元)', name: 'minGoodsAmount', index: 'min_goods_amount', width: 80},
  36. {
  37. label: '使用开始时间',
  38. name: 'useStartDate',
  39. index: 'use_start_date',
  40. width: 120,
  41. formatter: function (value) {
  42. return transDate(value);
  43. }
  44. },
  45. {
  46. label: '使用结束时间', name: 'useEndDate', index: 'use_end_date', width: 120, formatter: function (value) {
  47. return transDate(value);
  48. }
  49. },
  50. {label: '发放数量', name: 'number', index: 'number', width: 80},
  51. {label: '已领取数量', name: 'receiveNumber', index: 'receive_number', width: 80},
  52. {label: '优惠券状态', name: 'couponStatus', index: 'coupon_status', width: 80,
  53. formatter: function (value) {
  54. if (value == 4) {
  55. return '停止发放';
  56. } else if (value == 1) {
  57. return '未生效';
  58. } else if (value == 2) {
  59. return '生效中';
  60. } else if (value == 3) {
  61. return '已失效';
  62. }
  63. return '-';
  64. }},
  65. {
  66. label: '操作', width: 100, align:'center', sortable: false, formatter: function (value, col, row) {
  67. cacheData[col.rowId] = row
  68. let name = ''
  69. if (row.couponStatus == 2) {
  70. name = '停止'
  71. }
  72. if (row.couponStatus == 4) {
  73. name = '恢复'
  74. }
  75. let view = '<button class="btn btn-outline btn-info" onclick="vm.lookDetail(' + col.rowId + ');event.cancelBubble=true;"><i></i>&nbsp;查看</button>'
  76. let recover = '<button class="btn btn-outline btn-primary" style="margin-left:10px;" onclick="vm.changeStatus(' + col.rowId + ');event.cancelBubble=true;"><i></i>&nbsp;'+name+'</button>'
  77. return view + (name&&recover);
  78. }
  79. }]
  80. });
  81. });
  82. var vm = ''
  83. vm = new Vue({
  84. el: '#rrapp',
  85. data(){
  86. const validateBrandIdCheck =function (rule, value, callback) {
  87. if (value === '' || !value) {
  88. callback(new Error('店铺不能为空'));
  89. }else {
  90. callback();
  91. }
  92. };
  93. const validateNameCheck =function (rule, value, callback) {
  94. if (value === '' || !value ) {
  95. callback(new Error('优惠券名称不能为空'));
  96. }
  97. else if(value.length>20){
  98. callback(new Error('优惠券名称不能超过20个字符'));
  99. }
  100. else {
  101. callback();
  102. }
  103. };
  104. const validateDescCheck =function (rule, value, callback) {
  105. if (value === '' || !value ) {
  106. callback(new Error('使用说明不能为空'));
  107. }
  108. else if(value.length>200){
  109. callback(new Error('使用说明不能超过200个字符'));
  110. }
  111. else {
  112. callback();
  113. }
  114. };
  115. const validateNotNullIdCheck =function (rule, value, callback) {
  116. if (value === '' || !value) {
  117. callback(new Error(rule.name+'不能为空'));
  118. }else {
  119. callback();
  120. }
  121. };
  122. return {
  123. showList: true,
  124. showCard: false,
  125. showGoods: false,
  126. title: null,
  127. coupon: {
  128. sendType: 0,
  129. brandId:'',
  130. brandName:'',
  131. name:'',
  132. typeMoney:'',
  133. minGoodsAmount:'',
  134. number:'',
  135. useStartDate:'',
  136. useEndDate:'',
  137. useDesc:'',
  138. },
  139. ruleValidate: {
  140. name: [
  141. {required: true, validator: validateNameCheck, trigger: 'blur'}
  142. ],
  143. brandId: [
  144. {required: true, validator: validateBrandIdCheck, trigger: 'change'}
  145. ],
  146. typeMoney: [
  147. {required: true,name:'面值金额', validator: validateNotNullIdCheck, trigger: 'change'}
  148. ],
  149. minGoodsAmount: [
  150. {required: true,name:'最小订单金额', validator: validateNotNullIdCheck, trigger: 'change'}
  151. ],
  152. number: [
  153. {required: true, name: '发放数量',validator: validateNotNullIdCheck, trigger: 'change'}
  154. ],
  155. useStartDate: [
  156. {required: true, name: '使用开始时间',validator: validateNotNullIdCheck, trigger: 'change'}
  157. ],
  158. useEndDate: [
  159. {required: true, name: '使用结束时间',validator: validateNotNullIdCheck, trigger: 'change'}
  160. ],
  161. useDesc: [
  162. {required: true, validator: validateDescCheck,trigger: 'blur'}
  163. ],
  164. },
  165. q: {
  166. name: '',
  167. couponStatus: ' ',
  168. brandName: ''
  169. },
  170. goods: [],
  171. goodss: [],
  172. brands:[],
  173. user: [],
  174. users: [],
  175. selectData: {},
  176. sendSms: ''//是否发送短信
  177. }
  178. },
  179. methods: {
  180. query: function () {
  181. vm.reload();
  182. },
  183. add: function () {
  184. vm.showList = false;
  185. vm.showCard = true;
  186. vm.showGoods = false;
  187. vm.title = "新增";
  188. vm.coupon = {
  189. sendType: 0,
  190. brandId:'',
  191. brandName:'',
  192. name:'',
  193. typeMoney:'',
  194. minGoodsAmount:'',
  195. number:'',
  196. useStartDate:'',
  197. useEndDate:'',
  198. useDesc:''
  199. };
  200. vm.getBrands();
  201. },
  202. update: function (event) {
  203. var id = getSelectedRow("#jqGrid");
  204. if (id == null) {
  205. return;
  206. }
  207. vm.showList = false;
  208. vm.showCard = true;
  209. vm.showGoods = false;
  210. vm.title = "修改";
  211. vm.getBrands();
  212. vm.getInfo(id)
  213. },
  214. saveOrUpdate: function (event) {
  215. if (vm.coupon.minGoodsAmount < vm.coupon.typeMoney) {
  216. return alert('面值金额 需小于 最小订单金额,才可新增优惠券')
  217. }
  218. var url = vm.coupon.id == null ? "../coupon/save" : "../coupon/update";
  219. vm.brands.forEach(item=>{
  220. if (item.id == vm.coupon.brandId) {
  221. vm.coupon.brandName = item.name
  222. }
  223. })
  224. Ajax.request({
  225. type: "POST",
  226. url: url,
  227. contentType: "application/json",
  228. params: JSON.stringify(vm.coupon),
  229. successCallback: function () {
  230. alert('操作成功', function (index) {
  231. vm.reload();
  232. });
  233. }
  234. });
  235. },
  236. del: function (event) {
  237. var ids = getSelectedRows("#jqGrid");
  238. if (ids == null) {
  239. return;
  240. }
  241. confirm('确定要删除选中的记录?', function () {
  242. Ajax.request({
  243. type: "POST",
  244. url: "../coupon/deleteCoupons",
  245. contentType: "application/json",
  246. params: JSON.stringify({
  247. idList: ids
  248. }),
  249. successCallback: function (r) {
  250. alert('操作成功', function (index) {
  251. vm.reload();
  252. });
  253. }
  254. });
  255. });
  256. },
  257. getInfo: function (id) {
  258. Ajax.request({
  259. url: "../coupon/info/" + id,
  260. async: true,
  261. successCallback: function (r) {
  262. vm.coupon = r.coupon;
  263. }
  264. });
  265. },
  266. getBrands: function () {
  267. Ajax.request({
  268. url: "../brand/queryAll",
  269. async: true,
  270. successCallback: function (r) {
  271. vm.brands = r.list;
  272. r.list.forEach(item=>{
  273. if (item.id == vm.coupon.brandId) {
  274. vm.coupon.brandName = item.name
  275. }
  276. })
  277. }
  278. });
  279. },
  280. reload: function (event) {
  281. this.getBrands();
  282. vm.showList = true;
  283. vm.showCard = false;
  284. vm.showGoods = false;
  285. var page = $("#jqGrid").jqGrid('getGridParam', 'page');
  286. $("#jqGrid").jqGrid('setGridParam', {
  287. postData: {
  288. 'name': vm.q.name,
  289. 'brandName': vm.q.brandName,
  290. 'couponStatus': vm.q.couponStatus
  291. },
  292. page: page
  293. }).trigger("reloadGrid");
  294. vm.handleReset('formValidate');
  295. },
  296. handleSubmit: function (name) {
  297. handleSubmitValidate(this, name, function () {
  298. vm.saveOrUpdate()
  299. });
  300. },
  301. handleReset: function (name) {
  302. handleResetForm(this, name);
  303. },
  304. publish: function (id, sendType) {
  305. vm.showGoods = true;
  306. vm.goods = [];
  307. vm.user = [];
  308. vm.getGoodss();
  309. vm.getUsers();
  310. vm.selectData = {id: id, sendType: sendType};
  311. vm.sendSms = false;
  312. openWindow({
  313. title: "发放",
  314. area: ['600px', '350px'],
  315. content: jQuery("#sendDiv")
  316. })
  317. },
  318. getUsers: function () {
  319. Ajax.request({
  320. url: "../user/queryAll",
  321. async: true,
  322. successCallback: function (r) {
  323. vm.users = r.list;
  324. }
  325. });
  326. },
  327. lookDetail:function (rowId) {
  328. let id = cacheData[rowId].id
  329. let brandName = cacheData[rowId].brandName
  330. let name = cacheData[rowId].name
  331. if (id == null) {
  332. return;
  333. }
  334. openWindow({
  335. title: '优惠券明细',
  336. type: 2,
  337. content: '../shop/coupondetail.html?couponId=' + id + '&brandName=' + brandName +'&name=' + name
  338. })
  339. return false
  340. },
  341. changeStatus:function (rowId) {
  342. let row = cacheData[rowId]
  343. let msg = row.couponStatus == 2?'停止后,优惠券将不再发放,是否继续?':'恢复后,优惠券将允许发放,是否继续?'
  344. confirm(msg, function () {
  345. vm.coupon.couponStatus = row.couponStatus == 2?4:2
  346. Ajax.request({
  347. url: '../coupon/updateStatus?status='+(row.couponStatus == 2?4:2)+'&couponId='+row.id,
  348. contentType: "application/json",
  349. successCallback: function (r) {
  350. alert('操作成功', function (index) {
  351. vm.reload();
  352. });
  353. }
  354. });
  355. })
  356. },
  357. publishSubmit: function () {
  358. var sendType = vm.selectData.sendType;
  359. if (sendType == 1 && vm.user.length == 0) {
  360. vm.$Message.error('请选择下发会员');
  361. return;
  362. }
  363. if (sendType == 3 && vm.goods.length == 0) {
  364. vm.$Message.error('请选择下发商品');
  365. return;
  366. }
  367. confirm('确定下发优惠券?', function () {
  368. Ajax.request({
  369. type: "POST",
  370. dataType: 'json',
  371. url: "../coupon/publish",
  372. contentType: "application/json",
  373. params: JSON.stringify({
  374. sendType: vm.selectData.sendType,
  375. couponId: vm.selectData.id,
  376. goodsIds: vm.goods.toString(),
  377. userIds: vm.user.toString(),
  378. sendSms: vm.sendSms
  379. }),
  380. successCallback: function (r) {
  381. alert('操作成功', function (index) {
  382. vm.reload();
  383. vm.showGoods = false;
  384. vm.showList = true;
  385. });
  386. }
  387. });
  388. });
  389. },
  390. getGoodss: function () {
  391. Ajax.request({
  392. url: "../goods/queryAll/",
  393. async: true,
  394. successCallback: function (r) {
  395. vm.goodss = r.list;
  396. }
  397. });
  398. }
  399. },
  400. mounted:function() {
  401. this.getBrands()
  402. }
  403. });
  404. window.vm = vm