Browse Source

门店管理按钮补全

Huanyi 1 month ago
parent
commit
60622044fd
3 changed files with 175 additions and 5 deletions
  1. 37 1
      src/api/system/store/index.ts
  2. 22 0
      src/api/system/store/types.ts
  3. 116 4
      src/views/system/store/index.vue

+ 37 - 1
src/api/system/store/index.ts

@@ -1,6 +1,6 @@
 import request from '@/utils/request';
 import { AxiosPromise } from 'axios';
-import { StoreVO, StoreForm, StoreQuery, StoreStatusVO, SysStorePageBo, StoreOrderQuery, StoreOrderVO, StoreDispatchVO } from '@/api/system/store/types';
+import { StoreVO, StoreForm, StoreQuery, StoreStatusVO, SysStorePageBo, StoreOrderQuery, StoreOrderVO, StoreDispatchVO, StoreRenewForm, StoreBanForm, StoreEnableForm } from '@/api/system/store/types';
 
 /**
  * 查询门店管理列表
@@ -97,3 +97,39 @@ export const listStoreOnDispatch = (query?: { site?: string | number }): AxiosPr
   });
 };
 
+/**
+ * 门店续期
+ * @param data
+ */
+export const renewStore = (data: StoreRenewForm) => {
+  return request({
+    url: '/system/store/renew',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 门店禁用
+ * @param data
+ */
+export const banStore = (data: StoreBanForm) => {
+  return request({
+    url: '/system/store/ban',
+    method: 'put',
+    data: data
+  });
+};
+
+/**
+ * 门店启用
+ * @param data
+ */
+export const enableStore = (data: StoreEnableForm) => {
+  return request({
+    url: '/system/store/enable',
+    method: 'put',
+    data: data
+  });
+};
+

+ 22 - 0
src/api/system/store/types.ts

@@ -267,3 +267,25 @@ export interface StoreDispatchVO {
   longitude: number;
   latitude: number;
 }
+
+/**
+ * 门店续期
+ */
+export interface StoreRenewForm {
+  id: string | number;
+  to: string;
+}
+
+/**
+ * 门店禁用
+ */
+export interface StoreBanForm {
+  id: string | number;
+}
+
+/**
+ * 门店启用
+ */
+export interface StoreEnableForm {
+  id: string | number;
+}

+ 116 - 4
src/views/system/store/index.vue

@@ -111,9 +111,16 @@
               <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
                 v-hasPermi="['system:store:edit']"></el-button>
             </el-tooltip>
-            <el-tooltip content="更多" placement="top">
+            <el-dropdown @command="(command: string) => handleCommand(command, scope.row)" v-hasPermi="['system:store:edit']">
               <el-button link type="primary" icon="More"></el-button>
-            </el-tooltip>
+              <template #dropdown>
+                <el-dropdown-menu>
+                  <el-dropdown-item command="handleRenew" icon="Calendar">续期</el-dropdown-item>
+                  <el-dropdown-item command="handleBan" icon="CircleClose" v-if="scope.row.status === 1">禁用</el-dropdown-item>
+                  <el-dropdown-item command="handleEnable" icon="CircleCheck" v-if="scope.row.status === 2">启用</el-dropdown-item>
+                </el-dropdown-menu>
+              </template>
+            </el-dropdown>
           </template>
         </el-table-column>
       </el-table>
@@ -269,12 +276,33 @@
         </div>
       </template>
     </el-dialog>
+
+    <!-- 门店续期对话框 -->
+    <el-dialog title="门店续期" v-model="renewDialog.visible" width="400px" append-to-body>
+      <el-form :model="renewForm" label-width="80px">
+        <el-form-item label="有效期至">
+          <el-date-picker
+            v-model="renewForm.to"
+            type="datetime"
+            value-format="YYYY-MM-DD HH:mm:ss"
+            placeholder="选择日期时间"
+            style="width: 100%"
+          />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitRenew" :loading="renewLoading">确 定</el-button>
+          <el-button @click="renewDialog.visible = false">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
 <script setup name="Store" lang="ts">
-import { listStore, getStore, delStore, addStore, updateStore, listStoreStatus } from '@/api/system/store';
-import { StoreVO, StoreQuery, StoreForm, StoreStatusVO, SysStorePageBo } from '@/api/system/store/types';
+import { listStore, getStore, delStore, addStore, updateStore, listStoreStatus, renewStore, banStore, enableStore } from '@/api/system/store';
+import { StoreVO, StoreForm, StoreQuery, StoreStatusVO, SysStorePageBo } from '@/api/system/store/types';
 import { listOnStore } from '@/api/system/tenant';
 import { listOnStore as listTenantCategoriesOnStore } from '@/api/system/tenantCategories';
 import { listOnStore as listServiceOnStore } from '@/api/service/list';
@@ -370,6 +398,90 @@ const handleDetail = async (row: StoreVO) => {
   detailDialog.visible = true;
 };
 
+/** 续期对话框 */
+const renewDialog = reactive({
+  visible: false
+});
+const renewForm = reactive({
+  id: undefined as string | number | undefined,
+  to: ''
+});
+const renewLoading = ref(false);
+
+/** 处理下拉菜单命令 */
+const handleCommand = (command: string, row: StoreVO) => {
+  switch (command) {
+    case 'handleRenew':
+      handleRenew(row);
+      break;
+    case 'handleBan':
+      handleBan(row);
+      break;
+    case 'handleEnable':
+      handleEnable(row);
+      break;
+    default:
+      break;
+  }
+};
+
+/** 续期按钮操作 */
+const handleRenew = (row: StoreVO) => {
+  renewForm.id = row.id;
+  renewForm.to = ''; // 清空之前的选择
+  renewDialog.visible = true;
+};
+
+/** 提交续期 */
+const submitRenew = async () => {
+  if (!renewForm.to) {
+    proxy?.$modal.msgError("请选择有效期");
+    return;
+  }
+  renewLoading.value = true;
+  try {
+    await renewStore({
+      id: renewForm.id!,
+      to: renewForm.to
+    });
+    proxy?.$modal.msgSuccess("续期成功");
+    renewDialog.visible = false;
+    getList();
+  } finally {
+    renewLoading.value = false;
+  }
+};
+
+/** 禁用按钮操作 */
+const handleBan = async (row: StoreVO) => {
+  try {
+    await proxy?.$modal.confirm('是否确认禁用门店?');
+    loading.value = true;
+    await banStore({ id: row.id });
+    proxy?.$modal.msgSuccess("禁用成功");
+    getList();
+  } catch (err) {
+    // 取消确认或请求失败
+  } finally {
+    loading.value = false;
+  }
+};
+
+/** 启用按钮操作 */
+const handleEnable = async (row: StoreVO) => {
+  try {
+    await proxy?.$modal.confirm('是否确认启用门店?');
+    loading.value = true;
+    await enableStore({ id: row.id });
+    proxy?.$modal.msgSuccess("启用成功");
+    getList();
+  } catch (err) {
+    // 取消确认或请求失败
+  } finally {
+    loading.value = false;
+  }
+};
+
 const initFormData: StoreForm = {
   id: undefined,
   logo: undefined,