This commit is contained in:
2023-06-30 17:15:25 +08:00
parent 680d6876ba
commit cf3fed6448
3 changed files with 388 additions and 375 deletions

View File

@ -113,3 +113,17 @@ export const tenantStatusDict = [
elTagType: "warning",
},
];
// 初始化状态
export const initStatusDict = [
{
label: "否",
value: "0",
elTagType: "warning",
},
{
label: "是",
value: "1",
elTagType: "success",
},
];

View File

@ -1,31 +1,31 @@
<template>
<div class="app-container">
<el-form
v-show="showSearch"
ref="queryRef"
:inline="true"
:model="queryParams"
label-width="68px"
v-show="showSearch"
ref="queryRef"
:inline="true"
:model="queryParams"
label-width="68px"
>
<el-form-item label="公司名称" prop="companyName">
<el-input
v-model="queryParams.companyName"
clearable
placeholder="请输入公司名称"
@keyup.enter="handleQuery"
v-model="queryParams.companyName"
clearable
placeholder="请输入公司名称"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="联系人" prop="contactName">
<el-input
v-model="queryParams.contactName"
clearable
placeholder="请输入联系人名称"
@keyup.enter="handleQuery"
v-model="queryParams.contactName"
clearable
placeholder="请输入联系人名称"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button icon="Search" type="primary" @click="handleQuery"
>搜索
>搜索
</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item>
@ -34,223 +34,224 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
v-hasPermi="['tenant:add']"
icon="Plus"
plain
type="primary"
@click="handleAdd"
>新增
v-hasPermi="['tenant:add']"
icon="Plus"
plain
type="primary"
@click="handleAdd"
>新增
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['tenant:edit']"
:disabled="single"
icon="Edit"
plain
type="success"
@click="handleUpdate"
>修改
v-hasPermi="['tenant:edit']"
:disabled="single"
icon="Edit"
plain
type="success"
@click="handleUpdate"
>修改
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['tenant:remove']"
:disabled="multiple"
icon="Delete"
plain
type="danger"
@click="handleDelete"
>删除
v-hasPermi="['tenant:remove']"
:disabled="multiple"
icon="Delete"
plain
type="danger"
@click="handleDelete"
>删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['tenant:export']"
icon="Download"
plain
type="warning"
@click="handleExport"
>导出
v-hasPermi="['tenant:export']"
icon="Download"
plain
type="warning"
@click="handleExport"
>导出
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
v-hasPermi="['tenant:remove']"
icon="Refresh"
plain
type="danger"
@click="handleRefreshCache"
>刷新缓存
v-hasPermi="['tenant:remove']"
icon="Refresh"
plain
type="danger"
@click="handleRefreshCache"
>刷新缓存
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
:disabled="single"
icon="Refresh"
plain
type="primary"
@click="handleInitialize"
>初始化
:disabled="single || ids[0].initialized === '1'"
icon="Refresh"
plain
type="primary"
@click="handleInitialize"
>初始化
</el-button>
</el-col>
<right-toolbar
v-model:showSearch="showSearch"
@queryTable="getList"
v-model:showSearch="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="tenantList"
@selection-change="handleSelectionChange"
v-loading="loading"
:data="tenantList"
@selection-change="handleSelectionChange"
>
<el-table-column align="center" type="selection" width="55"/>
<el-table-column align="center" label="公司名称" prop="companyName"/>
<el-table-column align="center" label="联系人名称" prop="contactName"/>
<el-table-column align="center" label="联系人电话" prop="contactPhone"/>
<el-table-column align="center" type="selection" width="55" />
<el-table-column align="center" label="公司名称" prop="companyName" />
<el-table-column align="center" label="联系人名称" prop="contactName" />
<el-table-column align="center" label="联系人电话" prop="contactPhone" />
<el-table-column
align="center"
label="过期时间"
prop="expireTime"
width="180"
align="center"
label="过期时间"
prop="expireTime"
width="180"
>
<template #default="scope">
<span>{{ parseTime(scope.row.expireTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column align="center" label="用户数量" prop="accountCount"/>
<el-table-column align="center" label="用户数量" prop="accountCount" />
<el-table-column align="center" label="状态">
<template #default="{ row }">
<dict-tag :options="tenantStatusDict" :value="row.status"/>
<dict-tag :options="tenantStatusDict" :value="row.status" />
</template>
</el-table-column>
<el-table-column align="center" label="初始化状态">
<template #default="{ row }">
<el-tag :type="row.initialized === '1' ? 'success' : 'warning'"
>{{ row.initialized === "1" ? "是" : "否" }}
</el-tag>
<!-- <el-tag :type="row.initialized === '1' ? 'success' : 'warning'"-->
<!-- >{{ row.initialized === "1" ? "是" : "否" }}-->
<!-- </el-tag>-->
<dict-tag :options="initStatusDict" :value="row.initialized" />
</template>
</el-table-column>
<el-table-column align="center" label="模式">
<template #default="{ row }">
<dict-tag :options="tenantModeDict" :value="row.mode"/>
<dict-tag :options="tenantModeDict" :value="row.mode" />
</template>
</el-table-column>
<el-table-column
align="center"
class-name="small-padding fixed-width"
label="操作"
width="290"
align="center"
class-name="small-padding fixed-width"
label="操作"
width="290"
>
<template #default="{ row }">
<el-tooltip
:disabled="row.initialized !== '1'"
class="box-item"
content="初始化之后不可再更改"
effect="light"
placement="top"
:disabled="row.initialized !== '1'"
class="box-item"
content="初始化之后不可再更改"
effect="light"
placement="top"
>
<el-button
:disabled="row.initialized === '1'"
icon="Setting"
link
type="primary"
@click="handleSetting(row)"
>模式
:disabled="row.initialized === '1'"
icon="Setting"
link
type="primary"
@click="handleSetting(row)"
>模式
</el-button>
</el-tooltip>
<el-button
v-if="row.mode === '3'"
icon="plus"
link
type="primary"
@click="handleOpenDataSource(row.tenantId)"
>数据源
v-if="row.mode === '3'"
icon="plus"
link
type="primary"
@click="handleOpenDataSource(row.tenantId)"
>数据源
</el-button>
<el-button
v-hasPermi="['tenant:edit']"
icon="Edit"
link
type="primary"
@click="handleUpdate(row)"
>修改
v-hasPermi="['tenant:edit']"
icon="Edit"
link
type="primary"
@click="handleUpdate(row)"
>修改
</el-button>
<el-button
v-hasPermi="['tenant:remove']"
icon="Delete"
link
type="primary"
@click="handleDelete(row)"
>删除
v-hasPermi="['tenant:remove']"
icon="Delete"
link
type="primary"
@click="handleDelete(row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
@pagination="getList"
v-show="total > 0"
v-model:limit="queryParams.pageSize"
v-model:page="queryParams.pageNum"
:total="total"
@pagination="getList"
/>
<!-- 添加或修改租户对话框 -->
<el-dialog
v-model="open"
:title="title"
append-to-body
draggable
width="500px"
v-model="open"
:title="title"
append-to-body
draggable
width="500px"
>
<el-form ref="tenantRef" :model="form" :rules="rules" label-width="130px">
<el-form-item label="公司名称" prop="companyName">
<el-input v-model="form.companyName" placeholder="请输入公司名称"/>
<el-input v-model="form.companyName" placeholder="请输入公司名称" />
</el-form-item>
<el-form-item label="联系人名称" prop="contactName">
<el-input v-model="form.contactName" placeholder="请输入联系人名称"/>
<el-input v-model="form.contactName" placeholder="请输入联系人名称" />
</el-form-item>
<el-form-item label="联系人电话" prop="contactPhone">
<el-input
v-model="form.contactPhone"
placeholder="请输入联系人电话"
v-model="form.contactPhone"
placeholder="请输入联系人电话"
/>
</el-form-item>
<el-form-item label="公司地址" prop="address">
<el-input v-model="form.address" placeholder="请输入公司地址"/>
<el-input v-model="form.address" placeholder="请输入公司地址" />
</el-form-item>
<el-form-item label="公司简介" prop="profile">
<el-input
v-model="form.profile"
placeholder="请输入内容"
type="textarea"
v-model="form.profile"
placeholder="请输入内容"
type="textarea"
/>
</el-form-item>
<el-form-item label="统一社会信用代码" prop="licenseNumber">
<el-input
v-model="form.licenseNumber"
placeholder="请输入统一社会信用代码"
v-model="form.licenseNumber"
placeholder="请输入统一社会信用代码"
/>
</el-form-item>
<el-form-item label="过期时间" prop="expireTime">
<el-date-picker
v-model="form.expireTime"
clearable
placeholder="请选择过期时间"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
v-model="form.expireTime"
clearable
placeholder="请选择过期时间"
type="datetime"
value-format="YYYY-MM-DD HH:mm:ss"
>
</el-date-picker>
</el-form-item>
<el-form-item label="用户数量" prop="accountCount">
<el-input v-model="form.accountCount" placeholder="请输入用户数量"/>
<el-input v-model="form.accountCount" placeholder="请输入用户数量" />
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
v-model="form.remark"
placeholder="请输入内容"
type="textarea"
v-model="form.remark"
placeholder="请输入内容"
type="textarea"
/>
</el-form-item>
</el-form>
@ -264,25 +265,25 @@
<!-- 修改租户模式 -->
<el-dialog
v-model="showTenantSetting"
append-to-body
draggable
title="模式设置"
width="500px"
v-model="showTenantSetting"
append-to-body
draggable
title="模式设置"
width="500px"
>
<el-form
ref="tenantSettingRef"
:model="tenantSettingForm"
:rules="tenantSettingRules"
label-width="0"
ref="tenantSettingRef"
:model="tenantSettingForm"
:rules="tenantSettingRules"
label-width="0"
>
<el-form-item class="mode-setting-radio">
<el-radio-group v-model="tenantSettingForm.mode">
<el-radio
v-for="option in tenantModeDict"
:key="option.value"
:label="option.value"
>{{ option.label }}
v-for="option in tenantModeDict"
:key="option.value"
:label="option.value"
>{{ option.label }}
</el-radio>
</el-radio-group>
</el-form-item>
@ -290,7 +291,7 @@
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitTenantSetting"
>
>
</el-button>
<el-button @click="cancelSettingTenant"> </el-button>
</div>
@ -299,77 +300,77 @@
<!--查看数据源列表-->
<el-dialog
v-model="showDatasourceDialog"
append-to-body
draggable
title="数据源设置"
width="800px"
v-model="showDatasourceDialog"
append-to-body
draggable
title="数据源设置"
width="800px"
>
<!--添加或修改数据源-->
<el-form
v-if="isEditDatasource"
ref="datasourceFormRef"
:model="dataSourceForm"
:rules="dataSourceRules"
label-position="left"
label-width="100px"
v-if="isEditDatasource"
ref="datasourceFormRef"
:model="dataSourceForm"
:rules="dataSourceRules"
label-position="left"
label-width="100px"
>
<el-form-item label="数据库类型" prop="type">
<el-select v-model="dataSourceForm.type">
<el-option
v-for="option in database_type_dict"
:key="option.value"
:label="option.label"
:value="option.value"
v-for="option in database_type_dict"
:key="option.value"
:label="option.label"
:value="option.value"
/>
</el-select>
</el-form-item>
<el-form-item label="数据库IP" prop="ip">
<el-input v-model="dataSourceForm.ip"/>
<el-input v-model="dataSourceForm.ip" />
</el-form-item>
<el-form-item label="数据库端口" prop="port">
<el-input-number
v-model="dataSourceForm.port"
:max="65535"
:min="1"
v-model="dataSourceForm.port"
:max="65535"
:min="1"
/>
</el-form-item>
<el-form-item label="数据库名称" prop="dbName">
<el-input v-model="dataSourceForm.dbName"/>
<el-input v-model="dataSourceForm.dbName" />
</el-form-item>
<!-- schemaName 模式名称 仅当数据库类型不是Mysql时显示 -->
<el-form-item
v-if="dataSourceForm.type !== 'MySQL'"
label="模式名称"
prop="schemaName"
v-if="dataSourceForm.type !== 'MySQL'"
label="模式名称"
prop="schemaName"
>
<el-input v-model="dataSourceForm.schemaName"/>
<el-input v-model="dataSourceForm.schemaName" />
</el-form-item>
<el-form-item label="数据库账号" prop="username">
<el-input v-model="dataSourceForm.username"/>
<el-input v-model="dataSourceForm.username" />
</el-form-item>
<el-form-item label="数据库密码" prop="password">
<el-input v-model="dataSourceForm.password"/>
<el-input v-model="dataSourceForm.password" />
</el-form-item>
<el-form-item label="使用" prop="isPrimary">
<el-switch
v-model="dataSourceForm.isPrimary"
active-value="1"
inactive-value="0"
v-model="dataSourceForm.isPrimary"
active-value="1"
inactive-value="0"
/>
</el-form-item>
<!-- 折叠按钮, 切换折叠状态时有旋转动画效果 -->
<el-divider content-position="left">
<div
class="show-advanced"
@click="showDatasourceAdvanced = !showDatasourceAdvanced"
class="show-advanced"
@click="showDatasourceAdvanced = !showDatasourceAdvanced"
>
<el-icon
:style="`transform: rotate(${
:style="`transform: rotate(${
showDatasourceAdvanced ? 90 : 0
}deg);transition: all 0.3s;`"
>
<ArrowRight/>
<ArrowRight />
</el-icon>
<span>
<!-- 显示或隐藏高级选项 -->
@ -381,22 +382,13 @@
<div v-if="showDatasourceAdvanced">
<!-- initCount minCount maxCount -->
<el-form-item label="初始化连接数" prop="initCount">
<el-input-number
v-model="dataSourceForm.initCount"
:min="0"
/>
<el-input-number v-model="dataSourceForm.initCount" :min="0" />
</el-form-item>
<el-form-item label="最小连接数" prop="minCount">
<el-input-number
v-model="dataSourceForm.minCount"
:min="0"
/>
<el-input-number v-model="dataSourceForm.minCount" :min="0" />
</el-form-item>
<el-form-item label="最大连接数" prop="maxCount">
<el-input-number
v-model="dataSourceForm.maxCount"
:min="0"
/>
<el-input-number v-model="dataSourceForm.maxCount" :min="0" />
</el-form-item>
</div>
</Transition>
@ -405,63 +397,63 @@
<el-row justify="end">
<el-col :span="1.5">
<el-button
icon="plus"
plain
type="primary"
@click="handleAddDataSource"
>新增
icon="plus"
plain
type="primary"
@click="handleAddDataSource"
>新增
</el-button>
</el-col>
</el-row>
<el-table :data="datasource" style="margin-top: 12px">
<el-table-column
align="center"
label="类型"
prop="type"
align="center"
label="类型"
prop="type"
></el-table-column>
<el-table-column
align="center"
label="IP"
prop="ip"
align="center"
label="IP"
prop="ip"
></el-table-column>
<el-table-column
align="center"
label="端口"
prop="port"
align="center"
label="端口"
prop="port"
></el-table-column>
<el-table-column
align="center"
label="名称"
prop="dbName"
align="center"
label="名称"
prop="dbName"
></el-table-column>
<el-table-column
align="center"
label="账号"
prop="username"
align="center"
label="账号"
prop="username"
></el-table-column>
<el-table-column
align="center"
label="密码"
prop="password"
align="center"
label="密码"
prop="password"
></el-table-column>
<el-table-column align="center" label="操作" width="140">
<template #default="{ row }">
<el-button
icon="edit"
link
size="small"
type="warning"
@click="handleUpdateDataSource(row)"
>修改
icon="edit"
link
size="small"
type="warning"
@click="handleUpdateDataSource(row)"
>修改
</el-button>
<el-button
icon="delete"
link
size="small"
type="danger"
@click="handleDeleteDataSource(row)"
>删除
icon="delete"
link
size="small"
type="danger"
@click="handleDeleteDataSource(row)"
>删除
</el-button>
</template>
</el-table-column>
@ -472,12 +464,12 @@
<div class="dialog-footer">
<template v-if="isEditDatasource">
<el-button type="primary" @click="submitDatasource"
>确 定
>
</el-button>
<el-button @click="isEditDatasource = false"> </el-button>
</template>
<el-button v-else type="primary" @click="handleCloseDatasource"
>关闭
>关闭
</el-button>
</div>
</template>
@ -499,15 +491,20 @@ import {
updateDatasource,
updateTenant,
} from "@/api/tenant/tenant";
import {getCurrentInstance, reactive, ref, toRefs} from "vue";
import {ElMessage, ElMessageBox} from "element-plus";
import {database_type_dict, tenantModeDict, tenantStatusDict,} from "@/constant/dict";
import { getCurrentInstance, reactive, ref, toRefs } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import {
database_type_dict,
initStatusDict,
tenantModeDict,
tenantStatusDict,
} from "@/constant/dict";
import DictTag from "@/components/DictTag/index.vue";
import {cloneDeep} from "lodash-es";
import {ArrowRight} from "@element-plus/icons-vue";
import {useRouter} from "vue-router";
import { cloneDeep } from "lodash-es";
import { ArrowRight } from "@element-plus/icons-vue";
import { useRouter } from "vue-router";
const {proxy} = getCurrentInstance();
const { proxy } = getCurrentInstance();
const router = useRouter();
const tenantList = ref([]);
@ -546,7 +543,7 @@ const data = reactive({
},
rules: {
companyName: [
{required: true, message: "公司名称不能为空", trigger: "blur"},
{ required: true, message: "公司名称不能为空", trigger: "blur" },
],
},
tenantSettingForm: {},
@ -713,12 +710,12 @@ const handleAddDataSource = () => {
*/
const handleDeleteDataSource = (row) => {
ElMessageBox.confirm(`确认删除此数据源: ${row.ip}`, "删除数据源", {}).then(
async () => {
await deleteDatasource(row.datasourceId);
ElMessage.success("已删除数据源");
const resp = await datasourceList(tempTenantId.value);
datasource.value = resp.data;
}
async () => {
await deleteDatasource(row.datasourceId);
ElMessage.success("已删除数据源");
const resp = await datasourceList(tempTenantId.value);
datasource.value = resp.data;
}
);
};
@ -829,7 +826,7 @@ const submitTenantSetting = async () => {
const ori = tenantSettingForm.value.oriMode;
const cur = tenantSettingForm.value.mode;
const warningText = () => (
<span style="color:red">
<span style="color:red">
切换到其他模式会清除已有的数据源配置, 是否继续?
</span>
);
@ -849,26 +846,25 @@ const submitTenantSetting = async () => {
function handleDelete(row) {
const _tenantIds = row.tenantId || ids.value;
proxy.$modal
.confirm('是否确认删除租户编号为"' + _tenantIds + '"的数据项')
.then(function () {
return delTenant(_tenantIds);
})
.then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
})
.catch(() => {
});
.confirm('是否确认删除租户编号为"' + _tenantIds + '"的数据项?')
.then(function () {
return delTenant(_tenantIds);
})
.then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
})
.catch(() => {});
}
/** 导出按钮操作 */
function handleExport() {
proxy.download(
"tenant/tenant/export",
{
...queryParams.value,
},
`tenant_${new Date().getTime()}.xlsx`
"tenant/tenant/export",
{
...queryParams.value,
},
`tenant_${new Date().getTime()}.xlsx`
);
}

View File

@ -1,60 +1,60 @@
<template>
<div class="app-container">
<el-steps
:active="activeStep"
:process-status="
:active="activeStep"
:process-status="
currentStepStatus === 0
? 'error'
: currentStepStatus === 1
? 'process'
: 'success'
"
align-center
class="init-steps"
finish-status="success"
align-center
class="init-steps"
finish-status="success"
>
<el-step title="开始"/>
<el-step title="检查"/>
<el-step title="步骤2"/>
<el-step title="步骤3"/>
<el-step title="开始" />
<el-step title="检查" />
<el-step title="步骤2" />
<el-step title="步骤3" />
</el-steps>
<!-- 错误提示 -->
<el-alert
v-if="currentStepStatus === 0"
:closable="false"
:type="
v-if="currentStepStatus === 0"
:closable="false"
:type="
currentStepStatus === 0
? 'error'
: currentStepStatus === 1
? 'info'
: 'success'
"
show-icon
>{{
show-icon
>{{
activeStep === 1
? "错误码: " +
? "错误码: " +
tenantInitCheckResult.result +
", 错误信息: " +
tenantInitCheckResult.msg
: activeStep === 2
? "错误码: " +
createTablesResult.result +
", 错误信息: " +
createTablesResult.msg
: activeStep === 3
? "错误码: " +
initDataResult.result +
", 错误信息: " +
initDataResult.msg
: ""
: activeStep === 2
? "错误码: " +
createTablesResult.result +
", 错误信息: " +
createTablesResult.msg
: activeStep === 3
? "错误码: " +
initDataResult.result +
", 错误信息: " +
initDataResult.msg
: ""
}}
</el-alert>
<!-- 数据库配置信息 -->
<el-row
v-if="Object.keys(tenantInitCheckResult).length"
style="margin: 36px 36px 0"
v-if="Object.keys(tenantInitCheckResult).length"
style="margin: 36px 36px 0"
>
<el-col :span="12">
<div class="data-card init-check-base-data">
@ -67,26 +67,26 @@
<div class="card-content-item">
<span class="card-content-item-title">租户名称:</span>
<span class="card-content-item-value">{{
tenantInitCheckResult.tenantName
}}</span>
tenantInitCheckResult.tenantName
}}</span>
</div>
<!--模式-->
<div class="card-content-item">
<span class="card-content-item-title">模式:</span>
<span class="card-content-item-value">{{
tenantModeDict.find(
(item) => item.value === tenantInitCheckResult.mode
)?.label
}}</span>
tenantModeDict.find(
(item) => item.value === tenantInitCheckResult.mode
)?.label
}}</span>
</div>
</div>
</div>
</el-col>
<el-col :span="12">
<div
v-if="tenantInitCheckResult.datasource"
class="data-card init-check-base-data"
style="margin-left: 24px"
v-if="tenantInitCheckResult.datasource"
class="data-card init-check-base-data"
style="margin-left: 24px"
>
<div class="card-title">
<span>数据源数据</span>
@ -95,43 +95,43 @@
<div class="card-content-item">
<span class="card-content-item-title">数据库IP:</span>
<span class="card-content-item-value">{{
tenantInitCheckResult.datasource.ip
}}</span>
tenantInitCheckResult.datasource.ip
}}</span>
</div>
<!-- 端口-->
<div class="card-content-item">
<span class="card-content-item-title">端口:</span>
<span class="card-content-item-value">{{
tenantInitCheckResult.datasource.port
}}</span>
tenantInitCheckResult.datasource.port
}}</span>
</div>
<!--模式-->
<div class="card-content-item">
<span class="card-content-item-title">类型:</span>
<span class="card-content-item-value">{{
tenantInitCheckResult.datasource.type
}}</span>
tenantInitCheckResult.datasource.type
}}</span>
</div>
<!-- 数据库名称-->
<div class="card-content-item">
<span class="card-content-item-title">数据库名称:</span>
<span class="card-content-item-value">{{
tenantInitCheckResult.datasource.dbName
}}</span>
tenantInitCheckResult.datasource.dbName
}}</span>
</div>
<!-- 用户名-->
<div class="card-content-item">
<span class="card-content-item-title">用户名:</span>
<span class="card-content-item-value">{{
tenantInitCheckResult.datasource.username
}}</span>
tenantInitCheckResult.datasource.username
}}</span>
</div>
<!-- 密码-->
<div class="card-content-item">
<span class="card-content-item-title">密码:</span>
<span class="card-content-item-value">{{
tenantInitCheckResult.datasource.password
}}</span>
tenantInitCheckResult.datasource.password
}}</span>
</div>
</div>
</div>
@ -143,7 +143,7 @@
<el-col :span="1.5">
<div class="btn-loading">
<el-icon size="80">
<refresh/>
<refresh />
</el-icon>
</div>
</el-col>
@ -161,16 +161,16 @@
<el-row justify="center">
<el-col :span="1.5">
<div
v-if="currentStepStatus === 0"
class="circle-button error"
@click="router.push({ path: '/tenant/tenant' })"
v-if="currentStepStatus === 0"
class="circle-button error"
@click="router.push({ path: '/tenant/tenant' })"
>
关闭
</div>
<div
v-else-if="currentStepStatus === 2"
class="circle-button"
@click="initTenant"
v-else-if="currentStepStatus === 2"
class="circle-button"
@click="initTenant"
>
创建库
</div>
@ -181,16 +181,16 @@
<el-row justify="center">
<el-col :span="1.5">
<div
v-if="currentStepStatus === 0"
class="circle-button error"
@click="router.push({ path: '/tenant/tenant' })"
v-if="currentStepStatus === 0"
class="circle-button error"
@click="router.push({ path: '/tenant/tenant' })"
>
关闭
</div>
<div
v-else-if="currentStepStatus === 2"
class="circle-button"
@click="initTenant"
v-else-if="currentStepStatus === 2"
class="circle-button"
@click="initTenant"
>
<span>导入数据</span>
</div>
@ -201,16 +201,16 @@
<el-row justify="center">
<el-col :span="1.5">
<div
v-if="currentStepStatus === 0"
class="circle-button error"
@click="router.push({ path: '/tenant/tenant' })"
v-if="currentStepStatus === 0"
class="circle-button error"
@click="router.push({ path: '/tenant/tenant' })"
>
关闭
</div>
<div
v-else-if="currentStepStatus === 2"
class="circle-button finish"
@click="router.push({ path: '/tenant/tenant' })"
v-else-if="currentStepStatus === 2"
class="circle-button finish"
@click="router.push({ path: '/tenant/tenant' })"
>
完成
</div>
@ -221,11 +221,11 @@
</div>
</template>
<script setup>
import {onMounted, reactive, ref, toRefs, watchEffect} from "vue";
import {check, createTables, initData} from "@/api/tenant/init";
import {useRoute, useRouter} from "vue-router";
import {tenantModeDict} from "@/constant/dict";
import {Refresh} from "@element-plus/icons-vue";
import { onMounted, reactive, ref, toRefs, watchEffect } from "vue";
import { check, createTables, initData } from "@/api/tenant/init";
import { useRoute, useRouter } from "vue-router";
import { tenantModeDict } from "@/constant/dict";
import { Refresh } from "@element-plus/icons-vue";
const route = useRoute();
const router = useRouter();
@ -236,7 +236,7 @@ const loading = ref(false);
if (route.query.id) {
tenantId.value = route.query.id;
} else {
router.push({path: "/tenant/tenant"});
router.push({ path: "/tenant/tenant" });
}
const data = reactive({
@ -245,8 +245,8 @@ const data = reactive({
initDataResult: {},
});
const {tenantInitCheckResult, createTablesResult, initDataResult} =
toRefs(data);
const { tenantInitCheckResult, createTablesResult, initDataResult } =
toRefs(data);
const initTenant = async () => {
loading.value = true;
@ -266,19 +266,20 @@ const tenantInitCheck = () => {
activeStep.value = 1;
currentStepStatus.value = 1;
return check(tenantId.value)
.catch(() => {
.catch(() => {
currentStepStatus.value = 2;
activeStep.value = 0;
throw new Error("租户初始化检查失败");
})
.then((resp) => {
tenantInitCheckResult.value = resp;
if (resp.result === 200) {
currentStepStatus.value = 2;
activeStep.value = 0;
} else {
currentStepStatus.value = 0;
throw new Error("租户初始化检查失败");
}).then((resp) => {
tenantInitCheckResult.value = resp;
if (resp.result === 200) {
currentStepStatus.value = 2;
} else {
currentStepStatus.value = 0;
throw new Error("租户初始化检查失败");
}
})
}
});
};
// 第二步: 创建数据库
@ -287,19 +288,20 @@ const createDatabase = () => {
activeStep.value = 2;
currentStepStatus.value = 1;
return createTables(tenantId.value)
.catch(() => {
.catch(() => {
currentStepStatus.value = 2;
activeStep.value = 1;
throw new Error("创建数据库失败");
})
.then((resp) => {
createTablesResult.value = resp;
if (resp.result === 200) {
currentStepStatus.value = 2;
activeStep.value = 1;
} else {
currentStepStatus.value = 0;
throw new Error("创建数据库失败");
}).then((resp) => {
createTablesResult.value = resp;
if (resp.result === 200) {
currentStepStatus.value = 2;
} else {
currentStepStatus.value = 0;
throw new Error("创建数据库失败");
}
})
}
});
};
// 第三步,导入数据
@ -308,27 +310,28 @@ const importData = () => {
activeStep.value = 3;
currentStepStatus.value = 1;
return initData(tenantId.value)
.catch(() => {
.catch(() => {
currentStepStatus.value = 2;
activeStep.value = 2;
throw new Error("导入数据失败");
})
.then((resp) => {
initDataResult.value = resp;
if (resp.result === 200) {
currentStepStatus.value = 2;
activeStep.value = 2;
} else {
currentStepStatus.value = 0;
throw new Error("导入数据失败");
}).then((resp) => {
initDataResult.value = resp;
if (resp.result === 200) {
currentStepStatus.value = 2;
} else {
currentStepStatus.value = 0;
throw new Error("导入数据失败");
}
})
}
});
};
onMounted(() => {
watchEffect(() => {
let progressLineWidth =
(activeStep.value - 1) * 100 +
Math.abs(currentStepStatus.value - 1) * 30 +
70;
(activeStep.value - 1) * 100 +
Math.abs(currentStepStatus.value - 1) * 30 +
70;
progressLineWidth = progressLineWidth < 100 ? 0 : progressLineWidth;
let progressLineColor;
if (currentStepStatus.value === 0) {
@ -339,11 +342,11 @@ onMounted(() => {
progressLineColor = `linear-gradient(to right, #67c23a ${100}%, #f56c6c ${100}%)`;
}
document
.querySelector(".app-container")
.style.setProperty("--progress-line-color", progressLineColor);
.querySelector(".app-container")
.style.setProperty("--progress-line-color", progressLineColor);
document
.querySelector(".app-container")
.style.setProperty("--progress-line-width", progressLineWidth + "%");
.querySelector(".app-container")
.style.setProperty("--progress-line-width", progressLineWidth + "%");
});
});
</script>