Store.vue 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <template>
  2. <div>
  3. <el-card shadow="never">
  4. <div class="flex justify-between w-full">
  5. <el-button type="primary" @click="handleAdd" v-if="!state.total">
  6. 新建店铺
  7. </el-button>
  8. <div v-else></div>
  9. <div class="text-right flex items-center">
  10. <el-select placeholder="全部店铺类型" v-model="state.query.type">
  11. <el-option label="全部状态类型" :value="-1" />
  12. <el-option
  13. :label="item.k"
  14. :value="item.v"
  15. v-for="item in typeList"
  16. :key="item.v"
  17. />
  18. </el-select>
  19. <el-select
  20. class="ml-2"
  21. placeholder="全部店铺可用状态"
  22. v-model="state.query.status"
  23. >
  24. <el-option label="所有状态" :value="-1" />
  25. <el-option label="可用" :value="0" />
  26. <el-option label="禁用" :value="1" />
  27. </el-select>
  28. <el-input
  29. v-model="state.query.name"
  30. placeholder="输入店铺名称"
  31. clearable
  32. class="w-1/3 ml-2"
  33. ></el-input>
  34. <el-button class="ml-2" type="primary" @click="onSearch"
  35. >搜索</el-button
  36. >
  37. </div>
  38. </div>
  39. </el-card>
  40. <el-card shadow="never" class="mt-2">
  41. <el-table :data="state.list" style="width: 100%">
  42. <el-table-column
  43. label="店铺名称"
  44. prop="name"
  45. width=""
  46. ></el-table-column>
  47. <el-table-column
  48. label="店铺类型"
  49. prop="type"
  50. width=""
  51. :formatter="v => typeList[v.type]?.k"
  52. ></el-table-column>
  53. <el-table-column
  54. label="店铺所属"
  55. prop="belongTo"
  56. width=""
  57. ></el-table-column>
  58. <el-table-column label="可用状态" prop="status" width="">
  59. <template #default="{ row }">
  60. <el-button v-if="row.status === 0" link type="success"
  61. >可用</el-button
  62. >
  63. <el-button v-else link type="danger">禁用</el-button>
  64. </template>
  65. </el-table-column>
  66. <el-table-column
  67. label="商品数量"
  68. prop="goodsCount"
  69. width=""
  70. ></el-table-column>
  71. <el-table-column
  72. label="创建时间"
  73. prop="createdAt"
  74. width=""
  75. ></el-table-column>
  76. <el-table-column label="操作">
  77. <template #default="{ row }">
  78. <!-- <el-button type="primary" link @click="handleEdit(row)">{{
  79. row.type == 1 ? "查看" : "编辑"
  80. }}</el-button> -->
  81. <el-button type="primary" link @click="handleEdit(row)"
  82. >编辑</el-button
  83. >
  84. </template>
  85. </el-table-column>
  86. </el-table>
  87. <el-pagination
  88. class="mt-4 justify-end"
  89. background
  90. layout="prev, pager, next"
  91. :total="state.total"
  92. @current-change="changePage"
  93. />
  94. </el-card>
  95. <ComponentDialogEditStore
  96. v-model:show="state.visibleStore"
  97. :id="state.rowData?.id"
  98. @success="onSearch"
  99. ></ComponentDialogEditStore>
  100. <ComponentDialogSettingStoreStatus
  101. v-model:show="state.visibleSetting"
  102. :id="state.rowData?.id"
  103. @success="getList"
  104. ></ComponentDialogSettingStoreStatus>
  105. </div>
  106. </template>
  107. <script lang="ts" setup>
  108. import { request } from "@/utils";
  109. import { ElMessage } from "element-plus";
  110. import { reactive, ref } from "vue";
  111. import ComponentDialogEditStore from "./components/DialogEditStore.vue";
  112. import ComponentDialogSettingStoreStatus from "./components/DialogSettingStoreStatus.vue";
  113. import { useUserStoreHook } from "@/store/modules/user";
  114. const channelId = useUserStoreHook()?.profile.id;
  115. const state = reactive({
  116. visibleStore: false,
  117. visibleSetting: false,
  118. rowData: {},
  119. query: {
  120. page: 1,
  121. pageSize: 10, //
  122. type: -1, // -1:所有;0:自营;1:第三方
  123. status: -1, // -1:所有状态;0:可用;1:不可用
  124. name: undefined
  125. },
  126. list: [],
  127. total: 0
  128. });
  129. const staffInfo = ref({});
  130. const typeList = [
  131. {
  132. k: "自营",
  133. v: 0
  134. },
  135. {
  136. k: "第三方",
  137. v: 1
  138. }
  139. ];
  140. const changePage = page => {
  141. state.query.page = page;
  142. getList();
  143. };
  144. const getList = () => {
  145. request
  146. .get("/articleService/serviceProvider/staff/shop/paginate", {
  147. params: state.query
  148. })
  149. .then(resp => {
  150. state.list = resp.data.list;
  151. state.total = resp.data.total;
  152. });
  153. };
  154. const handleAdd = () => {
  155. state.rowData = {};
  156. state.visibleStore = true;
  157. };
  158. const handleEdit = rowData => {
  159. state.rowData = rowData;
  160. state.visibleStore = true;
  161. };
  162. const handleDelete = id => {
  163. request
  164. .post("/articleService/serviceProvider/shop/delete", {
  165. id
  166. })
  167. .then(resp => {
  168. ElMessage.success(resp.message);
  169. getList();
  170. });
  171. };
  172. const getStaff = () => {
  173. request
  174. .get("/articleService/serviceProvider/staff", {
  175. params: {
  176. mechanismId: channelId
  177. }
  178. })
  179. .then(resp => {
  180. staffInfo.value = resp.data;
  181. });
  182. };
  183. const onSearch = () => {
  184. state.query.page = 1;
  185. getList();
  186. };
  187. const init = () => {
  188. getList();
  189. getStaff();
  190. };
  191. init();
  192. </script>