This commit is contained in:
2023-10-20 17:50:33 +08:00
60 changed files with 276 additions and 1172 deletions

View File

@@ -1,216 +1,71 @@
import {
RESULT_CODE_ERROR,
RESULT_CODE_SUCCESS,
RESULT_MSG_ERROR,
} from '@/constants/result-constants';
import { request } from '@/plugins/http-fetch';
import { parseObjLineToHump } from '@/utils/parse-utils';
/**
* 查询软件列表
* @param query 查询参数
* @returns object
*/
export async function listLicense(query: Record<string, any>) {
let totalSQL = 'select count(id) as total from ne_license ';
let rowsSQL = ' select * from ne_license ';
// 查询
let querySQL = 'where 1=1';
if (query.neType) {
querySQL += ` and ne_type like '%${query.neType}%' `;
}
// 分页
const pageNum = query.pageNum - 1;
const limtSql = ` order by created_at desc limit ${pageNum},${query.pageSize} `;
// 发起请求
const result = await request({
url: `/api/rest/databaseManagement/v1/select/omc_db/ne_license`,
method: 'get',
params: {
totalSQL: totalSQL + querySQL,
rowsSQL: rowsSQL + querySQL + limtSql,
},
});
// 解析数据
if (result.code === RESULT_CODE_SUCCESS) {
const data: DataList = {
total: 0,
rows: [],
code: result.code,
msg: result.msg,
};
result.data.data.forEach((item: any) => {
const itemData = item['ne_license'];
if (Array.isArray(itemData)) {
if (itemData.length === 1 && itemData[0]['total'] >= 0) {
data.total = itemData[0]['total'];
} else {
data.rows = itemData.map(v => parseObjLineToHump(v));
}
}
});
return data;
}
return result;
}
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import { request } from '@/plugins/http-fetch';
import { parseObjLineToHump } from '@/utils/parse-utils';
/**
* 获取软件信息文件
* @param menuId 网元ID
* @returns object
*/
export async function downloadNeSoftware(data: Record<string, any>) {
return await request({
url: `/api/rest/systemManagement/v1/${data.neType}/software/${data.version}`,
method: 'get',
responseType: 'blob',
});
/**
* 查询软件列表
* @param query 查询参数
* @returns object
*/
export async function listLicense(query: Record<string, any>) {
let totalSQL = 'select count(id) as total from ne_license ';
let rowsSQL = ' select * from ne_license ';
// 查询
let querySQL = 'where 1=1';
if (query.neType) {
querySQL += ` and ne_type like '%${query.neType}%' `;
}
/**
* 上传文件
* @param data 表单数据对象
* @returns object
*/
export function uploadLicense(data: FormData) {
return request({
url: `/api/rest/systemManagement/v1/elementType/${data.get('nfType')}/objectType/license?neId=${data.get('nfId')}`,
method: 'post',
data,
dataType: 'form-data',
});
}
/**
* 下发文件
* @param data 数据对象
* @returns object
*/
export async function sendNeSoftware(data: Record<string, any>) {
const result = await request({
url: `/api/rest/systemManagement/v1/${data.neType}/software/${data.version}/${data.neId}`,
method: 'post',
});
// 解析数据
if (result.code === RESULT_CODE_SUCCESS && result.data.data) {
let rows = result.data.data.affectedRows;
if (rows) {
delete result.data;
return result;
} else {
return { code: RESULT_CODE_ERROR, msg: RESULT_MSG_ERROR };
}
}
return result;
}
/**
* 激活文件
* @param data 数据对象
* @returns object
*/
export async function runNeSoftware(data: Record<string, any>) {
const result = await request({
url: `/api/rest/systemManagement/v1/${data.neType}/software/${data.version}/${data.neId}`,
method: 'put',
});
// 解析数据
if (result.code === RESULT_CODE_SUCCESS && result.data.data) {
let rows = result.data.data.affectedRows;
if (rows) {
delete result.data;
return result;
} else {
return { code: RESULT_CODE_ERROR, msg: RESULT_MSG_ERROR };
}
}
return result;
}
/**
* 回退文件
* @param data 数据对象
* @returns object
*/
export async function backNeSoftware(data: Record<string, any>) {
const result = await request({
url: `/api/rest/systemManagement/v1/${data.neType}/software/${data.version}/${data.neId}`,
method: 'patch',
});
// 解析数据
if (result.code === RESULT_CODE_SUCCESS && result.data.data) {
let rows = result.data.data.affectedRows;
if (rows) {
delete result.data;
return result;
} else {
return { code: RESULT_CODE_ERROR, msg: RESULT_MSG_ERROR };
}
}
return result;
}
/**
* 查询版本列表
* @param query 查询参数
* @returns object
*/
export async function listNeVersion(query: Record<string, any>) {
let totalSQL = 'select count(id) as total from ne_version ';
let rowsSQL = 'select * from ne_version ';
// 查询
let querySQL = 'where 1=1';
if (query.neType) {
querySQL += ` and ne_type like '%${query.neType}%' `;
}
if (query.status) {
querySQL += ` and status = '${query.status}' `;
}
if (query.beginTime && query.endTime) {
querySQL += ` and update_time BETWEEN '${query.beginTime}' AND '${query.endTime}' `;
}
// 分页
const pageNum = query.pageNum - 1;
const limtSql = ` order by update_time desc limit ${pageNum},${query.pageSize} `;
// 发起请求
const result = await request({
url: `/api/rest/databaseManagement/v1/select/omc_db/ne_version`,
method: 'get',
params: {
totalSQL: totalSQL + querySQL,
rowsSQL: rowsSQL + querySQL + limtSql,
},
});
// 解析数据
if (result.code === RESULT_CODE_SUCCESS) {
const data: DataList = {
total: 0,
rows: [],
code: result.code,
msg: result.msg,
};
result.data.data.forEach((item: any) => {
const itemData = item['ne_version'];
if (Array.isArray(itemData)) {
if (itemData.length === 1 && itemData[0]['total'] >= 0) {
data.total = itemData[0]['total'];
} else {
data.rows = itemData.map(v => parseObjLineToHump(v));
}
// 分页
const pageNum = query.pageNum - 1;
const limtSql = ` order by created_at desc limit ${pageNum},${query.pageSize} `;
// 发起请求
const result = await request({
url: `/api/rest/databaseManagement/v1/select/omc_db/ne_license`,
method: 'get',
params: {
totalSQL: totalSQL + querySQL,
rowsSQL: rowsSQL + querySQL + limtSql,
},
});
// 解析数据
if (result.code === RESULT_CODE_SUCCESS) {
const data: DataList = {
total: 0,
rows: [],
code: result.code,
msg: result.msg,
};
result.data.data.forEach((item: any) => {
const itemData = item['ne_license'];
if (Array.isArray(itemData)) {
if (itemData.length === 1 && itemData[0]['total'] >= 0) {
data.total = itemData[0]['total'];
} else {
data.rows = itemData.map(v => parseObjLineToHump(v));
}
});
return data;
}
return result;
}
});
return data;
}
return result;
}
/**
* 上传文件
* @param data 表单数据对象
* @returns object
*/
export function uploadLicense(data: FormData) {
return request({
url: `/api/rest/systemManagement/v1/elementType/${data.get(
'nfType'
)}/objectType/license?neId=${data.get('nfId')}`,
method: 'post',
data,
dataType: 'form-data',
});
}

View File

@@ -145,7 +145,7 @@ export async function runNeSoftware(data: Record<string, any>) {
export async function backNeSoftware(data: Record<string, any>) {
const result = await request({
url: `/api/rest/systemManagement/v1/${data.neType}/software/${data.version}/${data.neId}`,
method: 'patch',
method: 'PATCH',
timeout: 60 * 1000,
});
// 解析数据

View File

@@ -13,6 +13,7 @@ import useLayoutStore from '@/store/modules/layout';
import useRouterStore from '@/store/modules/router';
import useTabsStore from '@/store/modules/tabs';
import useAlarmStore from '@/store/modules/alarm';
import useAppStore from '@/store/modules/app';
import { useRouter } from 'vue-router';
import { MENU_PATH_INLINE } from '@/constants/menu-constants';
const { proConfig, waterMarkContent } = useLayoutStore();
@@ -24,6 +25,7 @@ import { parseDateToStr } from '@/utils/date-utils';
const { t } = useI18n();
const routerStore = useRouterStore();
const tabsStore = useTabsStore();
const appStore = useAppStore();
const router = useRouter();
/**菜单面板 */
@@ -121,7 +123,7 @@ tabsStore.clear();
//
onMounted(() => {
fnGetServerTime();
useAlarmStore().fnGetActiveAlarmInfo()
useAlarmStore().fnGetActiveAlarmInfo();
});
// ==== 服务器时间显示 start
@@ -166,7 +168,7 @@ document.addEventListener('visibilitychange', function () {
if (document.visibilityState == 'visible') {
//切换到该页面时执行
fnGetServerTime();
useAlarmStore().fnGetActiveAlarmInfo()
useAlarmStore().fnGetActiveAlarmInfo();
}
});
// ==== 服务器时间显示 end
@@ -236,15 +238,14 @@ document.addEventListener('visibilitychange', function () {
<!--插槽-内容底部-->
<template #footerRender>
<footer class="ant-pro-global-footer footer">
<div class="ant-pro-global-footer-links">
<a target="_self" href="/">{{ t('globalFooter.help') }}</a>
<a target="_self" href="/">{{ t('globalFooter.privacy') }}</a>
<a target="_self" href="/">{{ t('globalFooter.term') }}</a>
<footer class="footer">
<div>
<span>{{ appStore.copyright }}</span>
</div>
<div class="footer-time">{{ serverTime.str }} {{ serverTime.zone }}</div>
<div class="ant-pro-global-footer-copyright">
Copyright ©2023 For AGrand 千通
<div>
<span class="footer-time">
{{ serverTime.str }} {{ serverTime.zone }}
</span>
</div>
</footer>
</template>
@@ -267,8 +268,22 @@ document.addEventListener('visibilitychange', function () {
width: 180px;
}
.footer-time {
color: #00000075;
transition: all 0.3s;
.footer {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-between;
z-index: 16;
margin: 0px;
padding: 4px 16px;
width: auto;
background: #fff;
box-shadow: 0 1px 4px #0015291f;
transition: background 0.3s, width 0.2s;
&-time {
color: #00000085;
transition: all 0.3s;
}
}
</style>

View File

@@ -53,7 +53,7 @@ type OptionsType = {
/**请求地址 */
url: string;
/**请求方法 */
method: 'get' | 'post' | 'put' | 'delete' | 'patch';
method: 'get' | 'post' | 'put' | 'delete' | 'PATCH';
/**请求头 */
headers?: HeadersInit;
/**地址栏参数 */

View File

@@ -40,104 +40,6 @@ const constantRoutes: RouteRecordRaw[] = [
meta: { title: '首页', icon: 'icon-pcduan' },
component: () => import('@/views/index.vue'),
},
{
path: '/dome1',
name: 'Dome1',
meta: { title: '示例一', icon: 'icon-ios', hideInMenu: true },
component: () => import('@/views/dome/dome1.vue'),
},
{
path: '/dome2',
name: 'Dome2',
meta: { title: '示例二', icon: 'icon-anzhuo', hideInMenu: true },
component: () => import('@/views/dome/dome2.vue'),
},
{
path: '/dome3',
name: 'Dome3',
meta: { title: '示例三', icon: 'icon-qunzhu', hideInMenu: true },
component: () => import('@/views/dome/dome3.vue'),
},
{
path: '/domes',
name: 'Domes',
meta: {
title: '示例目录',
icon: 'icon-zhizuoliucheng',
hideInMenu: true,
},
component: BlankLayout,
redirect: () => ({ name: 'PageInfo' }),
children: [
{
path: 'page-info',
name: 'PageInfo',
meta: { title: '页面信息', icon: 'icon-huifu' },
component: () => import('../views/domes/page-info.vue'),
},
{
path: 'page-typography',
name: 'PageTypography',
meta: { title: '文本信息', icon: 'icon-huizhiguize' },
component: () => import('../views/domes/page-typography.vue'),
},
{
path: 'dynamic-match/:id(\\d+)',
name: 'DynamicMatch',
// 路由 path 默认参数再 meta.params 里
meta: { title: '动态参数页面', params: { id: 1 }, cache: true },
component: () => import('../views/domes/dynamic-match.vue'),
},
{
path: 'disabled',
name: 'Disabled',
meta: { title: '禁止点击', disabled: true },
component: () => {},
},
{
path: 'https://github.com/TsMask',
name: 'BlankGithubTsMask',
meta: {
title: 'TsMask-打开新窗',
icon: 'icon-github',
target: '_blank',
},
component: () => {},
},
{
path: encode('https://www.antdv.com/components/comment-cn'),
name: 'HttpsAntDesignVue',
meta: {
title: 'Antdv-内嵌窗口',
icon: 'icon-morentouxiang',
target: null,
},
component: LinkLayout,
},
],
},
{
path: 'https://github.com/',
name: 'BlankGithub',
meta: {
title: 'Github-打开新窗',
icon: 'icon-github',
target: '_blank',
hideInMenu: true,
},
component: () => {},
},
{
path: 'https://3x.antdv.com/components/comment-cn?sdf=12321&id=12&sdnf',
name: 'SelfAnt Design Vue',
meta: {
title: 'Antdv-当前窗口',
icon: 'icon-morentouxiang',
target: '_self',
hideInMenu: true,
},
component: LinkLayout,
},
{
path: '/account',
name: 'Account',

View File

@@ -8,6 +8,8 @@ type AppStore = {
appCode: string;
/**应用版本 */
appVersion: string;
/**应用版权声明 */
copyright: string;
};
const useAppStore = defineStore('app', {
@@ -15,6 +17,7 @@ const useAppStore = defineStore('app', {
appName: import.meta.env.VITE_APP_NAME,
appCode: import.meta.env.VITE_APP_CODE,
appVersion: import.meta.env.VITE_APP_VERSION,
copyright: 'Copyright ©2023 For AGrand 千通科技',
}),
actions: {
/**设置网页标题 */
@@ -25,6 +28,10 @@ const useAppStore = defineStore('app', {
document.title = this.appName;
}
},
/**设置版权声明 */
setCopyright(text: string) {
this.copyright = text;
},
},
});

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { Form, message, Modal } from 'ant-design-vue/lib';
@@ -18,10 +17,6 @@ import useI18n from '@/hooks/useI18n';
import { getConfigInfo, updateConfig } from '@/api/configManage/config';
import useNeInfoStore from '@/store/modules/neinfo';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -232,8 +227,8 @@ let modalState: ModalStateType = reactive({
visibleByEdit: false,
title: '任务设置',
from: {
configTag: "",
autoBackupTime: "",
configTag: '',
autoBackupTime: '',
},
confirmLoading: false,
});
@@ -250,8 +245,8 @@ function fnModalVisibleByEdit() {
modalState.confirmLoading = false;
hide();
if (res.code === RESULT_CODE_SUCCESS) {
modalState.from.configTag = res.data.configTag
modalState.from.autoBackupTime = res.data.value
modalState.from.configTag = res.data.configTag;
modalState.from.autoBackupTime = res.data.value;
modalState.title = t('views.configManage.backupManage.setBackupTask');
modalState.visibleByEdit = true;
} else {
@@ -264,21 +259,21 @@ function fnModalVisibleByEdit() {
const modalStateFrom = Form.useForm(
modalState.from,
reactive({
autoBackupTime: [{ required: true, message: '备份时间不能为空' }],
autoBackupTime: [{ required: true, message: '备份时间不能为空' }],
})
);
/**
* 对话框弹出确认执行函数
* 进行表达规则校验
*/
function fnModalOk() {
function fnModalOk() {
modalStateFrom
.validate()
.then(e => {
modalState.confirmLoading = true;
const from = toRaw(modalState.from);
const hide = message.loading({ content: t('common.loading') });
updateConfig(from.configTag, {value: from.autoBackupTime})
updateConfig(from.configTag, { value: from.autoBackupTime })
.then(res => {
if (res.code === RESULT_CODE_SUCCESS) {
message.success({
@@ -320,7 +315,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"
@@ -334,12 +329,12 @@ onMounted(() => {
:label="t('views.configManage.backupManage.neType')"
name="neType "
>
<a-auto-complete
<a-auto-complete
v-model:value="queryParams.neType"
:options="useNeInfoStore().getNeSelectOtions"
allow-clear
:placeholder="t('views.configManage.backupManage.neTypePlease')"
/>
/>
</a-form-item>
</a-col>
<a-col :lg="6" :md="12" :xs="24">
@@ -461,17 +456,17 @@ onMounted(() => {
>
<a-form name="modalStateFrom" layout="horizontal">
<a-form-item
label="自动备份任务备份时间(小时)"
name="autoBackupTime"
v-bind="modalStateFrom.validateInfos.autoBackupTime"
>
<a-input
v-model:value="modalState.from.autoBackupTime"
allow-clear
placeholder="备份任务执行单位是小时"
>
</a-input>
</a-form-item>
label="自动备份任务备份时间(小时)"
name="autoBackupTime"
v-bind="modalStateFrom.validateInfos.autoBackupTime"
>
<a-input
v-model:value="modalState.from.autoBackupTime"
allow-clear
placeholder="备份任务执行单位是小时"
>
</a-input>
</a-form-item>
</a-form>
</a-modal>
</PageContainer>

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { Modal, message } from 'ant-design-vue/lib';
@@ -18,12 +17,7 @@ import useNeInfoStore from '@/store/modules/neinfo';
import { SizeType } from 'ant-design-vue/lib/config-provider';
import { toRaw } from 'vue';
import { regExpIPv4, regExpIPv6 } from '@/utils/regular-utils';
import { parseFirstUpper } from '@/utils/parse-utils';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**网元类型选择 type,id */
let neTypeSelect = ref<string[]>(['', '']);
@@ -1028,7 +1022,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
:bordered="false"
:body-style="{ marginBottom: '24px', paddingBottom: 0 }"

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { Form, message } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -13,10 +12,6 @@ import useNeInfoStore from '@/store/modules/neinfo';
import { FileType } from 'ant-design-vue/lib/upload/interface';
import { UploadRequestOption } from 'ant-design-vue/lib/vc-upload/interface';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -319,7 +314,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal, Form } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -26,10 +25,6 @@ import { UploadRequestOption } from 'ant-design-vue/lib/vc-upload/interface';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import useNeInfoStore from '@/store/modules/neinfo';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**表格所需option */
const neManageOption = reactive({
@@ -653,7 +648,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { Form, message, Modal } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -25,10 +24,6 @@ import useNeInfoStore from '@/store/modules/neinfo';
import { FileType } from 'ant-design-vue/lib/upload/interface';
import { UploadRequestOption } from 'ant-design-vue/lib/vc-upload/interface';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -588,7 +583,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,27 +0,0 @@
<template>
<PageContainer>
<a-result
status="404"
:style="{
height: '100%',
background: '#fff',
}"
title="Hello World"
sub-title="Sorry, you are not authorized to access this page."
>
<template #extra>
<a-button type="primary" @click="handleClick">Back Home</a-button>
</template>
</a-result>
</PageContainer>
</template>
<script lang="ts" setup>
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message } from 'ant-design-vue/lib';
const handleClick = () => {
console.log('info');
message.info('BackHome button clicked!');
};
</script>

View File

@@ -1,61 +0,0 @@
<template>
<a-layout class="layout">
<a-layout-header>
<div class="logo" />
<a-menu
v-model:selectedKeys="selectedKeys"
theme="dark"
mode="horizontal"
:style="{ lineHeight: '64px' }"
>
<a-menu-item key="1">nav 1</a-menu-item>
<a-menu-item key="2">nav 2</a-menu-item>
<a-menu-item key="3">nav 3</a-menu-item>
</a-menu>
</a-layout-header>
<a-layout-content style="padding: 0 50px">
<a-breadcrumb style="margin: 16px 0">
<a-breadcrumb-item>Home</a-breadcrumb-item>
<a-breadcrumb-item>List</a-breadcrumb-item>
<a-breadcrumb-item>App</a-breadcrumb-item>
</a-breadcrumb>
<div :style="{ background: '#fff', padding: '24px', minHeight: '280px' }">
Content {{ selectedKeys }}
</div>
</a-layout-content>
<a-layout-footer style="text-align: center">
Ant Design ©2018 Created by Ant UED
</a-layout-footer>
</a-layout>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
const selectedKeys = ref<string[]>(['2']);
</script>
<style scoped>
.site-layout-content {
min-height: 280px;
padding: 24px;
background: #fff;
}
#components-layout-demo-top .logo {
float: left;
width: 120px;
height: 31px;
margin: 16px 24px 16px 0;
background: rgba(255, 255, 255, 0.3);
}
.ant-row-rtl #components-layout-demo-top .logo {
float: right;
margin: 16px 0 16px 24px;
}
[data-theme='dark'] .site-layout-content {
background: #141414;
}
</style>

View File

@@ -1,30 +0,0 @@
<template>
<PageContainer title="Version" sub-title="show current project dependencies">
<template #content>
<strong>Content Area</strong>
</template>
<template #extra>
<strong>Extra Area</strong>
</template>
<template #extraContent>
<strong>ExtraContent Area</strong>
</template>
<template #tags>
<a-tag>Tag1</a-tag>
<a-tag color="pink">Tag2</a-tag>
</template>
<a-card title="Info">
<p v-for="i in list" :key="i">
text block...
<a-tag>{{ i }}</a-tag>
</p>
</a-card>
</PageContainer>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
const list = ref<number>(50);
</script>

View File

@@ -1,87 +0,0 @@
<template>
<PageContainer :title="`${route.meta.title} ${route.params.id}`">
<template #content>
<a-descriptions size="small" :column="2">
<a-descriptions-item label="创建人">张三</a-descriptions-item>
<a-descriptions-item label="联系方式">
<a>421421</a>
</a-descriptions-item>
<a-descriptions-item label="创建时间">2017-01-10</a-descriptions-item>
<a-descriptions-item label="更新时间">2017-10-10</a-descriptions-item>
<a-descriptions-item label="备注">
中国浙江省杭州市西湖区古翠路
</a-descriptions-item>
</a-descriptions>
</template>
<template #extra>
<a-button key="3">操作</a-button>
<a-button key="2">操作</a-button>
<a-button key="1" type="primary">主操作</a-button>
</template>
<template #extraContent>
<a-space>
<a-statistic title="Feedback" :value="1128">
<template #prefix>
<LikeOutlined />
</template>
</a-statistic>
<a-statistic title="Unmerged" :value="93" suffix="/ 100" />
</a-space>
</template>
<!-- 主内容区 -->
<div style="height: 300px">
<p>路由参数联动 分页器 组件</p>
<a-space>
<a-button type="dashed" @click="prev">跳转上一页</a-button>
<a-button type="dashed" @click="next">跳转下一页</a-button>
</a-space>
<a-divider />
<a-pagination
:current="currentId"
:total="total"
show-less-items
@change="handlePageChange"
/>
</div>
</PageContainer>
</template>
<script setup lang="ts">
import { PageContainer } from '@ant-design-vue/pro-layout';
import { computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
const route = useRoute();
const router = useRouter();
const currentId = computed(() => {
let id = route.params && (route.params.id as string);
return Number.parseInt(id as string, 10) || 1;
});
const total = computed(() => {
const v = currentId.value * 20;
if (v >= Number.MAX_SAFE_INTEGER) {
return Number.MAX_SAFE_INTEGER;
}
return v;
});
const next = () => {
router.push({
name: 'DynamicMatch',
params: { id: currentId.value + 1 },
});
};
const prev = () => {
router.push({
name: 'DynamicMatch',
params: { id: currentId.value > 1 ? currentId.value - 1 : 1 },
});
};
const handlePageChange = (currentPage: number) => {
router.push({
name: 'DynamicMatch',
params: { id: currentPage },
});
};
</script>

View File

@@ -1,58 +0,0 @@
<template>
<PageContainer :title="title">
<template #content>
<a-descriptions size="small" :column="2">
<a-descriptions-item label="创建人">张三</a-descriptions-item>
<a-descriptions-item label="联系方式">
<a>421421</a>
</a-descriptions-item>
<a-descriptions-item label="创建时间">2017-01-10</a-descriptions-item>
<a-descriptions-item label="更新时间">2017-10-10</a-descriptions-item>
<a-descriptions-item label="备注">
中国浙江省杭州市西湖区古翠路
</a-descriptions-item>
</a-descriptions>
</template>
<template #extra>
<a-button key="3">操作</a-button>
<a-button key="2">操作</a-button>
<a-button key="1" type="primary">主操作</a-button>
</template>
<template #extraContent>
<a-space>
<a-statistic title="Feedback" :value="1128">
<template #prefix>
<LikeOutlined />
</template>
</a-statistic>
<a-statistic title="Unmerged" :value="93" suffix="/ 100" />
</a-space>
</template>
<!-- 主内容区 -->
<div style="height: 120vh">
<a-result
status="404"
:style="{
height: '100%',
background: '#fff',
}"
title="Hello World"
sub-title="Sorry, you are not authorized to access this page."
>
<template #extra>
<a-button type="primary">Back Home</a-button>
</template>
</a-result>
</div>
</PageContainer>
</template>
<script setup lang="ts">
import { PageContainer } from '@ant-design-vue/pro-layout';
import { ref } from 'vue';
import { useRoute } from 'vue-router';
const route = useRoute();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
</script>

View File

@@ -1,102 +0,0 @@
<template>
<a-card>
<a-typography>
<a-typography-title>Introduction</a-typography-title>
<a-typography-paragraph>
In the process of internal desktop applications development, many
different design specs and implementations would be involved, which
might cause designers and developers difficulties and duplication and
reduce the efficiency of development.
</a-typography-paragraph>
<a-typography-paragraph>
After massive project practice and summaries, Ant Design, a design
language for background applications, is refined by Ant UED Team, which
aims to
<a-typography-text strong>
uniform the user interface specs for internal background projects,
lower the unnecessary cost of design differences and implementation
and liberate the resources of design and front-end development.
</a-typography-text>
</a-typography-paragraph>
<a-typography-title :level="2"
>Guidelines and Resources</a-typography-title
>
<a-typography-paragraph>
We supply a series of design principles, practical patterns and high
quality design resources (
<a-typography-text code>Sketch</a-typography-text>
and
<a-typography-text code>Axure</a-typography-text>
), to help people create their product prototypes beautifully and
efficiently.
</a-typography-paragraph>
<a-typography-paragraph>
<ul>
<li>
<a-typography-link href="/docs/resources"
>Resource Download</a-typography-link
>
</li>
</ul>
</a-typography-paragraph>
<a-typography-paragraph>
Press
<a-typography-text keyboard>Esc</a-typography-text>
to exit...
</a-typography-paragraph>
<a-divider />
<a-typography-title>介绍</a-typography-title>
<a-typography-paragraph>
蚂蚁的企业级产品是一个庞大且复杂的体系这类产品不仅量级巨大且功能复杂而且变动和并发频繁常常需要设计与开发能够快速的做出响应同时这类产品中有存在很多类似的页面以及组件可以通过抽象得到一些稳定且高复用性的内容
</a-typography-paragraph>
<a-typography-paragraph>
随着商业化的趋势越来越多的企业级产品对更好的用户体验有了进一步的要求带着这样的一个终极目标我们蚂蚁金服体验技术部经过大量的项目实践和总结逐步打磨出一个服务于企业级产品的设计体系
Ant Design基于
<a-typography-text mark>确定自然</a-typography-text>
的设计价值观通过模块化的解决方案降低冗余的生产成本让设计者专注于
<a-typography-text strong>更好的用户体验</a-typography-text>
</a-typography-paragraph>
<a-typography-title :level="2">设计资源</a-typography-title>
<a-typography-paragraph>
我们提供完善的设计原则最佳实践和设计资源文件
<a-typography-text code>Sketch</a-typography-text>
<a-typography-text code>Axure</a-typography-text>
来帮助业务快速设计出高质量的产品原型
</a-typography-paragraph>
<a-typography-paragraph>
<ul>
<li>
<a-typography-link href="/docs/resources-cn"
>设计资源</a-typography-link
>
</li>
</ul>
</a-typography-paragraph>
<a-typography-paragraph>
<blockquote>{{ blockContent }}</blockquote>
<pre>{{ blockContent }}</pre>
</a-typography-paragraph>
<a-typography-paragraph>
<a-typography-text keyboard>Esc</a-typography-text>
键退出阅读
</a-typography-paragraph>
</a-typography>
</a-card>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
const blockContent = ref<string>(`AntV 是蚂蚁金服全新一代数据可视化解决方案致力于提供一套简单方便、专业可靠、不限可能的数据可视化最佳实践。得益于丰富的业务场景和用户需求挑战AntV 经历多年积累与不断打磨,已支撑整个阿里集团内外 20000+ 业务系统,通过了日均千万级 UV 产品的严苛考验。
我们正在基础图表,图分析,图编辑,地理空间可视化,智能可视化等各个可视化的领域耕耘,欢迎同路人一起前行。` );
</script>

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
@@ -23,9 +22,6 @@ import { writeSheet } from '@/utils/execl-utils';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import { readLoalXlsx } from '@/utils/execl-utils';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**记录开始结束时间 */
let queryRangePicker = ref<[string, string]>(['', '']);
@@ -735,7 +731,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,8 +1,7 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { Form, Modal, message } from 'ant-design-vue/lib';
import { Form, message } from 'ant-design-vue/lib';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import {
getForwardSet,
@@ -12,10 +11,6 @@ import {
} from '@/api/faultManage/faultSetting';
import useI18n from '@/hooks/useI18n';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**对象信息状态类型 */
type ModalStateType = {
@@ -165,7 +160,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-row :gutter="16">
<a-col :span="8">
<!-- 日志设置 -->

View File

@@ -1,6 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import dayjs, { Dayjs } from 'dayjs';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
@@ -12,19 +10,13 @@ import {
listAct,
updateConfirm,
cancelConfirm,
exportAll
exportAll,
} from '@/api/faultManage/historyAlarm';
import useNeInfoStore from '@/store/modules/neinfo';
import useI18n from '@/hooks/useI18n';
import saveAs from 'file-saver';
import { writeSheet } from '@/utils/execl-utils';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import { readLoalXlsx } from '@/utils/execl-utils';
const { t } = useI18n();
const route = useRoute();
type RangeValue = [Dayjs, Dayjs];
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**记录开始结束时间 */
let queryRangePicker = ref<[string, string]>(['', '']);
@@ -469,33 +461,30 @@ function fnCancelConfirm() {
});
}
/**
* 导出全部
*/
function fnExportAll(){
function fnExportAll() {
const key = 'exportAlarmHis';
message.loading({ content: '请稍等...', key });
exportAll(queryParams)
.then(res => {
if (res.code === RESULT_CODE_SUCCESS) {
message.success({
content: `已完成导出`,
key,
duration: 3,
});
writeSheet(res.data, 'alarm').then(fileBlob =>
saveAs(fileBlob, `history-alarm_${Date.now()}.xlsx`)
);
} else {
message.error({
content: `${res.msg}`,
key,
duration: 3,
});
}
})
exportAll(queryParams).then(res => {
if (res.code === RESULT_CODE_SUCCESS) {
message.success({
content: `已完成导出`,
key,
duration: 3,
});
writeSheet(res.data, 'alarm').then(fileBlob =>
saveAs(fileBlob, `history-alarm_${Date.now()}.xlsx`)
);
} else {
message.error({
content: `${res.msg}`,
key,
duration: 3,
});
}
});
}
/**
@@ -540,7 +529,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -13,10 +12,6 @@ import useDictStore from '@/store/modules/dict';
import useI18n from '@/hooks/useI18n';
const { getDict } = useDictStore();
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**字典数据 */
let dict: {
@@ -204,7 +199,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -13,10 +12,6 @@ import useDictStore from '@/store/modules/dict';
import useI18n from '@/hooks/useI18n';
const { getDict } = useDictStore();
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**字典数据 */
let dict: {
@@ -201,7 +196,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { Form, Modal, message } from 'ant-design-vue/lib';
@@ -23,10 +22,6 @@ import saveAs from 'file-saver';
import { writeSheet } from '@/utils/execl-utils';
const { getDict } = useDictStore();
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**对象信息状态类型 */
type ModalStateType = {
@@ -414,7 +409,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-row :gutter="16">
<a-col :span="8">
<!-- 日志设置 -->

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -10,10 +9,6 @@ import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import { listMML } from '@/api/logManage/mml';
import useI18n from '@/hooks/useI18n';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**记录开始结束时间 */
let queryRangePicker = ref<[string, string]>(['', '']);
@@ -168,7 +163,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { SizeType } from 'ant-design-vue/lib/config-provider';
import { MenuInfo } from 'ant-design-vue/lib/menu/src/interface';
@@ -12,10 +11,6 @@ import useDictStore from '@/store/modules/dict';
import useI18n from '@/hooks/useI18n';
const { getDict } = useDictStore();
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**字典数据 */
let dict: {
@@ -207,7 +202,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -12,10 +11,6 @@ import useDictStore from '@/store/modules/dict';
import useI18n from '@/hooks/useI18n';
const { getDict } = useDictStore();
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**字典数据 */
let dict: {
@@ -196,7 +191,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -3,12 +3,14 @@ import { GlobalFooter } from '@ant-design-vue/pro-layout';
import { message } from 'ant-design-vue/lib';
import { reactive, onMounted } from 'vue';
import useUserStore from '@/store/modules/user';
import useAppStore from '@/store/modules/app';
import { getCaptchaImage } from '@/api/login';
import { useRouter, useRoute } from 'vue-router';
import useI18n from '@/hooks/useI18n';
import { toRaw } from 'vue';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { t, changeLocale } = useI18n();
const appStore = useAppStore();
const router = useRouter();
const route = useRoute();
@@ -20,9 +22,9 @@ let state = reactive({
/**表单属性 */
from: {
/**账号 */
username: '',
username: 'AGrand',
/**密码 */
password: '',
password: 'AGrand@1234',
/**验证码 */
code: '',
/**验证码uuid */
@@ -251,16 +253,7 @@ function fnChangeLocale(e: any) {
</a-form>
</div>
<GlobalFooter
class="footer"
:links="[
{ blankTarget: false, title: t('globalFooter.help'), href: '/' },
{ blankTarget: false, title: t('globalFooter.privacy'), href: '/' },
{ blankTarget: false, title: t('globalFooter.term'), href: '/' },
]"
copyright="Copyright ©2023 For AGrand 千通"
>
</GlobalFooter>
<GlobalFooter class="footer" :links="false" :copyright="appStore.copyright" />
</div>
</template>

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { Form, message } from 'ant-design-vue/lib';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
@@ -8,10 +7,6 @@ import { getOperationSet, updateOperationSet } from '@/api/mmlManage/mmlSet';
import { regExpIPv4 } from '@/utils/regular-utils';
import useI18n from '@/hooks/useI18n';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**对象信息状态类型 */
type ModalStateType = {
@@ -94,7 +89,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-row :gutter="16">
<a-col :span="8">
<!-- 接口设置 -->

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message } from 'ant-design-vue/lib';
@@ -10,10 +9,6 @@ import { regExpIPv4, regExpIPv6 } from '@/utils/regular-utils';
import useI18n from '@/hooks/useI18n';
import { getMMLByNE, sendMMlByNE } from '@/api/mmlManage/neOperate';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**网元参数 */
let neCascaderOtions = ref<Record<string, any>[]>([]);
@@ -315,7 +310,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-row :gutter="16">
<a-col :span="6">
<!-- 命令导航 -->

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message } from 'ant-design-vue/lib';
@@ -10,10 +9,6 @@ import { regExpIPv4, regExpIPv6 } from '@/utils/regular-utils';
import useI18n from '@/hooks/useI18n';
import { getMMLByOMC, sendMMlByOMC } from '@/api/mmlManage/omcOperate';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**网元参数 */
let neOtions = ref<Record<string, any>[]>([]);
@@ -306,7 +301,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-row :gutter="16">
<a-col :span="6">
<!-- 命令导航 -->

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message } from 'ant-design-vue/lib';
@@ -10,10 +9,6 @@ import { regExpIPv4, regExpIPv6 } from '@/utils/regular-utils';
import useI18n from '@/hooks/useI18n';
import { getMMLByUDM, sendMMlByUDM } from '@/api/mmlManage/udmOperate';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**网元参数 */
let neOtions = ref<Record<string, any>[]>([]);
@@ -306,7 +301,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-row :gutter="16">
<a-col :span="6">
<!-- 命令导航 -->

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted } from 'vue';
import {
listCacheName,
@@ -14,10 +13,6 @@ import { ColumnsType } from 'ant-design-vue/lib/table/Table';
import { message } from 'ant-design-vue/lib';
import { hasPermissions } from '@/plugins/auth-user';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const route = useRoute();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**请求点击 */
let isClick = ref<boolean>(false);
@@ -271,15 +266,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph>
系统在缓存
<a-typography-text code>Redis</a-typography-text>
应用程序中的可控的缓存信息
</a-typography-paragraph>
</template>
<PageContainer>
<a-row :gutter="20">
<a-col :lg="8" :md="8" :xs="24">
<a-card

View File

@@ -14,9 +14,7 @@ import { CanvasRenderer } from 'echarts/renderers';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { getCache } from '@/api/monitor/cache';
import { reactive, ref, onMounted } from 'vue';
import { useRoute } from 'vue-router';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const route = useRoute();
echarts.use([
ToolboxComponent,
@@ -27,9 +25,6 @@ echarts.use([
LabelLayout,
]);
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**加载状态 */
let loading = ref<boolean>(true);
@@ -153,15 +148,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title" :loading="loading">
<template #content>
<a-typography-paragraph>
缓存
<a-typography-text code>Redis</a-typography-text>
应用程序的信息
</a-typography-paragraph>
</template>
<PageContainer :loading="loading">
<a-card
title="基本信息"
:bordered="false"

View File

@@ -1,6 +1,6 @@
<script setup lang="ts">
import { useRoute, useRouter } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { useRouter } from 'vue-router';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal, Form } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -24,12 +24,8 @@ import { hasPermissions } from '@/plugins/auth-user';
import { MENU_PATH_INLINE } from '@/constants/menu-constants';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { getDict } = useDictStore();
const route = useRoute();
const router = useRouter();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**字典数据 */
let dict: {
/**任务组名 */
@@ -555,22 +551,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph>
<a-typography-text code>Nodejs</a-typography-text>
使用
<a-typography-text code>Bull</a-typography-text>
基于
<a-typography-text code>Redis</a-typography-text>
的任务队列
<a-typography-text code>Golang</a-typography-text>
使用
<a-typography-text code>Cron</a-typography-text>
定时任务管理
</a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted } from 'vue';
import { reactive, onMounted } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
import { forceLogout, listOnline } from '@/api/monitor/online';
@@ -9,10 +8,6 @@ import { SizeType } from 'ant-design-vue/lib/config-provider';
import { MenuInfo } from 'ant-design-vue/lib/menu/src/interface';
import { ColumnsType } from 'ant-design-vue/lib/table';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const route = useRoute();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -199,17 +194,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph>
登录用户
<a-typography-text code>Token</a-typography-text>
授权标识记录存储在
<a-typography-text code>Redis</a-typography-text>
可撤销对用户的授权拒绝用户请求并强制退出
</a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"
@@ -256,11 +241,6 @@ onMounted(() => {
</a-card>
<a-card :bordered="false" :body-style="{ padding: '0px' }">
<!-- 插槽-卡片左侧侧 -->
<template #title>
{{ title }}
</template>
<!-- 插槽-卡片右侧 -->
<template #extra>
<a-space :size="8" align="center">

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -11,10 +10,6 @@ import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import { listSession, logoutSession } from '@/api/monitor/session';
import { diffValue, parseDateToStr } from '@/utils/date-utils';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -108,9 +103,9 @@ let tableColumns: ColumnsType = [
align: 'center',
customRender(opt) {
if (opt.value === 'online') {
return t('views.monitor.session.online')
return t('views.monitor.session.online');
}
return t('views.monitor.session.offline')
return t('views.monitor.session.offline');
},
},
{
@@ -157,14 +152,16 @@ function fnTableSize({ key }: MenuInfo) {
function fnForceLogout(row: Record<string, string>) {
Modal.confirm({
title: t('common.tipTitle'),
content: t('views.monitor.session.logoutTip', {num: row.accountId}),
content: t('views.monitor.session.logoutTip', { num: row.accountId }),
onOk() {
const hide = message.loading(t('common.loading'), 0);
logoutSession(row.id)
.then(res => {
if (res.code === RESULT_CODE_SUCCESS) {
message.success({
content: t('views.monitor.session.logoutSuccess', {num: row.accountId}),
content: t('views.monitor.session.logoutSuccess', {
num: row.accountId,
}),
duration: 3,
});
} else {
@@ -201,7 +198,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"
@@ -211,7 +208,10 @@ onMounted(() => {
<a-form :model="queryParams" name="queryParams" layout="horizontal">
<a-row :gutter="16">
<a-col :lg="6" :md="12" :xs="24">
<a-form-item :label="t('views.monitor.session.userName')" name="accountId ">
<a-form-item
:label="t('views.monitor.session.userName')"
name="accountId "
>
<a-input
v-model:value="queryParams.accountId"
allow-clear

View File

@@ -1,14 +1,9 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { ColumnsType } from 'ant-design-vue/lib/table';
import { getSystemInfo } from '@/api/monitor/system';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const route = useRoute();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**加载状态 */
let loading = ref<boolean>(true);
@@ -98,11 +93,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title" :loading="loading">
<template #content>
<a-typography-paragraph> 服务器与应用程序的信息 </a-typography-paragraph>
</template>
<PageContainer :loading="loading">
<a-card
title="项目信息"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal, Form, notification } from 'ant-design-vue/lib';
@@ -24,10 +23,6 @@ import useI18n from '@/hooks/useI18n';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import { saveAs } from 'file-saver';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**网元参数 */
let neOtions = ref<Record<string, any>[]>([]);
@@ -641,7 +636,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message } from 'ant-design-vue/lib';
@@ -11,10 +10,6 @@ import useNeInfoStore from '@/store/modules/neinfo';
import useI18n from '@/hooks/useI18n';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**网元参数 */
let neOtions = ref<Record<string, any>[]>([]);
@@ -173,7 +168,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message } from 'ant-design-vue/lib';
@@ -11,10 +10,6 @@ import useNeInfoStore from '@/store/modules/neinfo';
import useI18n from '@/hooks/useI18n';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**网元参数 */
let neOtions = ref<Record<string, any>[]>([]);
@@ -194,7 +189,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal, Form, notification } from 'ant-design-vue/lib';
@@ -24,10 +23,6 @@ import useI18n from '@/hooks/useI18n';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
import saveAs from 'file-saver';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**网元参数 */
let neOtions = ref<Record<string, any>[]>([]);
@@ -810,7 +805,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message } from 'ant-design-vue/lib';
@@ -11,10 +10,6 @@ import useNeInfoStore from '@/store/modules/neinfo';
import useI18n from '@/hooks/useI18n';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**网元参数 */
let neOtions = ref<Record<string, any>[]>([]);
@@ -269,7 +264,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,8 +1,7 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw, nextTick } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
import { Modal } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
import { MenuInfo } from 'ant-design-vue/lib/menu/src/interface';
import { ColumnsType } from 'ant-design-vue/lib/table';
@@ -12,10 +11,6 @@ import { saveAs } from 'file-saver';
import useI18n from '@/hooks/useI18n';
import { getTraceRawInfo, listTraceData } from '@/api/traceManage/analysis';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -341,7 +336,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,8 +1,7 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw, nextTick } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
import { Modal } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
import { MenuInfo } from 'ant-design-vue/lib/menu/src/interface';
import { ColumnsType } from 'ant-design-vue/lib/table';
@@ -12,10 +11,6 @@ import { saveAs } from 'file-saver';
import useI18n from '@/hooks/useI18n';
import { getTraceRawInfo, listTraceData } from '@/api/traceManage/analysis';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -341,7 +336,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -13,10 +12,6 @@ import useDictStore from '@/store/modules/dict';
import useI18n from '@/hooks/useI18n';
const { getDict } = useDictStore();
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**字典数据 */
let dict: {
@@ -137,7 +132,7 @@ let tableColumns: ColumnsType = [
if (!opt.value) return '';
return parseDateToStr(opt.value);
},
}
},
];
/**表格分页器参数 */
@@ -206,7 +201,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,8 +1,7 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw, nextTick } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
import { Modal } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
import { MenuInfo } from 'ant-design-vue/lib/menu/src/interface';
import { ColumnsType } from 'ant-design-vue/lib/table';
@@ -12,10 +11,6 @@ import { saveAs } from 'file-saver';
import useI18n from '@/hooks/useI18n';
import { getTraceRawInfo, listTraceData } from '@/api/traceManage/analysis';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -341,7 +336,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,8 +1,7 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw, nextTick } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
import { Modal } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
import { MenuInfo } from 'ant-design-vue/lib/menu/src/interface';
import { ColumnsType } from 'ant-design-vue/lib/table';
@@ -12,10 +11,6 @@ import { saveAs } from 'file-saver';
import useI18n from '@/hooks/useI18n';
import { getTraceRawInfo, listTraceData } from '@/api/traceManage/analysis';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -341,7 +336,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,8 +1,7 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw, nextTick } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
import { Modal } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
import { MenuInfo } from 'ant-design-vue/lib/menu/src/interface';
import { ColumnsType } from 'ant-design-vue/lib/table';
@@ -12,10 +11,6 @@ import { saveAs } from 'file-saver';
import useI18n from '@/hooks/useI18n';
import { getTraceRawInfo, listTraceData } from '@/api/traceManage/analysis';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -341,7 +336,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { Form, message, Modal } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -22,10 +21,6 @@ import useDictStore from '@/store/modules/dict';
import { regExpIPv4, regExpPort } from '@/utils/regular-utils';
const { getDict } = useDictStore();
const { t, currentLocale } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**字典数据 */
let dict: {
@@ -597,7 +592,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal, Form } from 'ant-design-vue/lib';
@@ -20,10 +19,6 @@ import { parseDateToStr } from '@/utils/date-utils';
import useDictStore from '@/store/modules/dict';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { getDict } = useDictStore();
const route = useRoute();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**字典数据 */
let dict: {
@@ -454,13 +449,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph>
系统内可配置的参数变量
</a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal, Form } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -20,10 +19,6 @@ import useDictStore from '@/store/modules/dict';
import { parseDataToTree } from '@/utils/parse-tree-utils';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { getDict } = useDictStore();
const route = useRoute();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**字典数据 */
let dict: {
@@ -405,11 +400,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph> 给予用户部门标记 </a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,5 @@
<script setup lang="ts">
import { useRoute, useRouter } from 'vue-router';
import { useRouter } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal, Form } from 'ant-design-vue/lib';
@@ -21,12 +21,8 @@ import useDictStore from '@/store/modules/dict';
import { MENU_PATH_INLINE } from '@/constants/menu-constants';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { getDict } = useDictStore();
const route = useRoute();
const router = useRouter();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**字典数据 */
let dict: {
/**字典状态 */
@@ -457,13 +453,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph>
数据字典类型数据名称对应的代码值映射数据
</a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
@@ -18,10 +17,6 @@ import { parseDateToStr } from '@/utils/date-utils';
import useDictStore from '@/store/modules/dict';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { getDict } = useDictStore();
const route = useRoute();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**字典数据 */
let dict: {
@@ -350,15 +345,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph>
对登录进行日志收集登录锁定的信息存入
<a-typography-text code>Redis</a-typography-text>
可对登录账号进行解锁
</a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
@@ -17,10 +16,6 @@ import { parseDateToStr } from '@/utils/date-utils';
import useDictStore from '@/store/modules/dict';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { getDict } = useDictStore();
const route = useRoute();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**字典数据 */
let dict: {
@@ -383,13 +378,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph>
对接口请求进行日志收集统计高频接口分析优化等操作
</a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -6,8 +6,7 @@ import { MenuInfo } from 'ant-design-vue/lib/menu/src/interface';
import { ColumnsType } from 'ant-design-vue/lib/table';
import IconFont from '@/components/IconFont/index.vue';
import { iconFonts } from '@/assets/js/icon_font_8d5l8fzk5b87iudi';
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import {
addMenu,
delMenu,
@@ -29,14 +28,10 @@ import {
import useDictStore from '@/store/modules/dict';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { getDict } = useDictStore();
const route = useRoute();
/**字体图标可选择数据 */
let icons = reactive(iconFonts.map(item => ({ value: item, label: item })));
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**字典数据 */
let dict: {
/**菜单状态 */
@@ -470,13 +465,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph>
动态路由菜单根节点下不要创建菜单哦
</a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal, Form } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -19,10 +18,6 @@ import { parseDateToStr } from '@/utils/date-utils';
import useDictStore from '@/store/modules/dict';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { getDict } = useDictStore();
const route = useRoute();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**字典数据 */
let dict: {
@@ -412,11 +407,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph> 给予用户岗位标记 </a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,5 @@
<script setup lang="ts">
import { useRoute, useRouter } from 'vue-router';
import { useRouter } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal, Form } from 'ant-design-vue/lib';
@@ -27,12 +27,8 @@ import { hasPermissions } from '@/plugins/auth-user';
import { MENU_PATH_INLINE } from '@/constants/menu-constants';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { getDict } = useDictStore();
const route = useRoute();
const router = useRouter();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**字典数据 */
let dict: {
/**状态 */
@@ -709,13 +705,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph>
给予用户角色标记可分配给用户多个角色分配数据权限需要关联部门数据表进行相关配置生效
</a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,5 +1,4 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal, Form } from 'ant-design-vue/lib';
@@ -34,10 +33,6 @@ import useUserStore from '@/store/modules/user';
import { DataNode } from 'ant-design-vue/lib/tree';
import { RESULT_CODE_SUCCESS } from '@/constants/result-constants';
const { getDict } = useDictStore();
const route = useRoute();
/**路由标题 */
let title = ref<string>(route.meta.title ?? '标题');
/**字典数据 */
let dict: {
@@ -785,11 +780,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<template #content>
<a-typography-paragraph> 所有系统用户管理列表 </a-typography-paragraph>
</template>
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw, nextTick } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { message, Modal } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -12,10 +11,6 @@ import { saveAs } from 'file-saver';
import useI18n from '@/hooks/useI18n';
import { getTraceRawInfo, listTraceData } from '@/api/traceManage/analysis';
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**查询参数 */
let queryParams = reactive({
@@ -341,7 +336,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"

View File

@@ -1,6 +1,5 @@
<script setup lang="ts">
import { useRoute } from 'vue-router';
import { reactive, ref, onMounted, toRaw } from 'vue';
import { reactive, onMounted, toRaw } from 'vue';
import { PageContainer } from '@ant-design-vue/pro-layout';
import { Form, message, Modal } from 'ant-design-vue/lib';
import { SizeType } from 'ant-design-vue/lib/config-provider';
@@ -22,10 +21,6 @@ import useDictStore from '@/store/modules/dict';
import { regExpIPv4, regExpPort } from '@/utils/regular-utils';
const { getDict } = useDictStore();
const { t } = useI18n();
const route = useRoute();
/**路由标题 */
let title = ref<string>((route.meta.title as string) ?? '标题');
/**字典数据 */
let dict: {
@@ -521,7 +516,7 @@ onMounted(() => {
</script>
<template>
<PageContainer :title="title">
<PageContainer>
<a-card
v-show="tableState.seached"
:bordered="false"
@@ -531,7 +526,10 @@ onMounted(() => {
<a-form :model="queryParams" name="queryParams" layout="horizontal">
<a-row :gutter="16">
<a-col :lg="6" :md="12" :xs="24">
<a-form-item :label="t('views.traceManage.task.neType')" name="neType ">
<a-form-item
:label="t('views.traceManage.task.neType')"
name="neType "
>
<a-auto-complete
v-model:value="queryParams.neType"
:options="useNeInfoStore().getNeSelectOtions"
@@ -683,7 +681,10 @@ onMounted(() => {
</a-form-item>
</a-col>
<a-col :lg="12" :md="12" :xs="24">
<a-form-item :label="t('views.traceManage.task.neType')" name="neType">
<a-form-item
:label="t('views.traceManage.task.neType')"
name="neType"
>
<a-cascader
:value="modalState.neType"
:options="useNeInfoStore().getNeCascaderOtions"
@@ -695,7 +696,10 @@ onMounted(() => {
<!-- 用户跟踪 -->
<template v-if="modalState.from.traceType === 'UE'">
<a-form-item :label="t('views.traceManage.task.msisdn')" name="msisdn">
<a-form-item
:label="t('views.traceManage.task.msisdn')"
name="msisdn"
>
{{ modalState.from.msisdn }}
</a-form-item>
<a-form-item :label="t('views.traceManage.task.imsi')" name="imsi">
@@ -707,25 +711,40 @@ onMounted(() => {
<template v-if="modalState.from.traceType === 'Interface'">
<a-row :gutter="16">
<a-col :lg="12" :md="12" :xs="24">
<a-form-item :label="t('views.traceManage.task.srcIp')" name="srcIp">
<a-form-item
:label="t('views.traceManage.task.srcIp')"
name="srcIp"
>
{{ modalState.from.srcIp }}
</a-form-item>
</a-col>
<a-col :lg="12" :md="12" :xs="24">
<a-form-item :label="t('views.traceManage.task.dstIp')" name="dstIp">
<a-form-item
:label="t('views.traceManage.task.dstIp')"
name="dstIp"
>
{{ modalState.from.dstIp }}
</a-form-item>
</a-col>
</a-row>
<a-form-item :label="t('views.traceManage.task.interfaces')" name="endTime">
<a-form-item
:label="t('views.traceManage.task.interfaces')"
name="endTime"
>
{{ modalState.neTypeInterfaceSelect }}
</a-form-item>
<a-form-item :label="t('views.traceManage.task.signalPort')" name="endTime">
<a-form-item
:label="t('views.traceManage.task.signalPort')"
name="endTime"
>
{{ modalState.from.signalPort }}
</a-form-item>
</template>
<a-form-item :label="t('views.traceManage.task.rangePicker')" name="endTime">
<a-form-item
:label="t('views.traceManage.task.rangePicker')"
name="endTime"
>
<a-range-picker
disabled
:value="modalState.timeRangePicker"
@@ -737,7 +756,10 @@ onMounted(() => {
style="width: 100%"
></a-range-picker>
</a-form-item>
<a-form-item :label="t('views.traceManage.task.comment')" name="comment">
<a-form-item
:label="t('views.traceManage.task.comment')"
name="comment"
>
{{ modalState.from.comment }}
</a-form-item>
</a-form>
@@ -940,7 +962,10 @@ onMounted(() => {
style="width: 100%"
></a-range-picker>
</a-form-item>
<a-form-item :label="t('views.traceManage.task.comment')" name="comment">
<a-form-item
:label="t('views.traceManage.task.comment')"
name="comment"
>
<a-textarea
v-model:value="modalState.from.comment"
:auto-size="{ minRows: 2, maxRows: 6 }"