index.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. import { useProduct } from "./utils/hook";
  4. import { PureTableBar } from "@/components/RePureTableBar";
  5. import { useRenderIcon } from "@/components/ReIcon/src/hooks";
  6. import Refresh from "~icons/ep/refresh";
  7. import Delete from "~icons/ep/delete";
  8. import EditPen from "~icons/ep/edit-pen";
  9. import AddFill from "~icons/ri/add-circle-line";
  10. import Sync from "~icons/ep/refresh";
  11. defineOptions({
  12. name: "ProductManage"
  13. });
  14. const formRef = ref();
  15. const tableRef = ref();
  16. const {
  17. form,
  18. loading,
  19. columns,
  20. dataList,
  21. pagination,
  22. categoryOptions,
  23. onSearch,
  24. resetForm,
  25. openDialog,
  26. handleDelete,
  27. handleSync,
  28. handleSizeChange,
  29. handleCurrentChange
  30. } = useProduct(tableRef);
  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="barcode">
  49. <el-input
  50. v-model="form.barcode"
  51. placeholder="请输入条码"
  52. clearable
  53. class="w-[180px]!"
  54. />
  55. </el-form-item>
  56. <el-form-item label="分类:" prop="category">
  57. <el-select
  58. v-model="form.category"
  59. placeholder="请选择分类"
  60. clearable
  61. class="w-[180px]!"
  62. >
  63. <el-option
  64. v-for="item in categoryOptions"
  65. :key="item.value"
  66. :label="item.label"
  67. :value="item.value"
  68. />
  69. </el-select>
  70. </el-form-item>
  71. <el-form-item label="同步状态:" prop="syncStatus">
  72. <el-select
  73. v-model="form.syncStatus"
  74. placeholder="请选择状态"
  75. clearable
  76. class="w-[180px]!"
  77. >
  78. <el-option label="已同步" :value="1" />
  79. <el-option label="未同步" :value="0" />
  80. </el-select>
  81. </el-form-item>
  82. <el-form-item>
  83. <el-button
  84. type="primary"
  85. :icon="useRenderIcon('ri/search-line')"
  86. :loading="loading"
  87. @click="onSearch"
  88. >
  89. 搜索
  90. </el-button>
  91. <el-button :icon="useRenderIcon(Refresh)" @click="resetForm(formRef)">
  92. 重置
  93. </el-button>
  94. </el-form-item>
  95. </el-form>
  96. <PureTableBar
  97. title="商品管理"
  98. :columns="columns"
  99. @refresh="onSearch"
  100. >
  101. <template #buttons>
  102. <el-button
  103. type="primary"
  104. :icon="useRenderIcon(AddFill)"
  105. @click="openDialog()"
  106. >
  107. 新增商品
  108. </el-button>
  109. </template>
  110. <template v-slot="{ size, dynamicColumns }">
  111. <pure-table
  112. ref="tableRef"
  113. row-key="id"
  114. adaptive
  115. :adaptiveConfig="{ offsetBottom: 108 }"
  116. align-whole="center"
  117. table-layout="auto"
  118. :loading="loading"
  119. :size="size"
  120. :data="dataList"
  121. :columns="dynamicColumns"
  122. :pagination="{ ...pagination, size }"
  123. :header-cell-style="{
  124. background: 'var(--el-fill-color-light)',
  125. color: 'var(--el-text-color-primary)'
  126. }"
  127. @page-size-change="handleSizeChange"
  128. @page-current-change="handleCurrentChange"
  129. >
  130. <template #operation="{ row }">
  131. <el-button
  132. class="reset-margin"
  133. link
  134. type="primary"
  135. :size="size"
  136. :icon="useRenderIcon(EditPen)"
  137. @click="openDialog('修改', row)"
  138. >
  139. 编辑
  140. </el-button>
  141. <el-popconfirm
  142. :title="`是否确认删除商品 ${row.name}?`"
  143. @confirm="handleDelete(row)"
  144. >
  145. <template #reference>
  146. <el-button
  147. class="reset-margin"
  148. link
  149. type="danger"
  150. :size="size"
  151. :icon="useRenderIcon(Delete)"
  152. >
  153. 删除
  154. </el-button>
  155. </template>
  156. </el-popconfirm>
  157. <el-button
  158. v-if="row.syncStatus !== 1"
  159. class="reset-margin"
  160. link
  161. type="warning"
  162. :size="size"
  163. :icon="useRenderIcon(Sync)"
  164. @click="handleSync(row)"
  165. >
  166. 同步
  167. </el-button>
  168. </template>
  169. </pure-table>
  170. </template>
  171. </PureTableBar>
  172. </div>
  173. </template>
  174. <style lang="scss" scoped>
  175. @use "./styles/image-preview.scss";
  176. .main-content {
  177. margin: 24px 24px 0 !important;
  178. }
  179. .search-form {
  180. :deep(.el-form-item) {
  181. margin-bottom: 12px;
  182. }
  183. }
  184. </style>