refactor(智能柜卡片): 优化智能柜卡片表单模态框的显示方式

将智能柜卡片表单模态框从`el-dialog`改为`el-drawer`,提升用户体验。同时修复了重复显示登录提示的问题,并优化了代码格式。
This commit is contained in:
dzq 2025-05-21 15:05:15 +08:00
parent a742b56413
commit 9fb6bb0ed6
3 changed files with 46 additions and 44 deletions

View File

@ -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 {

View File

@ -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>

View File

@ -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>