mirror of
				https://github.com/continew-org/continew-admin.git
				synced 2025-10-31 22:57:17 +08:00 
			
		
		
		
	fix: 🐛 修复刷新页面后,选中菜单无法保持展开状态的问题
1.父级菜单也必须存在 name 属性,父级菜单 name 属性,在很早之前曾考虑过移除,后来发现会引起 Bug,于是没有改动。但前段时间调整动态路由时没有想起该情况,一时疏忽移除了,所幸发现问题不晚,现在及时恢复回来 2.优化实时监控示例的相关变量命名
This commit is contained in:
		| @@ -25,7 +25,7 @@ import locale404 from '@/views/demo/exception/404/locale/en-US'; | ||||
| import locale500 from '@/views/demo/exception/500/locale/en-US'; | ||||
| import localeDataAnalysis from '@/views/demo/visualization/data-analysis/locale/en-US'; | ||||
| import localeMultiDAnalysis from '@/views/demo/visualization/multi-dimension-data-analysis/locale/en-US'; | ||||
| import localeMonitor from '@/views/demo/visualization/monitor/locale/en-US'; | ||||
| import localeRealTimeMonitor from '@/views/demo/visualization/real-time-monitor/locale/en-US'; | ||||
|  | ||||
| import localeMessageBox from '@/components/message-box/locale/en-US'; | ||||
| import localeLogin from '@/views/login/locale/en-US'; | ||||
| @@ -80,7 +80,7 @@ export default { | ||||
|   ...locale500, | ||||
|   ...localeDataAnalysis, | ||||
|   ...localeMultiDAnalysis, | ||||
|   ...localeMonitor, | ||||
|   ...localeRealTimeMonitor, | ||||
|  | ||||
|   ...localeMessageBox, | ||||
|   ...localeLogin, | ||||
|   | ||||
| @@ -25,7 +25,7 @@ import locale404 from '@/views/demo/exception/404/locale/zh-CN'; | ||||
| import locale500 from '@/views/demo/exception/500/locale/zh-CN'; | ||||
| import localeDataAnalysis from '@/views/demo/visualization/data-analysis/locale/zh-CN'; | ||||
| import localeMultiDAnalysis from '@/views/demo/visualization/multi-dimension-data-analysis/locale/zh-CN'; | ||||
| import localeMonitor from '@/views/demo/visualization/monitor/locale/zh-CN'; | ||||
| import localeRealTimeMonitor from '@/views/demo/visualization/real-time-monitor/locale/zh-CN'; | ||||
|  | ||||
| import localeMessageBox from '@/components/message-box/locale/zh-CN'; | ||||
| import localeLogin from '@/views/login/locale/zh-CN'; | ||||
| @@ -80,7 +80,7 @@ export default { | ||||
|   ...locale500, | ||||
|   ...localeDataAnalysis, | ||||
|   ...localeMultiDAnalysis, | ||||
|   ...localeMonitor, | ||||
|   ...localeRealTimeMonitor, | ||||
|  | ||||
|   ...localeMessageBox, | ||||
|   ...localeLogin, | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import './message-box'; | ||||
|  | ||||
| import '@/views/dashboard/workplace/mock'; | ||||
|  | ||||
| import '@/views/demo/visualization/monitor/mock'; | ||||
| import '@/views/demo/visualization/real-time-monitor/mock'; | ||||
|  | ||||
| import '@/views/demo/list/card/mock'; | ||||
| import '@/views/demo/list/search-table/mock'; | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { DEFAULT_LAYOUT } from '../../base'; | ||||
| import { AppRouteRecordRaw } from '../../types'; | ||||
|  | ||||
| const EXCEPTION: AppRouteRecordRaw = { | ||||
|   name: 'Exception', | ||||
|   path: '/demo/exception', | ||||
|   component: DEFAULT_LAYOUT, | ||||
|   meta: { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { DEFAULT_LAYOUT } from '../../base'; | ||||
| import { AppRouteRecordRaw } from '../../types'; | ||||
|  | ||||
| const FORM: AppRouteRecordRaw = { | ||||
|   name: 'Form', | ||||
|   path: '/demo/form', | ||||
|   component: DEFAULT_LAYOUT, | ||||
|   meta: { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { DEFAULT_LAYOUT } from '../../base'; | ||||
| import { AppRouteRecordRaw } from '../../types'; | ||||
|  | ||||
| const LIST: AppRouteRecordRaw = { | ||||
|   name: 'List', | ||||
|   path: '/demo/list', | ||||
|   component: DEFAULT_LAYOUT, | ||||
|   meta: { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { DEFAULT_LAYOUT } from '../../base'; | ||||
| import { AppRouteRecordRaw } from '../../types'; | ||||
|  | ||||
| const PROFILE: AppRouteRecordRaw = { | ||||
|   name: 'Profile', | ||||
|   path: '/demo/profile', | ||||
|   component: DEFAULT_LAYOUT, | ||||
|   meta: { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { DEFAULT_LAYOUT } from '../../base'; | ||||
| import { AppRouteRecordRaw } from '../../types'; | ||||
|  | ||||
| const RESULT: AppRouteRecordRaw = { | ||||
|   name: 'Result', | ||||
|   path: '/demo/result', | ||||
|   component: DEFAULT_LAYOUT, | ||||
|   meta: { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { DEFAULT_LAYOUT } from '../../base'; | ||||
| import { AppRouteRecordRaw } from '../../types'; | ||||
|  | ||||
| const VISUALIZATION: AppRouteRecordRaw = { | ||||
|   name: 'Visualization', | ||||
|   path: '/demo/visualization', | ||||
|   component: DEFAULT_LAYOUT, | ||||
|   meta: { | ||||
| @@ -36,12 +37,12 @@ const VISUALIZATION: AppRouteRecordRaw = { | ||||
|       }, | ||||
|     }, | ||||
|     { | ||||
|       name: 'Monitor', | ||||
|       path: 'monitor', | ||||
|       name: 'RealTimeMonitor', | ||||
|       path: 'real-time-monitor', | ||||
|       component: () => | ||||
|         import('@/views/demo/visualization/monitor/index.vue'), | ||||
|         import('@/views/demo/visualization/real-time-monitor/index.vue'), | ||||
|       meta: { | ||||
|         locale: 'menu.dashboard.monitor', | ||||
|         locale: 'menu.dashboard.realTimeMonitor', | ||||
|         requiresAuth: true, | ||||
|         roles: ['*'], | ||||
|       }, | ||||
|   | ||||
| @@ -2,8 +2,8 @@ import { DEFAULT_LAYOUT } from '../../base'; | ||||
| import { AppRouteRecordRaw } from '../../types'; | ||||
|  | ||||
| const DASHBOARD: AppRouteRecordRaw = { | ||||
|   path: '/dashboard', | ||||
|   name: 'Dashboard', | ||||
|   path: '/dashboard', | ||||
|   component: DEFAULT_LAYOUT, | ||||
|   redirect: '/dashboard/workplace', | ||||
|   meta: { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { DEFAULT_LAYOUT } from '../base'; | ||||
| import { AppRouteRecordRaw } from '../types'; | ||||
|  | ||||
| const Monitor: AppRouteRecordRaw = { | ||||
|   name: 'Monitor', | ||||
|   path: '/monitor', | ||||
|   component: DEFAULT_LAYOUT, | ||||
|   meta: { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { DEFAULT_LAYOUT } from '../base'; | ||||
| import { AppRouteRecordRaw } from '../types'; | ||||
|  | ||||
| const System: AppRouteRecordRaw = { | ||||
|   name: 'System', | ||||
|   path: '/system', | ||||
|   component: DEFAULT_LAYOUT, | ||||
|   meta: { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import { DEFAULT_LAYOUT } from '../base'; | ||||
| import { AppRouteRecordRaw } from '../types'; | ||||
|  | ||||
| const Tool: AppRouteRecordRaw = { | ||||
|   name: 'Tool', | ||||
|   path: '/tool', | ||||
|   component: DEFAULT_LAYOUT, | ||||
|   meta: { | ||||
|   | ||||
| @@ -1,34 +0,0 @@ | ||||
| <template> | ||||
|   <a-card class="general-card" :title="$t('monitor.title.studioInfo')"> | ||||
|     <a-form :model="{}" layout="vertical"> | ||||
|       <a-form-item :label="$t('monitor.studioInfo.label.studioTitle')" required> | ||||
|         <a-input | ||||
|           :placeholder="`王立群${$t( | ||||
|             'monitor.studioInfo.placeholder.studioTitle' | ||||
|           )}`" | ||||
|         /> | ||||
|       </a-form-item> | ||||
|       <a-form-item | ||||
|         :label="$t('monitor.studioInfo.label.onlineNotification')" | ||||
|         required | ||||
|       > | ||||
|         <a-textarea /> | ||||
|       </a-form-item> | ||||
|       <a-form-item | ||||
|         :label="$t('monitor.studioInfo.label.studioCategory')" | ||||
|         required | ||||
|       > | ||||
|         <a-input-search /> | ||||
|       </a-form-item> | ||||
|       <a-form-item | ||||
|         :label="$t('monitor.studioInfo.label.studioCategory')" | ||||
|         required | ||||
|       > | ||||
|         <a-input-search /> | ||||
|       </a-form-item> | ||||
|     </a-form> | ||||
|     <a-button type="primary">{{ $t('monitor.studioInfo.btn.fresh') }}</a-button> | ||||
|   </a-card> | ||||
| </template> | ||||
|  | ||||
| <script lang="ts" setup></script> | ||||
| @@ -1,48 +0,0 @@ | ||||
| export default { | ||||
|   'menu.dashboard.monitor': 'Real-time Monitor', | ||||
|   'monitor.title.chatPanel': 'Chat Window', | ||||
|   'monitor.title.quickOperation': 'Quick Operation', | ||||
|   'monitor.title.studioInfo': 'Studio Information', | ||||
|   'monitor.title.studioPreview': 'Studio Preview', | ||||
|   'monitor.chat.options.all': 'All', | ||||
|   'monitor.chat.placeholder.searchCategory': 'Search Category', | ||||
|   'monitor.chat.update': 'Update', | ||||
|   'monitor.list.title.order': 'Order', | ||||
|   'monitor.list.title.cover': 'Cover', | ||||
|   'monitor.list.title.name': 'Name', | ||||
|   'monitor.list.title.duration': 'Duration', | ||||
|   'monitor.list.title.id': 'ID', | ||||
|   'monitor.list.tip.rotations': 'Rotations ', | ||||
|   'monitor.list.tip.rest': ', The program list is not visible to viewers', | ||||
|   'monitor.list.tag.auditFailed': 'Audit Failed', | ||||
|   'monitor.tab.title.liveMethod': 'Live Method', | ||||
|   'monitor.tab.title.onlinePopulation': 'Online Population', | ||||
|   'monitor.liveMethod.normal': 'Normal Live', | ||||
|   'monitor.liveMethod.flowControl': 'Flow Control Live', | ||||
|   'monitor.liveMethod.video': 'Video Live', | ||||
|   'monitor.liveMethod.web': 'Web Live', | ||||
|   'monitor.editCarousel': 'Edit', | ||||
|   'monitor.startCarousel': 'Start', | ||||
|   'monitor.quickOperation.changeClarity': 'Change the Clarity', | ||||
|   'monitor.quickOperation.switchStream': 'Switch Stream', | ||||
|   'monitor.quickOperation.removeClarity': 'Remove the Clarity', | ||||
|   'monitor.quickOperation.pushFlowGasket': 'Push Flow Gasket', | ||||
|   'monitor.studioInfo.label.studioTitle': 'Studio Title', | ||||
|   'monitor.studioInfo.label.onlineNotification': 'Online Notification', | ||||
|   'monitor.studioInfo.label.studioCategory': 'Studio Category', | ||||
|   'monitor.studioInfo.placeholder.studioTitle': "'s Studio", | ||||
|   'monitor.studioInfo.btn.fresh': 'Fresh', | ||||
|   'monitor.studioStatus.title.studioStatus': 'Studio Status', | ||||
|   'monitor.studioStatus.title.pictureInfo': 'Picture Information', | ||||
|   'monitor.studioStatus.smooth': 'Smooth', | ||||
|   'monitor.studioStatus.frameRate': 'Frame', | ||||
|   'monitor.studioStatus.bitRate': 'Bit', | ||||
|   'monitor.studioStatus.mainstream': 'Main', | ||||
|   'monitor.studioStatus.hotStandby': 'Hot', | ||||
|   'monitor.studioStatus.coldStandby': 'Cold', | ||||
|   'monitor.studioStatus.line': 'Line', | ||||
|   'monitor.studioStatus.play': 'Format', | ||||
|   'monitor.studioStatus.pictureQuality': 'Quality', | ||||
|   'monitor.studioPreview.studio': 'Studio', | ||||
|   'monitor.studioPreview.watching': 'watching', | ||||
| }; | ||||
| @@ -1,48 +0,0 @@ | ||||
| export default { | ||||
|   'menu.dashboard.monitor': '实时监控', | ||||
|   'monitor.title.chatPanel': '聊天窗口', | ||||
|   'monitor.title.quickOperation': '快捷操作', | ||||
|   'monitor.title.studioInfo': '直播信息', | ||||
|   'monitor.title.studioPreview': '直播预览', | ||||
|   'monitor.chat.options.all': '全部', | ||||
|   'monitor.chat.placeholder.searchCategory': '搜索类目', | ||||
|   'monitor.chat.update': '更新', | ||||
|   'monitor.list.title.order': '序号', | ||||
|   'monitor.list.title.cover': '封面', | ||||
|   'monitor.list.title.name': '名称', | ||||
|   'monitor.list.title.duration': '视频时长', | ||||
|   'monitor.list.title.id': '视频Id', | ||||
|   'monitor.list.tip.rotations': '轮播次数', | ||||
|   'monitor.list.tip.rest': ',节目单观众不可见', | ||||
|   'monitor.list.tag.auditFailed': '审核未通过', | ||||
|   'monitor.tab.title.liveMethod': '直播方式', | ||||
|   'monitor.tab.title.onlinePopulation': '在线人数', | ||||
|   'monitor.liveMethod.normal': '普通直播', | ||||
|   'monitor.liveMethod.flowControl': '控流直播', | ||||
|   'monitor.liveMethod.video': '视频直播', | ||||
|   'monitor.liveMethod.web': '网页开播', | ||||
|   'monitor.editCarousel': '编辑轮播', | ||||
|   'monitor.startCarousel': '开始轮播', | ||||
|   'monitor.quickOperation.changeClarity': '切换清晰度', | ||||
|   'monitor.quickOperation.switchStream': '主备流切换', | ||||
|   'monitor.quickOperation.removeClarity': '摘除清晰度', | ||||
|   'monitor.quickOperation.pushFlowGasket': '推流垫片', | ||||
|   'monitor.studioInfo.label.studioTitle': '直播标题', | ||||
|   'monitor.studioInfo.label.onlineNotification': '上线通知', | ||||
|   'monitor.studioInfo.label.studioCategory': '直播类目', | ||||
|   'monitor.studioInfo.placeholder.studioTitle': '的直播间', | ||||
|   'monitor.studioInfo.btn.fresh': '更新', | ||||
|   'monitor.studioStatus.title.studioStatus': '直播状态', | ||||
|   'monitor.studioStatus.title.pictureInfo': '画面信息', | ||||
|   'monitor.studioStatus.smooth': '流畅', | ||||
|   'monitor.studioStatus.frameRate': '帧率', | ||||
|   'monitor.studioStatus.bitRate': '码率', | ||||
|   'monitor.studioStatus.mainstream': '主流', | ||||
|   'monitor.studioStatus.hotStandby': '热备', | ||||
|   'monitor.studioStatus.coldStandby': '冷备', | ||||
|   'monitor.studioStatus.line': '线路', | ||||
|   'monitor.studioStatus.play': '播放格式', | ||||
|   'monitor.studioStatus.pictureQuality': '画质', | ||||
|   'monitor.studioPreview.studio': '直播间', | ||||
|   'monitor.studioPreview.watching': '在看', | ||||
| }; | ||||
| @@ -1,7 +1,7 @@ | ||||
| <template> | ||||
|   <a-card | ||||
|     class="general-card chat-panel" | ||||
|     :title="$t('monitor.title.chatPanel')" | ||||
|     :title="$t('realTimeMonitor.title.chatPanel')" | ||||
|     :bordered="false" | ||||
|     :header-style="{ paddingBottom: '0' }" | ||||
|     :body-style="{ | ||||
| @@ -14,11 +14,11 @@ | ||||
|     <a-space :size="8"> | ||||
|       <a-select style="width: 86px" default-value="all"> | ||||
|         <a-option value="all"> | ||||
|           {{ $t('monitor.chat.options.all') }} | ||||
|           {{ $t('realTimeMonitor.chat.options.all') }} | ||||
|         </a-option> | ||||
|       </a-select> | ||||
|       <a-input-search | ||||
|         :placeholder="$t('monitor.chat.placeholder.searchCategory')" | ||||
|         :placeholder="$t('realTimeMonitor.chat.placeholder.searchCategory')" | ||||
|       /> | ||||
|       <a-button type="text"> | ||||
|         <icon-download /> | ||||
| @@ -36,7 +36,7 @@ | ||||
|             <icon-face-smile-fill /> | ||||
|           </template> | ||||
|         </a-Input> | ||||
|         <a-button type="primary">{{ $t('monitor.chat.update') }}</a-button> | ||||
|         <a-button type="primary">{{ $t('realTimeMonitor.chat.update') }}</a-button> | ||||
|       </a-space> | ||||
|     </div> | ||||
|   </a-card> | ||||
| @@ -12,8 +12,8 @@ | ||||
|       :pagination="false" | ||||
|     /> | ||||
|     <a-typography-text type="secondary" class="data-statistic-list-tip"> | ||||
|       {{ $t('monitor.list.tip.rotations') }} {{ data.length }} | ||||
|       {{ $t('monitor.list.tip.rest') }} | ||||
|       {{ $t('realTimeMonitor.list.tip.rotations') }} {{ data.length }} | ||||
|       {{ $t('realTimeMonitor.list.tip.rest') }} | ||||
|     </a-typography-text> | ||||
|   </div> | ||||
| </template> | ||||
| @@ -47,7 +47,7 @@ | ||||
|   const renderTag = (status: number) => { | ||||
|     if (status === -1) { | ||||
|       return `<a-tag  color="red" class='data-statistic-list-cover-tag'> | ||||
|             ${t('monitor.list.tag.auditFailed')} | ||||
|             ${t('realTimeMonitor.list.tag.auditFailed')} | ||||
|         </a-tag>`; | ||||
|     } | ||||
|     return ''; | ||||
| @@ -58,7 +58,7 @@ | ||||
|   const columns = computed(() => { | ||||
|     return [ | ||||
|       { | ||||
|         title: t('monitor.list.title.order'), | ||||
|         title: t('realTimeMonitor.list.title.order'), | ||||
|         render({ | ||||
|           rowIndex, | ||||
|         }: { | ||||
| @@ -71,7 +71,7 @@ | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         title: t('monitor.list.title.cover'), | ||||
|         title: t('realTimeMonitor.list.title.cover'), | ||||
|         render({ | ||||
|           record, | ||||
|         }: { | ||||
| @@ -87,16 +87,16 @@ | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         title: t('monitor.list.title.name'), | ||||
|         title: t('realTimeMonitor.list.title.name'), | ||||
|         dataIndex: 'name', | ||||
|       }, | ||||
|       { | ||||
|         dataIndex: 'duration', | ||||
|         title: t('monitor.list.title.duration'), | ||||
|         title: t('realTimeMonitor.list.title.duration'), | ||||
|       }, | ||||
|       { | ||||
|         dataIndex: 'id', | ||||
|         title: t('monitor.list.title.id'), | ||||
|         title: t('realTimeMonitor.list.title.id'), | ||||
|       }, | ||||
|     ]; | ||||
|   }); | ||||
| @@ -3,25 +3,25 @@ | ||||
|     <a-tabs default-active-tab="liveMethod"> | ||||
|       <a-tab-pane | ||||
|         key="liveMethod" | ||||
|         :title="$t('monitor.tab.title.liveMethod')" | ||||
|         :title="$t('realTimeMonitor.tab.title.liveMethod')" | ||||
|       /> | ||||
|       <a-tab-pane | ||||
|         key="onlinePopulation" | ||||
|         :title="$t('monitor.tab.title.onlinePopulation')" | ||||
|         :title="$t('realTimeMonitor.tab.title.onlinePopulation')" | ||||
|       /> | ||||
|     </a-tabs> | ||||
|     <div class="data-statistic-content"> | ||||
|       <a-radio-group :default-value="3" type="button"> | ||||
|         <a-radio :value="1">{{ $t('monitor.liveMethod.normal') }}</a-radio> | ||||
|         <a-radio :value="2">{{ $t('monitor.liveMethod.flowControl') }}</a-radio> | ||||
|         <a-radio :value="3">{{ $t('monitor.liveMethod.video') }}</a-radio> | ||||
|         <a-radio :value="4">{{ $t('monitor.liveMethod.web') }}</a-radio> | ||||
|         <a-radio :value="1">{{ $t('realTimeMonitor.liveMethod.normal') }}</a-radio> | ||||
|         <a-radio :value="2">{{ $t('realTimeMonitor.liveMethod.flowControl') }}</a-radio> | ||||
|         <a-radio :value="3">{{ $t('realTimeMonitor.liveMethod.video') }}</a-radio> | ||||
|         <a-radio :value="4">{{ $t('realTimeMonitor.liveMethod.web') }}</a-radio> | ||||
|       </a-radio-group> | ||||
| 
 | ||||
|       <div class="data-statistic-list-wrapper"> | ||||
|         <div class="data-statistic-list-header"> | ||||
|           <a-button type="text">{{ $t('monitor.editCarousel') }}</a-button> | ||||
|           <a-button disabled>{{ $t('monitor.startCarousel') }}</a-button> | ||||
|           <a-button type="text">{{ $t('realTimeMonitor.editCarousel') }}</a-button> | ||||
|           <a-button disabled>{{ $t('realTimeMonitor.startCarousel') }}</a-button> | ||||
|         </div> | ||||
|         <div class="data-statistic-list-content"> | ||||
|           <DataStatisticList /> | ||||
| @@ -1,26 +1,26 @@ | ||||
| <template> | ||||
|   <a-card class="general-card" :title="$t('monitor.title.quickOperation')"> | ||||
|   <a-card class="general-card" :title="$t('realTimeMonitor.title.quickOperation')"> | ||||
|     <a-space direction="vertical" fill :size="10"> | ||||
|       <a-button long> | ||||
|         {{ $t('monitor.quickOperation.changeClarity') }} | ||||
|         {{ $t('realTimeMonitor.quickOperation.changeClarity') }} | ||||
|         <template #icon> | ||||
|           <IconTags /> | ||||
|         </template> | ||||
|       </a-button> | ||||
|       <a-button long> | ||||
|         {{ $t('monitor.quickOperation.switchStream') }} | ||||
|         {{ $t('realTimeMonitor.quickOperation.switchStream') }} | ||||
|         <template #icon> | ||||
|           <IconSwap /> | ||||
|         </template> | ||||
|       </a-button> | ||||
|       <a-button long> | ||||
|         {{ $t('monitor.quickOperation.removeClarity') }} | ||||
|         {{ $t('realTimeMonitor.quickOperation.removeClarity') }} | ||||
|         <template #icon> | ||||
|           <IconStop /> | ||||
|         </template> | ||||
|       </a-button> | ||||
|       <a-button long> | ||||
|         {{ $t('monitor.quickOperation.pushFlowGasket') }} | ||||
|         {{ $t('realTimeMonitor.quickOperation.pushFlowGasket') }} | ||||
|         <template #icon> | ||||
|           <IconArrowRight /> | ||||
|         </template> | ||||
| @@ -0,0 +1,34 @@ | ||||
| <template> | ||||
|   <a-card class="general-card" :title="$t('realTimeMonitor.title.studioInfo')"> | ||||
|     <a-form :model="{}" layout="vertical"> | ||||
|       <a-form-item :label="$t('realTimeMonitor.studioInfo.label.studioTitle')" required> | ||||
|         <a-input | ||||
|           :placeholder="`王立群${$t( | ||||
|             'realTimeMonitor.studioInfo.placeholder.studioTitle' | ||||
|           )}`" | ||||
|         /> | ||||
|       </a-form-item> | ||||
|       <a-form-item | ||||
|         :label="$t('realTimeMonitor.studioInfo.label.onlineNotification')" | ||||
|         required | ||||
|       > | ||||
|         <a-textarea /> | ||||
|       </a-form-item> | ||||
|       <a-form-item | ||||
|         :label="$t('realTimeMonitor.studioInfo.label.studioCategory')" | ||||
|         required | ||||
|       > | ||||
|         <a-input-search /> | ||||
|       </a-form-item> | ||||
|       <a-form-item | ||||
|         :label="$t('realTimeMonitor.studioInfo.label.studioCategory')" | ||||
|         required | ||||
|       > | ||||
|         <a-input-search /> | ||||
|       </a-form-item> | ||||
|     </a-form> | ||||
|     <a-button type="primary">{{ $t('realTimeMonitor.studioInfo.btn.fresh') }}</a-button> | ||||
|   </a-card> | ||||
| </template> | ||||
|  | ||||
| <script lang="ts" setup></script> | ||||
| @@ -1,10 +1,10 @@ | ||||
| <template> | ||||
|   <a-card | ||||
|     class="general-card" | ||||
|     :title="$t('monitor.studioStatus.title.studioStatus')" | ||||
|     :title="$t('realTimeMonitor.studioStatus.title.studioStatus')" | ||||
|   > | ||||
|     <template #extra> | ||||
|       <a-tag color="green">{{ $t('monitor.studioStatus.smooth') }}</a-tag> | ||||
|       <a-tag color="green">{{ $t('realTimeMonitor.studioStatus.smooth') }}</a-tag> | ||||
|     </template> | ||||
|     <a-descriptions layout="horizontal" :data="dataStatus" :column="2"> | ||||
|       <template #label="{ label }"> | ||||
| @@ -12,15 +12,15 @@ | ||||
|           v-if="['mainstream', 'hotStandby', 'coldStandby'].includes(label)" | ||||
|         > | ||||
|           <a-typography-text style="padding-right: 8px"> | ||||
|             {{ $t(`monitor.studioStatus.${label}`) }} | ||||
|             {{ $t(`realTimeMonitor.studioStatus.${label}`) }} | ||||
|           </a-typography-text> | ||||
|           {{ $t('monitor.studioStatus.bitRate') }} | ||||
|           {{ $t('realTimeMonitor.studioStatus.bitRate') }} | ||||
|         </span> | ||||
|         <span v-else>{{ label }}</span> | ||||
|       </template> | ||||
|     </a-descriptions> | ||||
|     <a-typography-title style="margin-bottom: 16px" :heading="6"> | ||||
|       {{ $t('monitor.studioStatus.title.pictureInfo') }} | ||||
|       {{ $t('realTimeMonitor.studioStatus.title.pictureInfo') }} | ||||
|     </a-typography-title> | ||||
|     <a-descriptions layout="horizontal" :data="dataPicture" :column="2" /> | ||||
|   </a-card> | ||||
| @@ -37,7 +37,7 @@ | ||||
|       value: '6 Mbps', | ||||
|     }, | ||||
|     { | ||||
|       label: t('monitor.studioStatus.frameRate'), | ||||
|       label: t('realTimeMonitor.studioStatus.frameRate'), | ||||
|       value: '60', | ||||
|     }, | ||||
|     { | ||||
| @@ -45,7 +45,7 @@ | ||||
|       value: '6 Mbps', | ||||
|     }, | ||||
|     { | ||||
|       label: t('monitor.studioStatus.frameRate'), | ||||
|       label: t('realTimeMonitor.studioStatus.frameRate'), | ||||
|       value: '60', | ||||
|     }, | ||||
|     { | ||||
| @@ -53,13 +53,13 @@ | ||||
|       value: '6 Mbps', | ||||
|     }, | ||||
|     { | ||||
|       label: t('monitor.studioStatus.frameRate'), | ||||
|       label: t('realTimeMonitor.studioStatus.frameRate'), | ||||
|       value: '60', | ||||
|     }, | ||||
|   ]); | ||||
|   const dataPicture = computed(() => [ | ||||
|     { | ||||
|       label: t('monitor.studioStatus.line'), | ||||
|       label: t('realTimeMonitor.studioStatus.line'), | ||||
|       value: '热备', | ||||
|     }, | ||||
|     { | ||||
| @@ -67,11 +67,11 @@ | ||||
|       value: 'KS', | ||||
|     }, | ||||
|     { | ||||
|       label: t('monitor.studioStatus.play'), | ||||
|       label: t('realTimeMonitor.studioStatus.play'), | ||||
|       value: 'FLV', | ||||
|     }, | ||||
|     { | ||||
|       label: t('monitor.studioStatus.pictureQuality'), | ||||
|       label: t('realTimeMonitor.studioStatus.pictureQuality'), | ||||
|       value: '原画', | ||||
|     }, | ||||
|   ]); | ||||
| @@ -1,5 +1,5 @@ | ||||
| <template> | ||||
|   <a-card class="general-card" :title="$t('monitor.title.studioPreview')"> | ||||
|   <a-card class="general-card" :title="$t('realTimeMonitor.title.studioPreview')"> | ||||
|     <template #extra> | ||||
|       <icon-more /> | ||||
|     </template> | ||||
| @@ -15,12 +15,12 @@ | ||||
|               <img :src="getAvatar(userInfo.avatar, userInfo.gender)" /> | ||||
|             </a-avatar> | ||||
|             <a-typography-text> | ||||
|               {{ userInfo.nickname }} {{ $t('monitor.studioPreview.studio') }} | ||||
|               {{ userInfo.nickname }} {{ $t('realTimeMonitor.studioPreview.studio') }} | ||||
|             </a-typography-text> | ||||
|           </a-space> | ||||
|         </div> | ||||
|         <a-typography-text type="secondary"> | ||||
|           36,000 {{ $t('monitor.studioPreview.watching') }} | ||||
|           36,000 {{ $t('realTimeMonitor.studioPreview.watching') }} | ||||
|         </a-typography-text> | ||||
|       </div> | ||||
|     </div> | ||||
| @@ -1,6 +1,6 @@ | ||||
| <template> | ||||
|   <div class="container"> | ||||
|     <Breadcrumb :items="['menu.dashboard', 'menu.dashboard.monitor']" /> | ||||
|     <Breadcrumb :items="['menu.dashboard', 'menu.dashboard.realTimeMonitor']" /> | ||||
|     <div class="layout"> | ||||
|       <div class="layout-left-side"> | ||||
|         <ChatPanel /> | ||||
| @@ -33,7 +33,7 @@ | ||||
| 
 | ||||
| <script lang="ts"> | ||||
|   export default { | ||||
|     name: 'Monitor', | ||||
|     name: 'RealTimeMonitor', | ||||
|   }; | ||||
| </script> | ||||
| 
 | ||||
| @@ -0,0 +1,48 @@ | ||||
| export default { | ||||
|   'menu.dashboard.realTimeMonitor': 'Real-time Monitor', | ||||
|   'realTimeMonitor.title.chatPanel': 'Chat Window', | ||||
|   'realTimeMonitor.title.quickOperation': 'Quick Operation', | ||||
|   'realTimeMonitor.title.studioInfo': 'Studio Information', | ||||
|   'realTimeMonitor.title.studioPreview': 'Studio Preview', | ||||
|   'realTimeMonitor.chat.options.all': 'All', | ||||
|   'realTimeMonitor.chat.placeholder.searchCategory': 'Search Category', | ||||
|   'realTimeMonitor.chat.update': 'Update', | ||||
|   'realTimeMonitor.list.title.order': 'Order', | ||||
|   'realTimeMonitor.list.title.cover': 'Cover', | ||||
|   'realTimeMonitor.list.title.name': 'Name', | ||||
|   'realTimeMonitor.list.title.duration': 'Duration', | ||||
|   'realTimeMonitor.list.title.id': 'ID', | ||||
|   'realTimeMonitor.list.tip.rotations': 'Rotations ', | ||||
|   'realTimeMonitor.list.tip.rest': ', The program list is not visible to viewers', | ||||
|   'realTimeMonitor.list.tag.auditFailed': 'Audit Failed', | ||||
|   'realTimeMonitor.tab.title.liveMethod': 'Live Method', | ||||
|   'realTimeMonitor.tab.title.onlinePopulation': 'Online Population', | ||||
|   'realTimeMonitor.liveMethod.normal': 'Normal Live', | ||||
|   'realTimeMonitor.liveMethod.flowControl': 'Flow Control Live', | ||||
|   'realTimeMonitor.liveMethod.video': 'Video Live', | ||||
|   'realTimeMonitor.liveMethod.web': 'Web Live', | ||||
|   'realTimeMonitor.editCarousel': 'Edit', | ||||
|   'realTimeMonitor.startCarousel': 'Start', | ||||
|   'realTimeMonitor.quickOperation.changeClarity': 'Change the Clarity', | ||||
|   'realTimeMonitor.quickOperation.switchStream': 'Switch Stream', | ||||
|   'realTimeMonitor.quickOperation.removeClarity': 'Remove the Clarity', | ||||
|   'realTimeMonitor.quickOperation.pushFlowGasket': 'Push Flow Gasket', | ||||
|   'realTimeMonitor.studioInfo.label.studioTitle': 'Studio Title', | ||||
|   'realTimeMonitor.studioInfo.label.onlineNotification': 'Online Notification', | ||||
|   'realTimeMonitor.studioInfo.label.studioCategory': 'Studio Category', | ||||
|   'realTimeMonitor.studioInfo.placeholder.studioTitle': "'s Studio", | ||||
|   'realTimeMonitor.studioInfo.btn.fresh': 'Fresh', | ||||
|   'realTimeMonitor.studioStatus.title.studioStatus': 'Studio Status', | ||||
|   'realTimeMonitor.studioStatus.title.pictureInfo': 'Picture Information', | ||||
|   'realTimeMonitor.studioStatus.smooth': 'Smooth', | ||||
|   'realTimeMonitor.studioStatus.frameRate': 'Frame', | ||||
|   'realTimeMonitor.studioStatus.bitRate': 'Bit', | ||||
|   'realTimeMonitor.studioStatus.mainstream': 'Main', | ||||
|   'realTimeMonitor.studioStatus.hotStandby': 'Hot', | ||||
|   'realTimeMonitor.studioStatus.coldStandby': 'Cold', | ||||
|   'realTimeMonitor.studioStatus.line': 'Line', | ||||
|   'realTimeMonitor.studioStatus.play': 'Format', | ||||
|   'realTimeMonitor.studioStatus.pictureQuality': 'Quality', | ||||
|   'realTimeMonitor.studioPreview.studio': 'Studio', | ||||
|   'realTimeMonitor.studioPreview.watching': 'watching', | ||||
| }; | ||||
| @@ -0,0 +1,48 @@ | ||||
| export default { | ||||
|   'menu.dashboard.realTimeMonitor': '实时监控', | ||||
|   'realTimeMonitor.title.chatPanel': '聊天窗口', | ||||
|   'realTimeMonitor.title.quickOperation': '快捷操作', | ||||
|   'realTimeMonitor.title.studioInfo': '直播信息', | ||||
|   'realTimeMonitor.title.studioPreview': '直播预览', | ||||
|   'realTimeMonitor.chat.options.all': '全部', | ||||
|   'realTimeMonitor.chat.placeholder.searchCategory': '搜索类目', | ||||
|   'realTimeMonitor.chat.update': '更新', | ||||
|   'realTimeMonitor.list.title.order': '序号', | ||||
|   'realTimeMonitor.list.title.cover': '封面', | ||||
|   'realTimeMonitor.list.title.name': '名称', | ||||
|   'realTimeMonitor.list.title.duration': '视频时长', | ||||
|   'realTimeMonitor.list.title.id': '视频Id', | ||||
|   'realTimeMonitor.list.tip.rotations': '轮播次数', | ||||
|   'realTimeMonitor.list.tip.rest': ',节目单观众不可见', | ||||
|   'realTimeMonitor.list.tag.auditFailed': '审核未通过', | ||||
|   'realTimeMonitor.tab.title.liveMethod': '直播方式', | ||||
|   'realTimeMonitor.tab.title.onlinePopulation': '在线人数', | ||||
|   'realTimeMonitor.liveMethod.normal': '普通直播', | ||||
|   'realTimeMonitor.liveMethod.flowControl': '控流直播', | ||||
|   'realTimeMonitor.liveMethod.video': '视频直播', | ||||
|   'realTimeMonitor.liveMethod.web': '网页开播', | ||||
|   'realTimeMonitor.editCarousel': '编辑轮播', | ||||
|   'realTimeMonitor.startCarousel': '开始轮播', | ||||
|   'realTimeMonitor.quickOperation.changeClarity': '切换清晰度', | ||||
|   'realTimeMonitor.quickOperation.switchStream': '主备流切换', | ||||
|   'realTimeMonitor.quickOperation.removeClarity': '摘除清晰度', | ||||
|   'realTimeMonitor.quickOperation.pushFlowGasket': '推流垫片', | ||||
|   'realTimeMonitor.studioInfo.label.studioTitle': '直播标题', | ||||
|   'realTimeMonitor.studioInfo.label.onlineNotification': '上线通知', | ||||
|   'realTimeMonitor.studioInfo.label.studioCategory': '直播类目', | ||||
|   'realTimeMonitor.studioInfo.placeholder.studioTitle': '的直播间', | ||||
|   'realTimeMonitor.studioInfo.btn.fresh': '更新', | ||||
|   'realTimeMonitor.studioStatus.title.studioStatus': '直播状态', | ||||
|   'realTimeMonitor.studioStatus.title.pictureInfo': '画面信息', | ||||
|   'realTimeMonitor.studioStatus.smooth': '流畅', | ||||
|   'realTimeMonitor.studioStatus.frameRate': '帧率', | ||||
|   'realTimeMonitor.studioStatus.bitRate': '码率', | ||||
|   'realTimeMonitor.studioStatus.mainstream': '主流', | ||||
|   'realTimeMonitor.studioStatus.hotStandby': '热备', | ||||
|   'realTimeMonitor.studioStatus.coldStandby': '冷备', | ||||
|   'realTimeMonitor.studioStatus.line': '线路', | ||||
|   'realTimeMonitor.studioStatus.play': '播放格式', | ||||
|   'realTimeMonitor.studioStatus.pictureQuality': '画质', | ||||
|   'realTimeMonitor.studioPreview.studio': '直播间', | ||||
|   'realTimeMonitor.studioPreview.watching': '在看', | ||||
| }; | ||||
| @@ -2,7 +2,7 @@ | ||||
|  | ||||
| -- changeset Charles7c:1 | ||||
| -- 初始化默认菜单 | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1000, '系统管理', 0, 1, '/system', NULL, NULL, 'settings', b'0', b'0', b'0', NULL, 1, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1000, '系统管理', 0, 1, '/system', 'System', NULL, 'settings', b'0', b'0', b'0', NULL, 1, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1010, '用户管理', 1000, 2, '/system/user', 'User', '/system/user/index', NULL, b'0', b'0', b'0', 'system:user:list', 1, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1011, '用户新增', 1010, 3, NULL, NULL, NULL, NULL, b'0', b'0', b'0', 'system:user:add', 1, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1012, '用户修改', 1010, 3, NULL, NULL, NULL, NULL, b'0', b'0', b'0', 'system:user:update', 2, 1, 1, NOW(), NULL, NULL); | ||||
| @@ -25,7 +25,7 @@ INSERT IGNORE INTO `sys_menu` VALUES (1901, '菜单新增', 1900, 3, NULL, NULL, | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1902, '菜单修改', 1900, 3, NULL, NULL, NULL, NULL, b'0', b'0', b'0', 'system:menu:update', 2, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1903, '菜单删除', 1900, 3, NULL, NULL, NULL, NULL, b'0', b'0', b'0', 'system:menu:delete', 3, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1904, '菜单导出', 1900, 3, NULL, NULL, NULL, NULL, b'0', b'0', b'0', 'system:menu:export', 4, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (9000, '系统监控', 0, 1, '/monitor', NULL, NULL, 'computer', b'0', b'0', b'0', NULL, 899, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (9000, '系统监控', 0, 1, '/monitor', 'Monitor', NULL, 'computer', b'0', b'0', b'0', NULL, 899, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (9010, '在线用户', 9000, 2, '/monitor/online', 'OnlineUser', '/monitor/online/index', NULL, b'0', b'0', b'0', 'monitor:online:user:list', 1, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (9011, '强退用户', 9010, 3, NULL, NULL, NULL, NULL, b'0', b'0', b'0', 'monitor:online:user:delete', 1, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (9030, '登录日志', 9000, 2, '/monitor/log/login', 'LoginLog', '/monitor/log/login/index', NULL, b'0', b'0', b'0', 'monitor:log:login:list', 2, 1, 1, NOW(), NULL, NULL); | ||||
|   | ||||
| @@ -6,5 +6,5 @@ INSERT IGNORE INTO `sys_menu` VALUES (1041, '公告新增', 1040, 3, NULL, NULL, | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1042, '公告修改', 1040, 3, NULL, NULL, NULL, NULL, b'0', b'0', b'0', 'system:announcement:update', 2, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1043, '公告删除', 1040, 3, NULL, NULL, NULL, NULL, b'0', b'0', b'0', 'system:announcement:delete', 3, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (1044, '公告导出', 1040, 3, NULL, NULL, NULL, NULL, b'0', b'0', b'0', 'system:announcement:export', 4, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (2000, '系统工具', 0, 1, '/tool', NULL, NULL, 'tool', b'0', b'0', b'0', NULL, 2, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (2000, '系统工具', 0, 1, '/tool', 'Tool', NULL, 'tool', b'0', b'0', b'0', NULL, 2, 1, 1, NOW(), NULL, NULL); | ||||
| INSERT IGNORE INTO `sys_menu` VALUES (2010, '代码生成', 2000, 2, '/tool/generator', 'Generator', '/tool/generator/index', NULL, b'0', b'0', b'0', 'tool:generator:list', 1, 1, 1, NOW(), NULL, NULL); | ||||
		Reference in New Issue
	
	Block a user