edit.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-dialog-select');
  4. ComponentHelper::loadComponentView('component/com-add-cat', __DIR__);
  5. ?>
  6. <div id="app" v-cloak>
  7. <el-card class="box-card">
  8. <div slot="header">
  9. <span>商品详情</span>
  10. </div>
  11. <el-card shadow="never" style="border:0;min-width: 1000px;">
  12. <el-form ref="form" :model="form" label-width="120px" size="small" v-loading="loading">
  13. <el-card class="edit-card" shadow="never">
  14. <div slot="header" class="clearfix">
  15. <div class="card-title">商品设置</div>
  16. </div>
  17. <el-form-item style="margin-left: 10px;" label="商品分类" prop="cats" required>
  18. <el-tag style="margin-right: 5px;margin-bottom:5px" v-for="(item,index) in cats" :key="index" type="warning" closable disable-transitions @close="handle('destroyCat', index)">{{item.name}}</el-tag>
  19. <el-button type="primary" @click="$refs.cats.openDialog()">选择分类</el-button>
  20. <com-add-cat ref="cats" :new-cats="form.cats" @select="selectCat"></com-add-cat>
  21. </el-form-item>
  22. <el-form-item style="margin-left: 10px;" label="商品信息" required>
  23. <com-dialog-select :multiple="false" @selected="goodsSelect" title="商品选择">
  24. <el-button>选择商品</el-button>
  25. </com-dialog-select>
  26. <div class="table-body" style="padding-left: 0;padding-top: 10px;">
  27. <template>
  28. <el-table :data="form.goods" border style="width: 30%">
  29. <el-table-column label="商品ID" prop="id" width="80"></el-table-column>
  30. <el-table-column label="商品名称" >
  31. <template slot-scope="scope">
  32. <div flex="box:first">
  33. <div style="padding-right: 10px;">
  34. <com-image mode="aspectFill" :src="scope.row.cover_pic"></com-image>
  35. </div>
  36. <div flex="cross:top cross:center">
  37. {{scope.row.goods_name}}
  38. </div>
  39. </div>
  40. </template>
  41. </el-table-column>
  42. <el-table-column fixed="right" label="操作" width="100">
  43. <template slot-scope="scope">
  44. <el-button @click="handle('deleteGoods')" type="primary" size="mini">删除</el-button>
  45. </template>
  46. </el-table-column>
  47. </el-table>
  48. </template>
  49. </div>
  50. </el-form-item>
  51. <el-form-item v-if="form.attr.length > 0" style="margin-left: 10px;" label="兑换价格" required>
  52. <el-table :data="form.attr" border>
  53. <el-table-column prop="name" label="规格">
  54. <template slot-scope="scope">
  55. {{scope.row.name ? scope.row.name : '默认'}}
  56. </template>
  57. </el-table-column>
  58. <el-table-column label="售价">
  59. <template slot-scope="scope">
  60. ¥{{scope.row.price}}
  61. </template>
  62. </el-table-column>
  63. <el-table-column prop="name" label="兑换价" key="3">
  64. <template slot-scope="scope">
  65. <el-form-item>
  66. 最低抵扣
  67. <el-input v-model="scope.row.min_score" :disabled="scope.row.min_limit == 1" size="mini" min=1
  68. style="width: 100px;margin:3px 10px" placeholder="输入积分" onInput="value = toNumber(value, 2)">
  69. </el-input>
  70. <el-checkbox v-model="scope.row.min_limit">不限制</el-checkbox>
  71. </el-form-item>
  72. <el-form-item>
  73. 最高抵扣
  74. <el-input v-model="scope.row.max_score" size="mini" :disabled="scope.row.max_limit == 1" min=1 style="width: 100px;margin:3px 10px"
  75. placeholder="输入积分" onInput="value = toNumber(value, 2)">
  76. </el-input>
  77. <el-checkbox v-model="scope.row.max_limit">不限制</el-checkbox>
  78. </el-form-item>
  79. </template>
  80. </el-table-column>
  81. </el-table>
  82. </el-form-item>
  83. </el-card>
  84. </el-form>
  85. </el-card>
  86. <el-button class="button-item" :loading="loading" type="primary" size="small" @click="send('submit')">保存</el-button>
  87. </el-card>
  88. </div>
  89. <script>
  90. const app = new Vue({
  91. el: '#app',
  92. data: {
  93. loading: false,
  94. form: {
  95. goods_id: 0,
  96. goods: [],
  97. attr: [],
  98. cats: [],
  99. },
  100. cats: [],
  101. rules: {
  102. cats: [{
  103. required: true,
  104. type: 'array',
  105. validator: (rule, value, callback) => {
  106. if (this.form.cats instanceof Array && this.form.cats.length > 0) {
  107. callback();
  108. }
  109. callback('请选择分类');
  110. }
  111. }],
  112. }
  113. },
  114. mounted() {
  115. this.send('getData', getQuery('goods_id'));
  116. },
  117. methods: {
  118. selectCat(cats) {
  119. this.cats = cats;
  120. let arr = [];
  121. cats.map(v => {
  122. arr.push(v.id);
  123. })
  124. this.form.cats = arr;
  125. this.$refs.form.validateField('cats');
  126. },
  127. send(type, param = null) {
  128. switch (type) {
  129. //获取积分商品
  130. case 'getData':
  131. this.loading = true;
  132. request({
  133. params: {
  134. r: 'purchase/goods/edit',
  135. goods_id: param
  136. },
  137. method: 'get'
  138. }).then(e=>{
  139. this.loading = false;
  140. if (e.data.code == 0) {
  141. if (!isEmpty(e.data.data.detail)) {
  142. this.form = e.data.data.detail;
  143. this.cats = e.data.data.detail.cats;
  144. let cats = []
  145. this.cats.map(v => {
  146. cats.push(v.id)
  147. })
  148. this.form.cats = cats
  149. }
  150. } else {
  151. this.$message.error(e.data.msg);
  152. }
  153. }).catch(e => {
  154. this.loading = false;
  155. self.$message.error(e.data.msg);
  156. });
  157. break;
  158. //获取属性:
  159. case 'getAttr':
  160. let goods_id = param.id;
  161. this.loading = true;
  162. request({
  163. params: {
  164. r: 'purchase/goods/attr-list',
  165. goods_id: goods_id,
  166. },
  167. method: 'get'
  168. }).then(e=>{
  169. this.loading = false;
  170. if (e.data.code == 0) {
  171. let arr = [];
  172. e.data.data.map(v => {
  173. arr.push({
  174. goods_id: goods_id,
  175. goods_attr_id: v.id,
  176. name: v.name,
  177. price: v.price,
  178. min_score: 0,
  179. min_limit: true,
  180. max_score: 0,
  181. max_limit: true,
  182. });
  183. })
  184. this.form.attr = arr;
  185. } else {
  186. this.$message.error(e.data.msg);
  187. }
  188. }).catch(e=>{
  189. this.loading = false;
  190. this.$message.error(e.data.msg);
  191. })
  192. break;
  193. //提交
  194. case 'submit':
  195. this.loading = true;
  196. request({
  197. params: {r: 'purchase/goods/edit'},
  198. data: this.form,
  199. method: 'post'
  200. }).then(e=>{
  201. this.loading = false;
  202. if (e.data.code == 0) {
  203. this.$message.success(e.data.msg);
  204. let info = {r: 'purchase/goods/index'};
  205. navigateTo(info);
  206. } else {
  207. this.$message.error(e.data.msg);
  208. }
  209. }).catch(e=>{
  210. this.loading = false;
  211. this.$message.error(e.data.msg);
  212. })
  213. break;
  214. }
  215. },
  216. destroyCat(index) {
  217. let self = this;
  218. self.cats.splice(index, 1)
  219. var cats_arr = [];
  220. for (var item of self.cats){
  221. cats_arr.push(item.id);
  222. }
  223. self.ruleForm.cats = cats_arr;
  224. },
  225. handle(type, data = null) {
  226. let self = this;
  227. switch (type) {
  228. // 删除分类
  229. case 'destroyCat':
  230. self.cats.splice(data, 1)
  231. var cats_arr = [];
  232. for (var item of self.cats){
  233. cats_arr.push(item.id);
  234. }
  235. self.form.cats = cats_arr;
  236. break;
  237. //删除选中商品
  238. case 'deleteGoods':
  239. self.form.goods_id = 0;
  240. self.form.goods = [];
  241. self.form.attr = [];
  242. break;
  243. }
  244. },
  245. goodsSelect(param) {
  246. this.form.goods_id = param.id;
  247. this.form.goods = [param];
  248. this.send('getAttr', param);
  249. }
  250. }
  251. })
  252. </script>