index.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import { useCoupon } from "./utils/hook";
  4. import { PureTableBar } from "@/components/RePureTableBar";
  5. import { useRenderIcon } from "@/components/ReIcon/src/hooks";
  6. import Delete from "~icons/ep/delete";
  7. import Refresh from "~icons/ep/refresh";
  8. import AddFill from "~icons/ri/add-circle-line";
  9. import Switch from "~icons/ep/switch";
  10. defineOptions({
  11. name: "MarketingCoupon"
  12. });
  13. const formRef = ref();
  14. const tableRef = ref();
  15. const {
  16. form,
  17. loading,
  18. columns,
  19. dataList,
  20. pagination,
  21. onSearch,
  22. resetForm,
  23. handleAdd,
  24. handleDelete,
  25. handleToggleStatus,
  26. handleDistribute,
  27. handleViewRecords,
  28. handleSizeChange,
  29. handleCurrentChange
  30. } = useCoupon();
  31. </script>
  32. <template>
  33. <div class="main">
  34. <el-form
  35. ref="formRef"
  36. :inline="true"
  37. :model="form"
  38. class="search-form bg-bg_color w-full pl-8 pt-[12px] overflow-auto"
  39. >
  40. <el-form-item label="优惠券名称:" prop="name">
  41. <el-input
  42. v-model="form.name"
  43. placeholder="请输入优惠券名称"
  44. clearable
  45. class="w-[180px]!"
  46. />
  47. </el-form-item>
  48. <el-form-item label="类型:" prop="type">
  49. <el-select
  50. v-model="form.type"
  51. placeholder="请选择"
  52. clearable
  53. class="w-[180px]!"
  54. >
  55. <el-option label="满减券" :value="1" />
  56. <el-option label="折扣券" :value="2" />
  57. <el-option label="立减券" :value="3" />
  58. <el-option label="商品券" :value="4" />
  59. </el-select>
  60. </el-form-item>
  61. <el-form-item label="发放类型:" prop="receiveType">
  62. <el-select
  63. v-model="form.receiveType"
  64. placeholder="请选择"
  65. clearable
  66. class="w-[180px]!"
  67. >
  68. <el-option label="主动领取" value="Collect" />
  69. <el-option label="系统发放" value="Release" />
  70. </el-select>
  71. </el-form-item>
  72. <el-form-item label="状态:" prop="status">
  73. <el-select
  74. v-model="form.status"
  75. placeholder="请选择"
  76. clearable
  77. class="w-[180px]!"
  78. >
  79. <el-option label="未启用" :value="0" />
  80. <el-option label="已启用" :value="1" />
  81. <el-option label="已过期" :value="2" />
  82. </el-select>
  83. </el-form-item>
  84. <el-form-item>
  85. <el-button
  86. type="primary"
  87. :icon="useRenderIcon('ri/search-line')"
  88. :loading="loading"
  89. @click="onSearch"
  90. >
  91. 搜索
  92. </el-button>
  93. <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">
  94. 重置
  95. </el-button>
  96. </el-form-item>
  97. </el-form>
  98. <PureTableBar
  99. title="优惠券管理"
  100. :columns="columns"
  101. @refresh="onSearch"
  102. >
  103. <template #buttons>
  104. <el-button
  105. type="primary"
  106. :icon="useRenderIcon(AddFill)"
  107. @click="handleAdd"
  108. >
  109. 新增优惠券
  110. </el-button>
  111. </template>
  112. <template v-slot="{ size, dynamicColumns }">
  113. <pure-table
  114. ref="tableRef"
  115. align-whole="center"
  116. showOverflowTooltip
  117. table-layout="auto"
  118. :loading="loading"
  119. :size="size"
  120. adaptive
  121. :adaptiveConfig="{ offsetBottom: 108 }"
  122. :data="dataList"
  123. :columns="dynamicColumns"
  124. :pagination="{ ...pagination, size }"
  125. :header-cell-style="{
  126. background: 'var(--el-fill-color-light)',
  127. color: 'var(--el-text-color-primary)'
  128. }"
  129. @page-size-change="handleSizeChange"
  130. @page-current-change="handleCurrentChange"
  131. >
  132. <template #operation="{ row }">
  133. <el-button
  134. class="reset-margin"
  135. link
  136. type="primary"
  137. :size="size"
  138. :icon="useRenderIcon(Switch)"
  139. @click="handleToggleStatus(row)"
  140. >
  141. {{ row.status === 1 ? '停用' : '启用' }}
  142. </el-button>
  143. <el-button
  144. v-if="row.receiveType === 'Release'"
  145. class="reset-margin"
  146. link
  147. type="success"
  148. :size="size"
  149. :icon="useRenderIcon('ri:send-plane-line')"
  150. @click="handleDistribute(row)"
  151. >
  152. 发放
  153. </el-button>
  154. <el-button
  155. class="reset-margin"
  156. link
  157. type="info"
  158. :size="size"
  159. :icon="useRenderIcon('ri:file-list-line')"
  160. @click="handleViewRecords(row)"
  161. >
  162. 记录
  163. </el-button>
  164. <el-popconfirm
  165. title="是否确认删除?"
  166. @confirm="handleDelete(row)"
  167. >
  168. <template #reference>
  169. <el-button
  170. class="reset-margin"
  171. link
  172. type="danger"
  173. :size="size"
  174. :icon="useRenderIcon(Delete)"
  175. >
  176. 删除
  177. </el-button>
  178. </template>
  179. </el-popconfirm>
  180. </template>
  181. </pure-table>
  182. </template>
  183. </PureTableBar>
  184. </div>
  185. </template>
  186. <style lang="scss" scoped>
  187. .main-content {
  188. margin: 24px 24px 0 !important;
  189. }
  190. .search-form {
  191. :deep(.el-form-item) {
  192. margin-bottom: 12px;
  193. }
  194. }
  195. </style>