bug fix
This commit is contained in:
@ -113,3 +113,17 @@ export const tenantStatusDict = [
|
||||
elTagType: "warning",
|
||||
},
|
||||
];
|
||||
|
||||
// 初始化状态
|
||||
export const initStatusDict = [
|
||||
{
|
||||
label: "否",
|
||||
value: "0",
|
||||
elTagType: "warning",
|
||||
},
|
||||
{
|
||||
label: "是",
|
||||
value: "1",
|
||||
elTagType: "success",
|
||||
},
|
||||
];
|
||||
|
@ -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`
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
|
Reference in New Issue
Block a user