page select 9/10

This commit is contained in:
ailanyin
2023-06-01 17:33:23 +08:00
parent 719669c666
commit 274ce44dfe
12 changed files with 1330 additions and 747 deletions

View File

@ -30,6 +30,7 @@
"nprogress": "0.2.0", "nprogress": "0.2.0",
"pinia": "2.0.22", "pinia": "2.0.22",
"pinia-plugin-persistedstate": "^3.1.0", "pinia-plugin-persistedstate": "^3.1.0",
"v3-infinite-loading": "^1.2.2",
"vue": "3.2.45", "vue": "3.2.45",
"vue-cropper": "1.0.3", "vue-cropper": "1.0.3",
"vue-router": "4.1.4" "vue-router": "4.1.4"

View File

@ -1,6 +1,4 @@
import request from "@/utils/request"; import request from "@/utils/request";
import usePermissionStore from "@/store/modules/permission";
import useUserStore from "@/store/modules/user";
// 登录方法 // 登录方法
export function login(username, password, code, uuid) { export function login(username, password, code, uuid) {
@ -77,3 +75,14 @@ export const getRouters = () => {
method: "get", method: "get",
}); });
}; };
export const getTenantNormalList = (query) => {
return request({
url: "/tenant/normal-list",
headers: {
isToken: false,
},
params: query,
method: "get",
});
};

View File

@ -1,52 +1,52 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询字典数据列表 // 查询字典数据列表
export function listData(query) { export function listData(query) {
return request({ return request({
url: '/system/dict/data/list', url: "/system/dict/data/list",
method: 'get', method: "get",
params: query params: query,
}) });
} }
// 查询字典数据详细 // 查询字典数据详细
export function getData(dictCode) { export function getData(dictCode) {
return request({ return request({
url: '/system/dict/data/' + dictCode, url: "/system/dict/data/" + dictCode,
method: 'get' method: "get",
}) });
} }
// 根据字典类型查询字典数据信息 // 根据字典类型查询字典数据信息
export function getDicts(dictType) { export function getDicts(dictType) {
return request({ return request({
url: '/system/dict/data/type/' + dictType, url: "/system/dict/data/type/" + dictType,
method: 'get' method: "get",
}) });
} }
// 新增字典数据 // 新增字典数据
export function addData(data) { export function addData(data) {
return request({ return request({
url: '/system/dict/data', url: "/system/dict/data",
method: 'post', method: "post",
data: data data: data,
}) });
} }
// 修改字典数据 // 修改字典数据
export function updateData(data) { export function updateData(data) {
return request({ return request({
url: '/system/dict/data', url: "/system/dict/data",
method: 'put', method: "put",
data: data data: data,
}) });
} }
// 删除字典数据 // 删除字典数据
export function delData(dictCode) { export function delData(dictCode) {
return request({ return request({
url: '/system/dict/data/' + dictCode, url: "/system/dict/data/" + dictCode,
method: 'delete' method: "delete",
}) });
} }

View File

@ -1,60 +1,60 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询字典类型列表 // 查询字典类型列表
export function listType(query) { export function listType(query) {
return request({ return request({
url: '/system/dict/type/list', url: "/system/dict/type/list",
method: 'get', method: "get",
params: query params: query,
}) });
} }
// 查询字典类型详细 // 查询字典类型详细
export function getType(dictId) { export function getType(dictId) {
return request({ return request({
url: '/system/dict/type/' + dictId, url: "/system/dict/type/" + dictId,
method: 'get' method: "get",
}) });
} }
// 新增字典类型 // 新增字典类型
export function addType(data) { export function addType(data) {
return request({ return request({
url: '/system/dict/type', url: "/system/dict/type",
method: 'post', method: "post",
data: data data: data,
}) });
} }
// 修改字典类型 // 修改字典类型
export function updateType(data) { export function updateType(data) {
return request({ return request({
url: '/system/dict/type', url: "/system/dict/type",
method: 'put', method: "put",
data: data data: data,
}) });
} }
// 删除字典类型 // 删除字典类型
export function delType(dictId) { export function delType(dictId) {
return request({ return request({
url: '/system/dict/type/' + dictId, url: "/system/dict/type/" + dictId,
method: 'delete' method: "delete",
}) });
} }
// 刷新字典缓存 // 刷新字典缓存
export function refreshCache() { export function refreshCache() {
return request({ return request({
url: '/system/dict/type/refreshCache', url: "/system/dict/type/refreshCache",
method: 'delete' method: "delete",
}) });
} }
// 获取字典选择框列表 // 获取字典选择框列表
export function optionselect() { export function optionselect() {
return request({ return request({
url: '/system/dict/type/optionselect', url: "/system/dict/type/optionselect",
method: 'get' method: "get",
}) });
} }

View File

@ -1,44 +1,44 @@
import request from '@/utils/request' import request from "@/utils/request";
// 查询租户列表 // 查询租户列表
export function listTenant(query) { export function listTenant(query) {
return request({ return request({
url: '/tenant/list', url: "/tenant/list",
method: 'get', method: "get",
params: query params: query,
}) });
} }
// 查询租户详细 // 查询租户详细
export function getTenant(tenantId) { export function getTenant(tenantId) {
return request({ return request({
url: '/tenant/' + tenantId, url: "/tenant/" + tenantId,
method: 'get' method: "get",
}) });
} }
// 新增租户 // 新增租户
export function addTenant(data) { export function addTenant(data) {
return request({ return request({
url: '/tenant', url: "/tenant",
method: 'post', method: "post",
data: data data: data,
}) });
} }
// 修改租户 // 修改租户
export function updateTenant(data) { export function updateTenant(data) {
return request({ return request({
url: '/tenant', url: "/tenant",
method: 'put', method: "put",
data: data data: data,
}) });
} }
// 删除租户 // 删除租户
export function delTenant(tenantId) { export function delTenant(tenantId) {
return request({ return request({
url: '/tenant/' + tenantId, url: "/tenant/" + tenantId,
method: 'delete' method: "delete",
}) });
} }

