index.php 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <div id="app" v-cloak>
  2. <el-card shadow="never" style="border:0;min-width: 1000px;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  3. <div slot="header">
  4. <span>商品列表</span>
  5. <div style="float: right; margin: -5px 0">
  6. <el-button type="primary" size="small" @click="handle('add_more')">添加多商品</el-button>
  7. <el-button type="primary" size="small" @click="handle('add')">添加单商品</el-button>
  8. </div>
  9. </div>
  10. <div class="table-body">
  11. <el-form :inline="true" :model="search" size="small">
  12. <el-row :gutter="12">
  13. <el-col :span="4">
  14. <el-input size="small" placeholder="请输入商品ID" v-model="search.goods_id"></el-input>
  15. </el-col>
  16. <el-col :span="6">
  17. <el-button type="primary" size="small" style="padding: 9px 15px !important;" @click="send('search')">搜索</el-button>
  18. <el-button type="danger" size="small" style="padding: 9px 15px !important;" @click="send('clearSearch')" v-if="search.goods_id != ''">清除条件</el-button>
  19. </el-col>
  20. </el-row>
  21. </el-form>
  22. <el-table :data="list" stripe v-loading="loading" size="small" style="margin: 15px; 0">
  23. <el-table-column label="商品ID" prop="goods_id" align="center"></el-table-column>
  24. <el-table-column align="left" label="商品信息" :show-overflow-tooltip="true">
  25. <template slot-scope="scope">
  26. <div class="table-info-img-text">
  27. <el-image class="table-info-img" :src="scope.row.goods.cover_pic">
  28. <div slot="error" class="image-slot">
  29. <com-image src="/resources/img/mall/default_img.png"></com-image>
  30. </div>
  31. </el-image>
  32. <div class="table-info-text">
  33. <div style="max-width:20px">{{ scope.row.goods.goods_name }}</div>
  34. <div>
  35. <span style="color: #ff2727">¥{{ scope.row.goods.price }}</span>
  36. <el-tag size="mini" type="info" v-if="scope.row.goods.is_on_sale == 0">已下架</el-tag>
  37. <el-tag size="mini" type="info" v-if="scope.row.goods.status < 1">已删除</el-tag>
  38. </div>
  39. </div>
  40. </div>
  41. </template>
  42. </el-table-column>
  43. <el-table-column label="兑换价" prop="exchange_price" align="center"></el-table-column>
  44. <el-table-column label="兑换数量" prop="exchange_num" align="center"></el-table-column>
  45. <el-table-column label="创建时间" align="center">
  46. <template slot-scope="scope">
  47. {{scope.row.created_at|dateTimeFormat('Y-m-d H:i:s')}}
  48. </template>
  49. </el-table-column>
  50. <el-table-column label="操作" width="300px" align="center">
  51. <template slot-scope="scope">
  52. <el-button type="text" @click="handle('edit', scope.row)">编辑</el-button>
  53. <el-button type="text" @click="handle('delete', scope.row, scope.$index)">删除</el-button>
  54. </template>
  55. </el-table-column>
  56. </el-table>
  57. <div style="text-align: right;margin: 20px 0;">
  58. <el-pagination background @current-change="pagination" layout="prev, pager, next" :page-count="pageCount"></el-pagination>
  59. </div>
  60. </div>
  61. </el-card>
  62. </div>
  63. <script>
  64. const app = new Vue({
  65. el: '#app',
  66. data: {
  67. search: {
  68. goods_id: null
  69. },
  70. loading: false,
  71. page: 1,
  72. pageCount: 0,
  73. list: []
  74. },
  75. mounted() {
  76. this.send('getData');
  77. },
  78. methods: {
  79. send(type) {
  80. switch (type) {
  81. case 'getData':
  82. this.loading = true;
  83. request({
  84. params: {
  85. r : 'purchase/goods/index',
  86. page: this.page,
  87. goods_id: this.search.goods_id
  88. },
  89. method: 'get'
  90. }).then(e=>{
  91. this.loading = false;
  92. if (e.data.code == 0) {
  93. this.list = e.data.data.list;
  94. this.pageCount = e.data.data.page_count;
  95. this.domain = e.data.data.domain;
  96. } else {
  97. this.$message.error(e.data.msg);
  98. }
  99. }).catch(e => {
  100. this.loading = false;
  101. this.$message.error(e.data.msg);
  102. });
  103. break;
  104. case 'search':
  105. this.page = 1;
  106. this.send('getData');
  107. break;
  108. case 'clearSearch':
  109. this.page = 1;
  110. this.search.goods_name = '';
  111. this.send('getData');
  112. break;
  113. }
  114. },
  115. async handle(type, param1 = null, param2 = null) {
  116. switch (type) {
  117. case 'edit':
  118. let info = {r: 'purchase/goods/edit',goods_id:param1.goods_id};
  119. navigateTo(info);
  120. break;
  121. case 'delete':
  122. this.$confirm('删除该商品, 是否继续?', '提示', {
  123. confirmButtonText: '确定',
  124. cancelButtonText: '取消',
  125. type: 'warning'
  126. }).then(() => {
  127. this.loading = true;
  128. request({
  129. params: {
  130. r: 'purchase/goods/delete',
  131. },
  132. method: 'post',
  133. data: {
  134. id: param1.id,
  135. }
  136. }).then(e => {
  137. this.loading = false;
  138. if (e.data.code === 0) {
  139. this.$message.success(e.data.msg);
  140. this.list.splice(param2, 1);
  141. } else {
  142. this.$message.error(e.data.msg);
  143. }
  144. }).catch(e => {
  145. this.loading = false;
  146. this.$message.error(e.data.msg);
  147. });
  148. }).catch(() => {
  149. this.$message.info('已取消删除')
  150. });
  151. break;
  152. case 'add':
  153. let params = {r: 'purchase/goods/edit'}
  154. navigateTo(params);
  155. break;
  156. case 'add_more':
  157. let param = {r: 'purchase/goods/edit-more'}
  158. navigateTo(param);
  159. break;
  160. }
  161. },
  162. pagination(currentPage) {
  163. let self = this;
  164. self.page = currentPage;
  165. this.send('getData');
  166. }
  167. }
  168. })
  169. </script>