This commit is contained in:
2023-06-30 17:26:47 +08:00
parent cf3fed6448
commit 6cfa15b7ee

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,95 +34,95 @@
<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 || ids[0].initialized === '1'"
icon="Refresh"
plain
type="primary"
@click="handleInitialize"
>初始化
:disabled="single || isInit(ids[0])"
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="初始化状态">
@ -130,128 +130,128 @@
<!-- <el-tag :type="row.initialized === '1' ? 'success' : 'warning'"-->
<!-- >{{ row.initialized === "1" ? "是" : "否" }}-->
<!-- </el-tag>-->
<dict-tag :options="initStatusDict" :value="row.initialized" />
<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>
@ -265,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>
@ -291,7 +291,7 @@
<template #footer>
<div class="dialog-footer">
<el-button type="primary" @click="submitTenantSetting"
>
>
</el-button>
<el-button @click="cancelSettingTenant"> </el-button>
</div>
@ -300,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>
<!-- 显示或隐藏高级选项 -->
@ -382,13 +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>
@ -397,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>
@ -464,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>
@ -491,20 +491,15 @@ import {
updateDatasource,
updateTenant,
} from "@/api/tenant/tenant";
import { getCurrentInstance, reactive, ref, toRefs } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import {
database_type_dict,
initStatusDict,
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([]);
@ -543,7 +538,7 @@ const data = reactive({
},
rules: {
companyName: [
{ required: true, message: "公司名称不能为空", trigger: "blur" },
{required: true, message: "公司名称不能为空", trigger: "blur"},
],
},
tenantSettingForm: {},
@ -615,6 +610,13 @@ const {
} = toRefs(data);
const datasource = ref([]);
const isInit = (tenantId) => {
console.log(tenantId)
console.log((tenantList.value.find(el => el.tenantId === tenantId)?.initialized === '1'))
return (tenantList.value.find(el => el.tenantId === tenantId)?.initialized === '1')
}
/** 查询租户列表 */
function getList() {
loading.value = true;
@ -710,12 +712,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;
}
);
};
@ -826,7 +828,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>
);
@ -846,25 +848,26 @@ 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`
);
}