upgrade-bag-edit.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. $diyPath = dirname(__DIR__) . '/components';
  4. ComponentHelper::loadComponentView('com-dialog-select');
  5. ComponentHelper::loadComponentView('free-goods-choice', $diyPath);
  6. ?>
  7. <template id="upgrade-bag-edit">
  8. <el-dialog :visible.sync="edit.show" width="70%" :title="edit_row.title" center><!-- -->
  9. <div>
  10. <el-form @submit.native.prevent size="small" label-width="80px" v-loading = 'loading'>
  11. <el-form-item label="礼包名称" required>
  12. <el-input v-model="ruleForm.name">
  13. </el-input>
  14. </el-form-item>
  15. <el-form-item label="升级商品" required>
  16. <div style="display: inline-block;">
  17. <div flex="cross:center">
  18. <div style="margin-left: 10px;">
  19. <com-dialog-select :multiple="true" @selected="goodsSelect"
  20. title="商品选择">
  21. <el-button type="primary">选择商品</el-button>
  22. </com-dialog-select>
  23. </div>
  24. </div>
  25. </div>
  26. </el-form-item>
  27. <el-form-item v-if="goods">
  28. <div style="max-height: 300px;overflow-y: auto;background-color: #eee;">
  29. <div flex v-if="goods">
  30. <div style="padding-right: 10px;flex-grow: 0">
  31. <com-image mode="aspectFill"
  32. :src="goods.cover_pic"></com-image>
  33. </div>
  34. <div style="flex-grow: 1;">
  35. <com-ellipsis :line="2">{{goods.goods_name}}
  36. </com-ellipsis>
  37. </div>
  38. <div style="flex-grow: 0;">
  39. <el-button @click="deleteGoods"
  40. type="text" circle size="mini">
  41. <el-tooltip class="item" effect="dark"
  42. content="删除" placement="top">
  43. <img src="resources/img/mall/del.png" alt="">
  44. </el-tooltip>
  45. </el-button>
  46. </div>
  47. </div>
  48. </div>
  49. </el-form-item>
  50. <el-form-item :label-width="formLabelWidth">
  51. <template >
  52. <div style="color: #ff4544;">最多可添加20个商品</div>
  53. <div class="table-body" style="padding-left: 0;padding-top: 0;">
  54. <template>
  55. <el-table :data="ruleForm.goods_list" border style="width: 100%">
  56. <el-table-column type="index" label="序号" width="50"></el-table-column>
  57. <el-table-column prop="id" label="商品id" width="100"></el-table-column>
  58. <el-table-column prop="name,cover_pic" label="商品名称" >
  59. <template slot-scope="scope">
  60. <div flex="box:first">
  61. <div style="padding-right: 10px;">
  62. <com-image mode="aspectFill" :src="scope.row.cover_pic"></com-image>
  63. </div>
  64. <div flex="cross:top cross:center">
  65. {{scope.row.name}}
  66. </div>
  67. </div>
  68. </template>
  69. </el-table-column>
  70. <el-table-column label="操作" width="100">
  71. <template slot-scope="scope">
  72. <el-button @click="deleteGoods(scope.$index)" size="mini">删除</el-button>
  73. </template>
  74. </el-table-column>
  75. </el-table>
  76. </template>
  77. </div>
  78. </template>
  79. </el-form-item>
  80. <el-form-item label="升级等级" required>
  81. <el-select v-model="ruleForm.level" placeholder="请选择升级等级" @change="levelChange">
  82. <el-option
  83. v-for="item in level_list"
  84. :key="item.level"
  85. :label="item.name"
  86. :value="item.level"
  87. :disabled="item.status == 1?false:true"
  88. >
  89. </el-option>
  90. </el-select>
  91. </el-form-item>
  92. <el-form-item label="奖励类型" v-if="ruleForm.level>0">
  93. <el-radio v-model="ruleForm.is_percent" label="0">固定金额</el-radio>
  94. <el-radio v-model="ruleForm.is_percent" label="1">百分比</el-radio>
  95. </el-form-item>
  96. <el-form-item label="奖励" v-if="ruleForm.level>0">
  97. <el-form-item v-for="(item,index) in ruleForm.level_reward" :key='index' class="coupon-item" style="display: flex;align-items: center;">
  98. {{item.name}}
  99. <el-input type="number" :min="0" class="member-money" v-model="item.direct_equal_reward" placeholder="" style="width: 260px">
  100. <template slot="prepend">直推平级</template>
  101. </el-input>
  102. <el-input type="number" :min="0" class="member-money" v-model="item.direct_over_reward" placeholder="" style="width: 260px">
  103. <template slot="prepend">直推越级</template>
  104. </el-input>
  105. <el-input type="number" :min="0" class="member-money" v-model="item.indirect_equal_reward" placeholder="" style="width: 260px;">
  106. <template slot="prepend">间推平级</template>
  107. </el-input>
  108. <el-input type="number" :min="0" class="member-money" v-model="item.indirect_over_reward" placeholder="" style="width: 260px;">
  109. <template slot="prepend">间推越级</template>
  110. </el-input>
  111. </el-form-item>
  112. </el-form-item>
  113. <el-form-item label="赠送商品">
  114. <div style="display: inline-block;">
  115. <div flex="cross:center">
  116. <div style="margin-left: 10px;">
  117. <free-goods-choice :multiple="true" @selected="goodsSelect2"
  118. title="商品选择">
  119. <el-button type="primary">选择商品</el-button>
  120. </free-goods-choice>
  121. </div>
  122. </div>
  123. </div>
  124. </el-form-item>
  125. <el-form-item :label-width="formLabelWidth">
  126. <template >
  127. <div style="color: #ff4544;">最多可添加20个商品</div>
  128. <div class="table-body" style="padding-left: 0;padding-top: 0;">
  129. <template>
  130. <el-table :data="ruleForm.give_goods_list" border style="width: 100%">
  131. <el-table-column type="index" label="序号" width="50"></el-table-column>
  132. <el-table-column prop="id" label="商品id" width="100"></el-table-column>
  133. <el-table-column prop="name,cover_pic" label="商品名称" >
  134. <template slot-scope="scope">
  135. <div flex="box:first">
  136. <div style="padding-right: 10px;">
  137. <com-image mode="aspectFill" :src="scope.row.cover_pic"></com-image>
  138. </div>
  139. <div flex="cross:top cross:center">
  140. {{scope.row.name}}
  141. </div>
  142. </div>
  143. </template>
  144. </el-table-column>
  145. <el-table-column prop="num" label="赠送数量" >
  146. <template slot-scope="scope">
  147. <el-input-number v-model="scope.row.num" :min="1" :max="10000">
  148. </el-input-number>
  149. </template>
  150. </el-table-column>
  151. <el-table-column label="操作" width="100">
  152. <template slot-scope="scope">
  153. <el-button @click="deleteGoods2(scope.$index)" size="mini">删除</el-button>
  154. </template>
  155. </el-table-column>
  156. </el-table>
  157. </template>
  158. </div>
  159. </template>
  160. </el-form-item>
  161. <el-form-item label="是否启用" required>
  162. <el-switch
  163. v-model="ruleForm.status"
  164. :active-value="1"
  165. :inactive-value="0">
  166. </el-switch>
  167. </el-form-item>
  168. </el-form>
  169. </div>
  170. <span slot="footer" class="dialog-footer">
  171. <el-button @click="editCancel" type="default" size="small">取消</el-button>
  172. <el-button type="primary" :loading="edit.btnLoading" style="margin-bottom: 10px;" size="small"
  173. @click="editSave">保存</el-button>
  174. </span>
  175. </el-dialog>
  176. </template>
  177. <script>
  178. Vue.component('upgrade-bag-edit', {
  179. template: '#upgrade-bag-edit',
  180. props: {
  181. value: {
  182. type: Boolean,
  183. default: false
  184. },
  185. edit_row: {
  186. type: Object,
  187. default: null
  188. }
  189. },
  190. data() {
  191. return {
  192. edit: {
  193. show: false,
  194. id: '',
  195. btnLoading: false,
  196. },
  197. ruleForm: {
  198. id: 0,
  199. level: '',
  200. goods_id: [],
  201. give_goods_num:[],
  202. give_goods_id:[],
  203. name: '',
  204. status: 1,
  205. is_percent: "0",
  206. goods_list:[],
  207. give_goods_list:[],
  208. level_reward:[],
  209. },
  210. formLabelWidth: '150px',
  211. level_list: [],
  212. goods: null,
  213. loading:false,
  214. level_reward_arr:[],
  215. }
  216. },
  217. watch: {
  218. value() {
  219. if (this.value) {
  220. this.getLevelList();
  221. this.edit.show = true;
  222. if (this.edit_row.id > 0) {
  223. this.edit.id = this.edit_row.id;
  224. this.loadData();
  225. }else{
  226. this.loadDataNoId();
  227. this.edit.id = 0;
  228. }
  229. } else {
  230. this.edit.show = false;
  231. }
  232. },
  233. 'edit.show'() {
  234. if (!this.edit.show) {
  235. this.edit_row.id = 0;
  236. this.ruleForm = {
  237. level: '',
  238. goods_id: [],
  239. give_goods_num:[],
  240. give_goods_id:[],
  241. name: '',
  242. status: 1,
  243. is_percent: "0",
  244. goods_list:[],
  245. give_goods_list:[],
  246. level_reward:[],
  247. }
  248. this.goods = null,
  249. this.goods2 = null,
  250. this.editCancel();
  251. }
  252. if (this.edit.id) {
  253. }
  254. }
  255. },
  256. mounted() {
  257. },
  258. methods: {
  259. onInput(e) {
  260. this.$forceUpdate();
  261. },
  262. loadData() {
  263. this.loading = true;
  264. request({
  265. params: {
  266. r: 'cloud-stock/gift-bag/edit',
  267. id: this.edit.id
  268. },
  269. method: 'get',
  270. }).then(response => {
  271. this.loading = false;
  272. if (response.data.code == 0) {
  273. this.ruleForm = {
  274. level: response.data.data.level,
  275. give_goods_num:response.data.data.give_goods_num,
  276. name: response.data.data.name,
  277. status: response.data.data.status,
  278. is_percent: response.data.data.is_percent,
  279. goods_list:response.data.data.goods_list,
  280. give_goods_list:response.data.data.give_goods_list,
  281. goods_id:response.data.data.goods_id,
  282. give_goods_id:response.data.data.give_goods_id,
  283. level_reward: response.data.data.level_reward,
  284. }
  285. this.ruleForm.is_percent = this.ruleForm.is_percent.toString();
  286. this.level_reward_arr= response.data.data.level_reward;
  287. var level = this.ruleForm.level
  288. this.changeLevelReward(level);
  289. } else {
  290. this.$message.error(response.data.msg);
  291. }
  292. }).catch(response => {
  293. this.loading = false;
  294. });
  295. },
  296. loadDataNoId() {
  297. this.loading = true;
  298. request({
  299. params: {
  300. r: 'cloud-stock/gift-bag/edit',
  301. },
  302. method: 'get',
  303. }).then(response => {
  304. this.loading = false;
  305. if (response.data.code == 0) {
  306. this.ruleForm.level_reward = response.data.data.level_reward;
  307. this.level_reward_arr = response.data.data.level_reward;
  308. this.changeLevelReward(0);
  309. } else {
  310. this.$message.error(response.data.msg);
  311. }
  312. }).catch(response => {
  313. this.loading = false;
  314. });
  315. },
  316. goodsSelect(param) {
  317. for (let j in param) {
  318. let item = param[j];
  319. console.log(item);
  320. if (this.ruleForm.goods_id&&this.ruleForm.goods_id.length >= 20) {
  321. this.$message.error('指定商品不能大于20个');
  322. return;
  323. }
  324. let flag = true;
  325. for (let i in this.ruleForm.goods_id) {
  326. if (this.ruleForm.goods_id[i] == item.id) {
  327. flag = false;
  328. break;
  329. }
  330. }
  331. if (flag) {
  332. this.ruleForm.goods_id.push(item.id);
  333. this.ruleForm.goods_list.push({
  334. id: item.id,
  335. name: item.goods_name,
  336. cover_pic: item.cover_pic,
  337. });
  338. }
  339. }
  340. },
  341. goodsSelect2(param) {
  342. for (let j in param) {
  343. let item = param[j];
  344. if (this.ruleForm.give_goods_id&&this.ruleForm.give_goods_id.length >= 20) {
  345. this.$message.error('指定商品不能大于20个');
  346. return;
  347. }
  348. let flag = true;
  349. for (let i in this.ruleForm.give_goods_id) {
  350. if (this.ruleForm.give_goods_id[i] == item.goods_id) {
  351. flag = false;
  352. break;
  353. }
  354. }
  355. if (flag) {
  356. this.ruleForm.give_goods_id.push(item.goods_id);
  357. this.ruleForm.give_goods_list.push({
  358. id: item.goods_id,
  359. name: item.goods_name,
  360. cover_pic: item.cover_pic,
  361. });
  362. }
  363. }
  364. },
  365. deleteGoods(index) {
  366. this.ruleForm.goods_list.splice(index, 1);
  367. this.ruleForm.goods_id.splice(index, 1);
  368. },
  369. deleteGoods2(index) {
  370. this.ruleForm.give_goods_list.splice(index, 1);
  371. this.ruleForm.give_goods_id.splice(index, 1);
  372. },
  373. agentClick(row) {
  374. this.edit.id = row.id
  375. },
  376. getLevelList() {
  377. request({
  378. params: {
  379. r: 'cloud-stock/default/get-level-list',
  380. page:1,
  381. limit:100
  382. },
  383. method: 'get',
  384. }).then(response => {
  385. if (response.data.code == 0) {
  386. this.level_list = response.data.data;
  387. } else {
  388. this.$message.error(response.data.msg);
  389. }
  390. }).catch(response => {
  391. });
  392. },
  393. editCancel() {
  394. this.$emit('input', false);
  395. },
  396. editSave() {
  397. if (this.ruleForm.name == '') {
  398. this.$message.error('请输入升级礼包名称');
  399. return;
  400. }
  401. // if (this.ruleForm.goods_id == 0) {
  402. // this.$message.error('请选择升级商品');
  403. // return;
  404. // }
  405. if (this.ruleForm.level == '') {
  406. this.$message.error('请选择升级等级');
  407. return;
  408. }
  409. // if (this.ruleForm.give_goods_id=='' && this.ruleForm.give_goods_num > 0) {
  410. // this.$message.error('请正选择赠送商品');
  411. // return;
  412. // }
  413. // if (this.ruleForm.give_goods_id && this.ruleForm.give_goods_num <= 0) {
  414. // this.$message.error('请正确填写赠送数量');
  415. // return;
  416. // }
  417. let requestUrl = '';
  418. requestUrl = 'cloud-stock/gift-bag/edit';
  419. this.edit.btnLoading = true;
  420. this.ruleForm.id = this.edit.id;
  421. request({
  422. params: {
  423. r:requestUrl,
  424. },
  425. method: 'post',
  426. data: this.ruleForm
  427. }).then(response => {
  428. this.edit.btnLoading = false;
  429. if (response.data.code == 0) {
  430. this.$message.success('保存成功');
  431. //this.goods = null;
  432. this.$emit('refresdatafun',1);
  433. this.editCancel();
  434. this.ruleForm= {
  435. level: '',
  436. goods_id: 0,
  437. give_goods_num:'',
  438. give_goods_id:0,
  439. name: '',
  440. status: 1,
  441. is_percent: 0,
  442. }
  443. } else {
  444. this.$message.error(response.data.msg);
  445. }
  446. }).catch(response => {
  447. this.edit.btnLoading = false;
  448. });
  449. },
  450. keyUp() {
  451. },
  452. levelChange(value){
  453. this.changeLevelReward(value)
  454. },
  455. changeLevelReward(level){
  456. let self = this
  457. let newLeveReward = [];
  458. this.level_reward_arr.forEach(function (item,index){
  459. if(item.level<=level){
  460. newLeveReward.push(item)
  461. }
  462. })
  463. self.ruleForm.level_reward = newLeveReward;
  464. }
  465. }
  466. });
  467. </script>