refactor: button
parent
70b8dcb174
commit
fabca00f7a
|
@ -1,32 +1,36 @@
|
||||||
import { useCache } from '@/hooks/web/useCache'
|
import Cookies from 'js-cookie'
|
||||||
import { TokenType } from '@/api/login/types'
|
import { TokenType } from '@/api/login/types'
|
||||||
import { decrypt, encrypt } from '@/utils/jsencrypt'
|
import { decrypt, encrypt } from '@/utils/jsencrypt'
|
||||||
|
|
||||||
const { wsCache } = useCache()
|
|
||||||
const AccessTokenKey = 'ACCESS_TOKEN'
|
const AccessTokenKey = 'ACCESS_TOKEN'
|
||||||
const RefreshTokenKey = 'REFRESH_TOKEN'
|
const RefreshTokenKey = 'REFRESH_TOKEN'
|
||||||
|
|
||||||
// 获取token
|
// 获取token
|
||||||
export const getAccessToken = () => {
|
export const getAccessToken = () => {
|
||||||
// 此处与TokenKey相同,此写法解决初始化时Cookies中不存在TokenKey报错
|
// 此处与TokenKey相同,此写法解决初始化时Cookies中不存在TokenKey报错
|
||||||
return wsCache.get('ACCESS_TOKEN')
|
return Cookies.get(AccessTokenKey) ? Cookies.get(AccessTokenKey) : Cookies.get('ACCESS_TOKEN')
|
||||||
}
|
}
|
||||||
|
|
||||||
// 刷新token
|
// 刷新token
|
||||||
export const getRefreshToken = () => {
|
export const getRefreshToken = () => {
|
||||||
return wsCache.get(RefreshTokenKey)
|
return Cookies.get(RefreshTokenKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置token
|
// 设置token
|
||||||
export const setToken = (token: TokenType) => {
|
export const setToken = (token: TokenType) => {
|
||||||
wsCache.set(RefreshTokenKey, token.refreshToken, { exp: token.expiresTime })
|
Cookies.set(RefreshTokenKey, token.refreshToken, token.expiresTime)
|
||||||
wsCache.set(AccessTokenKey, token.accessToken)
|
Cookies.set(AccessTokenKey, token.accessToken)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除token
|
// 删除token
|
||||||
export const removeToken = () => {
|
export const removeToken = () => {
|
||||||
wsCache.delete(AccessTokenKey)
|
Cookies.remove(AccessTokenKey)
|
||||||
wsCache.delete(RefreshTokenKey)
|
Cookies.remove(RefreshTokenKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 格式化token(jwt格式) */
|
||||||
|
export const formatToken = (token: string): string => {
|
||||||
|
return 'Bearer ' + token
|
||||||
}
|
}
|
||||||
// ========== 账号相关 ==========
|
// ========== 账号相关 ==========
|
||||||
|
|
||||||
|
@ -35,40 +39,40 @@ const PasswordKey = 'PASSWORD'
|
||||||
const RememberMeKey = 'REMEMBER_ME'
|
const RememberMeKey = 'REMEMBER_ME'
|
||||||
|
|
||||||
export const getUsername = () => {
|
export const getUsername = () => {
|
||||||
return wsCache.get(UsernameKey)
|
return Cookies.get(UsernameKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const setUsername = (username: string) => {
|
export const setUsername = (username: string) => {
|
||||||
wsCache.set(UsernameKey, username)
|
Cookies.set(UsernameKey, username)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const removeUsername = () => {
|
export const removeUsername = () => {
|
||||||
wsCache.delete(UsernameKey)
|
Cookies.remove(UsernameKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getPassword = () => {
|
export const getPassword = () => {
|
||||||
const password = wsCache.get(PasswordKey)
|
const password = Cookies.get(PasswordKey)
|
||||||
return password ? decrypt(password) : undefined
|
return password ? decrypt(password) : undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
export const setPassword = (password: string) => {
|
export const setPassword = (password: string) => {
|
||||||
wsCache.set(PasswordKey, encrypt(password))
|
Cookies.set(PasswordKey, encrypt(password))
|
||||||
}
|
}
|
||||||
|
|
||||||
export const removePassword = () => {
|
export const removePassword = () => {
|
||||||
wsCache.delete(PasswordKey)
|
Cookies.remove(PasswordKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getRememberMe = () => {
|
export const getRememberMe = () => {
|
||||||
return wsCache.get(RememberMeKey) === 'true'
|
return Cookies.get(RememberMeKey) === 'true'
|
||||||
}
|
}
|
||||||
|
|
||||||
export const setRememberMe = (rememberMe: string) => {
|
export const setRememberMe = (rememberMe: string) => {
|
||||||
wsCache.set(RememberMeKey, rememberMe)
|
Cookies.set(RememberMeKey, rememberMe)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const removeRememberMe = () => {
|
export const removeRememberMe = () => {
|
||||||
wsCache.delete(RememberMeKey)
|
Cookies.remove(RememberMeKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ========== 租户相关 ==========
|
// ========== 租户相关 ==========
|
||||||
|
@ -77,25 +81,25 @@ const TenantIdKey = 'TENANT_ID'
|
||||||
const TenantNameKey = 'TENANT_NAME'
|
const TenantNameKey = 'TENANT_NAME'
|
||||||
|
|
||||||
export const getTenantName = () => {
|
export const getTenantName = () => {
|
||||||
return wsCache.get(TenantNameKey)
|
return Cookies.get(TenantNameKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const setTenantName = (username: string) => {
|
export const setTenantName = (username: string) => {
|
||||||
wsCache.set(TenantNameKey, username)
|
Cookies.set(TenantNameKey, username)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const removeTenantName = () => {
|
export const removeTenantName = () => {
|
||||||
wsCache.delete(TenantNameKey)
|
Cookies.remove(TenantNameKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getTenantId = () => {
|
export const getTenantId = () => {
|
||||||
return wsCache.get(TenantIdKey)
|
return Cookies.get(TenantIdKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const setTenantId = (username: string) => {
|
export const setTenantId = (username: string) => {
|
||||||
wsCache.set(TenantIdKey, username)
|
Cookies.set(TenantIdKey, username)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const removeTenantId = () => {
|
export const removeTenantId = () => {
|
||||||
wsCache.delete(TenantIdKey)
|
Cookies.remove(TenantIdKey)
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,7 @@ getList()
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<!-- 操作工具栏 -->
|
<!-- 操作工具栏 -->
|
||||||
<div class="mb-10px">
|
<div class="mb-10px">
|
||||||
<el-button type="primary" v-hasPermi="['bpm:form:create']" @click="handleCreate">
|
<el-button type="primary" v-hasPermi="['bpm:form:create']" @click="handleCreate()">
|
||||||
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -152,15 +152,16 @@ getList()
|
||||||
/>
|
/>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -118,7 +118,7 @@ onMounted(async () => {
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<!-- 操作工具栏 -->
|
<!-- 操作工具栏 -->
|
||||||
<div class="mb-10px">
|
<div class="mb-10px">
|
||||||
<el-button type="primary" v-hasPermi="['bpm:user-group:create']" @click="handleCreate">
|
<el-button type="primary" v-hasPermi="['bpm:user-group:create']" @click="handleCreate()">
|
||||||
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -206,17 +206,17 @@ onMounted(async () => {
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
</Descriptions>
|
</Descriptions>
|
||||||
<!-- 操作按钮 -->
|
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -113,7 +113,7 @@ getList()
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<!-- 操作工具栏 -->
|
<!-- 操作工具栏 -->
|
||||||
<div class="mb-10px">
|
<div class="mb-10px">
|
||||||
<el-button type="primary" v-hasPermi="['bpm:model:create']" @click="handleCreate">
|
<el-button type="primary" v-hasPermi="['bpm:model:create']" @click="handleCreate()">
|
||||||
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
||||||
</el-button>
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -202,15 +202,16 @@ getList()
|
||||||
/>
|
/>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
import { ref, unref, onMounted } from 'vue'
|
import { ref, unref, onMounted } from 'vue'
|
||||||
import { ContentDetailWrap } from '@/components/ContentDetailWrap'
|
import { ContentDetailWrap } from '@/components/ContentDetailWrap'
|
||||||
import { BasicInfoForm, CloumInfoForm, GenInfoForm } from './components'
|
import { BasicInfoForm, CloumInfoForm, GenInfoForm } from './components'
|
||||||
import { ElTabs, ElTabPane, ElButton, ElMessage } from 'element-plus'
|
import { ElTabs, ElTabPane, ElMessage } from 'element-plus'
|
||||||
import { getCodegenTableApi, updateCodegenTableApi } from '@/api/infra/codegen'
|
import { getCodegenTableApi, updateCodegenTableApi } from '@/api/infra/codegen'
|
||||||
import { useRouter, useRoute } from 'vue-router'
|
import { useRouter, useRoute } from 'vue-router'
|
||||||
import { useI18n } from '@/hooks/web/useI18n'
|
import { useI18n } from '@/hooks/web/useI18n'
|
||||||
|
@ -70,9 +70,7 @@ onMounted(() => {
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
<template #right>
|
<template #right>
|
||||||
<el-button type="primary" :loading="loading" @click="submitForm">
|
<XButton type="primary" :title="t('action.save')" :loading="loading" @click="submitForm()" />
|
||||||
{{ t('action.save') }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</ContentDetailWrap>
|
</ContentDetailWrap>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -178,15 +178,16 @@ getList()
|
||||||
</Descriptions>
|
</Descriptions>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -147,15 +147,16 @@ onMounted(async () => {
|
||||||
/>
|
/>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="loading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -192,15 +192,16 @@ getList()
|
||||||
/>
|
/>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -235,15 +235,16 @@ getList()
|
||||||
</Descriptions>
|
</Descriptions>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -171,15 +171,16 @@ getList()
|
||||||
/>
|
/>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -171,15 +171,16 @@ getList()
|
||||||
/>
|
/>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -155,15 +155,16 @@ getList()
|
||||||
/>
|
/>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -48,7 +48,7 @@ const getUserList = async () => {
|
||||||
userOption.value = res
|
userOption.value = res
|
||||||
}
|
}
|
||||||
// 新增
|
// 新增
|
||||||
const handleAdd = (data: { id: number }) => {
|
const handleCreate = (data: { id: number }) => {
|
||||||
// 重置表单
|
// 重置表单
|
||||||
deptParentId.value = data.id
|
deptParentId.value = data.id
|
||||||
formTitle.value = '新增部门'
|
formTitle.value = '新增部门'
|
||||||
|
@ -110,9 +110,13 @@ onMounted(async () => {
|
||||||
<template #header>
|
<template #header>
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<span>部门列表</span>
|
<span>部门列表</span>
|
||||||
<el-button type="primary" v-hasPermi="['system:dept:create']" @click="handleAdd">
|
<XButton
|
||||||
新增根节点
|
type="primary"
|
||||||
</el-button>
|
preIcon="ep:zoom-in"
|
||||||
|
title="新增根节点"
|
||||||
|
v-hasPermi="['system:dept:create']"
|
||||||
|
@click="handleCreate"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div class="custom-tree-container">
|
<div class="custom-tree-container">
|
||||||
|
@ -133,30 +137,24 @@ onMounted(async () => {
|
||||||
<span class="custom-tree-node">
|
<span class="custom-tree-node">
|
||||||
<span>{{ node.label }}</span>
|
<span>{{ node.label }}</span>
|
||||||
<span>
|
<span>
|
||||||
<el-button
|
<XTextButton
|
||||||
link
|
preIcon="ep:zoom-in"
|
||||||
type="primary"
|
:title="t('action.add')"
|
||||||
v-hasPermi="['system:dept:create']"
|
v-hasPermi="['system:dept:create']"
|
||||||
@click="handleAdd(data)"
|
@click="handleCreate(data)"
|
||||||
>
|
/>
|
||||||
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
<XTextButton
|
||||||
</el-button>
|
preIcon="ep:edit"
|
||||||
<el-button
|
:title="t('action.edit')"
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:dept:update']"
|
v-hasPermi="['system:dept:update']"
|
||||||
@click="handleUpdate(data)"
|
@click="handleUpdate(data)"
|
||||||
>
|
/>
|
||||||
<Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
|
<XTextButton
|
||||||
</el-button>
|
preIcon="ep:delete"
|
||||||
<el-button
|
:title="t('action.del')"
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:dept:delete']"
|
v-hasPermi="['system:dept:delete']"
|
||||||
@click="handleDelete(data)"
|
@click="handleDelete(data)"
|
||||||
>
|
/>
|
||||||
<Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
|
|
||||||
</el-button>
|
|
||||||
</span>
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
@ -195,16 +193,16 @@ onMounted(async () => {
|
||||||
</el-select>
|
</el-select>
|
||||||
</template>
|
</template>
|
||||||
</Form>
|
</Form>
|
||||||
<!-- 操作按钮 -->
|
<!-- 按钮:保存 -->
|
||||||
<el-button
|
<XButton
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
v-hasPermi="['system:dept:update']"
|
v-hasPermi="['system:dept:update']"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="loading" :title="t('dialog.close')" @click="showForm = false" />
|
||||||
<el-button type="danger" @click="showForm = false">{{ t('common.cancel') }}</el-button>
|
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
type="primary"
|
type="primary"
|
||||||
:title="t('action.save')"
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
/>
|
/>
|
||||||
<!-- 按钮:关闭 -->
|
<!-- 按钮:关闭 -->
|
||||||
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
|
|
|
@ -234,7 +234,7 @@
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
:title="t('action.save')"
|
:title="t('action.save')"
|
||||||
/>
|
/>
|
||||||
<!-- 按钮:关闭 -->
|
<!-- 按钮:关闭 -->
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
type="primary"
|
type="primary"
|
||||||
:title="t('action.save')"
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
/>
|
/>
|
||||||
<!-- 按钮:关闭 -->
|
<!-- 按钮:关闭 -->
|
||||||
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
type="primary"
|
type="primary"
|
||||||
:title="t('action.save')"
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
/>
|
/>
|
||||||
<!-- 按钮:关闭 -->
|
<!-- 按钮:关闭 -->
|
||||||
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
<Descriptions :schema="allSchemas.detailSchema" :data="detailRef" />
|
<Descriptions :schema="allSchemas.detailSchema" :data="detailRef" />
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
<XButton :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -66,7 +66,7 @@
|
||||||
type="primary"
|
type="primary"
|
||||||
:title="t('action.save')"
|
:title="t('action.save')"
|
||||||
:loading="actionLoading"
|
:loading="actionLoading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
/>
|
/>
|
||||||
<!-- 按钮:关闭 -->
|
<!-- 按钮:关闭 -->
|
||||||
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
|
|
|
@ -1,3 +1,161 @@
|
||||||
|
<template>
|
||||||
|
<!-- 搜索工作区 -->
|
||||||
|
<ContentWrap>
|
||||||
|
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
|
||||||
|
</ContentWrap>
|
||||||
|
<ContentWrap>
|
||||||
|
<!-- 操作工具栏 -->
|
||||||
|
<div class="mb-10px">
|
||||||
|
<XButton
|
||||||
|
type="primary"
|
||||||
|
preIcon="ep:zoom-in"
|
||||||
|
:title="t('action.add')"
|
||||||
|
v-hasPermi="['system:role:create']"
|
||||||
|
@click="handleCreate()"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- 列表 -->
|
||||||
|
<Table
|
||||||
|
:columns="allSchemas.tableColumns"
|
||||||
|
:selection="false"
|
||||||
|
:data="tableObject.tableList"
|
||||||
|
:loading="tableObject.loading"
|
||||||
|
:pagination="{
|
||||||
|
total: tableObject.total
|
||||||
|
}"
|
||||||
|
v-model:pageSize="tableObject.pageSize"
|
||||||
|
v-model:currentPage="tableObject.currentPage"
|
||||||
|
@register="register"
|
||||||
|
>
|
||||||
|
<template #type="{ row }">
|
||||||
|
<DictTag :type="DICT_TYPE.SYSTEM_ROLE_TYPE" :value="row.type" />
|
||||||
|
</template>
|
||||||
|
<template #status="{ row }">
|
||||||
|
<DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
|
||||||
|
</template>
|
||||||
|
<template #createTime="{ row }">
|
||||||
|
<span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
||||||
|
</template>
|
||||||
|
<template #action="{ row }">
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:edit"
|
||||||
|
:title="t('action.edit')"
|
||||||
|
v-hasPermi="['system:role:update']"
|
||||||
|
@click="handleUpdate(row.id)"
|
||||||
|
/>
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:view"
|
||||||
|
:title="t('action.detail')"
|
||||||
|
v-hasPermi="['system:role:update']"
|
||||||
|
@click="handleDetail(row.id)"
|
||||||
|
/>
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:basketball"
|
||||||
|
title="菜单权限"
|
||||||
|
v-hasPermi="['system:permission:assign-role-menu']"
|
||||||
|
@click="handleScope('menu', row)"
|
||||||
|
/>
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:coin"
|
||||||
|
title="数据权限"
|
||||||
|
v-hasPermi="['system:permission:assign-role-data-scope']"
|
||||||
|
@click="handleScope('data', row)"
|
||||||
|
/>
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:delete"
|
||||||
|
:title="t('action.del')"
|
||||||
|
v-hasPermi="['system:role:delete']"
|
||||||
|
@click="delList(row.id, false)"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</Table>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<XModal v-model="dialogVisible" :title="dialogTitle">
|
||||||
|
<!-- 对话框(添加 / 修改) -->
|
||||||
|
<Form
|
||||||
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
|
:schema="allSchemas.formSchema"
|
||||||
|
:rules="rules"
|
||||||
|
ref="formRef"
|
||||||
|
/>
|
||||||
|
<!-- 对话框(详情) -->
|
||||||
|
<Descriptions
|
||||||
|
v-if="actionType === 'detail'"
|
||||||
|
:schema="allSchemas.detailSchema"
|
||||||
|
:data="detailRef"
|
||||||
|
/>
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<template #footer>
|
||||||
|
<XButton
|
||||||
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
|
:loading="loading"
|
||||||
|
@click="submitForm()"
|
||||||
|
/>
|
||||||
|
<XButton :loading="loading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
|
</template>
|
||||||
|
</XModal>
|
||||||
|
<XModal v-model="dialogScopeVisible" :title="dialogScopeTitle">
|
||||||
|
<el-form :model="dataScopeForm">
|
||||||
|
<el-form-item label="角色名称">
|
||||||
|
<el-input v-model="dataScopeForm.name" :disabled="true" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="角色标识">
|
||||||
|
<el-input v-model="dataScopeForm.code" :disabled="true" />
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 分配角色的数据权限对话框 -->
|
||||||
|
<el-form-item label="权限范围" v-if="actionScopeType === 'data'">
|
||||||
|
<el-select v-model="dataScopeForm.dataScope">
|
||||||
|
<el-option
|
||||||
|
v-for="item in dataScopeDictDatas"
|
||||||
|
:key="parseInt(item.value)"
|
||||||
|
:label="item.label"
|
||||||
|
:value="parseInt(item.value)"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- 分配角色的菜单权限对话框 -->
|
||||||
|
<el-form-item
|
||||||
|
label="权限范围"
|
||||||
|
v-if="
|
||||||
|
actionScopeType === 'menu' || dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<el-card class="box-card">
|
||||||
|
<template #header>
|
||||||
|
父子联动(选中父节点,自动选择子节点):
|
||||||
|
<el-switch v-model="checkStrictly" inline-prompt active-text="是" inactive-text="否" />
|
||||||
|
全选/全不选:
|
||||||
|
<el-switch
|
||||||
|
v-model="treeNodeAll"
|
||||||
|
inline-prompt
|
||||||
|
active-text="是"
|
||||||
|
inactive-text="否"
|
||||||
|
@change="handleCheckedTreeNodeAll()"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
<el-tree
|
||||||
|
ref="treeRef"
|
||||||
|
node-key="id"
|
||||||
|
show-checkbox
|
||||||
|
:default-checked-keys="defaultCheckedKeys"
|
||||||
|
:check-strictly="!checkStrictly"
|
||||||
|
:props="defaultProps"
|
||||||
|
:data="treeOptions"
|
||||||
|
empty-text="加载中,请稍后"
|
||||||
|
/>
|
||||||
|
</el-card>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<template #footer>
|
||||||
|
<XButton type="primary" :title="t('action.save')" :loading="loading" @click="submitScope()" />
|
||||||
|
<XButton :loading="loading" :title="t('dialog.close')" @click="dialogScopeVisible = false" />
|
||||||
|
</template>
|
||||||
|
</XModal>
|
||||||
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, reactive, ref, unref } from 'vue'
|
import { onMounted, reactive, ref, unref } from 'vue'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
@ -57,10 +215,10 @@ const handleCreate = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改操作
|
// 修改操作
|
||||||
const handleUpdate = async (row: RoleVO) => {
|
const handleUpdate = async (rowId: number) => {
|
||||||
setDialogTile('update')
|
setDialogTile('update')
|
||||||
// 设置数据
|
// 设置数据
|
||||||
const res = await RoleApi.getRoleApi(row.id)
|
const res = await RoleApi.getRoleApi(rowId)
|
||||||
unref(formRef)?.setValues(res)
|
unref(formRef)?.setValues(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,171 +341,3 @@ onMounted(() => {
|
||||||
init()
|
init()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
|
||||||
<!-- 搜索工作区 -->
|
|
||||||
<ContentWrap>
|
|
||||||
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
|
|
||||||
</ContentWrap>
|
|
||||||
<ContentWrap>
|
|
||||||
<!-- 操作工具栏 -->
|
|
||||||
<div class="mb-10px">
|
|
||||||
<el-button type="primary" v-hasPermi="['system:role:create']" @click="handleCreate">
|
|
||||||
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<!-- 列表 -->
|
|
||||||
<Table
|
|
||||||
:columns="allSchemas.tableColumns"
|
|
||||||
:selection="false"
|
|
||||||
:data="tableObject.tableList"
|
|
||||||
:loading="tableObject.loading"
|
|
||||||
:pagination="{
|
|
||||||
total: tableObject.total
|
|
||||||
}"
|
|
||||||
v-model:pageSize="tableObject.pageSize"
|
|
||||||
v-model:currentPage="tableObject.currentPage"
|
|
||||||
@register="register"
|
|
||||||
>
|
|
||||||
<template #type="{ row }">
|
|
||||||
<DictTag :type="DICT_TYPE.SYSTEM_ROLE_TYPE" :value="row.type" />
|
|
||||||
</template>
|
|
||||||
<template #status="{ row }">
|
|
||||||
<DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
|
|
||||||
</template>
|
|
||||||
<template #createTime="{ row }">
|
|
||||||
<span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
|
||||||
</template>
|
|
||||||
<template #action="{ row }">
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:role:update']"
|
|
||||||
@click="handleUpdate(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:role:update']"
|
|
||||||
@click="handleDetail(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:permission:assign-role-menu']"
|
|
||||||
@click="handleScope('menu', row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:basketball" class="mr-1px" /> 菜单权限
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:permission:assign-role-data-scope']"
|
|
||||||
@click="handleScope('data', row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:coin" class="mr-1px" /> 数据权限
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:role:delete']"
|
|
||||||
@click="delList(row.id, false)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</Table>
|
|
||||||
</ContentWrap>
|
|
||||||
|
|
||||||
<XModal v-model="dialogVisible" :title="dialogTitle">
|
|
||||||
<!-- 对话框(添加 / 修改) -->
|
|
||||||
<Form
|
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
|
||||||
:schema="allSchemas.formSchema"
|
|
||||||
:rules="rules"
|
|
||||||
ref="formRef"
|
|
||||||
/>
|
|
||||||
<!-- 对话框(详情) -->
|
|
||||||
<Descriptions
|
|
||||||
v-if="actionType === 'detail'"
|
|
||||||
:schema="allSchemas.detailSchema"
|
|
||||||
:data="detailRef"
|
|
||||||
/>
|
|
||||||
<!-- 操作按钮 -->
|
|
||||||
<template #footer>
|
|
||||||
<el-button
|
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
|
||||||
type="primary"
|
|
||||||
:loading="loading"
|
|
||||||
@click="submitForm"
|
|
||||||
>
|
|
||||||
{{ t('action.save') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
|
||||||
</XModal>
|
|
||||||
<XModal v-model="dialogScopeVisible" :title="dialogScopeTitle">
|
|
||||||
<el-form :model="dataScopeForm">
|
|
||||||
<el-form-item label="角色名称">
|
|
||||||
<el-input v-model="dataScopeForm.name" :disabled="true" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="角色标识">
|
|
||||||
<el-input v-model="dataScopeForm.code" :disabled="true" />
|
|
||||||
</el-form-item>
|
|
||||||
<!-- 分配角色的数据权限对话框 -->
|
|
||||||
<el-form-item label="权限范围" v-if="actionScopeType === 'data'">
|
|
||||||
<el-select v-model="dataScopeForm.dataScope">
|
|
||||||
<el-option
|
|
||||||
v-for="item in dataScopeDictDatas"
|
|
||||||
:key="parseInt(item.value)"
|
|
||||||
:label="item.label"
|
|
||||||
:value="parseInt(item.value)"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
|
||||||
<!-- 分配角色的菜单权限对话框 -->
|
|
||||||
<el-form-item
|
|
||||||
label="权限范围"
|
|
||||||
v-if="
|
|
||||||
actionScopeType === 'menu' || dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM
|
|
||||||
"
|
|
||||||
>
|
|
||||||
<el-card class="box-card">
|
|
||||||
<template #header>
|
|
||||||
父子联动(选中父节点,自动选择子节点):
|
|
||||||
<el-switch v-model="checkStrictly" inline-prompt active-text="是" inactive-text="否" />
|
|
||||||
全选/全不选:
|
|
||||||
<el-switch
|
|
||||||
v-model="treeNodeAll"
|
|
||||||
inline-prompt
|
|
||||||
active-text="是"
|
|
||||||
inactive-text="否"
|
|
||||||
@change="handleCheckedTreeNodeAll()"
|
|
||||||
/>
|
|
||||||
</template>
|
|
||||||
<el-tree
|
|
||||||
ref="treeRef"
|
|
||||||
node-key="id"
|
|
||||||
show-checkbox
|
|
||||||
:default-checked-keys="defaultCheckedKeys"
|
|
||||||
:check-strictly="!checkStrictly"
|
|
||||||
:props="defaultProps"
|
|
||||||
:data="treeOptions"
|
|
||||||
empty-text="加载中,请稍后"
|
|
||||||
/>
|
|
||||||
</el-card>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<!-- 操作按钮 -->
|
|
||||||
<template #footer>
|
|
||||||
<el-button type="primary" :loading="loading" @click="submitScope">
|
|
||||||
{{ t('action.save') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button @click="dialogScopeVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
|
||||||
</XModal>
|
|
||||||
</template>
|
|
||||||
|
|
|
@ -1,3 +1,116 @@
|
||||||
|
<template>
|
||||||
|
<!-- 搜索工作区 -->
|
||||||
|
<ContentWrap>
|
||||||
|
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
|
||||||
|
</ContentWrap>
|
||||||
|
<ContentWrap>
|
||||||
|
<!-- 操作工具栏 -->
|
||||||
|
<div class="mb-10px">
|
||||||
|
<XButton
|
||||||
|
type="primary"
|
||||||
|
preIcon="ep:zoom-in"
|
||||||
|
:title="t('action.add')"
|
||||||
|
v-hasPermi="['system:sensitive-word:create']"
|
||||||
|
@click="handleCreate()"
|
||||||
|
/>
|
||||||
|
<XButton
|
||||||
|
type="warning"
|
||||||
|
preIcon="ep:download"
|
||||||
|
:title="t('action.export')"
|
||||||
|
v-hasPermi="['system:sensitive-word:export']"
|
||||||
|
@click="exportList('敏感词数据.xls')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- 列表 -->
|
||||||
|
<Table
|
||||||
|
:columns="allSchemas.tableColumns"
|
||||||
|
:selection="false"
|
||||||
|
:data="tableObject.tableList"
|
||||||
|
:loading="tableObject.loading"
|
||||||
|
:pagination="{
|
||||||
|
total: tableObject.total
|
||||||
|
}"
|
||||||
|
v-model:pageSize="tableObject.pageSize"
|
||||||
|
v-model:currentPage="tableObject.currentPage"
|
||||||
|
@register="register"
|
||||||
|
>
|
||||||
|
<template #tags="{ row }">
|
||||||
|
<el-tag
|
||||||
|
:disable-transitions="true"
|
||||||
|
:key="index"
|
||||||
|
v-for="(tag, index) in row.tags"
|
||||||
|
:index="index"
|
||||||
|
>
|
||||||
|
{{ tag }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
<template #status="{ row }">
|
||||||
|
<DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
|
||||||
|
</template>
|
||||||
|
<template #createTime="{ row }">
|
||||||
|
<span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
||||||
|
</template>
|
||||||
|
<template #action="{ row }">
|
||||||
|
<!-- 操作:修改 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:edit"
|
||||||
|
:title="t('action.edit')"
|
||||||
|
v-hasPermi="['system:sensitive-word:update']"
|
||||||
|
@click="handleUpdate(row.id)"
|
||||||
|
/>
|
||||||
|
<!-- 操作:详情 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:view"
|
||||||
|
:title="t('action.detail')"
|
||||||
|
v-hasPermi="['system:sensitive-word:update']"
|
||||||
|
@click="handleDetail(row)"
|
||||||
|
/>
|
||||||
|
<!-- 操作:删除 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:delete"
|
||||||
|
:title="t('action.del')"
|
||||||
|
v-hasPermi="['system:sensitive-word:delete']"
|
||||||
|
@click="delList(row.id, false)"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</Table>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<XModal v-model="dialogVisible" :title="dialogTitle">
|
||||||
|
<!-- 对话框(添加 / 修改) -->
|
||||||
|
<Form
|
||||||
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
|
:schema="allSchemas.formSchema"
|
||||||
|
:rules="rules"
|
||||||
|
ref="formRef"
|
||||||
|
>
|
||||||
|
<template #tags>
|
||||||
|
<el-select v-model="tags" multiple placeholder="请选择">
|
||||||
|
<el-option v-for="item in tagsOptions" :key="item" :label="item" :value="item" />
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
</Form>
|
||||||
|
<!-- 对话框(详情) -->
|
||||||
|
<Descriptions
|
||||||
|
v-if="actionType === 'detail'"
|
||||||
|
:schema="allSchemas.detailSchema"
|
||||||
|
:data="detailRef"
|
||||||
|
/>
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<template #footer>
|
||||||
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
|
:loading="actionLoading"
|
||||||
|
@click="submitForm()"
|
||||||
|
/>
|
||||||
|
<!-- 按钮:关闭 -->
|
||||||
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
|
</template>
|
||||||
|
</XModal>
|
||||||
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onMounted, ref, unref } from 'vue'
|
import { onMounted, ref, unref } from 'vue'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
@ -45,10 +158,10 @@ const handleCreate = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改操作
|
// 修改操作
|
||||||
const handleUpdate = async (row: SensitiveWordVO) => {
|
const handleUpdate = async (rowId: number) => {
|
||||||
setDialogTile('update')
|
setDialogTile('update')
|
||||||
// 设置数据
|
// 设置数据
|
||||||
const res = await SensitiveWordApi.getSensitiveWordApi(row.id)
|
const res = await SensitiveWordApi.getSensitiveWordApi(rowId)
|
||||||
unref(formRef)?.setValues(res)
|
unref(formRef)?.setValues(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -95,116 +208,3 @@ onMounted(async () => {
|
||||||
await getList()
|
await getList()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
|
||||||
<!-- 搜索工作区 -->
|
|
||||||
<ContentWrap>
|
|
||||||
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
|
|
||||||
</ContentWrap>
|
|
||||||
<ContentWrap>
|
|
||||||
<!-- 操作工具栏 -->
|
|
||||||
<div class="mb-10px">
|
|
||||||
<el-button type="primary" v-hasPermi="['system:post:create']" @click="handleCreate">
|
|
||||||
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
type="warning"
|
|
||||||
v-hasPermi="['system:post:export']"
|
|
||||||
:loading="tableObject.exportLoading"
|
|
||||||
@click="exportList('敏感词数据.xls')"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<!-- 列表 -->
|
|
||||||
<Table
|
|
||||||
:columns="allSchemas.tableColumns"
|
|
||||||
:selection="false"
|
|
||||||
:data="tableObject.tableList"
|
|
||||||
:loading="tableObject.loading"
|
|
||||||
:pagination="{
|
|
||||||
total: tableObject.total
|
|
||||||
}"
|
|
||||||
v-model:pageSize="tableObject.pageSize"
|
|
||||||
v-model:currentPage="tableObject.currentPage"
|
|
||||||
@register="register"
|
|
||||||
>
|
|
||||||
<template #tags="{ row }">
|
|
||||||
<el-tag
|
|
||||||
:disable-transitions="true"
|
|
||||||
:key="index"
|
|
||||||
v-for="(tag, index) in row.tags"
|
|
||||||
:index="index"
|
|
||||||
>
|
|
||||||
{{ tag }}
|
|
||||||
</el-tag>
|
|
||||||
</template>
|
|
||||||
<template #status="{ row }">
|
|
||||||
<DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
|
|
||||||
</template>
|
|
||||||
<template #createTime="{ row }">
|
|
||||||
<span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
|
||||||
</template>
|
|
||||||
<template #action="{ row }">
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:post:update']"
|
|
||||||
@click="handleUpdate(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:post:update']"
|
|
||||||
@click="handleDetail(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:post:delete']"
|
|
||||||
@click="delList(row.id, false)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</Table>
|
|
||||||
</ContentWrap>
|
|
||||||
|
|
||||||
<XModal v-model="dialogVisible" :title="dialogTitle">
|
|
||||||
<!-- 对话框(添加 / 修改) -->
|
|
||||||
<Form
|
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
|
||||||
:schema="allSchemas.formSchema"
|
|
||||||
:rules="rules"
|
|
||||||
ref="formRef"
|
|
||||||
>
|
|
||||||
<template #tags>
|
|
||||||
<el-select v-model="tags" multiple placeholder="请选择">
|
|
||||||
<el-option v-for="item in tagsOptions" :key="item" :label="item" :value="item" />
|
|
||||||
</el-select>
|
|
||||||
</template>
|
|
||||||
</Form>
|
|
||||||
<!-- 对话框(详情) -->
|
|
||||||
<Descriptions
|
|
||||||
v-if="actionType === 'detail'"
|
|
||||||
:schema="allSchemas.detailSchema"
|
|
||||||
:data="detailRef"
|
|
||||||
/>
|
|
||||||
<!-- 操作按钮 -->
|
|
||||||
<template #footer>
|
|
||||||
<el-button
|
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
|
||||||
type="primary"
|
|
||||||
:loading="actionLoading"
|
|
||||||
@click="submitForm"
|
|
||||||
>
|
|
||||||
{{ t('action.save') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
|
||||||
</XModal>
|
|
||||||
</template>
|
|
||||||
|
|
|
@ -1,3 +1,97 @@
|
||||||
|
<template>
|
||||||
|
<!-- 搜索工作区 -->
|
||||||
|
<ContentWrap>
|
||||||
|
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
|
||||||
|
</ContentWrap>
|
||||||
|
<ContentWrap>
|
||||||
|
<!-- 操作工具栏 -->
|
||||||
|
<div class="mb-10px">
|
||||||
|
<XButton
|
||||||
|
type="primary"
|
||||||
|
preIcon="ep:zoom-in"
|
||||||
|
:title="t('action.add')"
|
||||||
|
v-hasPermi="['system:sms-channel:create']"
|
||||||
|
@click="handleCreate()"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- 列表 -->
|
||||||
|
<Table
|
||||||
|
:columns="allSchemas.tableColumns"
|
||||||
|
:selection="false"
|
||||||
|
:data="tableObject.tableList"
|
||||||
|
:loading="tableObject.loading"
|
||||||
|
:pagination="{
|
||||||
|
total: tableObject.total
|
||||||
|
}"
|
||||||
|
v-model:pageSize="tableObject.pageSize"
|
||||||
|
v-model:currentPage="tableObject.currentPage"
|
||||||
|
@register="register"
|
||||||
|
>
|
||||||
|
<template #code="{ row }">
|
||||||
|
<DictTag :type="DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE" :value="row.code" />
|
||||||
|
</template>
|
||||||
|
<template #status="{ row }">
|
||||||
|
<DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
|
||||||
|
</template>
|
||||||
|
<template #createTime="{ row }">
|
||||||
|
<span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
||||||
|
</template>
|
||||||
|
<template #action="{ row }">
|
||||||
|
<!-- 操作:修改 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:edit"
|
||||||
|
:title="t('action.edit')"
|
||||||
|
v-hasPermi="['system:sms-channel:update']"
|
||||||
|
@click="handleUpdate(row.id)"
|
||||||
|
/>
|
||||||
|
<!-- 操作:详情 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:view"
|
||||||
|
:title="t('action.detail')"
|
||||||
|
v-hasPermi="['system:sms-channel:update']"
|
||||||
|
@click="handleDetail(row)"
|
||||||
|
/>
|
||||||
|
<!-- 操作:删除 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:delete"
|
||||||
|
:title="t('action.del')"
|
||||||
|
v-hasPermi="['system:sms-channel:delete']"
|
||||||
|
@click="delList(row.id, false)"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</Table>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<XModal v-model="dialogVisible" :title="dialogTitle">
|
||||||
|
<!-- 对话框(添加 / 修改) -->
|
||||||
|
<Form
|
||||||
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
|
:schema="allSchemas.formSchema"
|
||||||
|
:rules="rules"
|
||||||
|
ref="formRef"
|
||||||
|
/>
|
||||||
|
<!-- 对话框(详情) -->
|
||||||
|
<Descriptions
|
||||||
|
v-if="actionType === 'detail'"
|
||||||
|
:schema="allSchemas.detailSchema"
|
||||||
|
:data="detailRef"
|
||||||
|
/>
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<template #footer>
|
||||||
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
|
:loading="loading"
|
||||||
|
@click="submitForm()"
|
||||||
|
/>
|
||||||
|
<!-- 按钮:关闭 -->
|
||||||
|
<XButton :loading="loading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
|
</template>
|
||||||
|
</XModal>
|
||||||
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, unref } from 'vue'
|
import { ref, unref } from 'vue'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
@ -38,10 +132,10 @@ const handleCreate = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改操作
|
// 修改操作
|
||||||
const handleUpdate = async (row: SmsChannelVO) => {
|
const handleUpdate = async (rowId: number) => {
|
||||||
setDialogTile('update')
|
setDialogTile('update')
|
||||||
// 设置数据
|
// 设置数据
|
||||||
const res = await SmsChannelApi.getSmsChannelApi(row.id)
|
const res = await SmsChannelApi.getSmsChannelApi(rowId)
|
||||||
unref(formRef)?.setValues(res)
|
unref(formRef)?.setValues(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,95 +179,3 @@ const handleDetail = async (row: SmsChannelVO) => {
|
||||||
// ========== 初始化 ==========
|
// ========== 初始化 ==========
|
||||||
getList()
|
getList()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
|
||||||
<!-- 搜索工作区 -->
|
|
||||||
<ContentWrap>
|
|
||||||
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
|
|
||||||
</ContentWrap>
|
|
||||||
<ContentWrap>
|
|
||||||
<!-- 操作工具栏 -->
|
|
||||||
<div class="mb-10px">
|
|
||||||
<el-button type="primary" v-hasPermi="['system:sms-channel:create']" @click="handleCreate">
|
|
||||||
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<!-- 列表 -->
|
|
||||||
<Table
|
|
||||||
:columns="allSchemas.tableColumns"
|
|
||||||
:selection="false"
|
|
||||||
:data="tableObject.tableList"
|
|
||||||
:loading="tableObject.loading"
|
|
||||||
:pagination="{
|
|
||||||
total: tableObject.total
|
|
||||||
}"
|
|
||||||
v-model:pageSize="tableObject.pageSize"
|
|
||||||
v-model:currentPage="tableObject.currentPage"
|
|
||||||
@register="register"
|
|
||||||
>
|
|
||||||
<template #code="{ row }">
|
|
||||||
<DictTag :type="DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE" :value="row.code" />
|
|
||||||
</template>
|
|
||||||
<template #status="{ row }">
|
|
||||||
<DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
|
|
||||||
</template>
|
|
||||||
<template #createTime="{ row }">
|
|
||||||
<span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
|
||||||
</template>
|
|
||||||
<template #action="{ row }">
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:sms-channel:update']"
|
|
||||||
@click="handleUpdate(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:sms-channel:update']"
|
|
||||||
@click="handleDetail(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:sms-channel:delete']"
|
|
||||||
@click="delList(row.id, false)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</Table>
|
|
||||||
</ContentWrap>
|
|
||||||
|
|
||||||
<XModal v-model="dialogVisible" :title="dialogTitle">
|
|
||||||
<!-- 对话框(添加 / 修改) -->
|
|
||||||
<Form
|
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
|
||||||
:schema="allSchemas.formSchema"
|
|
||||||
:rules="rules"
|
|
||||||
ref="formRef"
|
|
||||||
/>
|
|
||||||
<!-- 对话框(详情) -->
|
|
||||||
<Descriptions
|
|
||||||
v-if="actionType === 'detail'"
|
|
||||||
:schema="allSchemas.detailSchema"
|
|
||||||
:data="detailRef"
|
|
||||||
/>
|
|
||||||
<!-- 操作按钮 -->
|
|
||||||
<template #footer>
|
|
||||||
<el-button
|
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
|
||||||
type="primary"
|
|
||||||
:loading="loading"
|
|
||||||
@click="submitForm"
|
|
||||||
>
|
|
||||||
{{ t('action.save') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
|
||||||
</XModal>
|
|
||||||
</template>
|
|
||||||
|
|
|
@ -1,35 +1,3 @@
|
||||||
<script setup lang="ts">
|
|
||||||
import { ref } from 'vue'
|
|
||||||
import dayjs from 'dayjs'
|
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
|
||||||
import { useTable } from '@/hooks/web/useTable'
|
|
||||||
import { useI18n } from '@/hooks/web/useI18n'
|
|
||||||
import type { SmsLogVO } from '@/api/system/sms/smsLog/types'
|
|
||||||
import { allSchemas } from './sms.log.data'
|
|
||||||
import * as SmsLoglApi from '@/api/system/sms/smsLog'
|
|
||||||
const { t } = useI18n() // 国际化
|
|
||||||
|
|
||||||
// ========== 列表相关 ==========
|
|
||||||
const { register, tableObject, methods } = useTable<SmsLogVO>({
|
|
||||||
getListApi: SmsLoglApi.getSmsLogPageApi
|
|
||||||
})
|
|
||||||
const { getList, setSearchParams } = methods
|
|
||||||
|
|
||||||
// ========== CRUD 相关 ==========
|
|
||||||
const actionType = ref('') // 操作按钮的类型
|
|
||||||
const dialogVisible = ref(false) // 是否显示弹出层
|
|
||||||
const dialogTitle = ref(t('action.detail')) // 弹出层标题
|
|
||||||
// ========== 详情相关 ==========
|
|
||||||
const detailRef = ref() // 详情 Ref
|
|
||||||
const handleDetail = (row: SmsLogVO) => {
|
|
||||||
// 设置数据
|
|
||||||
detailRef.value = row
|
|
||||||
dialogVisible.value = true
|
|
||||||
}
|
|
||||||
// ========== 初始化 ==========
|
|
||||||
getList()
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<!-- 搜索工作区 -->
|
<!-- 搜索工作区 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
|
@ -62,14 +30,7 @@ getList()
|
||||||
<span>{{ dayjs(row.receiveTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
<span>{{ dayjs(row.receiveTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
||||||
</template>
|
</template>
|
||||||
<template #action="{ row }">
|
<template #action="{ row }">
|
||||||
<el-button
|
<XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:sms-channel:update']"
|
|
||||||
@click="handleDetail(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</Table>
|
</Table>
|
||||||
</ContentWrap>
|
</ContentWrap>
|
||||||
|
@ -83,7 +44,39 @@ getList()
|
||||||
/>
|
/>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
<XButton :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
import dayjs from 'dayjs'
|
||||||
|
import { DICT_TYPE } from '@/utils/dict'
|
||||||
|
import { useTable } from '@/hooks/web/useTable'
|
||||||
|
import { useI18n } from '@/hooks/web/useI18n'
|
||||||
|
import type { SmsLogVO } from '@/api/system/sms/smsLog/types'
|
||||||
|
import { allSchemas } from './sms.log.data'
|
||||||
|
import * as SmsLoglApi from '@/api/system/sms/smsLog'
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
|
||||||
|
// ========== 列表相关 ==========
|
||||||
|
const { register, tableObject, methods } = useTable<SmsLogVO>({
|
||||||
|
getListApi: SmsLoglApi.getSmsLogPageApi
|
||||||
|
})
|
||||||
|
const { getList, setSearchParams } = methods
|
||||||
|
|
||||||
|
// ========== CRUD 相关 ==========
|
||||||
|
const actionType = ref('') // 操作按钮的类型
|
||||||
|
const dialogVisible = ref(false) // 是否显示弹出层
|
||||||
|
const dialogTitle = ref(t('action.detail')) // 弹出层标题
|
||||||
|
// ========== 详情相关 ==========
|
||||||
|
const detailRef = ref() // 详情 Ref
|
||||||
|
const handleDetail = (row: SmsLogVO) => {
|
||||||
|
// 设置数据
|
||||||
|
detailRef.value = row
|
||||||
|
dialogVisible.value = true
|
||||||
|
}
|
||||||
|
// ========== 初始化 ==========
|
||||||
|
getList()
|
||||||
|
</script>
|
||||||
|
|
|
@ -1,3 +1,130 @@
|
||||||
|
<template>
|
||||||
|
<!-- 搜索工作区 -->
|
||||||
|
<ContentWrap>
|
||||||
|
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
|
||||||
|
</ContentWrap>
|
||||||
|
<ContentWrap>
|
||||||
|
<!-- 操作工具栏 -->
|
||||||
|
<div class="mb-10px">
|
||||||
|
<el-button type="primary" v-hasPermi="['system:sms-channel:create']" @click="handleCreate">
|
||||||
|
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
<!-- 列表 -->
|
||||||
|
<Table
|
||||||
|
:columns="allSchemas.tableColumns"
|
||||||
|
:selection="false"
|
||||||
|
:data="tableObject.tableList"
|
||||||
|
:loading="tableObject.loading"
|
||||||
|
:pagination="{
|
||||||
|
total: tableObject.total
|
||||||
|
}"
|
||||||
|
v-model:pageSize="tableObject.pageSize"
|
||||||
|
v-model:currentPage="tableObject.currentPage"
|
||||||
|
@register="register"
|
||||||
|
>
|
||||||
|
<template #type="{ row }">
|
||||||
|
<DictTag :type="DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE" :value="row.type" />
|
||||||
|
</template>
|
||||||
|
<template #status="{ row }">
|
||||||
|
<DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
|
||||||
|
</template>
|
||||||
|
<template #createTime="{ row }">
|
||||||
|
<span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
||||||
|
</template>
|
||||||
|
<template #action="{ row }">
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:cpu"
|
||||||
|
:title="t('action.test')"
|
||||||
|
v-hasPermi="['system:sms-template:send-sms']"
|
||||||
|
@click="handleSendSms(row)"
|
||||||
|
/>
|
||||||
|
<!-- 操作:修改 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:edit"
|
||||||
|
:title="t('action.edit')"
|
||||||
|
v-hasPermi="['system:sms-template:update']"
|
||||||
|
@click="handleUpdate(row.id)"
|
||||||
|
/>
|
||||||
|
<!-- 操作:详情 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:view"
|
||||||
|
:title="t('action.detail')"
|
||||||
|
v-hasPermi="['system:sms-template:update']"
|
||||||
|
@click="handleDetail(row)"
|
||||||
|
/>
|
||||||
|
<!-- 操作:删除 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:delete"
|
||||||
|
:title="t('action.del')"
|
||||||
|
v-hasPermi="['system:sms-template:delete']"
|
||||||
|
@click="delList(row.id, false)"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</Table>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<XModal v-model="dialogVisible" :title="dialogTitle">
|
||||||
|
<!-- 对话框(添加 / 修改) -->
|
||||||
|
<Form
|
||||||
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
|
:schema="allSchemas.formSchema"
|
||||||
|
:rules="rules"
|
||||||
|
ref="formRef"
|
||||||
|
/>
|
||||||
|
<!-- 对话框(详情) -->
|
||||||
|
<Descriptions
|
||||||
|
v-if="actionType === 'detail'"
|
||||||
|
:schema="allSchemas.detailSchema"
|
||||||
|
:data="detailRef"
|
||||||
|
/>
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<template #footer>
|
||||||
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
|
:loading="loading"
|
||||||
|
@click="submitForm()"
|
||||||
|
/>
|
||||||
|
<!-- 按钮:关闭 -->
|
||||||
|
<XButton :loading="loading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
|
</template>
|
||||||
|
</XModal>
|
||||||
|
<XModal v-model="sendVisible" title="测试">
|
||||||
|
<el-form :model="sendSmsForm" :rules="sendSmsRules" label-width="140px">
|
||||||
|
<el-form-item label="模板内容" prop="content">
|
||||||
|
<el-input
|
||||||
|
v-model="sendSmsForm.content"
|
||||||
|
type="textarea"
|
||||||
|
placeholder="请输入模板内容"
|
||||||
|
readonly
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="手机号" prop="mobile">
|
||||||
|
<el-input v-model="sendSmsForm.mobile" placeholder="请输入手机号" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
v-for="param in sendSmsForm.params"
|
||||||
|
:key="param"
|
||||||
|
:label="'参数 {' + param + '}'"
|
||||||
|
:prop="'templateParams.' + param"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="sendSmsForm.templateParams[param]"
|
||||||
|
:placeholder="'请输入 ' + param + ' 参数'"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<template #footer>
|
||||||
|
<XButton type="primary" :title="t('action.test')" :loading="loading" @click="sendSmsTest()" />
|
||||||
|
<XButton :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
|
</template>
|
||||||
|
</XModal>
|
||||||
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, unref } from 'vue'
|
import { ref, unref } from 'vue'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
@ -38,10 +165,10 @@ const handleCreate = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 修改操作
|
// 修改操作
|
||||||
const handleUpdate = async (row: SmsTemplateVO) => {
|
const handleUpdate = async (rowId: number) => {
|
||||||
setDialogTile('update')
|
setDialogTile('update')
|
||||||
// 设置数据
|
// 设置数据
|
||||||
const res = await SmsTemplateApi.getSmsTemplateApi(row.id)
|
const res = await SmsTemplateApi.getSmsTemplateApi(rowId)
|
||||||
unref(formRef)?.setValues(res)
|
unref(formRef)?.setValues(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,136 +252,3 @@ const sendSmsTest = () => {
|
||||||
// ========== 初始化 ==========
|
// ========== 初始化 ==========
|
||||||
getList()
|
getList()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
|
||||||
<!-- 搜索工作区 -->
|
|
||||||
<ContentWrap>
|
|
||||||
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
|
|
||||||
</ContentWrap>
|
|
||||||
<ContentWrap>
|
|
||||||
<!-- 操作工具栏 -->
|
|
||||||
<div class="mb-10px">
|
|
||||||
<el-button type="primary" v-hasPermi="['system:sms-channel:create']" @click="handleCreate">
|
|
||||||
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<!-- 列表 -->
|
|
||||||
<Table
|
|
||||||
:columns="allSchemas.tableColumns"
|
|
||||||
:selection="false"
|
|
||||||
:data="tableObject.tableList"
|
|
||||||
:loading="tableObject.loading"
|
|
||||||
:pagination="{
|
|
||||||
total: tableObject.total
|
|
||||||
}"
|
|
||||||
v-model:pageSize="tableObject.pageSize"
|
|
||||||
v-model:currentPage="tableObject.currentPage"
|
|
||||||
@register="register"
|
|
||||||
>
|
|
||||||
<template #type="{ row }">
|
|
||||||
<DictTag :type="DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE" :value="row.type" />
|
|
||||||
</template>
|
|
||||||
<template #status="{ row }">
|
|
||||||
<DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
|
|
||||||
</template>
|
|
||||||
<template #createTime="{ row }">
|
|
||||||
<span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
|
||||||
</template>
|
|
||||||
<template #action="{ row }">
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:sms-template:send-sms']"
|
|
||||||
@click="handleSendSms(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:cpu" class="mr-1px" /> {{ t('action.test') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:sms-template:update']"
|
|
||||||
@click="handleUpdate(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:sms-template:update']"
|
|
||||||
@click="handleDetail(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:sms-template:delete']"
|
|
||||||
@click="delList(row.id, false)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</Table>
|
|
||||||
</ContentWrap>
|
|
||||||
|
|
||||||
<XModal v-model="dialogVisible" :title="dialogTitle">
|
|
||||||
<!-- 对话框(添加 / 修改) -->
|
|
||||||
<Form
|
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
|
||||||
:schema="allSchemas.formSchema"
|
|
||||||
:rules="rules"
|
|
||||||
ref="formRef"
|
|
||||||
/>
|
|
||||||
<!-- 对话框(详情) -->
|
|
||||||
<Descriptions
|
|
||||||
v-if="actionType === 'detail'"
|
|
||||||
:schema="allSchemas.detailSchema"
|
|
||||||
:data="detailRef"
|
|
||||||
/>
|
|
||||||
<!-- 操作按钮 -->
|
|
||||||
<template #footer>
|
|
||||||
<el-button
|
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
|
||||||
type="primary"
|
|
||||||
:loading="loading"
|
|
||||||
@click="submitForm"
|
|
||||||
>
|
|
||||||
{{ t('action.save') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
|
||||||
</XModal>
|
|
||||||
<XModal v-model="sendVisible" title="测试">
|
|
||||||
<el-form :model="sendSmsForm" :rules="sendSmsRules" label-width="140px">
|
|
||||||
<el-form-item label="模板内容" prop="content">
|
|
||||||
<el-input
|
|
||||||
v-model="sendSmsForm.content"
|
|
||||||
type="textarea"
|
|
||||||
placeholder="请输入模板内容"
|
|
||||||
readonly
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="手机号" prop="mobile">
|
|
||||||
<el-input v-model="sendSmsForm.mobile" placeholder="请输入手机号" />
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item
|
|
||||||
v-for="param in sendSmsForm.params"
|
|
||||||
:key="param"
|
|
||||||
:label="'参数 {' + param + '}'"
|
|
||||||
:prop="'templateParams.' + param"
|
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
v-model="sendSmsForm.templateParams[param]"
|
|
||||||
:placeholder="'请输入 ' + param + ' 参数'"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<!-- 操作按钮 -->
|
|
||||||
<template #footer>
|
|
||||||
<el-button type="primary" :loading="loading" @click="sendSmsTest">
|
|
||||||
{{ t('action.test') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button @click="sendVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
|
||||||
</XModal>
|
|
||||||
</template>
|
|
||||||
|
|
|
@ -1,3 +1,126 @@
|
||||||
|
<template>
|
||||||
|
<!-- 搜索工作区 -->
|
||||||
|
<ContentWrap>
|
||||||
|
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
|
||||||
|
</ContentWrap>
|
||||||
|
<ContentWrap>
|
||||||
|
<!-- 操作工具栏 -->
|
||||||
|
<div class="mb-10px">
|
||||||
|
<XButton
|
||||||
|
type="primary"
|
||||||
|
preIcon="ep:zoom-in"
|
||||||
|
:title="t('action.add')"
|
||||||
|
v-hasPermi="['system:tenant:create']"
|
||||||
|
@click="handleCreate()"
|
||||||
|
/>
|
||||||
|
<XButton
|
||||||
|
type="warning"
|
||||||
|
preIcon="ep:download"
|
||||||
|
:title="t('action.export')"
|
||||||
|
v-hasPermi="['system:tenant:export']"
|
||||||
|
@click="exportList('租户数据.xls')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<!-- 列表 -->
|
||||||
|
<Table
|
||||||
|
:columns="allSchemas.tableColumns"
|
||||||
|
:selection="false"
|
||||||
|
:data="tableObject.tableList"
|
||||||
|
:loading="tableObject.loading"
|
||||||
|
:pagination="{
|
||||||
|
total: tableObject.total
|
||||||
|
}"
|
||||||
|
v-model:pageSize="tableObject.pageSize"
|
||||||
|
v-model:currentPage="tableObject.currentPage"
|
||||||
|
@register="register"
|
||||||
|
>
|
||||||
|
<template #accountCount="{ row }">
|
||||||
|
<el-tag> {{ row.accountCount }} </el-tag>
|
||||||
|
</template>
|
||||||
|
<template #status="{ row }">
|
||||||
|
<DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
|
||||||
|
</template>
|
||||||
|
<template #packageId="{ row }">
|
||||||
|
<el-tag v-if="row.packageId === 0" type="danger">系统租户</el-tag>
|
||||||
|
<el-tag v-else type="success"> {{ getPackageName(row.packageId) }} </el-tag>
|
||||||
|
</template>
|
||||||
|
<template #expireTime="{ row }">
|
||||||
|
<span>{{ dayjs(row.expireTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
||||||
|
</template>
|
||||||
|
<template #createTime="{ row }">
|
||||||
|
<span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
||||||
|
</template>
|
||||||
|
<template #action="{ row }">
|
||||||
|
<!-- 操作:修改 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:edit"
|
||||||
|
:title="t('action.edit')"
|
||||||
|
v-hasPermi="['system:tenant:update']"
|
||||||
|
@click="handleUpdate(row)"
|
||||||
|
/>
|
||||||
|
<!-- 操作:详情 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:view"
|
||||||
|
:title="t('action.detail')"
|
||||||
|
v-hasPermi="['system:tenant:update']"
|
||||||
|
@click="handleDetail(row)"
|
||||||
|
/>
|
||||||
|
<!-- 操作:删除 -->
|
||||||
|
<XTextButton
|
||||||
|
preIcon="ep:delete"
|
||||||
|
:title="t('action.del')"
|
||||||
|
v-hasPermi="['system:tenant:delete']"
|
||||||
|
@click="delList(row.id, false)"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</Table>
|
||||||
|
</ContentWrap>
|
||||||
|
|
||||||
|
<XModal v-model="dialogVisible" :title="dialogTitle">
|
||||||
|
<!-- 对话框(添加 / 修改) -->
|
||||||
|
<Form
|
||||||
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
|
:schema="allSchemas.formSchema"
|
||||||
|
:rules="rules"
|
||||||
|
ref="formRef"
|
||||||
|
>
|
||||||
|
<template #packageId>
|
||||||
|
<el-select v-model="tenantPackageId">
|
||||||
|
<el-option
|
||||||
|
v-for="item in tenantPackageOptions"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
</Form>
|
||||||
|
<!-- 对话框(详情) -->
|
||||||
|
<Descriptions
|
||||||
|
v-if="actionType === 'detail'"
|
||||||
|
:schema="allSchemas.detailSchema"
|
||||||
|
:data="detailRef"
|
||||||
|
>
|
||||||
|
<template #packageId="{ row }">
|
||||||
|
<el-tag v-if="row.packageId === 0" type="danger">系统租户</el-tag>
|
||||||
|
<el-tag v-else type="success"> {{ getPackageName(row.packageId) }} </el-tag>
|
||||||
|
</template>
|
||||||
|
</Descriptions>
|
||||||
|
<!-- 操作按钮 -->
|
||||||
|
<template #footer>
|
||||||
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
|
:loading="actionLoading"
|
||||||
|
@click="submitForm()"
|
||||||
|
/>
|
||||||
|
<!-- 按钮:关闭 -->
|
||||||
|
<XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
|
</template>
|
||||||
|
</XModal>
|
||||||
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, unref, onMounted } from 'vue'
|
import { ref, unref, onMounted } from 'vue'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
@ -114,126 +237,3 @@ onMounted(async () => {
|
||||||
await getTenantPackageOptions()
|
await getTenantPackageOptions()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
|
||||||
<!-- 搜索工作区 -->
|
|
||||||
<ContentWrap>
|
|
||||||
<Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" />
|
|
||||||
</ContentWrap>
|
|
||||||
<ContentWrap>
|
|
||||||
<!-- 操作工具栏 -->
|
|
||||||
<div class="mb-10px">
|
|
||||||
<el-button type="primary" v-hasPermi="['system:tenant:create']" @click="handleCreate">
|
|
||||||
<Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
type="warning"
|
|
||||||
v-hasPermi="['system:tenant:export']"
|
|
||||||
:loading="tableObject.exportLoading"
|
|
||||||
@click="exportList('租户数据.xls')"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:download" class="mr-5px" /> {{ t('action.export') }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
<!-- 列表 -->
|
|
||||||
<Table
|
|
||||||
:columns="allSchemas.tableColumns"
|
|
||||||
:selection="false"
|
|
||||||
:data="tableObject.tableList"
|
|
||||||
:loading="tableObject.loading"
|
|
||||||
:pagination="{
|
|
||||||
total: tableObject.total
|
|
||||||
}"
|
|
||||||
v-model:pageSize="tableObject.pageSize"
|
|
||||||
v-model:currentPage="tableObject.currentPage"
|
|
||||||
@register="register"
|
|
||||||
>
|
|
||||||
<template #accountCount="{ row }">
|
|
||||||
<el-tag> {{ row.accountCount }} </el-tag>
|
|
||||||
</template>
|
|
||||||
<template #status="{ row }">
|
|
||||||
<DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
|
|
||||||
</template>
|
|
||||||
<template #packageId="{ row }">
|
|
||||||
<el-tag v-if="row.packageId === 0" type="danger">系统租户</el-tag>
|
|
||||||
<el-tag v-else type="success"> {{ getPackageName(row.packageId) }} </el-tag>
|
|
||||||
</template>
|
|
||||||
<template #expireTime="{ row }">
|
|
||||||
<span>{{ dayjs(row.expireTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
|
||||||
</template>
|
|
||||||
<template #createTime="{ row }">
|
|
||||||
<span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
|
|
||||||
</template>
|
|
||||||
<template #action="{ row }">
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:tenant:update']"
|
|
||||||
@click="handleUpdate(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:tenant:update']"
|
|
||||||
@click="handleDetail(row)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
|
||||||
link
|
|
||||||
type="primary"
|
|
||||||
v-hasPermi="['system:tenant:delete']"
|
|
||||||
@click="delList(row.id, false)"
|
|
||||||
>
|
|
||||||
<Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
|
|
||||||
</el-button>
|
|
||||||
</template>
|
|
||||||
</Table>
|
|
||||||
</ContentWrap>
|
|
||||||
|
|
||||||
<XModal v-model="dialogVisible" :title="dialogTitle">
|
|
||||||
<!-- 对话框(添加 / 修改) -->
|
|
||||||
<Form
|
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
|
||||||
:schema="allSchemas.formSchema"
|
|
||||||
:rules="rules"
|
|
||||||
ref="formRef"
|
|
||||||
>
|
|
||||||
<template #packageId>
|
|
||||||
<el-select v-model="tenantPackageId">
|
|
||||||
<el-option
|
|
||||||
v-for="item in tenantPackageOptions"
|
|
||||||
:key="item.id"
|
|
||||||
:label="item.name"
|
|
||||||
:value="item.id"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
</template>
|
|
||||||
</Form>
|
|
||||||
<!-- 对话框(详情) -->
|
|
||||||
<Descriptions
|
|
||||||
v-if="actionType === 'detail'"
|
|
||||||
:schema="allSchemas.detailSchema"
|
|
||||||
:data="detailRef"
|
|
||||||
>
|
|
||||||
<template #packageId="{ row }">
|
|
||||||
<el-tag v-if="row.packageId === 0" type="danger">系统租户</el-tag>
|
|
||||||
<el-tag v-else type="success"> {{ getPackageName(row.packageId) }} </el-tag>
|
|
||||||
</template>
|
|
||||||
</Descriptions>
|
|
||||||
<!-- 操作按钮 -->
|
|
||||||
<template #footer>
|
|
||||||
<el-button
|
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
|
||||||
type="primary"
|
|
||||||
:loading="actionLoading"
|
|
||||||
@click="submitForm"
|
|
||||||
>
|
|
||||||
{{ t('action.save') }}
|
|
||||||
</el-button>
|
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
|
||||||
</XModal>
|
|
||||||
</template>
|
|
||||||
|
|
|
@ -185,15 +185,16 @@ onMounted(async () => {
|
||||||
</Form>
|
</Form>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="loading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -459,15 +459,16 @@ onMounted(async () => {
|
||||||
</Descriptions>
|
</Descriptions>
|
||||||
<!-- 操作按钮 -->
|
<!-- 操作按钮 -->
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button
|
<!-- 按钮:保存 -->
|
||||||
|
<XButton
|
||||||
v-if="['create', 'update'].includes(actionType)"
|
v-if="['create', 'update'].includes(actionType)"
|
||||||
type="primary"
|
type="primary"
|
||||||
|
:title="t('action.save')"
|
||||||
:loading="loading"
|
:loading="loading"
|
||||||
@click="submitForm"
|
@click="submitForm()"
|
||||||
>
|
/>
|
||||||
{{ t('action.save') }}
|
<!-- 按钮:关闭 -->
|
||||||
</el-button>
|
<XButton :loading="loading" :title="t('dialog.close')" @click="dialogVisible = false" />
|
||||||
<el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button>
|
|
||||||
</template>
|
</template>
|
||||||
</XModal>
|
</XModal>
|
||||||
<!-- 分配用户角色 -->
|
<!-- 分配用户角色 -->
|
||||||
|
|
Loading…
Reference in New Issue