mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-10-09 02:57:35 +00:00
@@ -274,11 +274,3 @@ Thanks to the contributions and support of the following projects, which have en
|
|||||||
## ❤️ Star
|
## ❤️ Star
|
||||||
|
|
||||||
If you like this project, please give it a ⭐️ Star to show your support! Thank you very much!
|
If you like this project, please give it a ⭐️ Star to show your support! Thank you very much!
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 👀 Visitor Statistics
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
---
|
|
||||||
|
|||||||
@@ -272,11 +272,3 @@ fastapi_vue3_amdin/devops/devops/nginx/nginx.conf
|
|||||||
## ❤️ Star 支持我
|
## ❤️ Star 支持我
|
||||||
|
|
||||||
如果你喜欢这个项目,请给我一个 ⭐️ Star 支持一下吧!非常感谢!
|
如果你喜欢这个项目,请给我一个 ⭐️ Star 支持一下吧!非常感谢!
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 👀 访问统计
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
---
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
<!-- 弹出框内容 -->
|
<!-- 弹出框内容 -->
|
||||||
<div ref="popoverContentRef">
|
<div ref="popoverContentRef">
|
||||||
<!-- 表单 -->
|
<!-- 表单 -->
|
||||||
<el-form ref="formRef" :model="queryParams" :inline="true">
|
<el-form ref="formRef" :model="queryParams" :inline="true" >
|
||||||
<template v-for="item in selectConfig.formItems" :key="item.prop">
|
<template v-for="item in selectConfig.formItems" :key="item.prop">
|
||||||
<el-form-item :label="item.label" :prop="item.prop">
|
<el-form-item :label="item.label" :prop="item.prop">
|
||||||
<!-- Input 输入框 -->
|
<!-- Input 输入框 -->
|
||||||
|
|||||||
@@ -214,6 +214,8 @@ function logout() {
|
|||||||
userStore.logout().then(() => {
|
userStore.logout().then(() => {
|
||||||
router.push(`/login?redirect=${route.fullPath}`);
|
router.push(`/login?redirect=${route.fullPath}`);
|
||||||
});
|
});
|
||||||
|
}).catch(() => {
|
||||||
|
ElMessage.info('已取消强退');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -115,7 +115,7 @@
|
|||||||
<span>基本设置</span>
|
<span>基本设置</span>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
<el-form ref="ruleFormRef" :model="infoFormState" :rules="rules" label-width="auto" :inline="true">
|
<el-form ref="ruleFormRef" :model="infoFormState" :rules="rules" :inline="true" label-suffix=":" label-width="auto" label-position="right">
|
||||||
|
|
||||||
<el-form-item label="姓名" name="name">
|
<el-form-item label="姓名" name="name">
|
||||||
<el-input v-model:value="infoFormState.name" placeholder="请输入姓名" prefix-icon="User" clearable />
|
<el-input v-model:value="infoFormState.name" placeholder="请输入姓名" prefix-icon="User" clearable />
|
||||||
@@ -152,7 +152,7 @@
|
|||||||
<span>安全设置</span>
|
<span>安全设置</span>
|
||||||
</template>
|
</template>
|
||||||
<div>
|
<div>
|
||||||
<el-form ref="ruleFormRef" :model="passwordFormState" :rules="resetPasswordRules" label-width="auto">
|
<el-form ref="ruleFormRef" :model="passwordFormState" :rules="resetPasswordRules" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<el-form-item label="当前密码" name="oldPassword">
|
<el-form-item label="当前密码" name="oldPassword">
|
||||||
<el-input v-model.trim="passwordFormState.oldPassword" :placeholder="t('login.password')" type="password" show-password clearable>
|
<el-input v-model.trim="passwordFormState.oldPassword" :placeholder="t('login.password')" type="password" show-password clearable>
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
|
|||||||
+7
-7
@@ -216,15 +216,15 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<el-form :model="cacheForm" label-position="top">
|
<el-form :model="cacheForm" label-suffix=":" label-width="auto" label-position="top">
|
||||||
<el-form-item label="缓存名称:">
|
<el-form-item label="缓存名称">
|
||||||
<el-input v-model="cacheForm.cache_name" readonly />
|
<el-input v-model="cacheForm.cache_name" readonly placeholder="缓存名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="缓存键名:">
|
<el-form-item label="缓存键名">
|
||||||
<el-input v-model="cacheForm.cache_key" readonly />
|
<el-input v-model="cacheForm.cache_key" readonly placeholder="缓存键名" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="缓存内容:">
|
<el-form-item label="缓存内容">
|
||||||
<el-input v-model="cacheForm.cache_value" type="textarea" :rows="18" readonly />
|
<el-input v-model="cacheForm.cache_value" type="textarea" :rows="18" readonly placeholder="缓存内容" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
<el-form-item prop="name" label="任务名称">
|
<el-form-item prop="name" label="任务名称">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryFormData.name"
|
v-model="queryFormData.name"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
<el-form-item prop="ipaddr" label="IP地址">
|
<el-form-item prop="ipaddr" label="IP地址">
|
||||||
<el-input v-model="queryFormData.ipaddr" placeholder="请输入IP地址" clearable />
|
<el-input v-model="queryFormData.ipaddr" placeholder="请输入IP地址" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<h3 text-center m-0 mb-20px>{{ t("login.reg") }}</h3>
|
<h3 text-center m-0 mb-20px>{{ t("login.reg") }}</h3>
|
||||||
<el-form ref="formRef" :model="model" :rules="rules" size="large">
|
<el-form ref="formRef" :model="model" :rules="rules" size="large" label-suffix=":" >
|
||||||
<!-- 账号 -->
|
<!-- 账号 -->
|
||||||
<el-form-item prop="username">
|
<el-form-item prop="username">
|
||||||
<el-input v-model.trim="model.username" :placeholder="t('login.username')" clearable>
|
<el-input v-model.trim="model.username" :placeholder="t('login.username')" clearable>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<h3 text-center m-0 mb-20px>{{ t("login.resetPassword") }}</h3>
|
<h3 text-center m-0 mb-20px>{{ t("login.resetPassword") }}</h3>
|
||||||
<el-form ref="formRef" :model="model" :rules="rules" size="large">
|
<el-form ref="formRef" :model="model" :rules="rules" size="large" label-suffix=":">
|
||||||
<!-- 用户名 -->
|
<!-- 用户名 -->
|
||||||
<el-form-item prop="username">
|
<el-form-item prop="username">
|
||||||
<el-input v-model.trim="model.username" :placeholder="t('login.username')" clearable>
|
<el-input v-model.trim="model.username" :placeholder="t('login.username')" clearable>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-drawer v-model="drawerVisible" title="配置中心" :size="drawerSize">
|
<el-drawer v-model="drawerVisible" title="配置中心" :size="drawerSize">
|
||||||
<el-form :model="configState" label-width="auto" style="width: 100%">
|
<el-form :model="configState" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<!-- 系统配置 -->
|
<!-- 系统配置 -->
|
||||||
<el-divider>系统配置</el-divider>
|
<el-divider>系统配置</el-divider>
|
||||||
<div v-for="(item, key) in systemConfigs" :key="key">
|
<div v-for="(item, key) in systemConfigs" :key="key">
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
<el-form-item prop="config_name" label="配置名称">
|
<el-form-item prop="config_name" label="配置名称">
|
||||||
<el-input v-model="queryFormData.config_name" placeholder="请输入配置名称" clearable />
|
<el-input v-model="queryFormData.config_name" placeholder="请输入配置名称" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -145,7 +145,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 新增、编辑表单 -->
|
<!-- 新增、编辑表单 -->
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="100px">
|
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<el-form-item label="配置名称" prop="config_name">
|
<el-form-item label="配置名称" prop="config_name">
|
||||||
<el-input v-model="formData.config_name" placeholder="请输入配置名称" :maxlength="50" />
|
<el-input v-model="formData.config_name" placeholder="请输入配置名称" :maxlength="50" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
<el-form-item prop="name" label="部门名称">
|
<el-form-item prop="name" label="部门名称">
|
||||||
<el-input v-model="queryFormData.name" placeholder="请输入部门名称" clearable />
|
<el-input v-model="queryFormData.name" placeholder="请输入部门名称" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 新增、编辑表单 -->
|
<!-- 新增、编辑表单 -->
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="100px">
|
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<el-form-item label="部门名称" prop="name">
|
<el-form-item label="部门名称" prop="name">
|
||||||
<el-input v-model="formData.name" placeholder="请输入部门名称" :maxlength="50" />
|
<el-input v-model="formData.name" placeholder="请输入部门名称" :maxlength="50" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<el-drawer v-model="drawerVisible" :title="'【' + props.dictLabel + '】字典数据'" :size="drawerSize">
|
<el-drawer v-model="drawerVisible" :title="'【' + props.dictLabel + '】字典数据'" :size="drawerSize">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
|
|
||||||
<el-form-item prop="dict_label" label="字典数据标签">
|
<el-form-item prop="dict_label" label="字典数据标签">
|
||||||
<el-input v-model="queryFormData.dict_label" placeholder="请输入字典标签" clearable />
|
<el-input v-model="queryFormData.dict_label" placeholder="请输入字典标签" clearable />
|
||||||
@@ -174,7 +174,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 新增、编辑表单 -->
|
<!-- 新增、编辑表单 -->
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="100px">
|
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<el-form-item label="数据类型" prop="dict_type">
|
<el-form-item label="数据类型" prop="dict_type">
|
||||||
<el-input v-model="formData.dict_type" placeholder="请输入数据类型" :maxlength="50" :disabled="true" />
|
<el-input v-model="formData.dict_type" placeholder="请输入数据类型" :maxlength="50" :disabled="true" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
<el-form-item prop="dict_name" label="字典名称">
|
<el-form-item prop="dict_name" label="字典名称">
|
||||||
<el-input v-model="queryFormData.dict_name" placeholder="请输入字典名称" clearable />
|
<el-input v-model="queryFormData.dict_name" placeholder="请输入字典名称" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
<el-descriptions-item label="字典类型" :span="2">
|
<el-descriptions-item label="字典类型" :span="2">
|
||||||
<el-tag type="primary">{{ detailFormData.dict_type }}</el-tag>
|
<el-tag type="primary">{{ detailFormData.dict_type }}</el-tag>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item label="字典状态" :span="2">
|
<el-descriptions-item label="状态" :span="2">
|
||||||
<el-tag v-if="detailFormData.status" type="success">启用</el-tag>
|
<el-tag v-if="detailFormData.status" type="success">启用</el-tag>
|
||||||
<el-tag v-else type="danger">停用</el-tag>
|
<el-tag v-else type="danger">停用</el-tag>
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
@@ -163,14 +163,14 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 新增、编辑表单 -->
|
<!-- 新增、编辑表单 -->
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="100px">
|
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<el-form-item label="字典名称" prop="dict_name">
|
<el-form-item label="字典名称" prop="dict_name">
|
||||||
<el-input v-model="formData.dict_name" placeholder="请输入字典名称" :maxlength="50" />
|
<el-input v-model="formData.dict_name" placeholder="请输入字典名称" :maxlength="50" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="字典类型" prop="dict_type">
|
<el-form-item label="字典类型" prop="dict_type">
|
||||||
<el-input v-model="formData.dict_type" placeholder="请输入字典类型" :maxlength="50" />
|
<el-input v-model="formData.dict_type" placeholder="请输入字典类型" :maxlength="50" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="字典状态" prop="status">
|
<el-form-item label="状态" prop="status">
|
||||||
<el-radio-group v-model="formData.status">
|
<el-radio-group v-model="formData.status">
|
||||||
<el-radio :value="true">启用</el-radio>
|
<el-radio :value="true">启用</el-radio>
|
||||||
<el-radio :value="false">停用</el-radio>
|
<el-radio :value="false">停用</el-radio>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
<el-form-item prop="request_path" label="请求路径">
|
<el-form-item prop="request_path" label="请求路径">
|
||||||
<el-input v-model="queryFormData.request_path" placeholder="请输入请求路径" clearable />
|
<el-input v-model="queryFormData.request_path" placeholder="请输入请求路径" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
<el-form-item prop="name" label="菜单名称">
|
<el-form-item prop="name" label="菜单名称">
|
||||||
<el-input v-model="queryFormData.name" placeholder="请输入菜单名称" clearable />
|
<el-input v-model="queryFormData.name" placeholder="请输入菜单名称" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -230,7 +230,7 @@
|
|||||||
|
|
||||||
<!-- 新增、编辑表单 -->
|
<!-- 新增、编辑表单 -->
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-width="100px">
|
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<el-form-item label="父级菜单" prop="parent_id">
|
<el-form-item label="父级菜单" prop="parent_id">
|
||||||
<el-tree-select v-model="formData.parent_id" placeholder="选择上级菜单" :data="menuOptions" filterable check-strictly :render-after-expand="false" />
|
<el-tree-select v-model="formData.parent_id" placeholder="选择上级菜单" :data="menuOptions" filterable check-strictly :render-after-expand="false" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":">
|
||||||
<el-form-item prop="notice_title" label="标题">
|
<el-form-item prop="notice_title" label="标题">
|
||||||
<el-input v-model="queryFormData.notice_title" placeholder="请输入标题" clearable />
|
<el-input v-model="queryFormData.notice_title" placeholder="请输入标题" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -153,7 +153,7 @@
|
|||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<!-- 弹窗区域 -->
|
<!-- 弹窗区域 -->
|
||||||
<el-dialog v-model="dialogVisible.visible" :title="dialogVisible.title" @close="handleCloseDialog">
|
<el-dialog v-model="dialogVisible.visible" :title="dialogVisible.title" @close="handleCloseDialog">
|
||||||
<!-- 详情 -->
|
<!-- 详情 -->
|
||||||
<template v-if="dialogVisible.type === 'detail'">
|
<template v-if="dialogVisible.type === 'detail'">
|
||||||
<el-descriptions :column="4" border>
|
<el-descriptions :column="4" border>
|
||||||
@@ -189,7 +189,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 新增、编辑表单 -->
|
<!-- 新增、编辑表单 -->
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="100px">
|
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<el-form-item label="标题" prop="notice_title">
|
<el-form-item label="标题" prop="notice_title">
|
||||||
<el-input v-model="formData.notice_title" placeholder="请输入标题" :maxlength="50" />
|
<el-input v-model="formData.notice_title" placeholder="请输入标题" :maxlength="50" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="内容" prop="notice_content">
|
<el-form-item label="内容" prop="notice_content">
|
||||||
<WangEditor v-model="formData.notice_content" />
|
<WangEditor v-model="formData.notice_content" height="300px" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="描述" prop="description">
|
<el-form-item label="描述" prop="description">
|
||||||
<el-input v-model="formData.description" :rows="4" :maxlength="100" show-word-limit type="textarea" placeholder="请输入描述" />
|
<el-input v-model="formData.description" :rows="4" :maxlength="100" show-word-limit type="textarea" placeholder="请输入描述" />
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
<el-form-item prop="name" label="岗位名称">
|
<el-form-item prop="name" label="岗位名称">
|
||||||
<el-input v-model="queryFormData.name" placeholder="请输入岗位名称" clearable />
|
<el-input v-model="queryFormData.name" placeholder="请输入岗位名称" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 新增、编辑表单 -->
|
<!-- 新增、编辑表单 -->
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="100px">
|
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<el-form-item label="岗位名称" prop="name">
|
<el-form-item label="岗位名称" prop="name">
|
||||||
<el-input v-model="formData.name" placeholder="请输入岗位名称" :maxlength="50" />
|
<el-input v-model="formData.name" placeholder="请输入岗位名称" :maxlength="50" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
<el-form-item prop="name" label="角色名称">
|
<el-form-item prop="name" label="角色名称">
|
||||||
<el-input v-model="queryFormData.name" placeholder="请输入角色名称" clearable />
|
<el-input v-model="queryFormData.name" placeholder="请输入角色名称" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -130,7 +130,7 @@
|
|||||||
|
|
||||||
<el-table-column v-if="tableColumns.find(col => col.prop === 'operation')?.show" fixed="right" label="操作" align="center" min-width="280">
|
<el-table-column v-if="tableColumns.find(col => col.prop === 'operation')?.show" fixed="right" label="操作" align="center" min-width="280">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button type="primary" size="small" link icon="position" @click="handleOpenAssignPermDialog(scope.row.id, scope.row.name)">分配权限</el-button>
|
<el-button type="warning" size="small" link icon="position" @click="handleOpenAssignPermDialog(scope.row.id, scope.row.name)">分配权限</el-button>
|
||||||
<el-button type="info" size="small" link icon="document" @click="handleOpenDialog('detail', scope.row.id)">详情</el-button>
|
<el-button type="info" size="small" link icon="document" @click="handleOpenDialog('detail', scope.row.id)">详情</el-button>
|
||||||
<el-button type="primary" size="small" link icon="edit" @click="handleOpenDialog('update', scope.row.id)">编辑</el-button>
|
<el-button type="primary" size="small" link icon="edit" @click="handleOpenDialog('update', scope.row.id)">编辑</el-button>
|
||||||
<el-button type="danger" size="small" link icon="delete" @click="handleDelete([scope.row.id])">删除</el-button>
|
<el-button type="danger" size="small" link icon="delete" @click="handleDelete([scope.row.id])">删除</el-button>
|
||||||
@@ -173,7 +173,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 新增、编辑表单 -->
|
<!-- 新增、编辑表单 -->
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-width="100px">
|
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<el-form-item label="角色名称" prop="name">
|
<el-form-item label="角色名称" prop="name">
|
||||||
<el-input v-model="formData.name" placeholder="请输入角色名称" />
|
<el-input v-model="formData.name" placeholder="请输入角色名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!-- 部门树 -->
|
<!-- 部门树 -->
|
||||||
<template>
|
<template>
|
||||||
<el-card shadow="hover">
|
<el-card shadow="hover">
|
||||||
<el-input v-model="deptName" placeholder="部门名称" clearable>
|
<el-input v-model="deptName" placeholder="部门名称">
|
||||||
<template #prefix>
|
<template #prefix>
|
||||||
<el-icon>
|
<el-icon>
|
||||||
<Search />
|
<Search />
|
||||||
@@ -10,8 +10,11 @@
|
|||||||
</el-input>
|
</el-input>
|
||||||
|
|
||||||
<el-tree ref="deptTreeRef" class="mt-2" :data="deptOptions"
|
<el-tree ref="deptTreeRef" class="mt-2" :data="deptOptions"
|
||||||
:props="{ children: 'children', label: 'label', disabled: '' }" :expand-on-click-node="false"
|
:props="{ children: 'children', label: 'label', disabled: '' }"
|
||||||
:filter-node-method="handleFilter" default-expand-all @node-click="handleNodeClick" >
|
:expand-on-click-node="false"
|
||||||
|
:filter-node-method="handleFilter"
|
||||||
|
default-expand-all
|
||||||
|
@node-click="handleNodeClick" >
|
||||||
<template #empty>
|
<template #empty>
|
||||||
<el-empty :image-size="80" description="暂无数据" />
|
<el-empty :image-size="80" description="暂无数据" />
|
||||||
</template>
|
</template>
|
||||||
@@ -22,6 +25,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import DeptAPI, { DeptPageQuery } from "@/api/system/dept";
|
import DeptAPI, { DeptPageQuery } from "@/api/system/dept";
|
||||||
import { formatTree, listToTree } from "@/utils/common";
|
import { formatTree, listToTree } from "@/utils/common";
|
||||||
|
import type { FilterNodeMethodFunction, TreeInstance } from 'element-plus'
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
@@ -31,30 +35,27 @@ const props = defineProps({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const deptOptions = ref<OptionType[]>([]); // 部门列表
|
const deptOptions = ref<OptionType[]>([]); // 部门列表
|
||||||
const deptTreeRef = ref(); // 部门树
|
const deptTreeRef = ref<TreeInstance>(); // 部门树
|
||||||
const deptName = ref(); // 部门名称
|
const deptName = ref(); // 部门名称
|
||||||
|
|
||||||
const emits = defineEmits(["node-click"]);
|
const emits = defineEmits(["node-click"]);
|
||||||
|
|
||||||
const deptId = useVModel(props, "modelValue", emits);
|
const deptId = useVModel(props, "modelValue", emits);
|
||||||
|
|
||||||
watchEffect(
|
watch(deptName, (val) => {
|
||||||
() => {
|
deptTreeRef.value!.filter(val)
|
||||||
deptTreeRef.value.filter(deptName.value);
|
})
|
||||||
},
|
|
||||||
{
|
interface Tree {
|
||||||
flush: "post", // watchEffect会在DOM挂载或者更新之前就会触发,此属性控制在DOM元素更新后运行
|
[key: string]: any
|
||||||
}
|
}
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 部门筛选
|
* 部门筛选
|
||||||
*/
|
*/
|
||||||
function handleFilter(value: string, data: any) {
|
const handleFilter: FilterNodeMethodFunction = (value: string, data: Tree) => {
|
||||||
if (!value) {
|
if (!value) return true;
|
||||||
return true;
|
return data.label.includes(value)
|
||||||
}
|
|
||||||
return data.label.indexOf(value) !== -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 部门树节点 Click */
|
/** 部门树节点 Click */
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
<el-col :lg="20" :xs="24">
|
<el-col :lg="20" :xs="24">
|
||||||
<!-- 搜索区域 -->
|
<!-- 搜索区域 -->
|
||||||
<div class="search-container">
|
<div class="search-container">
|
||||||
<el-form ref="queryFormRef" :model="queryFormData" :inline="true">
|
<el-form ref="queryFormRef" :model="queryFormData" :inline="true" label-suffix=":" >
|
||||||
<el-form-item prop="username" label="账号">
|
<el-form-item prop="username" label="账号">
|
||||||
<el-input v-model="queryFormData.username" placeholder="请输入账号" clearable />
|
<el-input v-model="queryFormData.username" placeholder="请输入账号" clearable />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -213,7 +213,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<!-- 新增、编辑表单 -->
|
<!-- 新增、编辑表单 -->
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-width="80px">
|
<el-form ref="dataFormRef" :model="formData" :rules="rules" label-suffix=":" label-width="auto" label-position="right">
|
||||||
<el-form-item label="账号" prop="username">
|
<el-form-item label="账号" prop="username">
|
||||||
<el-input v-model="formData.username" :readonly="!!formData.id" placeholder="请输入账号" />
|
<el-input v-model="formData.username" :readonly="!!formData.id" placeholder="请输入账号" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|||||||
@@ -38,9 +38,17 @@ check_dependencies() {
|
|||||||
log "✅ 所有依赖检查通过"
|
log "✅ 所有依赖检查通过"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 停止并删除容器
|
||||||
|
stop_and_remove_containers() {
|
||||||
|
log "==========🗑️ 第三步:终止容器...=========="
|
||||||
|
[ -f "docker-compose.yaml" ] || { log "❌ docker-compose.yaml 文件未找到"; exit 1; }
|
||||||
|
docker compose down
|
||||||
|
log "✅ 容器已停止并删除"
|
||||||
|
}
|
||||||
|
|
||||||
# 更新代码
|
# 更新代码
|
||||||
update_code() {
|
update_code() {
|
||||||
log "==========🔍 第三步:检查项目...=========="
|
log "==========🔍 第四步:检查项目...=========="
|
||||||
cd "${WORK_DIR}" || { log "❌ 无法进入工作目录:${WORK_DIR}"; exit 1; }
|
cd "${WORK_DIR}" || { log "❌ 无法进入工作目录:${WORK_DIR}"; exit 1; }
|
||||||
if [ -d "${PROJECT_NAME}/" ]; then
|
if [ -d "${PROJECT_NAME}/" ]; then
|
||||||
log "🔄 项目已存在,开始更新代码"
|
log "🔄 项目已存在,开始更新代码"
|
||||||
@@ -56,14 +64,6 @@ update_code() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 停止并删除容器
|
|
||||||
stop_and_remove_containers() {
|
|
||||||
log "==========🗑️ 第四步:终止容器...=========="
|
|
||||||
[ -f "docker-compose.yaml" ] || { log "❌ docker-compose.yaml 文件未找到"; exit 1; }
|
|
||||||
docker compose down
|
|
||||||
log "✅ 容器已停止并删除"
|
|
||||||
}
|
|
||||||
|
|
||||||
# 构建前端
|
# 构建前端
|
||||||
build_frontend() {
|
build_frontend() {
|
||||||
log "==========🔍 第五步:检查前端...=========="
|
log "==========🔍 第五步:检查前端...=========="
|
||||||
@@ -107,8 +107,8 @@ main() {
|
|||||||
log "==========🚀 开始部署流程=========="
|
log "==========🚀 开始部署流程=========="
|
||||||
check_permissions
|
check_permissions
|
||||||
check_dependencies
|
check_dependencies
|
||||||
update_code
|
|
||||||
stop_and_remove_containers
|
stop_and_remove_containers
|
||||||
|
update_code
|
||||||
build_frontend
|
build_frontend
|
||||||
build_image
|
build_image
|
||||||
start_containers
|
start_containers
|
||||||
|
|||||||
Reference in New Issue
Block a user