gift-plan-edit.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  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="gift-plan-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. <div style="display: inline-block;">
  13. <div flex="cross:center">
  14. <div style="margin-left: 10px;">
  15. <com-dialog-select :multiple="true" @selected="goodsSelect"
  16. title="商品选择">
  17. <el-button type="primary">选择商品</el-button>
  18. </com-dialog-select>
  19. </div>
  20. </div>
  21. </div>
  22. </el-form-item>
  23. <el-form-item v-if="goods">
  24. <div style="max-height: 300px;overflow-y: auto;background-color: #eee;">
  25. <div flex v-if="goods">
  26. <div style="padding-right: 10px;flex-grow: 0">
  27. <com-image mode="aspectFill"
  28. :src="goods.cover_pic"></com-image>
  29. </div>
  30. <div style="flex-grow: 1;">
  31. <com-ellipsis :line="2">{{goods.goods_name}}
  32. </com-ellipsis>
  33. </div>
  34. <div style="flex-grow: 0;">
  35. <el-button @click="deleteGoods"
  36. type="text" circle size="mini">
  37. <el-tooltip class="item" effect="dark"
  38. content="删除" placement="top">
  39. <img src="resources/img/mall/del.png" alt="">
  40. </el-tooltip>
  41. </el-button>
  42. </div>
  43. </div>
  44. </div>
  45. </el-form-item>
  46. <el-form-item :label-width="formLabelWidth">
  47. <template >
  48. <div style="color: #ff4544;">最多可添加20个商品</div>
  49. <div class="table-body" style="padding-left: 0;padding-top: 0;">
  50. <template>
  51. <el-table :data="ruleForm.goods_list" border style="width: 100%">
  52. <el-table-column type="index" label="序号" width="50"></el-table-column>
  53. <el-table-column prop="id" label="商品id" width="100"></el-table-column>
  54. <el-table-column prop="name,cover_pic" label="商品名称" >
  55. <template slot-scope="scope">
  56. <div flex="box:first">
  57. <div style="padding-right: 10px;">
  58. <com-image mode="aspectFill" :src="scope.row.cover_pic"></com-image>
  59. </div>
  60. <div flex="cross:top cross:center">
  61. {{scope.row.goods_name}}
  62. </div>
  63. </div>
  64. </template>
  65. </el-table-column>
  66. <el-table-column label="操作" width="100">
  67. <template slot-scope="scope">
  68. <el-button @click="deleteGoods(scope.$index)" size="mini">删除</el-button>
  69. </template>
  70. </el-table-column>
  71. </el-table>
  72. </template>
  73. </div>
  74. </template>
  75. </el-form-item>
  76. <el-form-item label="赠送商品">
  77. <div style="display: inline-block;">
  78. <div flex="cross:center">
  79. <div style="margin-left: 10px;">
  80. <free-goods-choice :multiple="true" @selected="goodsSelect2"
  81. title="商品选择">
  82. <el-button type="primary">选择商品</el-button>
  83. </free-goods-choice>
  84. </div>
  85. </div>
  86. </div>
  87. </el-form-item>
  88. <el-form-item :label-width="formLabelWidth">
  89. <template >
  90. <div style="color: #ff4544;">最多可添加20个商品</div>
  91. <div class="table-body" style="padding-left: 0;padding-top: 0;">
  92. <template>
  93. <el-table :data="ruleForm.give_goods_list" border style="width: 100%">
  94. <el-table-column type="index" label="序号" width="50"></el-table-column>
  95. <el-table-column prop="id" label="商品id" width="100"></el-table-column>
  96. <el-table-column prop="name,cover_pic" label="商品名称" >
  97. <template slot-scope="scope">
  98. <div flex="box:first">
  99. <div style="padding-right: 10px;">
  100. <com-image mode="aspectFill" :src="scope.row.cover_pic"></com-image>
  101. </div>
  102. <div flex="cross:top cross:center">
  103. {{scope.row.goods_name}}
  104. </div>
  105. </div>
  106. </template>
  107. </el-table-column>
  108. <el-table-column prop="num" label="赠送数量" >
  109. <template slot-scope="scope">
  110. <el-input v-model="scope.row.num" style="width: 200px" oninput="value=value.replace(/[^\d]/g,'')">
  111. </el-input>
  112. </template>
  113. </el-table-column>
  114. <el-table-column label="操作" width="100">
  115. <template slot-scope="scope">
  116. <el-button @click="deleteGoods2(scope.$index)" size="mini">删除</el-button>
  117. </template>
  118. </el-table-column>
  119. </el-table>
  120. </template>
  121. </div>
  122. </template>
  123. </el-form-item>
  124. <el-form-item label="赠送条件" required>
  125. 直推上级达到代理等级
  126. <el-checkbox-group v-model="ruleForm.gift_condition_level">
  127. <el-checkbox v-for="(item,index) in level_list" :label="item.level" :key="index">{{item.name}}</el-checkbox>
  128. </el-checkbox-group>
  129. </el-form-item>
  130. <el-form-item label="是否启用" required>
  131. <el-switch
  132. v-model="ruleForm.status"
  133. :active-value="1"
  134. :inactive-value="0">
  135. </el-switch>
  136. </el-form-item>
  137. </el-form>
  138. </div>
  139. <span slot="footer" class="dialog-footer">
  140. <el-button @click="editCancel" type="default" size="small">取消</el-button>
  141. <el-button type="primary" :loading="edit.btnLoading" style="margin-bottom: 10px;" size="small"
  142. @click="editSave">保存</el-button>
  143. </span>
  144. </el-dialog>
  145. </template>
  146. <script>
  147. Vue.component('gift-plan-edit', {
  148. template: '#gift-plan-edit',
  149. props: {
  150. value: {
  151. type: Boolean,
  152. default: false
  153. },
  154. edit_row: {
  155. type: Object,
  156. default: null
  157. }
  158. },
  159. data() {
  160. return {
  161. edit: {
  162. show: false,
  163. id: '',
  164. btnLoading: false,
  165. },
  166. ruleForm: {
  167. id: 0,
  168. goods_id: [],
  169. give_goods_num:[],
  170. give_goods_id:[],
  171. status: 1,
  172. goods_list:[],
  173. give_goods_list:[],
  174. gift_condition_level:[],
  175. },
  176. formLabelWidth: '150px',
  177. level_list: [],
  178. goods: null,
  179. loading:false,
  180. level_reward_arr:[],
  181. }
  182. },
  183. watch: {
  184. value() {
  185. if (this.value) {
  186. this.getLevelList();
  187. this.edit.show = true;
  188. if (this.edit_row.id > 0) {
  189. this.edit.id = this.edit_row.id;
  190. this.loadData();
  191. }else{
  192. this.edit.id = 0;
  193. }
  194. } else {
  195. this.edit.show = false;
  196. }
  197. },
  198. 'edit.show'() {
  199. if (!this.edit.show) {
  200. this.edit_row.id = 0;
  201. this.ruleForm = {
  202. goods_id: [],
  203. give_goods_num:[],
  204. give_goods_id:[],
  205. status: 1,
  206. goods_list:[],
  207. give_goods_list:[],
  208. gift_condition_leve0:0,
  209. }
  210. this.goods = null,
  211. this.goods2 = null,
  212. this.editCancel();
  213. }
  214. if (this.edit.id) {
  215. }
  216. }
  217. },
  218. mounted() {
  219. },
  220. methods: {
  221. onInput(e) {
  222. this.$forceUpdate();
  223. },
  224. loadData() {
  225. this.loading = true;
  226. request({
  227. params: {
  228. r: 'cloud-stock/gift-plan/edit',
  229. id: this.edit.id
  230. },
  231. method: 'get',
  232. }).then(response => {
  233. this.loading = false;
  234. if (response.data.code == 0) {
  235. this.ruleForm = {
  236. gift_condition_level: response.data.data.gift_condition_level,
  237. give_goods_num:response.data.data.give_goods_num,
  238. status: response.data.data.status,
  239. goods_list:response.data.data.goods_list,
  240. give_goods_list:response.data.data.give_goods_list,
  241. goods_id:response.data.data.goods_id,
  242. give_goods_id:response.data.data.give_goods_id,
  243. }
  244. } else {
  245. this.$message.error(response.data.msg);
  246. }
  247. }).catch(response => {
  248. this.loading = false;
  249. });
  250. },
  251. goodsSelect(param) {
  252. for (let j in param) {
  253. let item = param[j];
  254. console.log(item);
  255. if (this.ruleForm.goods_id&&this.ruleForm.goods_id.length >= 20) {
  256. this.$message.error('指定商品不能大于20个');
  257. return;
  258. }
  259. let flag = true;
  260. for (let i in this.ruleForm.goods_id) {
  261. if (this.ruleForm.goods_id[i] == item.id) {
  262. flag = false;
  263. break;
  264. }
  265. }
  266. if (flag) {
  267. this.ruleForm.goods_id.push(item.id);
  268. this.ruleForm.goods_list.push({
  269. id: item.id,
  270. goods_name: item.goods_name,
  271. cover_pic: item.cover_pic,
  272. });
  273. }
  274. }
  275. },
  276. goodsSelect2(param) {
  277. for (let j in param) {
  278. let item = param[j];
  279. if (this.ruleForm.give_goods_id&&this.ruleForm.give_goods_id.length >= 20) {
  280. this.$message.error('指定商品不能大于20个');
  281. return;
  282. }
  283. let flag = true;
  284. for (let i in this.ruleForm.give_goods_id) {
  285. if (this.ruleForm.give_goods_id[i] == item.goods_id) {
  286. flag = false;
  287. break;
  288. }
  289. }
  290. if (flag) {
  291. this.ruleForm.give_goods_id.push(item.goods_id);
  292. this.ruleForm.give_goods_list.push({
  293. id: item.goods_id,
  294. goods_name: item.goods_name,
  295. cover_pic: item.cover_pic,
  296. });
  297. }
  298. }
  299. },
  300. deleteGoods(index) {
  301. this.ruleForm.goods_list.splice(index, 1);
  302. this.ruleForm.goods_id.splice(index, 1);
  303. },
  304. deleteGoods2(index) {
  305. this.ruleForm.give_goods_list.splice(index, 1);
  306. this.ruleForm.give_goods_id.splice(index, 1);
  307. },
  308. agentClick(row) {
  309. this.edit.id = row.id
  310. },
  311. getLevelList() {
  312. request({
  313. params: {
  314. r: 'cloud-stock/default/get-level-list',
  315. page:1,
  316. limit:100
  317. },
  318. method: 'get',
  319. }).then(response => {
  320. if (response.data.code == 0) {
  321. this.level_list = response.data.data;
  322. } else {
  323. this.$message.error(response.data.msg);
  324. }
  325. }).catch(response => {
  326. });
  327. },
  328. editCancel() {
  329. this.$emit('input', false);
  330. },
  331. editSave() {
  332. // if (this.ruleForm.goods_id == 0) {
  333. // this.$message.error('请选择升级商品');
  334. // return;
  335. // }
  336. // if (this.ruleForm.give_goods_id=='' && this.ruleForm.give_goods_num > 0) {
  337. // this.$message.error('请正选择赠送商品');
  338. // return;
  339. // }
  340. // if (this.ruleForm.give_goods_id && this.ruleForm.give_goods_num <= 0) {
  341. // this.$message.error('请正确填写赠送数量');
  342. // return;
  343. // }
  344. let requestUrl = '';
  345. requestUrl = 'cloud-stock/gift-plan/edit';
  346. this.edit.btnLoading = true;
  347. this.ruleForm.id = this.edit.id;
  348. request({
  349. params: {
  350. r:requestUrl,
  351. },
  352. method: 'post',
  353. data: this.ruleForm
  354. }).then(response => {
  355. this.edit.btnLoading = false;
  356. if (response.data.code == 0) {
  357. this.$message.success('保存成功');
  358. this.$emit('refresdatafun',1);
  359. this.editCancel();
  360. this.ruleForm= {
  361. goods_id: 0,
  362. give_goods_num:'',
  363. give_goods_id:0,
  364. status: 1,
  365. gift_condition_level: 0,
  366. }
  367. } else {
  368. this.$message.error(response.data.msg);
  369. }
  370. }).catch(response => {
  371. this.edit.btnLoading = false;
  372. });
  373. },
  374. keyUp() {
  375. },
  376. }
  377. });
  378. </script>