index.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import { useActivity } 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 EditPen from "~icons/ep/edit-pen";
  8. import Refresh from "~icons/ep/refresh";
  9. import AddFill from "~icons/ri/add-circle-line";
  10. import VideoPlay from "~icons/ep/video-play";
  11. import VideoPause from "~icons/ep/video-pause";
  12. defineOptions({
  13. name: "MarketingActivity"
  14. });
  15. const formRef = ref();
  16. const tableRef = ref();
  17. const {
  18. form,
  19. loading,
  20. columns,
  21. dataList,
  22. pagination,
  23. onSearch,
  24. resetForm,
  25. handleAdd,
  26. handleEdit,
  27. handleViewDetail,
  28. handleDelete,
  29. handlePublish,
  30. handlePause,
  31. handleResume,
  32. handleSizeChange,
  33. handleCurrentChange
  34. } = useActivity();
  35. </script>
  36. <template>
  37. <div class="main">
  38. <el-form
  39. ref="formRef"
  40. :inline="true"
  41. :model="form"
  42. class="search-form bg-bg_color w-full pl-8 pt-[12px] overflow-auto"
  43. >
  44. <el-form-item label="活动名称:" prop="name">
  45. <el-input
  46. v-model="form.name"
  47. placeholder="请输入活动名称"
  48. clearable
  49. class="w-[180px]!"
  50. />
  51. </el-form-item>
  52. <el-form-item label="活动类型:" prop="type">
  53. <el-select
  54. v-model="form.type"
  55. placeholder="请选择"
  56. clearable
  57. class="w-[180px]!"
  58. >
  59. <el-option label="折扣活动" :value="1" />
  60. <el-option label="满减活动" :value="2" />
  61. <el-option label="赠品活动" :value="3" />
  62. <el-option label="秒杀活动" :value="4" />
  63. </el-select>
  64. </el-form-item>
  65. <el-form-item label="状态:" prop="status">
  66. <el-select
  67. v-model="form.status"
  68. placeholder="请选择"
  69. clearable
  70. class="w-[180px]!"
  71. >
  72. <el-option label="草稿" :value="0" />
  73. <el-option label="进行中" :value="1" />
  74. <el-option label="已暂停" :value="2" />
  75. <el-option label="已结束" :value="3" />
  76. </el-select>
  77. </el-form-item>
  78. <el-form-item>
  79. <el-button
  80. type="primary"
  81. :icon="useRenderIcon('ri/search-line')"
  82. :loading="loading"
  83. @click="onSearch"
  84. >
  85. 搜索
  86. </el-button>
  87. <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">
  88. 重置
  89. </el-button>
  90. </el-form-item>
  91. </el-form>
  92. <PureTableBar
  93. title="活动管理"
  94. :columns="columns"
  95. @refresh="onSearch"
  96. >
  97. <template #buttons>
  98. <el-button
  99. type="primary"
  100. :icon="useRenderIcon(AddFill)"
  101. @click="handleAdd"
  102. >
  103. 新增活动
  104. </el-button>
  105. </template>
  106. <template v-slot="{ size, dynamicColumns }">
  107. <pure-table
  108. ref="tableRef"
  109. align-whole="center"
  110. showOverflowTooltip
  111. table-layout="auto"
  112. :loading="loading"
  113. :size="size"
  114. adaptive
  115. :adaptiveConfig="{ offsetBottom: 108 }"
  116. :data="dataList"
  117. :columns="dynamicColumns"
  118. :pagination="{ ...pagination, size }"
  119. :header-cell-style="{
  120. background: 'var(--el-fill-color-light)',
  121. color: 'var(--el-text-color-primary)'
  122. }"
  123. @page-size-change="handleSizeChange"
  124. @page-current-change="handleCurrentChange"
  125. >
  126. <template #operation="{ row }">
  127. <el-button
  128. class="reset-margin"
  129. link
  130. type="primary"
  131. :size="size"
  132. :icon="useRenderIcon('ri:eye-line')"
  133. @click="handleViewDetail(row)"
  134. >
  135. 查看
  136. </el-button>
  137. <el-button
  138. v-if="row.status === 0"
  139. class="reset-margin"
  140. link
  141. type="success"
  142. :size="size"
  143. :icon="useRenderIcon(VideoPlay)"
  144. @click="handlePublish(row)"
  145. >
  146. 发布
  147. </el-button>
  148. <el-button
  149. v-if="row.status === 1"
  150. class="reset-margin"
  151. link
  152. type="warning"
  153. :size="size"
  154. :icon="useRenderIcon(VideoPause)"
  155. @click="handlePause(row)"
  156. >
  157. 暂停
  158. </el-button>
  159. <el-button
  160. v-if="row.status === 2"
  161. class="reset-margin"
  162. link
  163. type="success"
  164. :size="size"
  165. :icon="useRenderIcon(VideoPlay)"
  166. @click="handleResume(row)"
  167. >
  168. 恢复
  169. </el-button>
  170. <el-button
  171. class="reset-margin"
  172. link
  173. type="primary"
  174. :size="size"
  175. :icon="useRenderIcon(EditPen)"
  176. @click="handleEdit(row)"
  177. >
  178. 编辑
  179. </el-button>
  180. <el-popconfirm
  181. title="是否确认删除?"
  182. @confirm="handleDelete(row)"
  183. >
  184. <template #reference>
  185. <el-button
  186. class="reset-margin"
  187. link
  188. type="danger"
  189. :size="size"
  190. :icon="useRenderIcon(Delete)"
  191. >
  192. 删除
  193. </el-button>
  194. </template>
  195. </el-popconfirm>
  196. </template>
  197. </pure-table>
  198. </template>
  199. </PureTableBar>
  200. </div>
  201. </template>
  202. <style lang="scss" scoped>
  203. .main-content {
  204. margin: 24px 24px 0 !important;
  205. }
  206. .search-form {
  207. :deep(.el-form-item) {
  208. margin-bottom: 12px;
  209. }
  210. }
  211. </style>