index copy.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. <template>
  2. <div class="app-container">
  3. <el-container>
  4. <el-main>
  5. <div class="filter-container">
  6. <el-input
  7. :placeholder="$t('label.promotionName')"
  8. style="width: 200px;"
  9. clearable
  10. class="filter-item"
  11. v-model="listQuery.promotionName"
  12. @keyup.enter.native="retPage"
  13. />
  14. <el-input
  15. :placeholder="$t('label.minimumPurchaseRequirement')"
  16. style="width: 200px;"
  17. clearable
  18. class="filter-item"
  19. v-model="listQuery.minimumPurchaseRequirement"
  20. @keyup.enter.native="retPage"
  21. />
  22. <el-select
  23. v-model="listQuery.applicationMethod"
  24. clearable
  25. class="filter-item"
  26. style="width: 200px;"
  27. :placeholder="$t('label.applicationMethod')"
  28. @keyup.enter.native="retPage"
  29. >
  30. <el-option
  31. :key="index"
  32. v-for="(item, index) in storeList"
  33. :label="item.storeName"
  34. :value="item.storeId"
  35. />
  36. </el-select>
  37. <el-button
  38. v-waves
  39. v-has="'promotion:list'"
  40. class="filter-item"
  41. type="primary"
  42. icon="el-icon-search"
  43. @click="retPage"
  44. >{{ $t("view.search") }}
  45. </el-button>
  46. </div>
  47. <el-table
  48. v-loading="listLoading"
  49. :key="tableKey"
  50. :data="list"
  51. stripe
  52. border
  53. fit
  54. highlight-current-row
  55. style="width: 100%;"
  56. >
  57. <el-table-column type="index" width="40"></el-table-column>
  58. <el-table-column
  59. :label="$t('label.promotionEventName')"
  60. width="220"
  61. show-overflow-tooltip
  62. >
  63. <template v-slot="{ row }">
  64. <span>{{ row.promotionName }}</span>
  65. </template>
  66. </el-table-column>
  67. <el-table-column
  68. :label="$t('label.promotionId')"
  69. align="center"
  70. width="220"
  71. show-overflow-tooltip
  72. >
  73. <template v-slot="{ row }">
  74. <span>{{ row.promotionInfo }}</span>
  75. </template>
  76. </el-table-column>
  77. <el-table-column
  78. :label="$t('label.participateType')"
  79. align="center"
  80. width="220"
  81. >
  82. <template v-slot="{ row }">
  83. <span>{{
  84. $t("label.participateTypeArr").find(
  85. item => item.value === row.participateType
  86. )
  87. ? $t("label.participateTypeArr").find(
  88. item => item.value === row.participateType
  89. ).label
  90. : ""
  91. }}</span>
  92. </template>
  93. </el-table-column>
  94. <el-table-column
  95. :label="$t('label.promotionLevel')"
  96. align="center"
  97. width="220"
  98. >
  99. <template v-slot="{ row }">
  100. <span>{{ row.promotionStartTime }}</span>
  101. </template>
  102. </el-table-column>
  103. <el-table-column
  104. :label="$t('label.applicationMethod')"
  105. align="center"
  106. width="220"
  107. >
  108. <template v-slot="{ row }">
  109. <span>{{ row.participateNum }}</span>
  110. </template>
  111. </el-table-column>
  112. <el-table-column
  113. :label="$t('label.minimumPurchaseRequirement')"
  114. align="center"
  115. width="160"
  116. >
  117. <template v-slot="{ row }">
  118. <span>{{ row.participateWeight }}</span>
  119. </template>
  120. </el-table-column>
  121. <el-table-column
  122. :label="$t('label.discountValue')"
  123. align="center"
  124. width="220"
  125. >
  126. <template v-slot="{ row }">
  127. <span>{{
  128. $t("label.conditionTypeArr").find(
  129. item => item.value === row.conditionType
  130. )
  131. ? $t("label.conditionTypeArr").find(
  132. item => item.value === row.conditionType
  133. ).label
  134. : ""
  135. }}</span>
  136. </template>
  137. </el-table-column>
  138. <el-table-column
  139. :label="$t('label.priority')"
  140. align="center"
  141. width="120"
  142. >
  143. <template v-slot="{ row }">
  144. <span>{{ row.participateWeight }}</span>
  145. </template>
  146. </el-table-column>
  147. <el-table-column
  148. :label="$t('label.stackableType')"
  149. align="center"
  150. width="150"
  151. >
  152. <template v-slot="{ row }">
  153. <span>{{ row.participateWeight }}</span>
  154. </template>
  155. </el-table-column>
  156. <el-table-column
  157. :label="$t('label.promotionStartTime')"
  158. align="center"
  159. width="220"
  160. >
  161. <template v-slot="{ row }">
  162. <span>{{ row.promotionStartTime }}</span>
  163. </template>
  164. </el-table-column>
  165. <el-table-column
  166. :label="$t('label.promotionEndTime')"
  167. align="center"
  168. width="220"
  169. >
  170. <template v-slot="{ row }">
  171. <span>{{ row.promotionEndTime }}</span>
  172. </template>
  173. </el-table-column>
  174. <el-table-column
  175. :label="$t('label.version')"
  176. align="center"
  177. width="120"
  178. >
  179. <template v-slot="{ row }">
  180. <span>{{ row.participateWeight }}</span>
  181. </template>
  182. </el-table-column>
  183. <el-table-column
  184. :label="$t('label.operation')"
  185. min-width="180"
  186. align="center"
  187. fixed="right"
  188. >
  189. <template v-slot="{ row }">
  190. <!-- <el-tooltip
  191. class="item"
  192. effect="dark"
  193. :content="$t('view.edit')"
  194. placement="top-start"
  195. >
  196. <el-button
  197. v-has="'promotion:update'"
  198. type="primary"
  199. size="mini"
  200. icon="el-icon-edit"
  201. circle
  202. @click="showDialog(row.id, false)"
  203. >
  204. </el-button>
  205. </el-tooltip> -->
  206. <el-tooltip
  207. class="item"
  208. effect="dark"
  209. :content="$t('view.details')"
  210. placement="top-start"
  211. >
  212. <el-button
  213. v-has="'promotion:list'"
  214. type="primary"
  215. size="mini"
  216. icon="el-icon-more"
  217. circle
  218. @click="showDialog(row.id, true)"
  219. >
  220. </el-button>
  221. </el-tooltip>
  222. <el-tooltip
  223. class="item"
  224. effect="dark"
  225. :content="$t('view.delete')"
  226. placement="top-start"
  227. >
  228. <el-button
  229. v-has="'promotion:delete'"
  230. type="danger"
  231. circle
  232. size="mini"
  233. icon="el-icon-delete"
  234. @click="handleDelete(row.id)"
  235. >
  236. </el-button>
  237. </el-tooltip>
  238. <el-tooltip
  239. class="item"
  240. effect="dark"
  241. :content="$t('label.version')"
  242. placement="top-start"
  243. >
  244. <el-button
  245. v-has="'promotion:status'"
  246. type="primary"
  247. circle
  248. size="mini"
  249. icon="el-icon-notebook-1"
  250. @click="handleLog(row.id)"
  251. >
  252. </el-button>
  253. </el-tooltip>
  254. <!-- <el-tooltip
  255. class="item"
  256. effect="dark"
  257. :content="$t('title.operationLog')"
  258. placement="top-start"
  259. >
  260. <el-button
  261. v-has="'promotionLog:list'"
  262. type="primary"
  263. circle
  264. size="mini"
  265. icon="el-icon-notebook-1"
  266. @click="handleLog(row.id)"
  267. >
  268. </el-button>
  269. </el-tooltip> -->
  270. </template>
  271. </el-table-column>
  272. </el-table>
  273. <!-- 分页 -->
  274. <swPage
  275. v-if="total > 0"
  276. key="2"
  277. :listQuery="listQuery"
  278. :total="total"
  279. pos="btmRight"
  280. @retPage="getList"
  281. />
  282. </el-main>
  283. </el-container>
  284. <promotion-form ref="promotionFormRef" @refresh-table="getList" />
  285. <promotion-log-list ref="logListRef" @show="id => showDialog(id, true)" />
  286. </div>
  287. </template>
  288. <script>
  289. import waves from "@/directive/waves"; // 水波纹指令
  290. import SwPage from "@/views/common/swPage.vue";
  291. import ElContainer from "element-ui/packages/container/src/main";
  292. import PromotionForm from "@/views/oms/promotion/amountOffProducts/promotionForm.vue";
  293. import PromotionLogList from "@/views/oms/promotion/amountOffProducts/promotionLogList.vue";
  294. import {
  295. fetchList,
  296. deleteById,
  297. storeList,
  298. checkPromotion,
  299. changeStatus
  300. } from "@/api/oms/order/promotion";
  301. import { getToken } from "@/utils/auth";
  302. export default {
  303. inject: ["reload"], //刷新
  304. components: {
  305. SwPage,
  306. ElContainer,
  307. PromotionForm,
  308. PromotionLogList
  309. },
  310. name: "multiBuyDiscount",
  311. directives: {
  312. waves
  313. },
  314. data() {
  315. return {
  316. activeName: "productIndex",
  317. iconSize: "mini",
  318. //右侧列表
  319. tableKey: 0,
  320. list: null,
  321. total: null,
  322. listLoading: false,
  323. listQuery: {
  324. applicationMethod: null,
  325. promotionName: null,
  326. minimumPurchaseRequirement: null,
  327. page: 1,
  328. limit: 10
  329. },
  330. storeList: []
  331. };
  332. },
  333. created() {
  334. this.getList();
  335. this.getStoreList();
  336. },
  337. computed: {
  338. headers: function() {
  339. return { "X-Token": getToken() };
  340. }
  341. },
  342. methods: {
  343. getStoreList() {
  344. storeList().then(res => {
  345. if (res.code === 200) {
  346. this.storeList = res.data;
  347. }
  348. });
  349. },
  350. getList() {
  351. this.listLoading = true;
  352. fetchList(this.listQuery)
  353. .then(response => {
  354. if (response.code === 200) {
  355. this.list = response.data.list;
  356. this.total = response.data.total;
  357. setTimeout(() => {
  358. this.listLoading = false;
  359. }, 0.5 * 1000);
  360. }
  361. })
  362. .catch(() => {
  363. setTimeout(() => {
  364. this.listLoading = false;
  365. }, 0.5 * 1000);
  366. });
  367. },
  368. retPage() {
  369. this.listQuery.page = 1;
  370. this.getList();
  371. },
  372. handleDelete(id) {
  373. this.$confirm("是否删除该记录?", "提示", {
  374. confirmButtonText: "确定",
  375. cancelButtonText: "取消",
  376. type: "warning"
  377. }).then(() => {
  378. deleteById(id).then(res => {
  379. if (res.code === 200) {
  380. this.$message({
  381. message: "操作成功",
  382. type: "success"
  383. });
  384. this.getList();
  385. }
  386. });
  387. });
  388. },
  389. showDialog(id, edit) {
  390. this.$refs.promotionFormRef.showDialog(id, edit);
  391. },
  392. handleDetail(id) {
  393. console.log(id, "detail");
  394. },
  395. // changePromotionStatus(id, status) {
  396. // this.$confirm(status ? "是否确认禁用?" : "是否确认启用?", "提示", {
  397. // confirmButtonText: "确定",
  398. // cancelButtonText: "取消",
  399. // type: "warning"
  400. // }).then(() => {
  401. // changeStatus(id).then(res => {
  402. // if (res.code === 200) {
  403. // this.$message({
  404. // message: "操作成功",
  405. // type: "success"
  406. // });
  407. // this.getList();
  408. // }
  409. // });
  410. // });
  411. // },
  412. handleLog(id) {
  413. this.$refs.logListRef.handleOpen(id);
  414. }
  415. }
  416. };
  417. </script>
  418. <style scoped></style>