View File

@ -0,0 +1,306 @@
<script setup>
import { onMounted, ref, toRefs, watch, watchEffect } from "vue";
import InfiniteLoading from "v3-infinite-loading";
import "v3-infinite-loading/lib/style.css";
import { debounce } from "lodash-es"; //required if you're not going to override default slots
const props = defineProps({
modelValue: {},
remoteMethod: {
type: Function,
required: true,
},
size: {
type: String,
},
width: {
type: Number,
},
prefixIcon: { type: String },
query: {
type: Object,
required: true,
},
prop: {
type: Object,
required: true,
},
placeholder: {
type: String,
default: "请选择",
},
defaultLabel: {
type: String,
},
});
const { modelValue } = toRefs(props);
const loadKey = ref(0);
const emit = defineEmits(["update:modelValue", "change"]);
const showPopOver = ref(false);
const placeholderWhenShowPop = ref("");
const placeholderWhenNotShowPop = ref("");
const optionLabelWhenShowPop = ref("");
const optionLabelWhenNotShowPop = ref("");
const echoLabel = ref("");
const label = ref("");
const inputRef = ref();
const options = ref([]);
const page = ref(0);
const initOptions = (keyword) => {
props
.remoteMethod({
[props.query.page]: page.value,
[props.query.size]: 10,
[props.query.searchKey]: keyword,
})
.then((rows) => {
options.value = rows;
});
};
const loadMore = async ($state) => {
console.log("loadmore");
page.value++;
props
.remoteMethod({
[props.query.page]: page.value,
[props.query.size]: 10,
[props.query.searchKey]: showPopOver.value
? optionLabelWhenShowPop.value
: null,
})
.then((rows) => {
options.value.push(...rows);
if (rows.length < 10) {
$state.complete();
} else {
$state.loaded();
}
})
.catch(() => {
$state.error();
});
};
const handleShow = () => {};
const handleHide = () => {
console.log("hide");
};
const handleInputFocus = () => {
console.log("focus");
};
const handleInputClick = () => {
showPopOver.value = true;
// if (label.value) {
// page.value = 0;
// options.value = []
// loadKey.value++;
// }
placeholderWhenShowPop.value = optionLabelWhenNotShowPop.value;
};
const handleInputBlur = () => {
showPopOver.value = false;
if (label.value) {
setTimeout(() => {
page.value = 1;
initOptions();
loadKey.value++;
}, 1000);
}
// label.value = placeholder.value;
// placeholder.value = "";
};
/**
* 点击选项
* @param option
*/
const selectOption = (option) => {
emit("update:modelValue", option[props.prop.value]);
/*重新加载选项*/
if (optionLabelWhenShowPop.value) {
page.value = 0;
options.value = [];
loadKey.value++;
}
showPopOver.value = false;
echoLabel.value = option[props.prop.label];
optionLabelWhenShowPop.value = "";
};
/**
* 输入时,搜索选项
* @type {DebouncedFuncLeading<(function(*): void)|*> | DebouncedFunc<(function(*): void)|*>}
*/
const handleInputChange = debounce((value) => {
page.value = 0;
options.value = [];
loadKey.value++;
}, 500);
watchEffect(() => {
if (showPopOver.value) return;
if (modelValue.value) {
optionLabelWhenNotShowPop.value =
options.value.find((el) => el[props.prop.value] === modelValue.value)?.[
props.prop.label
] ??
echoLabel.value ??
props.defaultLabel ??
"...";
} else {
optionLabelWhenNotShowPop.value = "";
placeholderWhenNotShowPop.value = props.placeholder;
}
});
watch(modelValue, (value) => {
emit("change", value);
});
/**
* 点击空白关闭弹出选项列表
* @param event
*/
const handleBodyClick = (event) => {
if (showPopOver.value) {
if (optionLabelWhenShowPop.value) {
page.value = 0;
options.value = [];
loadKey.value++;
}
showPopOver.value = false;
optionLabelWhenShowPop.value = "";
// optionLabelWhenNotShowPop.value = props.placeholder;
}
};
onMounted(() => {
page.value++;
initOptions();
document.body.addEventListener("click", handleBodyClick);
});
</script>
<template>
<el-popover
:popper-style="{
padding: 0,
}"
:visible="showPopOver"
:width="width ?? 240"
placement="bottom"
@hide="handleHide"
@show="handleShow"
>
<template #reference>
<div :style="`width: ${width ?? 240}px`">
<!--选项显示时-->
<el-input
v-if="showPopOver"
ref="inputRef"
v-model="optionLabelWhenShowPop"
:placeholder="placeholderWhenShowPop"
:prefix-icon="prefixIcon"
:size="size ?? 'default'"
class="select-inner"
suffix-icon="ArrowUp"
@input="handleInputChange"
@click.stop
>
<template #prefix>
<slot name="prefix" />
</template>
</el-input>
<!--选项隐藏时-->
<el-input
v-else
ref="inputRef"
v-model="optionLabelWhenNotShowPop"
:placeholder="placeholderWhenNotShowPop"
:prefix-icon="prefixIcon"
:size="size ?? 'default'"
class="select-inner"
suffix-icon="ArrowDown"
@click.stop="handleInputClick"
>
<!-- @blur="handleInputBlur"-->
<template #prefix>
<slot name="prefix" />
</template>
</el-input>
</div>
</template>
<el-scrollbar class="options-wrap" height="260" @click.stop>
<ul class="options">
<li
v-for="option in options"
:key="option[prop.value]"
:class="`option-item ${
option[prop.value] === modelValue ? 'selected' : null
}`"
@click.stop="selectOption(option)"
>
{{ option[prop.label] }}
</li>
</ul>
<infinite-loading :identifier="loadKey" @infinite="loadMore">
<template #spinner>
<div style="text-align: center; font-size: 12px">......</div>
</template>
<template #complete>
<div
style="display: flex; justify-content: center; align-items: center"
>
-
</div>
</template>
</infinite-loading>
</el-scrollbar>
</el-popover>
</template>
<style lang="scss" scoped>
.options-wrap {
margin: 6px 0;
.options {
list-style: none;
margin: 0;
padding: 0;
.option-item {
height: 32px;
cursor: pointer;
font-size: 14px;
display: flex;
align-items: center;
padding: 0 32px 0 20px;
font-weight: 700;
&.selected {
color: #409eff;
}
&:hover {
background-color: #f5f7fa;
}
}
}
}
.select-inner {
cursor: pointer;
}
</style>

View File

@ -117,18 +117,18 @@ export const dynamicRoutes = [
], ],
}, },
{ {
path: '/system/dict-data', path: "/system/dict-data",
component: Layout, component: Layout,
hidden: true, hidden: true,
permissions: ['system:dict:list'], permissions: ["system:dict:list"],
children: [ children: [
{ {
path: 'index/:dictId(\\d+)', path: "index/:dictId(\\d+)",
component: () => import('@/views/system/dict/data'), component: () => import("@/views/system/dict/data"),
name: 'Data', name: "Data",
meta: { title: '字典数据', activeMenu: '/system/dict' } meta: { title: "字典数据", activeMenu: "/system/dict" },
} },
] ],
}, },
]; ];

View File

@ -8,17 +8,33 @@
> >
<h3 class="title">若依后台管理系统</h3> <h3 class="title">若依后台管理系统</h3>
<el-form-item prop="tenant"> <el-form-item prop="tenant">
<el-input <paged-select
v-model="loginForm.tenant" v-model="loginForm.tenant"
auto-complete="off" :prop="{
placeholder="租户" label: 'companyName',
value: 'tenantId',
}"
:query="{
page: 'pageNum',
size: 'pageSize',
searchKey: 'companyName',
}"
:remote-method="loadTenantOptions"
:width="350"
prefix-icon="OfficeBuilding"
size="large" size="large"
type="text" />
> <!-- <el-input-->
<template #prefix> <!-- v-model="loginForm.tenant"-->
<svg-icon class="el-input__icon input-icon" icon-class="user" /> <!-- auto-complete="off"-->
</template> <!-- placeholder="租户"-->
</el-input> <!-- size="large"-->
<!-- type="text"-->
<!-- >-->
<!-- <template #prefix>-->
<!-- <svg-icon class="el-input__icon input-icon" icon-class="user"/>-->
<!-- </template>-->
<!-- </el-input>-->
</el-form-item> </el-form-item>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input <el-input
@ -70,8 +86,8 @@
<el-checkbox <el-checkbox
v-model="loginForm.rememberMe" v-model="loginForm.rememberMe"
style="margin: 0px 0px 25px 0px" style="margin: 0px 0px 25px 0px"
>记住密码</el-checkbox >记住密码
> </el-checkbox>
<el-form-item style="width: 100%"> <el-form-item style="width: 100%">
<el-button <el-button
:loading="loading" :loading="loading"
@ -85,8 +101,8 @@
</el-button> </el-button>
<div v-if="register" style="float: right"> <div v-if="register" style="float: right">
<router-link :to="'/register'" class="link-type" <router-link :to="'/register'" class="link-type"
>立即注册</router-link >立即注册
> </router-link>
</div> </div>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -98,10 +114,11 @@
</template> </template>
<script setup> <script setup>
import { getCodeImg } from "@/api/login"; import { getCodeImg, getTenantNormalList } from "@/api/login";
import Cookies from "js-cookie"; import Cookies from "js-cookie";
import { decrypt, encrypt } from "@/utils/jsencrypt"; import { decrypt, encrypt } from "@/utils/jsencrypt";
import useUserStore from "@/store/modules/user"; import useUserStore from "@/store/modules/user";
import PagedSelect from "@/components/PagedSelect";
const userStore = useUserStore(); const userStore = useUserStore();
const router = useRouter(); const router = useRouter();
@ -117,7 +134,7 @@ const loginForm = ref({
}); });
const loginRules = { const loginRules = {
tenant: [{ required: true, trigger: "blur", message: "请输入租户" }], tenant: [{ required: true, trigger: "change", message: "请选择租户" }],
username: [{ required: true, trigger: "blur", message: "请输入您的账号" }], username: [{ required: true, trigger: "blur", message: "请输入您的账号" }],
password: [{ required: true, trigger: "blur", message: "请输入您的密码" }], password: [{ required: true, trigger: "blur", message: "请输入您的密码" }],
code: [{ required: true, trigger: "change", message: "请输入验证码" }], code: [{ required: true, trigger: "change", message: "请输入验证码" }],
@ -191,6 +208,9 @@ function getCookie() {
}; };
} }
const loadTenantOptions = (query) =>
getTenantNormalList(query).then((resp) => resp.rows);
getCode(); getCode();
getCookie(); getCookie();
</script> </script>

View File

@ -71,6 +71,7 @@
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
prefix=""
v-hasPermi="['system:config:remove']" v-hasPermi="['system:config:remove']"
:disabled=" :disabled="
multiple || multiple ||

View File

@ -1,6 +1,11 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch"> <el-form
:model="queryParams"
ref="queryRef"
:inline="true"
v-show="showSearch"
>
<el-form-item label="字典标签" prop="dictLabel"> <el-form-item label="字典标签" prop="dictLabel">
<el-input <el-input
v-model="queryParams.dictLabel" v-model="queryParams.dictLabel"
@ -11,7 +16,12 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="数据状态" clearable style="width: 200px"> <el-select
v-model="queryParams.status"
placeholder="数据状态"
clearable
style="width: 200px"
>
<el-option <el-option
v-for="dict in sys_normal_disable" v-for="dict in sys_normal_disable"
:key="dict.value" :key="dict.value"
@ -21,7 +31,9 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery"
>搜索</el-button
>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -34,7 +46,8 @@
icon="Plus" icon="Plus"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:dict:add']" v-hasPermi="['system:dict:add']"
>新增</el-button> >新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -44,7 +57,8 @@
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:dict:edit']" v-hasPermi="['system:dict:edit']"
>修改</el-button> >修改</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -54,7 +68,8 @@
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:dict:remove']" v-hasPermi="['system:dict:remove']"
>删除</el-button> >删除</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -63,26 +78,38 @@
icon="Download" icon="Download"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:dict:export']" v-hasPermi="['system:dict:export']"
>导出</el-button> >导出</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="warning" plain icon="Close" @click="handleClose"
type="warning" >关闭</el-button
plain >
icon="Close"
@click="handleClose"
>关闭</el-button>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
v-model:showSearch="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange"> <el-table
v-loading="loading"
:data="dataList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="字典编码" align="center" prop="dictCode" /> <el-table-column label="字典编码" align="center" prop="dictCode" />
<el-table-column label="字典标签" align="center" prop="dictLabel"> <el-table-column label="字典标签" align="center" prop="dictLabel">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.listClass == '' || scope.row.listClass == 'default'">{{ scope.row.dictLabel }}</span> <span
<el-tag v-else :type="scope.row.listClass == 'primary' ? '' : scope.row.listClass">{{ scope.row.dictLabel }}</el-tag> v-if="scope.row.listClass == '' || scope.row.listClass == 'default'"
>{{ scope.row.dictLabel }}</span
>
<el-tag
v-else
:type="scope.row.listClass == 'primary' ? '' : scope.row.listClass"
>{{ scope.row.dictLabel }}</el-tag
>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="字典键值" align="center" prop="dictValue" /> <el-table-column label="字典键值" align="center" prop="dictValue" />
@ -92,16 +119,45 @@
<dict-tag :options="sys_normal_disable" :value="scope.row.status" /> <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" /> <el-table-column
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> label="备注"
align="center"
prop="remark"
:show-overflow-tooltip="true"
/>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
width="180"
>
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width"> <el-table-column
label="操作"
align="center"
width="160"
class-name="small-padding fixed-width"
>
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:dict:edit']">修改</el-button> <el-button
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:dict:remove']">删除</el-button> link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:dict:edit']"
>修改</el-button
>
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:dict:remove']"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -130,7 +186,11 @@
<el-input v-model="form.cssClass" placeholder="请输入样式属性" /> <el-input v-model="form.cssClass" placeholder="请输入样式属性" />
</el-form-item> </el-form-item>
<el-form-item label="显示排序" prop="dictSort"> <el-form-item label="显示排序" prop="dictSort">
<el-input-number v-model="form.dictSort" controls-position="right" :min="0" /> <el-input-number
v-model="form.dictSort"
controls-position="right"
:min="0"
/>
</el-form-item> </el-form-item>
<el-form-item label="回显样式" prop="listClass"> <el-form-item label="回显样式" prop="listClass">
<el-select v-model="form.listClass"> <el-select v-model="form.listClass">
@ -148,11 +208,16 @@
v-for="dict in sys_normal_disable" v-for="dict in sys_normal_disable"
:key="dict.value" :key="dict.value"
:label="dict.value" :label="dict.value"
>{{ dict.label }}</el-radio> >{{ dict.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> <el-input
v-model="form.remark"
type="textarea"
placeholder="请输入内容"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -166,9 +231,18 @@
</template> </template>
<script setup name="Data"> <script setup name="Data">
import useDictStore from '@/store/modules/dict' import useDictStore from "@/store/modules/dict";
import { optionselect as getDictOptionselect, getType } from "@/api/system/dict/type"; import {
import { listData, getData, delData, addData, updateData } from "@/api/system/dict/data"; optionselect as getDictOptionselect,
getType,
} from "@/api/system/dict/type";
import {
listData,
getData,
delData,
addData,
updateData,
} from "@/api/system/dict/data";
import { sys_normal_disable } from "@/constant/dict"; import { sys_normal_disable } from "@/constant/dict";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
@ -192,7 +266,7 @@ const listClassOptions = ref([
{ value: "success", label: "成功" }, { value: "success", label: "成功" },
{ value: "info", label: "信息" }, { value: "info", label: "信息" },
{ value: "warning", label: "警告" }, { value: "warning", label: "警告" },
{ value: "danger", label: "危险" } { value: "danger", label: "危险" },
]); ]);
const data = reactive({ const data = reactive({
@ -202,20 +276,26 @@ const data = reactive({
pageSize: 10, pageSize: 10,
dictName: undefined, dictName: undefined,
dictType: undefined, dictType: undefined,
status: undefined status: undefined,
}, },
rules: { rules: {
dictLabel: [{ required: true, message: "数据标签不能为空", trigger: "blur" }], dictLabel: [
dictValue: [{ required: true, message: "数据键值不能为空", trigger: "blur" }], { required: true, message: "数据标签不能为空", trigger: "blur" },
dictSort: [{ required: true, message: "数据顺序不能为空", trigger: "blur" }] ],
} dictValue: [
{ required: true, message: "数据键值不能为空", trigger: "blur" },
],
dictSort: [
{ required: true, message: "数据顺序不能为空", trigger: "blur" },
],
},
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
/** 查询字典类型详细 */ /** 查询字典类型详细 */
function getTypes(dictId) { function getTypes(dictId) {
getType(dictId).then(response => { getType(dictId).then((response) => {
queryParams.value.dictType = response.data.dictType; queryParams.value.dictType = response.data.dictType;
defaultDictType.value = response.data.dictType; defaultDictType.value = response.data.dictType;
getList(); getList();
@ -224,14 +304,14 @@ function getTypes(dictId) {
/** 查询字典类型列表 */ /** 查询字典类型列表 */
function getTypeList() { function getTypeList() {
getDictOptionselect().then(response => { getDictOptionselect().then((response) => {
typeOptions.value = response.data; typeOptions.value = response.data;
}); });
} }
/** 查询字典数据列表 */ /** 查询字典数据列表 */
function getList() { function getList() {
loading.value = true; loading.value = true;
listData(queryParams.value).then(response => { listData(queryParams.value).then((response) => {
dataList.value = response.rows; dataList.value = response.rows;
total.value = response.total; total.value = response.total;
loading.value = false; loading.value = false;
@ -252,7 +332,7 @@ function reset() {
listClass: "default", listClass: "default",
dictSort: 0, dictSort: 0,
status: "1", status: "1",
remark: undefined remark: undefined,
}; };
proxy.resetForm("dataRef"); proxy.resetForm("dataRef");
} }
@ -280,7 +360,7 @@ function handleAdd() {
} }
/** 多选框选中数据 */ /** 多选框选中数据 */
function handleSelectionChange(selection) { function handleSelectionChange(selection) {
ids.value = selection.map(item => item.dictCode); ids.value = selection.map((item) => item.dictCode);
single.value = selection.length != 1; single.value = selection.length != 1;
multiple.value = !selection.length; multiple.value = !selection.length;
} }
@ -288,7 +368,7 @@ function handleSelectionChange(selection) {
function handleUpdate(row) { function handleUpdate(row) {
reset(); reset();
const dictCode = row.dictCode || ids.value; const dictCode = row.dictCode || ids.value;
getData(dictCode).then(response => { getData(dictCode).then((response) => {
form.value = response.data; form.value = response.data;
open.value = true; open.value = true;
title.value = "修改字典数据"; title.value = "修改字典数据";
@ -296,17 +376,17 @@ function handleUpdate(row) {
} }
/** 提交按钮 */ /** 提交按钮 */
function submitForm() { function submitForm() {
proxy.$refs["dataRef"].validate(valid => { proxy.$refs["dataRef"].validate((valid) => {
if (valid) { if (valid) {
if (form.value.dictCode != undefined) { if (form.value.dictCode != undefined) {
updateData(form.value).then(response => { updateData(form.value).then((response) => {
useDictStore().removeDict(queryParams.value.dictType); useDictStore().removeDict(queryParams.value.dictType);
proxy.$modal.msgSuccess("修改成功"); proxy.$modal.msgSuccess("修改成功");
open.value = false; open.value = false;
getList(); getList();
}); });
} else { } else {
addData(form.value).then(response => { addData(form.value).then((response) => {
useDictStore().removeDict(queryParams.value.dictType); useDictStore().removeDict(queryParams.value.dictType);
proxy.$modal.msgSuccess("新增成功"); proxy.$modal.msgSuccess("新增成功");
open.value = false; open.value = false;
@ -319,19 +399,27 @@ function submitForm() {
/** 删除按钮操作 */ /** 删除按钮操作 */
function handleDelete(row) { function handleDelete(row) {
const dictCodes = row.dictCode || ids.value; const dictCodes = row.dictCode || ids.value;
proxy.$modal.confirm('是否确认删除字典编码为"' + dictCodes + '"的数据项?').then(function() { proxy.$modal
.confirm('是否确认删除字典编码为"' + dictCodes + '"的数据项?')
.then(function () {
return delData(dictCodes); return delData(dictCodes);
}).then(() => { })
.then(() => {
getList(); getList();
proxy.$modal.msgSuccess("删除成功"); proxy.$modal.msgSuccess("删除成功");
useDictStore().removeDict(queryParams.value.dictType); useDictStore().removeDict(queryParams.value.dictType);
}).catch(() => {}); })
.catch(() => {});
} }
/** 导出按钮操作 */ /** 导出按钮操作 */
function handleExport() { function handleExport() {
proxy.download("system/dict/data/export", { proxy.download(
...queryParams.value "system/dict/data/export",
}, `dict_data_${new Date().getTime()}.xlsx`); {
...queryParams.value,
},
`dict_data_${new Date().getTime()}.xlsx`
);
} }
getTypes(route.params && route.params.dictId); getTypes(route.params && route.params.dictId);

View File

@ -1,6 +1,12 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form
:model="queryParams"
ref="queryRef"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="字典名称" prop="dictName"> <el-form-item label="字典名称" prop="dictName">
<el-input <el-input
v-model="queryParams.dictName" v-model="queryParams.dictName"
@ -35,7 +41,9 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery"
>搜索</el-button
>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -48,7 +56,8 @@
icon="Plus" icon="Plus"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['system:dict:add']" v-hasPermi="['system:dict:add']"
>新增</el-button> >新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -58,7 +67,8 @@
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['system:dict:edit']" v-hasPermi="['system:dict:edit']"
>修改</el-button> >修改</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -68,7 +78,8 @@
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['system:dict:remove']" v-hasPermi="['system:dict:remove']"
>删除</el-button> >删除</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -77,7 +88,8 @@
icon="Download" icon="Download"
@click="handleExport" @click="handleExport"
v-hasPermi="['system:dict:export']" v-hasPermi="['system:dict:export']"
>导出</el-button> >导出</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -86,18 +98,38 @@
icon="Refresh" icon="Refresh"
@click="handleRefreshCache" @click="handleRefreshCache"
v-hasPermi="['system:dict:remove']" v-hasPermi="['system:dict:remove']"
>刷新缓存</el-button> >刷新缓存</el-button
>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
v-model:showSearch="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="typeList" @selection-change="handleSelectionChange"> <el-table
v-loading="loading"
:data="typeList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="字典编号" align="center" prop="dictId" /> <el-table-column label="字典编号" align="center" prop="dictId" />
<el-table-column label="字典名称" align="center" prop="dictName" :show-overflow-tooltip="true"/> <el-table-column
<el-table-column label="字典类型" align="center" :show-overflow-tooltip="true"> label="字典名称"
align="center"
prop="dictName"
:show-overflow-tooltip="true"
/>
<el-table-column
label="字典类型"
align="center"
:show-overflow-tooltip="true"
>
<template #default="scope"> <template #default="scope">
<router-link :to="'/system/dict-data/index/' + scope.row.dictId" class="link-type"> <router-link
:to="'/system/dict-data/index/' + scope.row.dictId"
class="link-type"
>
<span>{{ scope.row.dictType }}</span> <span>{{ scope.row.dictType }}</span>
</router-link> </router-link>
</template> </template>
@ -107,16 +139,45 @@
<dict-tag :options="sys_normal_disable" :value="scope.row.status" /> <dict-tag :options="sys_normal_disable" :value="scope.row.status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="备注" align="center" prop="remark" :show-overflow-tooltip="true" /> <el-table-column
<el-table-column label="创建时间" align="center" prop="createTime" width="180"> label="备注"
align="center"
prop="remark"
:show-overflow-tooltip="true"
/>
<el-table-column
label="创建时间"
align="center"
prop="createTime"
width="180"
>
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.createTime) }}</span> <span>{{ parseTime(scope.row.createTime) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width"> <el-table-column
label="操作"
align="center"
width="160"
class-name="small-padding fixed-width"
>
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:dict:edit']">修改</el-button> <el-button
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:dict:remove']">删除</el-button> link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:dict:edit']"
>修改</el-button
>
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:dict:remove']"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -144,11 +205,16 @@
v-for="dict in sys_normal_disable" v-for="dict in sys_normal_disable"
:key="dict.value" :key="dict.value"
:label="dict.value" :label="dict.value"
>{{ dict.label }}</el-radio> >{{ dict.label }}</el-radio
>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"></el-input> <el-input
v-model="form.remark"
type="textarea"
placeholder="请输入内容"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -162,13 +228,19 @@
</template> </template>
<script setup name="Dict"> <script setup name="Dict">
import useDictStore from '@/store/modules/dict' import useDictStore from "@/store/modules/dict";
import { listType, getType, delType, addType, updateType, refreshCache } from "@/api/system/dict/type"; import {
listType,
getType,
delType,
addType,
updateType,
refreshCache,
} from "@/api/system/dict/type";
import { sys_normal_disable } from "@/constant/dict"; import { sys_normal_disable } from "@/constant/dict";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const typeList = ref([]); const typeList = ref([]);
const open = ref(false); const open = ref(false);
const loading = ref(true); const loading = ref(true);
@ -187,11 +259,15 @@ const data = reactive({
pageSize: 10, pageSize: 10,
dictName: undefined, dictName: undefined,
dictType: undefined, dictType: undefined,
status: undefined status: undefined,
}, },
rules: { rules: {
dictName: [{ required: true, message: "字典名称不能为空", trigger: "blur" }], dictName: [
dictType: [{ required: true, message: "字典类型不能为空", trigger: "blur" }] { required: true, message: "字典名称不能为空", trigger: "blur" },
],
dictType: [
{ required: true, message: "字典类型不能为空", trigger: "blur" },
],
}, },
}); });
@ -200,11 +276,13 @@ const { queryParams, form, rules } = toRefs(data);
/** 查询字典类型列表 */ /** 查询字典类型列表 */
function getList() { function getList() {
loading.value = true; loading.value = true;
listType(proxy.addDateRange(queryParams.value, dateRange.value)).then(response => { listType(proxy.addDateRange(queryParams.value, dateRange.value)).then(
(response) => {
typeList.value = response.rows; typeList.value = response.rows;
total.value = response.total; total.value = response.total;
loading.value = false; loading.value = false;
}); }
);
} }
/** 取消按钮 */ /** 取消按钮 */
function cancel() { function cancel() {
@ -218,7 +296,7 @@ function reset() {
dictName: undefined, dictName: undefined,
dictType: undefined, dictType: undefined,
status: "1", status: "1",
remark: undefined remark: undefined,
}; };
proxy.resetForm("dictRef"); proxy.resetForm("dictRef");
} }
@ -241,7 +319,7 @@ function handleAdd() {
} }
/** 多选框选中数据 */ /** 多选框选中数据 */
function handleSelectionChange(selection) { function handleSelectionChange(selection) {
ids.value = selection.map(item => item.dictId); ids.value = selection.map((item) => item.dictId);
single.value = selection.length != 1; single.value = selection.length != 1;
multiple.value = !selection.length; multiple.value = !selection.length;
} }
@ -249,7 +327,7 @@ function handleSelectionChange(selection) {
function handleUpdate(row) { function handleUpdate(row) {
reset(); reset();
const dictId = row.dictId || ids.value; const dictId = row.dictId || ids.value;
getType(dictId).then(response => { getType(dictId).then((response) => {
form.value = response.data; form.value = response.data;
open.value = true; open.value = true;
title.value = "修改字典类型"; title.value = "修改字典类型";
@ -257,16 +335,16 @@ function handleUpdate(row) {
} }
/** 提交按钮 */ /** 提交按钮 */
function submitForm() { function submitForm() {
proxy.$refs["dictRef"].validate(valid => { proxy.$refs["dictRef"].validate((valid) => {
if (valid) { if (valid) {
if (form.value.dictId != undefined) { if (form.value.dictId != undefined) {
updateType(form.value).then(response => { updateType(form.value).then((response) => {
proxy.$modal.msgSuccess("修改成功"); proxy.$modal.msgSuccess("修改成功");
open.value = false; open.value = false;
getList(); getList();
}); });
} else { } else {
addType(form.value).then(response => { addType(form.value).then((response) => {
proxy.$modal.msgSuccess("新增成功"); proxy.$modal.msgSuccess("新增成功");
open.value = false; open.value = false;
getList(); getList();
@ -278,18 +356,26 @@ function submitForm() {
/** 删除按钮操作 */ /** 删除按钮操作 */
function handleDelete(row) { function handleDelete(row) {
const dictIds = row.dictId || ids.value; const dictIds = row.dictId || ids.value;
proxy.$modal.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?').then(function() { proxy.$modal
.confirm('是否确认删除字典编号为"' + dictIds + '"的数据项?')
.then(function () {
return delType(dictIds); return delType(dictIds);
}).then(() => { })
.then(() => {
getList(); getList();
proxy.$modal.msgSuccess("删除成功"); proxy.$modal.msgSuccess("删除成功");
}).catch(() => {}); })
.catch(() => {});
} }
/** 导出按钮操作 */ /** 导出按钮操作 */
function handleExport() { function handleExport() {
proxy.download("system/dict/type/export", { proxy.download(
...queryParams.value "system/dict/type/export",
}, `dict_${new Date().getTime()}.xlsx`); {
...queryParams.value,
},
`dict_${new Date().getTime()}.xlsx`
);
} }
/** 刷新缓存按钮操作 */ /** 刷新缓存按钮操作 */
function handleRefreshCache() { function handleRefreshCache() {

View File

@ -1,6 +1,12 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px"> <el-form
:model="queryParams"
ref="queryRef"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="公司名称" prop="companyName"> <el-form-item label="公司名称" prop="companyName">
<el-input <el-input
v-model="queryParams.companyName" v-model="queryParams.companyName"
@ -18,7 +24,9 @@
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="Search" @click="handleQuery"
>搜索</el-button
>
<el-button icon="Refresh" @click="resetQuery">重置</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -31,7 +39,8 @@
icon="Plus" icon="Plus"
@click="handleAdd" @click="handleAdd"
v-hasPermi="['tenant:add']" v-hasPermi="['tenant:add']"
>新增</el-button> >新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -41,7 +50,8 @@
:disabled="single" :disabled="single"
@click="handleUpdate" @click="handleUpdate"
v-hasPermi="['tenant:edit']" v-hasPermi="['tenant:edit']"
>修改</el-button> >修改</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -51,7 +61,8 @@
:disabled="multiple" :disabled="multiple"
@click="handleDelete" @click="handleDelete"
v-hasPermi="['tenant:remove']" v-hasPermi="['tenant:remove']"
>删除</el-button> >删除</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
@ -60,29 +71,60 @@
icon="Download" icon="Download"
@click="handleExport" @click="handleExport"
v-hasPermi="['tenant:export']" v-hasPermi="['tenant:export']"
>导出</el-button> >导出</el-button
>
</el-col> </el-col>
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar
v-model:showSearch="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="tenantList" @selection-change="handleSelectionChange"> <el-table
v-loading="loading"
:data="tenantList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="编码" align="center" prop="tenantId" /> <el-table-column label="编码" align="center" prop="tenantId" />
<el-table-column label="公司名称" align="center" prop="companyName" /> <el-table-column label="公司名称" align="center" prop="companyName" />
<el-table-column label="联系人名称" align="center" prop="contactName" /> <el-table-column label="联系人名称" align="center" prop="contactName" />
<el-table-column label="联系人电话" align="center" prop="contactPhone" /> <el-table-column label="联系人电话" align="center" prop="contactPhone" />
<el-table-column label="公司地址" align="center" prop="address" /> <el-table-column label="公司地址" align="center" prop="address" />
<el-table-column label="过期时间" align="center" prop="expireTime" width="180"> <el-table-column
label="过期时间"
align="center"
prop="expireTime"
width="180"
>
<template #default="scope"> <template #default="scope">
<span>{{ parseTime(scope.row.expireTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.expireTime, "{y}-{m}-{d}") }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="用户数量" align="center" prop="accountCount" /> <el-table-column label="用户数量" align="center" prop="accountCount" />
<el-table-column label="状态" align="center" prop="status" /> <el-table-column label="状态" align="center" prop="status" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template #default="scope"> <template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['tenant:edit']">修改</el-button> <el-button
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['tenant:remove']">删除</el-button> link
type="primary"
icon="Edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['tenant:edit']"
>修改</el-button
>
<el-button
link
type="primary"
icon="Delete"
@click="handleDelete(scope.row)"
v-hasPermi="['tenant:remove']"
>删除</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -105,30 +147,46 @@
<el-input v-model="form.contactName" placeholder="请输入联系人名称" /> <el-input v-model="form.contactName" placeholder="请输入联系人名称" />
</el-form-item> </el-form-item>
<el-form-item label="联系人电话" prop="contactPhone"> <el-form-item label="联系人电话" prop="contactPhone">
<el-input v-model="form.contactPhone" placeholder="请输入联系人电话" /> <el-input
v-model="form.contactPhone"
placeholder="请输入联系人电话"
/>
</el-form-item> </el-form-item>
<el-form-item label="公司地址" prop="address"> <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>
<el-form-item label="公司简介" prop="profile"> <el-form-item label="公司简介" prop="profile">
<el-input v-model="form.profile" type="textarea" placeholder="请输入内容" /> <el-input
v-model="form.profile"
type="textarea"
placeholder="请输入内容"
/>
</el-form-item> </el-form-item>
<el-form-item label="统一社会信用代码" prop="licenseNumber"> <el-form-item label="统一社会信用代码" prop="licenseNumber">
<el-input v-model="form.licenseNumber" placeholder="请输入统一社会信用代码" /> <el-input
v-model="form.licenseNumber"
placeholder="请输入统一社会信用代码"
/>
</el-form-item> </el-form-item>
<el-form-item label="过期时间" prop="expireTime"> <el-form-item label="过期时间" prop="expireTime">
<el-date-picker clearable <el-date-picker
clearable
v-model="form.expireTime" v-model="form.expireTime"
type="datetime" type="datetime"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择过期时间"> placeholder="请选择过期时间"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="用户数量" prop="accountCount"> <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>
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input
v-model="form.remark"
type="textarea"
placeholder="请输入内容"
/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
@ -142,7 +200,13 @@
</template> </template>
<script setup name="Tenant"> <script setup name="Tenant">
import { listTenant, getTenant, delTenant, addTenant, updateTenant } from "@/api/tenant/tenant"; import {
listTenant,
getTenant,
delTenant,
addTenant,
updateTenant,
} from "@/api/tenant/tenant";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
@ -176,9 +240,9 @@
}, },
rules: { rules: {
companyName: [ companyName: [
{ required: true, message: "公司名称不能为空", trigger: "blur" } { required: true, message: "公司名称不能为空", trigger: "blur" },
], ],
} },
}); });
const { queryParams, form, rules } = toRefs(data); const { queryParams, form, rules } = toRefs(data);
@ -186,7 +250,7 @@
/** 查询租户列表 */ /** 查询租户列表 */
function getList() { function getList() {
loading.value = true; loading.value = true;
listTenant(queryParams.value).then(response => { listTenant(queryParams.value).then((response) => {
tenantList.value = response.rows; tenantList.value = response.rows;
total.value = response.total; total.value = response.total;
loading.value = false; loading.value = false;
@ -217,7 +281,7 @@
createTime: null, createTime: null,
updateUser: null, updateUser: null,
updateTime: null, updateTime: null,
remark: null remark: null,
}; };
proxy.resetForm("tenantRef"); proxy.resetForm("tenantRef");
} }
@ -236,7 +300,7 @@
// 多选框选中数据 // 多选框选中数据
function handleSelectionChange(selection) { function handleSelectionChange(selection) {
ids.value = selection.map(item => item.tenantId); ids.value = selection.map((item) => item.tenantId);
single.value = selection.length != 1; single.value = selection.length != 1;
multiple.value = !selection.length; multiple.value = !selection.length;
} }
@ -251,8 +315,8 @@
/** 修改按钮操作 */ /** 修改按钮操作 */
function handleUpdate(row) { function handleUpdate(row) {
reset(); reset();
const _tenantId = row.tenantId || ids.value const _tenantId = row.tenantId || ids.value;
getTenant(_tenantId).then(response => { getTenant(_tenantId).then((response) => {
form.value = response.data; form.value = response.data;
open.value = true; open.value = true;
title.value = "修改租户"; title.value = "修改租户";
@ -261,16 +325,16 @@
/** 提交按钮 */ /** 提交按钮 */
function submitForm() { function submitForm() {
proxy.$refs["tenantRef"].validate(valid => { proxy.$refs["tenantRef"].validate((valid) => {
if (valid) { if (valid) {
if (form.value.tenantId != null) { if (form.value.tenantId != null) {
updateTenant(form.value).then(response => { updateTenant(form.value).then((response) => {
proxy.$modal.msgSuccess("修改成功"); proxy.$modal.msgSuccess("修改成功");
open.value = false; open.value = false;
getList(); getList();
}); });
} else { } else {
addTenant(form.value).then(response => { addTenant(form.value).then((response) => {
proxy.$modal.msgSuccess("新增成功"); proxy.$modal.msgSuccess("新增成功");
open.value = false; open.value = false;
getList(); getList();
@ -283,19 +347,27 @@
/** 删除按钮操作 */ /** 删除按钮操作 */
function handleDelete(row) { function handleDelete(row) {
const _tenantIds = row.tenantId || ids.value; const _tenantIds = row.tenantId || ids.value;
proxy.$modal.confirm('是否确认删除租户编号为"' + _tenantIds + '"的数据项?').then(function() { proxy.$modal
.confirm('是否确认删除租户编号为"' + _tenantIds + '"的数据项?')
.then(function () {
return delTenant(_tenantIds); return delTenant(_tenantIds);
}).then(() => { })
.then(() => {
getList(); getList();
proxy.$modal.msgSuccess("删除成功"); proxy.$modal.msgSuccess("删除成功");
}).catch(() => {}); })
.catch(() => {});
} }
/** 导出按钮操作 */ /** 导出按钮操作 */
function handleExport() { function handleExport() {
proxy.download('tenant/tenant/export', { proxy.download(
...queryParams.value "tenant/tenant/export",
}, `tenant_${new Date().getTime()}.xlsx`) {
...queryParams.value,
},
`tenant_${new Date().getTime()}.xlsx`
);
} }
getList(); getList();