1. 统一化代码

2. 增加 DocAlert 关联文档
This commit is contained in:
YunaiV
2023-04-05 20:13:35 +08:00
parent bb88e3d77c
commit 4404554cfc
111 changed files with 640 additions and 567 deletions

View File

@ -36,11 +36,11 @@ const formRules = reactive({
const formRef = ref() // Ref
/** 打开弹窗 */
const openModal = async () => {
const open = async () => {
dialogVisible.value = true
resetForm()
}
defineExpose({ openModal }) // openModal
defineExpose({ open }) // open
/** 提交表单 */
const submitForm = async () => {

View File

@ -1,13 +1,15 @@
<template>
<doc-alert title="地区 & IP" url="https://doc.iocoder.cn/area-and-ip/" />
<!-- 操作栏 -->
<content-wrap>
<el-button type="primary" plain @click="openModal()">
<ContentWrap>
<el-button type="primary" plain @click="openForm()">
<Icon icon="ep:plus" class="mr-5px" /> IP 查询
</el-button>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<div style="width: 100%; height: 700px">
<!-- AutoResizer 自动调节大小 -->
<el-auto-resizer>
@ -23,14 +25,14 @@
</template>
</el-auto-resizer>
</div>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<area-form ref="modalRef" />
<AreaForm ref="formRef" />
</template>
<script setup lang="tsx" name="Area">
import type { Column } from 'element-plus'
import AreaForm from './form.vue'
import AreaForm from './AreaForm.vue'
import * as AreaApi from '@/api/system/area'
// 表格的 column 字段
@ -59,9 +61,9 @@ const getList = async () => {
}
/** 添加/修改操作 */
const modalRef = ref()
const openModal = () => {
modalRef.value.openModal()
const formRef = ref()
const openForm = () => {
formRef.value.open()
}
/** 初始化 **/

View File

@ -11,7 +11,7 @@
<el-tree-select
v-model="formData.parentId"
:data="deptTree"
:props="{ value: 'id', label: 'name', children: 'children' }"
:props="defaultProps"
value-key="deptId"
placeholder="请选择上级部门"
check-strictly
@ -25,12 +25,7 @@
<el-input-number v-model="formData.sort" controls-position="right" :min="0" />
</el-form-item>
<el-form-item label="负责人" prop="leaderUserId">
<el-select
v-model="formData.leaderUserId"
placeholder="请输入负责人"
clearable
style="width: 100%"
>
<el-select v-model="formData.leaderUserId" placeholder="请输入负责人" clearable>
<el-option
v-for="item in userList"
:key="item.id"
@ -64,7 +59,7 @@
</template>
<script setup lang="ts">
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { handleTree } from '@/utils/tree'
import { handleTree, defaultProps } from '@/utils/tree'
import * as DeptApi from '@/api/system/dept'
import * as UserApi from '@/api/system/user'
import { CommonStatusEnum } from '@/utils/constants'
@ -93,7 +88,8 @@ const formRules = reactive({
email: [{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }],
phone: [
{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: '请输入正确的手机号码', trigger: 'blur' }
]
],
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
})
const formRef = ref() // 表单 Ref
const deptTree = ref() // 树形结构
@ -109,7 +105,7 @@ const open = async (type: string, id?: number) => {
if (id) {
formLoading.value = true
try {
formData.value = await DeptApi.getDeptApi(id)
formData.value = await DeptApi.getDept(id)
} finally {
formLoading.value = false
}
@ -133,10 +129,10 @@ const submitForm = async () => {
try {
const data = formData.value as unknown as DeptApi.DeptVO
if (formType.value === 'create') {
await DeptApi.createDeptApi(data)
await DeptApi.createDept(data)
message.success(t('common.createSuccess'))
} else {
await DeptApi.updateDeptApi(data)
await DeptApi.updateDept(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false

View File

@ -51,7 +51,13 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" row-key="id" default-expand-all v-if="refreshTable">
<el-table
v-loading="loading"
:data="list"
row-key="id"
:default-expand-all="isExpandAll"
v-if="refreshTable"
>
<el-table-column prop="name" label="部门名称" width="260" />
<el-table-column prop="leader" label="负责人" width="120">
<template #default="scope">
@ -125,7 +131,7 @@ const userList = ref<UserApi.UserVO[]>([]) // 用户列表
const getList = async () => {
loading.value = true
try {
const data = await DeptApi.getDeptPageApi(queryParams)
const data = await DeptApi.getDeptPage(queryParams)
list.value = handleTree(data)
} finally {
loading.value = false
@ -136,7 +142,6 @@ const getList = async () => {
const toggleExpandAll = () => {
refreshTable.value = false
isExpandAll.value = !isExpandAll.value
console.log(isExpandAll.value)
nextTick(() => {
refreshTable.value = true
})
@ -166,7 +171,7 @@ const handleDelete = async (id: number) => {
// 删除的二次确认
await message.delConfirm()
// 发起删除
await DeptApi.deleteDeptApi(id)
await DeptApi.deleteDept(id)
message.success(t('common.delSuccess'))
// 刷新列表
await getList()

View File

@ -20,14 +20,14 @@
<el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)"
:label="parseInt(dict.value)"
>{{ dict.label }}</el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
@ -39,10 +39,9 @@
</Dialog>
</template>
<script setup lang="ts">
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import * as DictTypeApi from '@/api/system/dict/dict.type'
import { CommonStatusEnum } from '@/utils/constants'
const { t } = useI18n() //
const message = useMessage() //
@ -64,7 +63,7 @@ const formRules = reactive({
const formRef = ref() // Ref
/** 打开弹窗 */
const openModal = async (type: string, id?: number) => {
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
@ -79,7 +78,7 @@ const openModal = async (type: string, id?: number) => {
}
}
}
defineExpose({ openModal }) // openModal
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success

View File

@ -26,11 +26,12 @@
<el-form-item label="状态" prop="status">
<el-radio-group v-model="formData.status">
<el-radio
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)"
:label="parseInt(dict.value)"
>{{ dict.label }}</el-radio
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.value"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="颜色类型" prop="colorType">
@ -57,7 +58,7 @@
</Dialog>
</template>
<script setup lang="ts">
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import * as DictDataApi from '@/api/system/dict/dict.data'
import { CommonStatusEnum } from '@/utils/constants'
const { t } = useI18n() //
@ -114,7 +115,7 @@ const colorTypeOptions = readonly([
])
/** 打开弹窗 */
const openModal = async (type: string, id?: number) => {
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
@ -129,7 +130,7 @@ const openModal = async (type: string, id?: number) => {
}
}
}
defineExpose({ openModal }) // openModal
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success

View File

@ -1,5 +1,5 @@
<template>
<content-wrap>
<ContentWrap>
<el-form
class="-mb-15px"
:model="queryParams"
@ -9,7 +9,12 @@
>
<el-form-item label="字典名称" prop="dictType">
<el-select v-model="queryParams.dictType" class="!w-240px">
<el-option v-for="item in dicts" :key="item.type" :label="item.name" :value="item.type" />
<el-option
v-for="item in dictTypeList"
:key="item.type"
:label="item.name"
:value="item.type"
/>
</el-select>
</el-form-item>
<el-form-item label="字典标签" prop="label">
@ -24,7 +29,7 @@
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="数据状态" clearable class="!w-240px">
<el-option
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)"
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -34,7 +39,12 @@
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button type="primary" @click="openModal('create')" v-hasPermi="['system:dict:create']">
<el-button
type="primary"
plain
@click="openForm('create')"
v-hasPermi="['system:dict:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
@ -48,10 +58,10 @@
</el-button>
</el-form-item>
</el-form>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="字典编码" align="center" prop="id" />
<el-table-column label="字典标签" align="center" prop="label" />
@ -77,7 +87,7 @@
<el-button
link
type="primary"
@click="openModal('update', scope.row.id)"
@click="openForm('update', scope.row.id)"
v-hasPermi="['system:dict:update']"
>
修改
@ -100,18 +110,18 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<data-form ref="modalRef" @success="getList" />
<DictDataForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts" name="Data">
<script setup lang="ts" name="DictData">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import * as DictDataApi from '@/api/system/dict/dict.data'
import * as DictTypeApi from '@/api/system/dict/dict.type'
import { getDictOptions, DICT_TYPE } from '@/utils/dict'
import download from '@/utils/download'
import { dateFormatter } from '@/utils/formatTime'
import DataForm from './data.form.vue'
import DictDataForm from './DictDataForm.vue'
const message = useMessage() //
const { t } = useI18n() //
const route = useRoute() //
@ -128,7 +138,7 @@ const queryParams = reactive({
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
const dicts = ref<DictTypeApi.DictTypeVO[]>() //
const dictTypeList = ref<DictTypeApi.DictTypeVO[]>() //
/** 查询列表 */
const getList = async () => {
@ -155,9 +165,9 @@ const resetQuery = () => {
}
/** 添加/修改操作 */
const modalRef = ref()
const openModal = (type: string, id?: number) => {
modalRef.value.openModal(type, id)
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
@ -188,15 +198,10 @@ const handleExport = async () => {
}
}
/** 查询字典(精简)列表 */
const getDictList = async () => {
dicts.value = await DictTypeApi.getSimpleDictTypeList()
}
/** 初始化 **/
onMounted(() => {
getList()
onMounted(async () => {
await getList()
// )
getDictList()
dictTypeList.value = await DictTypeApi.getSimpleDictTypeList()
})
</script>

View File

@ -1,6 +1,6 @@
<template>
<!-- 搜索工作栏 -->
<content-wrap>
<ContentWrap>
<el-form
class="-mb-15px"
:model="queryParams"
@ -27,10 +27,15 @@
/>
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="字典状态" clearable class="!w-240px">
<el-select
v-model="queryParams.status"
placeholder="请选择字典状态"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)"
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
@ -53,7 +58,7 @@
<el-button
type="primary"
plain
@click="openModal('create')"
@click="openForm('create')"
v-hasPermi="['system:dict:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
@ -69,10 +74,10 @@
</el-button>
</el-form-item>
</el-form>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="字典编号" align="center" prop="id" />
<el-table-column label="字典名称" align="center" prop="name" show-overflow-tooltip />
@ -95,7 +100,7 @@
<el-button
link
type="primary"
@click="openModal('update', scope.row.id)"
@click="openForm('update', scope.row.id)"
v-hasPermi="['system:dict:update']"
>
修改
@ -121,17 +126,17 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<dict-type-form ref="modalRef" @success="getList" />
<DictTypeForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts" name="Dict">
import { getDictOptions, DICT_TYPE } from '@/utils/dict'
<script setup lang="ts" name="DictType">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import * as DictTypeApi from '@/api/system/dict/dict.type'
import DictTypeForm from './form.vue'
import DictTypeForm from './DictTypeForm.vue'
import download from '@/utils/download'
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
@ -175,9 +180,9 @@ const resetQuery = () => {
}
/** 添加/修改操作 */
const modalRef = ref()
const openModal = (type: string, id?: number) => {
modalRef.value.openModal(type, id)
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */

View File

@ -53,7 +53,7 @@ const formRules = reactive({
const formRef = ref() // Ref
/** 打开弹窗 */
const openModal = async (type: string, id?: number) => {
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
@ -62,13 +62,13 @@ const openModal = async (type: string, id?: number) => {
if (id) {
formLoading.value = true
try {
formData.value = await ErrorCodeApi.getErrorCodeApi(id)
formData.value = await ErrorCodeApi.getErrorCode(id)
} finally {
formLoading.value = false
}
}
}
defineExpose({ openModal }) // openModal
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
@ -82,10 +82,10 @@ const submitForm = async () => {
try {
const data = formData.value as ErrorCodeApi.ErrorCodeVO
if (formType.value === 'create') {
await ErrorCodeApi.createErrorCodeApi(data)
await ErrorCodeApi.createErrorCode(data)
message.success(t('common.createSuccess'))
} else {
await ErrorCodeApi.updateErrorCodeApi(data)
await ErrorCodeApi.updateErrorCode(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false

View File

@ -1,6 +1,8 @@
<template>
<doc-alert title="异常处理(错误码)" url="https://doc.iocoder.cn/exception/" />
<!-- 搜索工作栏 -->
<content-wrap>
<ContentWrap>
<el-form
class="-mb-15px"
:model="queryParams"
@ -11,7 +13,7 @@
<el-form-item label="错误码类型" prop="type">
<el-select v-model="queryParams.type" placeholder="请选择错误码类型" clearable>
<el-option
v-for="dict in getDictOptions(DICT_TYPE.SYSTEM_ERROR_CODE_TYPE)"
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_ERROR_CODE_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -34,6 +36,7 @@
placeholder="请输入错误码编码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="错误码提示" prop="message">
@ -62,7 +65,7 @@
<el-button
type="primary"
plain
@click="openModal('create')"
@click="openForm('create')"
v-hasPermi="['system:error-code:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
@ -78,10 +81,10 @@
</el-button>
</el-form-item>
</el-form>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="类型" align="center" prop="type" width="80">
@ -105,7 +108,7 @@
<el-button
link
type="primary"
@click="openModal('update', scope.row.id)"
@click="openForm('update', scope.row.id)"
v-hasPermi="['system:error-code:update']"
>
编辑
@ -128,30 +131,25 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<error-code-form ref="modalRef" @success="getList" />
<ErrorCodeForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts" name="ErrorCode">
import * as ErrorCodeApi from '@/api/system/errorCode'
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import ErrorCodeForm from './form.vue'
import download from '@/utils/download'
import * as ErrorCodeApi from '@/api/system/errorCode'
import ErrorCodeForm from './ErrorCodeForm.vue'
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
// 遮罩层
const loading = ref(true)
// 导出遮罩层
const exportLoading = ref(false)
// 总条数
const total = ref(0)
// 错误码列表
const list = ref([])
// 查询参数
const loading = ref(true) // 遮罩层
const exportLoading = ref(false) // 导出遮罩层
const total = ref(0) // 总条数
const list = ref([]) // 错误码列表
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
@ -161,15 +159,13 @@ const queryParams = reactive({
message: undefined,
createTime: []
})
// 搜索的表单
const queryFormRef = ref()
const queryFormRef = ref() // 搜索的表单
/** 查询列表 */
const getList = async () => {
loading.value = true
// 执行查询
try {
const data = await ErrorCodeApi.getErrorCodePageApi(queryParams)
const data = await ErrorCodeApi.getErrorCodePage(queryParams)
list.value = data.list
total.value = data.total
} finally {
@ -190,9 +186,9 @@ const resetQuery = () => {
}
/** 添加/修改操作 */
const modalRef = ref()
const openModal = (type: string, id?: number) => {
modalRef.value.openModal(type, id)
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
@ -200,7 +196,7 @@ const handleDelete = async (id: number) => {
try {
// 删除的二次确认
await message.delConfirm()
await ErrorCodeApi.deleteErrorCodeApi(id)
await ErrorCodeApi.deleteErrorCode(id)
message.success(t('common.delSuccess'))
// 刷新列表
await getList()
@ -214,7 +210,7 @@ const handleExport = async () => {
await message.exportConfirm()
// 发起导出
exportLoading.value = true
const data = await ErrorCodeApi.excelErrorCodeApi(queryParams)
const data = await ErrorCodeApi.excelErrorCode(queryParams)
download.excel(data, '错误码.xls')
} catch {
} finally {

View File

@ -1,5 +1,7 @@
<template>
<content-wrap>
<doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
@ -51,10 +53,10 @@
</el-button>
</el-form-item>
</el-form>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="日志编号" align="center" prop="id" />
<el-table-column label="操作类型" align="center" prop="logType">
@ -97,7 +99,7 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗详情 -->
<LoginLogDetail ref="detailRef" />

View File

@ -10,7 +10,6 @@
<script setup lang="ts">
import * as MailAccountApi from '@/api/system/mail/account'
import { rules, allSchemas } from './account.data'
const { t } = useI18n() //
const message = useMessage() //
@ -21,7 +20,7 @@ const formType = ref('') // 表单的类型create - 新增update - 修改
const formRef = ref() // Ref
/** 打开弹窗 */
const openModal = async (type: string, id?: number) => {
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
@ -36,7 +35,7 @@ const openModal = async (type: string, id?: number) => {
}
}
}
defineExpose({ openModal }) // openModal
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success

View File

@ -1,6 +1,5 @@
import type { CrudSchema } from '@/hooks/web/useCrudSchemas'
import { dateFormatter } from '@/utils/formatTime'
const { t } = useI18n() // 国际化
// 表单校验

View File

@ -1,23 +1,25 @@
<template>
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
<!-- 搜索工作栏 -->
<content-wrap>
<ContentWrap>
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams">
<!-- 新增等操作按钮 -->
<template #actionMore>
<el-button
type="primary"
plain
@click="openModal('create')"
@click="openForm('create')"
v-hasPermi="['system:mail-account:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
</template>
</Search>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<Table
:columns="allSchemas.tableColumns"
:data="tableObject.tableList"
@ -32,7 +34,7 @@
<el-button
link
type="primary"
@click="openModal('update', row.id)"
@click="openForm('update', row.id)"
v-hasPermi="['system:mail-account:update']"
>
编辑
@ -47,15 +49,15 @@
</el-button>
</template>
</Table>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<mail-account-form ref="modalRef" @success="getList" />
<MailAccountForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts" name="MailAccount">
import { allSchemas } from './account.data'
import * as MailAccountApi from '@/api/system/mail/account'
import MailAccountForm from './form.vue'
import MailAccountForm from './MailAccountForm.vue'
// tableObject表格的属性对象可获得分页大小、条数等属性
// tableMethods表格的操作对象可进行获得分页、删除记录等操作
@ -68,9 +70,9 @@ const { tableObject, tableMethods } = useTable({
const { getList, setSearchParams } = tableMethods
/** 添加/修改操作 */
const modalRef = ref()
const openModal = (type: string, id?: number) => {
modalRef.value.openModal(type, id)
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */

View File

@ -17,7 +17,7 @@ const detailLoading = ref(false) // 表单的加载中
const detailData = ref() //
/** 打开弹窗 */
const openModal = async (id: number) => {
const open = async (id: number) => {
dialogVisible.value = true
//
detailLoading.value = true
@ -27,5 +27,5 @@ const openModal = async (id: number) => {
detailLoading.value = false
}
}
defineExpose({ openModal }) // openModal
defineExpose({ open }) // open
</script>

View File

@ -1,11 +1,13 @@
<template>
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
<!-- 搜索工作栏 -->
<content-wrap>
<ContentWrap>
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<Table
:columns="allSchemas.tableColumns"
:data="tableObject.tableList"
@ -20,22 +22,22 @@
<el-button
link
type="primary"
@click="openModal(row.id)"
@click="openDetail(row.id)"
v-hasPermi="['system:mail-log:query']"
>
详情
</el-button>
</template>
</Table>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗详情 -->
<mail-log-detail ref="modalRef" />
<mail-log-detail ref="detailRef" />
</template>
<script setup lang="ts" name="MailLog">
import { allSchemas } from './log.data'
import * as MailLogApi from '@/api/system/mail/log'
import MailLogDetail from './detail.vue'
import MailLogDetail from './MailLogDetail.vue'
// tableObject表格的属性对象可获得分页大小、条数等属性
// tableMethods表格的操作对象可进行获得分页、删除记录等操作
@ -47,9 +49,9 @@ const { tableObject, tableMethods } = useTable({
const { getList, setSearchParams } = tableMethods
/** 详情操作 */
const modalRef = ref()
const openModal = (id: number) => {
modalRef.value.openModal(id)
const detailRef = ref()
const openDetail = (id: number) => {
detailRef.value.open(id)
}
/** 初始化 **/

View File

@ -3,7 +3,7 @@ import { dateFormatter } from '@/utils/formatTime'
import * as MailAccountApi from '@/api/system/mail/account'
// 邮箱账号的列表
const accounts = await MailAccountApi.getSimpleMailAccountList()
const accountList = await MailAccountApi.getSimpleMailAccountList()
// CrudSchemahttps://kailong110120130.gitee.io/vue-element-plus-admin-doc/hooks/useCrudSchemas.html
const crudSchemas = reactive<CrudSchema[]>([
@ -74,7 +74,7 @@ const crudSchemas = reactive<CrudSchema[]>([
search: {
show: true,
component: 'Select',
api: () => accounts,
api: () => accountList,
componentProps: {
optionsAlias: {
labelField: 'mail',

View File

@ -16,7 +16,6 @@
<script setup lang="ts">
import * as MailTemplateApi from '@/api/system/mail/template'
import { allSchemas, rules } from './template.data'
const { t } = useI18n() //
const message = useMessage() //
@ -27,7 +26,7 @@ const formType = ref('') // 表单的类型create - 新增update - 修改
const formRef = ref() // Ref
/** 打开弹窗 */
const openModal = async (type: string, id?: number) => {
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
@ -42,7 +41,7 @@ const openModal = async (type: string, id?: number) => {
}
}
}
defineExpose({ openModal }) // openModal
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success

View File

@ -33,7 +33,6 @@
</template>
<script setup lang="ts">
import * as MailTemplateApi from '@/api/system/mail/template'
const message = useMessage() //
const dialogVisible = ref(false) //
@ -53,7 +52,7 @@ const formRules = reactive({
const formRef = ref() // Ref
/** 打开弹窗 */
const openModal = async (id: number) => {
const open = async (id: number) => {
dialogVisible.value = true
resetForm()
//
@ -76,7 +75,7 @@ const openModal = async (id: number) => {
formLoading.value = false
}
}
defineExpose({ openModal }) // openModal
defineExpose({ open }) // open
/** 提交表单 */
const submitForm = async () => {

View File

@ -1,23 +1,25 @@
<template>
<doc-alert title="邮件配置" url="https://doc.iocoder.cn/mail" />
<!-- 搜索工作栏 -->
<content-wrap>
<ContentWrap>
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams">
<!-- 新增等操作按钮 -->
<template #actionMore>
<el-button
type="primary"
plain
@click="openModal('create')"
@click="openForm('create')"
v-hasPermi="['system:mail-account:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
</template>
</Search>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<Table
:columns="allSchemas.tableColumns"
:data="tableObject.tableList"
@ -32,7 +34,7 @@
<el-button
link
type="primary"
@click="openSend(row.id)"
@click="openSendForm(row.id)"
v-hasPermi="['system:mail-template:send-mail']"
>
测试
@ -40,7 +42,7 @@
<el-button
link
type="primary"
@click="openModal('update', row.id)"
@click="openForm('update', row.id)"
v-hasPermi="['system:mail-template:update']"
>
编辑
@ -55,19 +57,19 @@
</el-button>
</template>
</Table>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<mail-template-form ref="modalRef" @success="getList" />
<MailTemplateForm ref="formRef" @success="getList" />
<!-- 表单弹窗发送测试 -->
<mail-template-send ref="sendRef" />
<MailTemplateSendForm ref="sendFormRef" />
</template>
<script setup lang="ts" name="MailTemplate">
import { allSchemas } from './template.data'
import * as MailTemplateApi from '@/api/system/mail/template'
import MailTemplateForm from './form.vue'
import MailTemplateSend from './send.vue'
import MailTemplateForm from './MailTemplateForm.vue'
import MailTemplateSendForm from './MailTemplateSendForm.vue'
// tableObject表格的属性对象可获得分页大小、条数等属性
// tableMethods表格的操作对象可进行获得分页、删除记录等操作
@ -80,9 +82,9 @@ const { tableObject, tableMethods } = useTable({
const { getList, setSearchParams } = tableMethods
/** 添加/修改操作 */
const modalRef = ref()
const openModal = (type: string, id?: number) => {
modalRef.value.openModal(type, id)
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */
@ -91,9 +93,9 @@ const handleDelete = (id: number) => {
}
/** 发送测试操作 */
const sendRef = ref()
const openSend = (id: number) => {
sendRef.value.openModal(id)
const sendFormRef = ref()
const openSendForm = (id: number) => {
sendFormRef.value.open(id)
}
/** 初始化 **/

View File

@ -4,7 +4,7 @@ import { TableColumn } from '@/types/table'
import * as MailAccountApi from '@/api/system/mail/account'
// 邮箱账号的列表
const accounts = await MailAccountApi.getSimpleMailAccountList()
const accountList = await MailAccountApi.getSimpleMailAccountList()
// 表单校验
export const rules = reactive({
@ -49,12 +49,12 @@ const crudSchemas = reactive<CrudSchema[]>([
field: 'accountId',
width: '200px',
formatter: (_: Recordable, __: TableColumn, cellValue: number) => {
return accounts.find((account) => account.id === cellValue)?.mail
return accountList.find((account) => account.id === cellValue)?.mail
},
search: {
show: true,
component: 'Select',
api: () => accounts,
api: () => accountList,
componentProps: {
optionsAlias: {
labelField: 'mail',
@ -64,7 +64,7 @@ const crudSchemas = reactive<CrudSchema[]>([
},
form: {
component: 'Select',
api: () => accounts,
api: () => accountList,
componentProps: {
optionsAlias: {
labelField: 'mail',

View File

@ -163,7 +163,7 @@ const open = async (type: string, id?: number, parentId?: number) => {
if (id) {
formLoading.value = true
try {
formData.value = await MenuApi.getMenuApi(id)
formData.value = await MenuApi.getMenu(id)
} finally {
formLoading.value = false
}

View File

@ -1,4 +1,7 @@
<template>
<doc-alert title="功能权限" url="https://doc.iocoder.cn/resource-permission" />
<doc-alert title="菜单路由" url="https://doc.iocoder.cn/vue2/route/" />
<!-- 搜索工作栏 -->
<ContentWrap>
<el-form

View File

@ -16,7 +16,7 @@
<el-form-item label="公告类型" prop="type">
<el-select v-model="formData.type" placeholder="请选择公告类型" clearable>
<el-option
v-for="dict in getDictOptions(DICT_TYPE.SYSTEM_NOTICE_TYPE)"
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_NOTICE_TYPE)"
:key="parseInt(dict.value)"
:label="dict.label"
:value="parseInt(dict.value)"
@ -26,7 +26,7 @@
<el-form-item label="状态" prop="status">
<el-select v-model="formData.status" placeholder="请选择状态" clearable>
<el-option
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)"
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)"
:label="dict.label"
:value="parseInt(dict.value)"
@ -44,7 +44,8 @@
</Dialog>
</template>
<script setup lang="ts">
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { CommonStatusEnum } from '@/utils/constants'
import * as NoticeApi from '@/api/system/notice'
const { t } = useI18n() //
const message = useMessage() //
@ -58,7 +59,7 @@ const formData = ref({
title: '',
type: undefined,
content: '',
status: undefined,
status: CommonStatusEnum.ENABLE,
remark: ''
})
const formRules = reactive({
@ -70,7 +71,7 @@ const formRules = reactive({
const formRef = ref() // Ref
/** 打开弹窗 */
const openModal = async (type: string, id?: number) => {
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
@ -85,7 +86,7 @@ const openModal = async (type: string, id?: number) => {
}
}
}
defineExpose({ openModal }) // openModal
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
@ -120,7 +121,7 @@ const resetForm = () => {
title: '',
type: undefined,
content: '',
status: undefined,
status: CommonStatusEnum.ENABLE,
remark: ''
}
formRef.value?.resetFields()

View File

@ -1,5 +1,5 @@
<template>
<content-wrap>
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
@ -25,10 +25,10 @@
class="!w-240px"
>
<el-option
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)"
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
:value="dict.value"
/>
</el-select>
</el-form-item>
@ -38,17 +38,17 @@
<el-button
type="primary"
plain
@click="openModal('create')"
@click="openForm('create')"
v-hasPermi="['system:notice:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
</el-form-item>
</el-form>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="公告编号" align="center" prop="id" />
<el-table-column label="公告标题" align="center" prop="title" />
@ -74,7 +74,7 @@
<el-button
link
type="primary"
@click="openModal('update', scope.row.id)"
@click="openForm('update', scope.row.id)"
v-hasPermi="['system:notice:update']"
>
编辑
@ -97,17 +97,16 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<notice-form ref="modalRef" @success="getList" />
<NoticeForm ref="formRef" @success="getList" />
</template>
<script setup lang="tsx">
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import * as NoticeApi from '@/api/system/notice'
import { DictTag } from '@/components/DictTag'
import NoticeForm from './form.vue'
import NoticeForm from './NoticeForm.vue'
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
@ -148,9 +147,9 @@ const resetQuery = () => {
}
/** 添加/修改操作 */
const modalRef = ref()
const openModal = (type: string, id?: number) => {
modalRef.value.openModal(type, id)
const formRef = ref()
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */

View File

@ -1,5 +1,7 @@
<template>
<content-wrap>
<doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
@ -72,10 +74,10 @@
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
</el-form-item>
</el-form>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="用户类型" align="center" prop="userType">
@ -146,7 +148,7 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗详情 -->
<NotifyMessageDetail ref="detailRef" />

View File

@ -1,5 +1,7 @@
<template>
<content-wrap>
<doc-alert title="站内信配置" url="https://doc.iocoder.cn/notify/" />
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
@ -45,10 +47,10 @@
</el-button>
</el-form-item>
</el-form>
</content-wrap>
</ContentWrap>
<content-wrap>
<!-- 列表 -->
<!-- 列表 -->
<ContentWrap>
<el-table
v-loading="loading"
:data="list"
@ -107,7 +109,7 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗详情 -->
<MyNotifyMessageDetail ref="detailRef" />

View File

@ -1,6 +1,8 @@
<template>
<doc-alert title="OAuth 2.0SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />
<!-- 搜索 -->
<content-wrap>
<ContentWrap>
<el-form
class="-mb-15px"
:model="queryParams"
@ -40,10 +42,10 @@
</el-button>
</el-form-item>
</el-form>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="客户端编号" align="center" prop="clientId" />
<el-table-column label="客户端密钥" align="center" prop="secret" />
@ -71,6 +73,7 @@
:key="index"
v-for="(authorizedGrantType, index) in scope.row.authorizedGrantTypes"
:index="index"
class="mr-5px"
>
{{ authorizedGrantType }}
</el-tag>
@ -111,7 +114,7 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<ClientForm ref="formRef" @success="getList" />

View File

@ -1,5 +1,7 @@
<template>
<content-wrap>
<doc-alert title="OAuth 2.0SSO 单点登录)" url="https://doc.iocoder.cn/oauth2/" />
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
@ -46,10 +48,10 @@
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
</el-form-item>
</el-form>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="访问令牌" align="center" prop="accessToken" width="300" />
<el-table-column label="刷新令牌" align="center" prop="refreshToken" width="300" />
@ -93,7 +95,7 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
</template>
<script setup lang="ts" name="Oauth2AccessToken">

View File

@ -66,7 +66,7 @@ const detailLoading = ref(false) // 表单的加载中
const detailData = ref() //
/** 打开弹窗 */
const openModal = async (data: OperateLogApi.OperateLogVO) => {
const open = async (data: OperateLogApi.OperateLogVO) => {
dialogVisible.value = true
//
detailLoading.value = true
@ -76,5 +76,5 @@ const openModal = async (data: OperateLogApi.OperateLogVO) => {
detailLoading.value = false
}
}
defineExpose({ openModal }) // openModal
defineExpose({ open }) // open
</script>

View File

@ -1,5 +1,7 @@
<template>
<content-wrap>
<doc-alert title="系统日志" url="https://doc.iocoder.cn/system-log/" />
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class="-mb-15px"
@ -34,10 +36,10 @@
class="!w-240px"
>
<el-option
v-for="dict in getDictOptions(DICT_TYPE.SYSTEM_OPERATE_TYPE)"
:key="parseInt(dict.value)"
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_OPERATE_TYPE)"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
:value="dict.value"
/>
</el-select>
</el-form-item>
@ -77,10 +79,10 @@
</el-button>
</el-form-item>
</el-form>
</content-wrap>
</ContentWrap>
<!-- 列表 -->
<content-wrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="日志编号" align="center" prop="id" />
<el-table-column label="操作模块" align="center" prop="module" width="180" />
@ -113,7 +115,7 @@
<el-button
link
type="primary"
@click="openModal(scope.row)"
@click="openDetail(scope.row)"
v-hasPermi="['infra:config:query']"
>
详情
@ -128,17 +130,17 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
<!-- 表单弹窗详情 -->
<operate-log-detail ref="modalRef" />
<OperateLogDetail ref="detailRef" />
</template>
<script setup lang="ts" name="OperateLog">
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import * as OperateLogApi from '@/api/system/operatelog'
import OperateLogDetail from './detail.vue'
import OperateLogDetail from './OperateLogDetail.vue'
const message = useMessage() // 消息弹窗
const loading = ref(true) // 列表的加载中
@ -181,9 +183,9 @@ const resetQuery = () => {
}
/** 详情操作 */
const modalRef = ref()
const openModal = (data: OperateLogApi.OperateLogVO) => {
modalRef.value.openModal(data)
const detailRef = ref()
const openDetail = (data: OperateLogApi.OperateLogVO) => {
detailRef.value.open(data)
}
/** 导出按钮操作 */

View File

@ -16,10 +16,10 @@
<el-form-item label="状态" prop="status">
<el-select v-model="formData.status" placeholder="请选择状态" clearable>
<el-option
v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="parseInt(dict.value)"
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
:value="dict.value"
/>
</el-select>
</el-form-item>
@ -34,7 +34,7 @@
</Dialog>
</template>
<script setup lang="ts">
import { DICT_TYPE, getDictOptions } from '@/utils/dict'
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import { CommonStatusEnum } from '@/utils/constants'
import * as PostApi from '@/api/system/post'
@ -62,7 +62,7 @@ const formRules = reactive({
const formRef = ref() // 表单 Ref
/** 打开弹窗 */
const openModal = async (type: string, id?: number) => {
const open = async (type: string, id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
@ -77,7 +77,7 @@ const openModal = async (type: string, id?: number) => {
}
}
}
defineExpose({ openModal }) // 提供 openModal 方法,用于打开弹窗
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
/** 提交表单 */
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调

View File

@ -40,7 +40,7 @@
<el-button
type="primary"
plain
@click="openModal('create')"
@click="openForm('create')"
v-hasPermi="['system:notice:create']"
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
@ -60,7 +60,7 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" align="center">
<el-table v-loading="loading" :data="list">
<el-table-column label="岗位编号" align="center" prop="id" />
<el-table-column label="岗位名称" align="center" prop="name" />
<el-table-column label="岗位编码" align="center" prop="code" />
@ -83,7 +83,7 @@
<el-button
link
type="primary"
@click="openModal('update', scope.row.id)"
@click="openForm('update', scope.row.id)"
v-hasPermi="['system:post:update']"
>
编辑
@ -160,8 +160,8 @@ const resetQuery = () => {
/** 添加/修改操作 */
const formRef = ref()
const openModal = (type: string, id?: number) => {
formRef.value.openModal(type, id)
const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
/** 删除按钮操作 */

View File

@ -1,4 +1,7 @@
<template>
<doc-alert title="功能权限" url="https://doc.iocoder.cn/resource-permission" />
<doc-alert title="数据权限" url="https://doc.iocoder.cn/data-permission" />
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form

View File

@ -1,4 +1,6 @@
<template>
<doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />
<ContentWrap>
<el-form
class="-mb-15px"
@ -52,7 +54,7 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" align="center">
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id" />
<el-table-column label="短信签名" align="center" prop="signature" />
<el-table-column label="渠道编码" align="center" prop="code">

View File

@ -1,4 +1,6 @@
<template>
<doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form

View File

@ -1,4 +1,6 @@
<template>
<doc-alert title="短信配置" url="https://doc.iocoder.cn/sms/" />
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
@ -111,7 +113,7 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" align="center">
<el-table v-loading="loading" :data="list">
<el-table-column
label="模板编码"
align="center"

View File

@ -1,4 +1,6 @@
<template>
<doc-alert title="SaaS 多租户" url="https://doc.iocoder.cn/saas-tenant/" />
<!-- 搜索 -->
<ContentWrap>
<el-form
@ -96,15 +98,15 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" align="center">
<el-table v-loading="loading" :data="list">
<el-table-column label="租户编号" align="center" prop="id" />
<el-table-column label="租户名" align="center" prop="name" />
<el-table-column label="租户套餐" align="center" prop="packageId">
<template #default="scope">
<el-tag v-if="scope.row.packageId === 0" type="danger">系统租户</el-tag>
<template v-else v-for="item in packageList">
<el-tag type="success" :key="item.id" v-if="item.id === scope.row.packageId"
>{{ item.name }}
<el-tag type="success" :key="item.id" v-if="item.id === scope.row.packageId">
{{ item.name }}
</el-tag>
</template>
</template>
@ -175,7 +177,7 @@ import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import * as TenantApi from '@/api/system/tenant'
import * as TenantPackageApi from '@/api/system/tenantPackage'
import TenantForm from './form.vue'
import TenantForm from './TenantForm.vue'
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化

View File

@ -1,4 +1,6 @@
<template>
<doc-alert title="SaaS 多租户" url="https://doc.iocoder.cn/saas-tenant/" />
<!-- 搜索 -->
<ContentWrap>
<el-form
@ -55,7 +57,7 @@
<!-- 列表 -->
<ContentWrap>
<el-table v-loading="loading" :data="list" align="center">
<el-table v-loading="loading" :data="list">
<el-table-column label="套餐编号" align="center" prop="id" width="120" />
<el-table-column label="套餐名" align="center" prop="name" />
<el-table-column label="状态" align="center" prop="status" width="100">

View File

@ -1,14 +1,18 @@
<template>
<doc-alert title="用户体系" url="https://doc.iocoder.cn/user-center/" />
<doc-alert title="三方登陆" url="https://doc.iocoder.cn/social-user/" />
<doc-alert title="Excel 导入导出" url="https://doc.iocoder.cn/excel-import-and-export/" />
<el-row :gutter="20">
<!-- 左侧部门树 -->
<el-col :span="4" :xs="24">
<content-wrap class="h-1/1">
<ContentWrap class="h-1/1">
<DeptTree @node-click="handleDeptNodeClick" />
</content-wrap>
</ContentWrap>
</el-col>
<el-col :span="20" :xs="24">
<!-- 搜索 -->
<content-wrap>
<ContentWrap>
<el-form
class="-mb-15px"
:model="queryParams"
@ -89,8 +93,8 @@
</el-button>
</el-form-item>
</el-form>
</content-wrap>
<content-wrap>
</ContentWrap>
<ContentWrap>
<el-table v-loading="loading" :data="list">
<el-table-column label="用户编号" align="center" key="id" prop="id" />
<el-table-column
@ -183,7 +187,7 @@
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</content-wrap>
</ContentWrap>
</el-col>
</el-row>