GoodsAddForm.vue 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. <template>
  2. <div>
  3. <el-dialog
  4. title="添加实物奖品"
  5. width="1000px"
  6. :visible.sync="dialogVisible"
  7. :before-close="close"
  8. >
  9. <div class="dialog-search">
  10. <div style="margin:0 0 10px 20px">商品名称:</div>
  11. <el-input
  12. v-model="goodsTitle"
  13. placeholder="请输入商品名称"
  14. clearable
  15. size="small"
  16. style="width: 220px" @clear="pageParams.pageNum = 1;getGoodsList()"
  17. @keyup.enter.native="pageParams.pageNum = 1;getGoodsList()"
  18. />
  19. <div style="margin-left: 20px">商品价格:</div>
  20. <el-input type="number" style="width: 220px" v-model="queryParams.minValue" @clear="pageParams.pageNum = 1;getGoodsList()"
  21. placeholder="最低价格" clearable @keyup.enter.native="pageParams.pageNum = 1;getGoodsList()"/>
  22. <div style="width: 20px;text-align: center">-</div>
  23. <el-input type="number" style="width: 220px" v-model="queryParams.maxValue" @clear="pageParams.pageNum = 1;getGoodsList()"
  24. placeholder="最高价格" clearable @keyup.enter.native="pageParams.pageNum = 1;getGoodsList()"/>
  25. <br>
  26. <div style="margin:0 0 10px 20px">盲豆兑换数量:</div>
  27. <el-input type="number" style="width: 220px" v-model="queryParams.minExchange" @clear="pageParams.pageNum = 1;getGoodsList()"
  28. placeholder="最低盲豆数量" clearable @keyup.enter.native="pageParams.pageNum = 1;getGoodsList()"/>
  29. <div style="width: 20px;text-align: center">-</div>
  30. <el-input type="number" style="width: 220px" v-model="queryParams.maxExchange" @clear="pageParams.pageNum = 1;getGoodsList()"
  31. placeholder="最高盲豆数量" clearable @keyup.enter.native="pageParams.pageNum = 1;getGoodsList()"/>
  32. <br>
  33. <div style="margin:0 0 10px 20px">商品成本:</div>
  34. <el-input type="number" style="width: 220px" v-model="queryParams.minCost" @clear="pageParams.pageNum = 1;getGoodsList()"
  35. placeholder="最低成本" clearable @keyup.enter.native="pageParams.pageNum = 1;getGoodsList()"/>
  36. <div style="width: 20px;text-align: center">-</div>
  37. <el-input type="number" style="width: 220px" v-model="queryParams.maxCost" @clear="pageParams.pageNum = 1;getGoodsList()"
  38. placeholder="最高成本" clearable @keyup.enter.native="pageParams.pageNum = 1;getGoodsList()"/>
  39. <div class="ge"></div>
  40. <el-button
  41. type="primary"
  42. icon="el-icon-search"
  43. size="mini"
  44. @click="pageParams.pageNum = 1;getGoodsList()"
  45. >查询
  46. </el-button
  47. >
  48. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery()">重置</el-button>
  49. </div>
  50. <el-table
  51. v-loading="loading"
  52. :data="goodsList"
  53. row-key="goodsId"
  54. @selection-change="handleSelectionGoods"
  55. class="el-table"
  56. >
  57. <el-table-column
  58. type="selection"
  59. width="55"
  60. align="center"
  61. fixed="left"
  62. :reserve-selection="true"
  63. />
  64. <el-table-column label="商品ID" prop="goodsId"/>
  65. <el-table-column label="商品图片">
  66. <template slot-scope="{ row }">
  67. <div v-if="row.picUrl">
  68. <el-image
  69. style="width: 100px; height: 100px"
  70. :src="row.picUrl.split(',')[0]"
  71. :preview-src-list="row.picUrl.split(',')"
  72. >
  73. </el-image>
  74. </div>
  75. <p v-else>-</p>
  76. </template>
  77. </el-table-column>
  78. <el-table-column label="商品名称" prop="title" min-width="85"/>
  79. <el-table-column label="商品价格" min-width="85">
  80. <template slot-scope="scope">
  81. <div>¥{{ $numberFormat(scope.row.value) }}</div>
  82. </template>
  83. </el-table-column>
  84. <el-table-column label="盲豆兑换数量" prop="exchangePrice" min-width="85"/>
  85. <el-table-column label="商品成本" min-width="85">
  86. <template slot-scope="scope">
  87. <div>¥{{ $numberFormat(scope.row.cost) }}</div>
  88. </template>
  89. </el-table-column>
  90. <el-table-column label="是否支持兑换" prop="exchangeShow" min-width="85">
  91. <template slot-scope="scope">
  92. <div>{{scope.row.exchangeShow == 1 ? '支持兑换':'不支持兑换' }}</div>
  93. </template>
  94. </el-table-column>
  95. <el-table-column label="商品库存" prop="quantity" width="80"/>
  96. </el-table>
  97. <div style="width: 700px;"></div>
  98. <pagination
  99. v-show="goodsTotal > 0"
  100. :total="goodsTotal"
  101. :page.sync="pageParams.pageNum"
  102. :limit.sync="pageParams.pageSize"
  103. @pagination="getGoodsList"
  104. />
  105. <div class="dialog-btn">
  106. <div style="width: 20px;"></div>
  107. <el-button size="small" @click="close"> 取 消</el-button>
  108. <div style="width: 20px;"></div>
  109. <el-button type="primary" size="small" @click="confirmGoods">
  110. 确 认
  111. </el-button>
  112. </div>
  113. </el-dialog>
  114. </div>
  115. </template>
  116. <script>
  117. import {publicFileGetUrl} from "@/api/common";
  118. import {getGoodsList} from "@/api/business/goods";
  119. import {accMul} from '@/utils/util'
  120. import log from "../../../monitor/job/log";
  121. export default {
  122. name: "GoodsAddForm",
  123. props: {
  124. dialogVisible: {
  125. type: Boolean,
  126. default: false,
  127. },
  128. },
  129. data() {
  130. return {
  131. loading: false,
  132. goodsTitle: "", // 商品名称
  133. queryParams: {},
  134. goodsList: [], // 商品列表
  135. goodsTotal: 0, // 商品总数
  136. selectGoodsList: [], // 选中商品
  137. pageParams: {
  138. pageNum: 1,
  139. pageSize: 10,
  140. },
  141. };
  142. },
  143. created() {
  144. this.getGoodsList();
  145. },
  146. methods: {
  147. // 商品列表
  148. getGoodsList() {
  149. this.loading = true;
  150. getGoodsList(
  151. "pageNum=" + this.pageParams.pageNum + "&pageSize=" + this.pageParams.pageSize + "&", {
  152. title: this.goodsTitle,
  153. status: "on",
  154. exchangeShow: 2,
  155. minValue: this.queryParams.minValue ? accMul(this.queryParams.minValue, 100) : this.queryParams.minValue,
  156. maxValue: this.queryParams.maxValue ? accMul(this.queryParams.maxValue, 100) : this.queryParams.maxValue,
  157. minExchange:this.queryParams.minExchange,
  158. maxExchange:this.queryParams.maxExchange,
  159. minCost: this.queryParams.minCost ? accMul(this.queryParams.minCost, 100) : this.queryParams.minCost,
  160. maxCost: this.queryParams.maxCost ? accMul(this.queryParams.maxCost, 100) : this.queryParams.maxCost,
  161. }
  162. ).then((res) => {
  163. this.goodsList = res.rows.map((item) => {
  164. return {
  165. ...item,
  166. picUrl: publicFileGetUrl + item.picUrl.split(",")[0],
  167. };
  168. });
  169. this.goodsTotal = res.total;
  170. this.loading = false;
  171. });
  172. },
  173. //重置
  174. resetQuery(){
  175. this.goodsTitle = ''
  176. this.queryParams = {}
  177. this.pageParams.pageNum = 1
  178. this.getGoodsList();
  179. },
  180. // 选中商品
  181. handleSelectionGoods(e) {
  182. this.selectGoodsList = e.map((item) => {
  183. return {
  184. prizeType: "goods",
  185. refId: item.goodsId,
  186. picUrl: item.picUrl,
  187. title: item.title,
  188. value: item.value,
  189. cost: item.cost
  190. };
  191. });
  192. },
  193. // 确认选中商品
  194. confirmGoods() {
  195. if(!this.selectGoodsList.length) {
  196. this.msgInfo('请选择商品')
  197. return
  198. }
  199. if(this.selectGoodsList.length > 1) {
  200. this.msgInfo('只能选择一个商品')
  201. return
  202. }
  203. this.$emit("confirmGoodsForm", this.selectGoodsList);
  204. },
  205. close() {
  206. this.$emit("close");
  207. },
  208. },
  209. };
  210. </script>
  211. <style lang="scss" scoped>
  212. div {
  213. display: inline-block;
  214. }
  215. .dialog-search {
  216. //display: flex;
  217. line-height: 32px;
  218. margin-bottom: 20px;
  219. .ge {
  220. width: 20px;
  221. }
  222. }
  223. </style>