index.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import { useShop } 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 Link from "~icons/ep/link";
  11. import User from "~icons/ep/user";
  12. import Lock from "~icons/ep/lock";
  13. import Unlock from "~icons/ep/unlock";
  14. defineOptions({
  15. name: "ShopManage"
  16. });
  17. const formRef = ref();
  18. const tableRef = ref();
  19. const {
  20. form,
  21. loading,
  22. columns,
  23. dataList,
  24. pagination,
  25. onSearch,
  26. resetForm,
  27. openDialog,
  28. handleDelete,
  29. handleToggleStatus,
  30. handleDevices,
  31. handleReplenishers,
  32. handleSizeChange,
  33. handleCurrentChange
  34. } = useShop(tableRef);
  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="city">
  53. <el-input
  54. v-model="form.city"
  55. placeholder="请输入城市"
  56. clearable
  57. class="w-[180px]!"
  58. />
  59. </el-form-item>
  60. <el-form-item label="状态:" prop="status">
  61. <el-select
  62. v-model="form.status"
  63. placeholder="请选择状态"
  64. clearable
  65. class="w-[180px]!"
  66. >
  67. <el-option label="营业中" :value="1" />
  68. <el-option label="已停业" :value="0" />
  69. </el-select>
  70. </el-form-item>
  71. <el-form-item>
  72. <el-button
  73. type="primary"
  74. :icon="useRenderIcon('ri/search-line')"
  75. :loading="loading"
  76. @click="onSearch"
  77. >
  78. 搜索
  79. </el-button>
  80. <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">
  81. 重置
  82. </el-button>
  83. </el-form-item>
  84. </el-form>
  85. <PureTableBar
  86. title="门店管理"
  87. :columns="columns"
  88. @refresh="onSearch"
  89. >
  90. <template #buttons>
  91. <el-button
  92. type="primary"
  93. :icon="useRenderIcon(AddFill)"
  94. @click="openDialog()"
  95. >
  96. 新增门店
  97. </el-button>
  98. </template>
  99. <template v-slot="{ size, dynamicColumns }">
  100. <pure-table
  101. ref="tableRef"
  102. row-key="id"
  103. adaptive
  104. :adaptiveConfig="{ offsetBottom: 108 }"
  105. align-whole="center"
  106. table-layout="auto"
  107. :loading="loading"
  108. :size="size"
  109. :data="dataList"
  110. :columns="dynamicColumns"
  111. :pagination="{ ...pagination, size }"
  112. :header-cell-style="{
  113. background: 'var(--el-fill-color-light)',
  114. color: 'var(--el-text-color-primary)'
  115. }"
  116. @page-size-change="handleSizeChange"
  117. @page-current-change="handleCurrentChange"
  118. >
  119. <template #operation="{ row }">
  120. <div style="display:flex;flex-direction:column;align-items:center;gap:2px">
  121. <div style="display:flex;align-items:center;justify-content:center;gap:2px">
  122. <el-button
  123. class="reset-margin"
  124. link
  125. type="primary"
  126. :size="size"
  127. :icon="useRenderIcon(EditPen)"
  128. @click="openDialog('修改', row)"
  129. >
  130. 编辑
  131. </el-button>
  132. <el-button
  133. class="reset-margin"
  134. link
  135. type="primary"
  136. :size="size"
  137. :icon="useRenderIcon(Link)"
  138. @click="handleDevices(row)"
  139. >
  140. 设备
  141. </el-button>
  142. </div>
  143. <div style="display:flex;align-items:center;gap:2px">
  144. <el-button
  145. class="reset-margin"
  146. link
  147. :type="row.status === 1 ? 'danger' : 'success'"
  148. :size="size"
  149. :icon="useRenderIcon(row.status === 1 ? Lock : Unlock)"
  150. @click="handleToggleStatus(row)"
  151. >
  152. {{ row.status === 1 ? "停业" : "营业" }}
  153. </el-button>
  154. <el-popconfirm
  155. :title="`是否确认删除门店 ${row.name}?`"
  156. @confirm="handleDelete(row)"
  157. >
  158. <template #reference>
  159. <el-button
  160. class="reset-margin"
  161. link
  162. type="danger"
  163. :size="size"
  164. :icon="useRenderIcon(Delete)"
  165. >
  166. 删除
  167. </el-button>
  168. </template>
  169. </el-popconfirm>
  170. </div>
  171. </div>
  172. </template>
  173. </pure-table>
  174. </template>
  175. </PureTableBar>
  176. </div>
  177. </template>
  178. <style lang="scss" scoped>
  179. .main-content {
  180. margin: 24px 24px 0 !important;
  181. }
  182. .search-form {
  183. :deep(.el-form-item) {
  184. margin-bottom: 12px;
  185. }
  186. }
  187. </style>