diff --git a/src/utils/http/index.ts b/src/utils/http/index.ts index 8801de5..6382eac 100644 --- a/src/utils/http/index.ts +++ b/src/utils/http/index.ts @@ -49,6 +49,9 @@ class PureHttp { /** 防止重复刷新token */ private static isRefreshing = false; + /** 防止重复显示登录提示 */ + private static isShowingLogin = false; + /** 初始化配置对象 */ private static initConfig: PureHttpRequestConfig = {}; @@ -90,10 +93,10 @@ class PureHttp { return whiteList.some(v => config.url.endsWith(v)) ? config : new Promise(resolve => { - const data = getToken(); - config.headers["Authorization"] = formatToken(data.token); - resolve(config); - }); + const data = getToken(); + config.headers["Authorization"] = formatToken(data.token); + resolve(config); + }); }, error => { return Promise.reject(error); @@ -137,22 +140,25 @@ class PureHttp { if (response.data.code !== 0) { // token失效时弹出过期提示 if (response.data.code === 106) { - ElMessageBox.confirm( - "登录状态已过期,您可以继续留在该页面,或者重新登录", - "系统提示", - { - confirmButtonText: "重新登录", - cancelButtonText: "取消", - type: "warning" - } - ) - .then(() => { + if (!PureHttp.isShowingLogin) { + PureHttp.isShowingLogin = true; + ElMessageBox.confirm( + "登录状态已过期,您可以继续留在该页面,或者重新登录", + "系统提示", + { + confirmButtonText: "重新登录", + cancelButtonText: "取消", + type: "warning" + } + ).then(() => { removeToken(); router.push("/login"); - }) - .catch(() => { + }).catch(() => { message("取消重新登录", { type: "info" }); + }).finally(() => { + PureHttp.isShowingLogin = false; }); + } NProgress.done(); return Promise.reject(msg); } else { diff --git a/src/views/cabinet/smart-cabinet-card/index.vue b/src/views/cabinet/smart-cabinet-card/index.vue index ce89f0f..cbf1bd9 100644 --- a/src/views/cabinet/smart-cabinet-card/index.vue +++ b/src/views/cabinet/smart-cabinet-card/index.vue @@ -125,8 +125,7 @@ onMounted(() => { <el-col v-for="(item, index) in dataList" :key="item.cabinetId" :xs="24" :sm="12" :md="8" :lg="4" :xl="4"> <el-card class="cabinet-card" :body-style="{ padding: '8px 20px' }"> <div class="card-content"> - <img - :src="`${IMG_PATH}img/cabinet/${CabinetImgMap[item.templateNo]?.img || 'default.jpg'}`" + <img :src="`${IMG_PATH}img/cabinet/${CabinetImgMap[item.templateNo]?.img || 'default.jpg'}`" class="cabinet-image" /> <el-descriptions class="cabinet-info" :column="2"> <el-descriptions-item class="name" :span="2">柜体名称:{{ item.cabinetName }} @@ -150,7 +149,9 @@ onMounted(() => { </div> </div> </div> - <smart-cabinet-card-form-modal v-model:visible="modalVisible" @refresh="getList" /> + <el-drawer v-model="modalVisible" title="新增智能柜" size="30%" direction="rtl"> + <smart-cabinet-card-form-modal v-model="modalVisible" @refresh="getList" /> + </el-drawer> </div> </template> diff --git a/src/views/cabinet/smart-cabinet-card/smart-cabinet-card-form-modal.vue b/src/views/cabinet/smart-cabinet-card/smart-cabinet-card-form-modal.vue index a55ba1f..9f4e080 100644 --- a/src/views/cabinet/smart-cabinet-card/smart-cabinet-card-form-modal.vue +++ b/src/views/cabinet/smart-cabinet-card/smart-cabinet-card-form-modal.vue @@ -22,7 +22,7 @@ const props = defineProps({ } }); -const emit = defineEmits(["update:visible", "refresh"]); +const emit = defineEmits(["update:modelValue", "refresh"]); const formRef = ref(); const formData = reactive<FormDTO>({ @@ -60,7 +60,7 @@ const handleConfirm = async () => { const closeDialog = () => { formRef.value.resetFields(); - emit("update:visible", false); + emit("update:modelValue", false); }; const templateOptions = Object.entries(CabinetImgMap).map(([value, item]) => ({ @@ -70,32 +70,27 @@ const templateOptions = Object.entries(CabinetImgMap).map(([value, item]) => ({ </script> <template> - <el-dialog title="新增智能柜" :model-value="visible" width="600px" @close="closeDialog"> - <el-form ref="formRef" :model="formData" :rules="rules" label-width="100px"> - <el-form-item label="柜体名称" prop="cabinetName"> - <el-input v-model="formData.cabinetName" placeholder="请输入柜体名称" /> - </el-form-item> + <el-form ref="formRef" :model="formData" :rules="rules" label-width="100px"> + <el-form-item label="柜体名称" prop="cabinetName"> + <el-input v-model="formData.cabinetName" placeholder="请输入柜体名称" /> + </el-form-item> - <el-form-item label="柜体类型" prop="cabinetType"> - <el-select v-model="formData.cabinetType" placeholder="请选择类型"> - <el-option label="主柜" :value="0" /> - <el-option label="副柜" :value="1" /> - </el-select> - </el-form-item> + <el-form-item label="柜体类型" prop="cabinetType"> + <el-select v-model="formData.cabinetType" placeholder="请选择类型"> + <el-option label="主柜" :value="0" /> + <el-option label="副柜" :value="1" /> + </el-select> + </el-form-item> - <el-form-item label="模板编号" prop="templateNo"> - <el-select v-model="formData.templateNo" placeholder="请选择模板编号"> - <el-option v-for="option in templateOptions" :key="option.value" :label="option.label" - :value="option.value" /> - </el-select> - </el-form-item> - </el-form> - - <template #footer> - <el-button @click="closeDialog">取消</el-button> + <el-form-item label="模板编号" prop="templateNo"> + <el-select v-model="formData.templateNo" placeholder="请选择模板编号"> + <el-option v-for="option in templateOptions" :key="option.value" :label="option.label" :value="option.value" /> + </el-select> + </el-form-item> + <el-form-item> <el-button type="primary" :icon="useRenderIcon(Confirm)" @click="handleConfirm"> 确认 </el-button> - </template> - </el-dialog> + </el-form-item> + </el-form> </template> \ No newline at end of file