index.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-user-info');
  4. ComponentHelper::loadComponentView('com-list-page');
  5. ComponentHelper::loadComponentView('com-list-table');
  6. ComponentHelper::loadComponentView('com-dialog-select');
  7. ComponentHelper::loadComponentView('com-image');
  8. ComponentHelper::loadComponentView('component/com-add-cat',__DIR__);
  9. ?>
  10. <com-list-page :crumbs="crumbs" id="application">
  11. <com-list-table ref="table" :api="api" :search-list="searchList" @get-api-data="getListData">
  12. <template v-slot:custom-search>
  13. <el-button size="small" @click="$refs.cats.openDialog()">分类筛选</el-button>
  14. </template>
  15. <el-table-column prop="goods_id" label="商品ID" align="center"></el-table-column>
  16. <el-table-column label="商品" align="center" width="170">
  17. <template slot-scope="scope">
  18. <div flex="cross:center">
  19. <div style="margin-right: 10px;">
  20. <el-image style="width: 50px; height: 50px;border-radius: 5px;"
  21. :src="scope.row.goods.cover_pic"></el-image>
  22. </div>
  23. <div flex="cross:center">
  24. <el-tooltip class="item" effect="dark" :content="scope.row.goods.goods_name+''"
  25. placement="top">
  26. <span class="over2">{{scope.row.goods.goods_name}}</span>
  27. </el-tooltip>
  28. </div>
  29. </div>
  30. </template>
  31. </el-table-column>
  32. <el-table-column label="分类" align="center">
  33. <template slot-scope="scope">
  34. <div class="goods-cat">
  35. <el-tag v-if="scope.row.goods?.cats && scope.row.goods.cats.length > 0" size="mini">
  36. {{scope.row.goods.cats[0].name}}
  37. </el-tag>
  38. <el-tooltip v-if="scope.row.goods.cats && scope.row.goods.cats.length > 1" placement="top">
  39. <div slot="content">
  40. <span v-for="item in scope.row.goods.cats" :key="item.id">{{item.name}}&nbsp;</span>
  41. </div>
  42. <span>...</span>
  43. </el-tooltip>
  44. </div>
  45. </template>
  46. </el-table-column>
  47. <el-table-column prop="goods.price" label="售价" align="center"></el-table-column>
  48. <el-table-column prop="created_at_text" label="创建时间" align="center"></el-table-column>
  49. <el-table-column label="操作" align="center">
  50. <template slot-scope="scope">
  51. <el-button type="text" size="mini" circle @click="showEdit(scope.row)">
  52. 编辑
  53. </el-button>
  54. <el-button type="text" size="mini" circle @click="del(scope.row.id)">
  55. 删除
  56. </el-button>
  57. </template>
  58. </el-table-column>
  59. <template slot="header-left">
  60. <com-dialog-select :multiple="true"
  61. @selected="save"
  62. :extra-search="{exclude_goods_ids: selectedGoodsIds}"
  63. url="mall/goods/search">
  64. <el-button type="primary" size="small">选择商品</el-button>
  65. </com-dialog-select>
  66. </template>
  67. </com-list-table>
  68. <com-add-cat ref="cats" @select="selectCat" :mch_id="0"></com-add-cat>
  69. <el-dialog title="冻结积分奖励设置" :visible.sync="dialogFormVisible" width="15%">
  70. <el-form :model="form" label-width="150px">
  71. <el-form-item label="是否单独设置奖励">
  72. <el-switch
  73. v-model="form.is_alone"
  74. :active-value="1"
  75. :inactive-value="0">
  76. </el-switch>
  77. </el-form-item>
  78. <template v-if="form.is_alone">
  79. <el-form-item label="奖励冻结积分">
  80. <el-input size="small" style="width: 200px;" v-model="form.setting.reward_frozen_score" onInput="value = toNumber(value, 2)">
  81. <template slot="append">个</template>
  82. </el-input>
  83. </el-form-item>
  84. <el-form-item label="循环">
  85. <el-input size="small" style="width: 200px;" v-model="form.setting.loop_num" onInput="value = toNumber(value)">
  86. <template slot="append">轮</template>
  87. </el-input>
  88. </el-form-item>
  89. </template>
  90. </el-form>
  91. <div slot="footer" class="dialog-footer">
  92. <el-button size="small" @click="dialogFormVisible = false">取 消</el-button>
  93. <el-button size="small" type="primary" @click="edit" :loading="btnLoad">确 定</el-button>
  94. </div>
  95. </el-dialog>
  96. </com-list-page>
  97. <script type="text/javascript" src="/resources/js/diy-util.js"></script>
  98. <script>
  99. const application = new Vue({
  100. el: '#application',
  101. data: {
  102. api: 'score-expansion/goods/list',
  103. crumbs: [
  104. {
  105. title: '商品列表',
  106. }
  107. ],
  108. btnLoad: false,
  109. form: {
  110. id: 0,
  111. is_alone: 0,
  112. setting: {
  113. reward_frozen_score: 0,
  114. loop_num: 0,
  115. },
  116. },
  117. selectedGoodsIds: [],
  118. dialogFormVisible: false,
  119. },
  120. mounted() {
  121. },
  122. computed: {
  123. searchList() {
  124. return [
  125. {
  126. key: 'goods_id',
  127. title: '商品ID',
  128. type: 'text',
  129. },
  130. ]
  131. }
  132. },
  133. methods: {
  134. del(id) {
  135. this.$confirm('确认删除此商品?', '提示', {
  136. confirmButtonText: '确定',
  137. cancelButtonText: '取消',
  138. type: 'warning'
  139. }).then(() => {
  140. request({
  141. params: {
  142. r: 'score-expansion/goods/del',
  143. },
  144. method: 'POST',
  145. data: {id}
  146. }).then(e => {
  147. if (e.data.code === 0) {
  148. this.$refs.table.getList()
  149. this.$message.success('删除成功');
  150. } else {
  151. this.$message.error(e.data.msg);
  152. }
  153. })
  154. })
  155. },
  156. save(selectedGoods) {
  157. const goods_ids = []
  158. for (const selectedGoodsItem of selectedGoods) {
  159. goods_ids.push(selectedGoodsItem.id)
  160. }
  161. if (goods_ids.length === 0) {
  162. this.$message.error('未选择商品')
  163. return
  164. }
  165. request({
  166. params: {
  167. r: 'score-expansion/goods/save',
  168. },
  169. method: 'POST',
  170. data: {goods_ids}
  171. }).then(e => {
  172. if (e.data.code === 0) {
  173. this.$message.success('添加成功')
  174. this.$refs.table.getList()
  175. } else {
  176. this.$message.error(e.data.msg);
  177. }
  178. })
  179. },
  180. showEdit(row) {
  181. this.form.id = row.id
  182. this.form.is_alone = row.is_alone
  183. this.form.setting = Object.assign(this.form.setting, row.setting)
  184. this.dialogFormVisible = true
  185. },
  186. edit() {
  187. this.btnLoad = true
  188. request({
  189. params: {
  190. r: 'score-expansion/goods/edit',
  191. },
  192. method: 'POST',
  193. data: this.form
  194. }).then(e => {
  195. if (e.data.code === 0) {
  196. this.$message.success('编辑成功')
  197. this.dialogFormVisible = false
  198. this.$refs.table.getList()
  199. } else {
  200. this.$message.error(e.data.msg);
  201. }
  202. }).finally(() => {
  203. this.btnLoad = false
  204. })
  205. },
  206. delGoods(index) {
  207. this.selectGoodsList.splice(index, 1)
  208. },
  209. goodsSelect(selectGoodsList) {
  210. for (const selectGoodsItem of selectGoodsList) {
  211. let isExist = false
  212. for (const selectedGoodsItem of this.selectGoodsList) {
  213. if (selectedGoodsItem.id === selectGoodsItem.id) {
  214. isExist = true
  215. break
  216. }
  217. }
  218. if (!isExist) {
  219. this.selectGoodsList.push(deepClone(selectGoodsItem))
  220. }
  221. }
  222. },
  223. selectCat(arr) {
  224. this.$refs.table.searchParams.cats = [];
  225. arr.forEach(it => this.$refs.table.searchParams.cats.push(it.id))
  226. this.$refs.table.reload()
  227. },
  228. getListData(list) {
  229. this.selectedGoodsIds = list.selected_goods_ids
  230. }
  231. }
  232. })
  233. </script>