63 changed files with 822 additions and 185 deletions
@ -0,0 +1,161 @@ |
|||
div.mxRubberband { |
|||
position: absolute; |
|||
overflow: hidden; |
|||
border-style: solid; |
|||
border-width: 1px; |
|||
border-color: #0000FF; |
|||
background: #0077FF; |
|||
} |
|||
.mxCellEditor { |
|||
background: url(data:image/gif;base64,R0lGODlhMAAwAIAAAP///wAAACH5BAEAAAAALAAAAAAwADAAAAIxhI+py+0Po5y02ouz3rz7D4biSJbmiabqyrbuC8fyTNf2jef6zvf+DwwKh8Si8egpAAA7); |
|||
border-color: transparent; |
|||
border-style: solid; |
|||
display: inline-block; |
|||
position: absolute; |
|||
overflow: visible; |
|||
word-wrap: normal; |
|||
border-width: 0; |
|||
min-width: 1px; |
|||
resize: none; |
|||
padding: 0px; |
|||
margin: 0px; |
|||
} |
|||
.mxPlainTextEditor * { |
|||
padding: 0px; |
|||
margin: 0px; |
|||
} |
|||
div.MaxWindow { |
|||
-webkit-box-shadow: 3px 3px 12px #C0C0C0; |
|||
-moz-box-shadow: 3px 3px 12px #C0C0C0; |
|||
box-shadow: 3px 3px 12px #C0C0C0; |
|||
background: url(data:image/gif;base64,R0lGODlhGgAUAIAAAOzs7PDw8CH5BAAAAAAALAAAAAAaABQAAAIijI+py70Ao5y02lud3lzhD4ZUR5aPiKajyZbqq7YyB9dhAQA7); |
|||
border:1px solid #c3c3c3; |
|||
position: absolute; |
|||
overflow: hidden; |
|||
z-index: 1; |
|||
} |
|||
table.MaxWindow { |
|||
border-collapse: collapse; |
|||
table-layout: fixed; |
|||
font-family: Arial; |
|||
font-size: 8pt; |
|||
} |
|||
td.mxWindowTitle { |
|||
background: url(data:image/gif;base64,R0lGODlhFwAXAMQAANfX18rKyuHh4c7OzsDAwMHBwc/Pz+Li4uTk5NHR0dvb2+jo6O/v79/f3/n5+dnZ2dbW1uPj44yMjNPT0+Dg4N3d3ebm5szMzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAXABcAAAWQICESxWiW5Ck6bOu+MMvMdG3f86LvfO/rlqBwSCwaj8ikUohoOp/QaDNCrVqvWKpgezhsv+AwmEIum89ocmPNbrvf64p8Tq/b5Yq8fs/v5x+AgYKDhIAAh4iJiouHEI6PkJGSjhOVlpeYmZUJnJ2en6CcBqMDpaanqKgXq6ytrq+rAbKztLW2shK5uru8vbkhADs=) repeat-x; |
|||
text-overflow: ellipsis; |
|||
white-space: nowrap; |
|||
text-align: center; |
|||
font-weight: bold; |
|||
overflow: hidden; |
|||
height: 13px; |
|||
padding: 2px; |
|||
padding-top: 4px; |
|||
padding-bottom: 6px; |
|||
color: black; |
|||
} |
|||
td.mxWindowPane { |
|||
vertical-align: top; |
|||
padding: 0px; |
|||
} |
|||
div.mxWindowPane { |
|||
overflow: hidden; |
|||
position: relative; |
|||
} |
|||
td.mxWindowPane td { |
|||
font-family: Arial; |
|||
font-size: 8pt; |
|||
} |
|||
td.mxWindowPane input, td.mxWindowPane select, td.mxWindowPane textarea, td.mxWindowPane radio { |
|||
border-color: #8C8C8C; |
|||
border-style: solid; |
|||
border-width: 1px; |
|||
font-family: Arial; |
|||
font-size: 8pt; |
|||
padding: 1px; |
|||
} |
|||
td.mxWindowPane button { |
|||
background: url(data:image/gif;base64,R0lGODlhCgATALMAAP7+/t7e3vj4+Ojo6OXl5e/v7/n5+fb29vPz8/39/e3t7fHx8e7u7v///wAAAAAAACH5BAAAAAAALAAAAAAKABMAAAQ2MMlJhb0Y6c2X/2AhjiRjnqiirizqMkEsz0Rt30Ou7y8K/ouDcEg0GI9IgHLJbDif0Kh06owAADs=) repeat-x; |
|||
font-family: Arial; |
|||
font-size: 8pt; |
|||
padding: 2px; |
|||
float: left; |
|||
} |
|||
img.mxToolbarItem { |
|||
margin-right: 6px; |
|||
margin-bottom: 6px; |
|||
border-width: 1px; |
|||
} |
|||
select.mxToolbarCombo { |
|||
vertical-align: top; |
|||
border-style: inset; |
|||
border-width: 2px; |
|||
} |
|||
div.mxToolbarComboContainer { |
|||
padding: 2px; |
|||
} |
|||
img.mxToolbarMode { |
|||
margin: 2px; |
|||
margin-right: 4px; |
|||
margin-bottom: 4px; |
|||
border-width: 0px; |
|||
} |
|||
img.mxToolbarModeSelected { |
|||
margin: 0px; |
|||
margin-right: 2px; |
|||
margin-bottom: 2px; |
|||
border-width: 2px; |
|||
border-style: inset; |
|||
} |
|||
div.mxTooltip { |
|||
-webkit-box-shadow: 3px 3px 12px #C0C0C0; |
|||
-moz-box-shadow: 3px 3px 12px #C0C0C0; |
|||
box-shadow: 3px 3px 12px #C0C0C0; |
|||
background: #FFFFCC; |
|||
border-style: solid; |
|||
border-width: 1px; |
|||
border-color: black; |
|||
font-family: Arial; |
|||
font-size: 8pt; |
|||
position: absolute; |
|||
cursor: default; |
|||
padding: 4px; |
|||
color: black; |
|||
} |
|||
div.mxPopupMenu { |
|||
-webkit-box-shadow: 3px 3px 12px #C0C0C0; |
|||
-moz-box-shadow: 3px 3px 12px #C0C0C0; |
|||
box-shadow: 3px 3px 12px #C0C0C0; |
|||
background: url(data:image/gif;base64,R0lGODlhGgAUAIAAAOzs7PDw8CH5BAAAAAAALAAAAAAaABQAAAIijI+py70Ao5y02lud3lzhD4ZUR5aPiKajyZbqq7YyB9dhAQA7); |
|||
position: absolute; |
|||
border-style: solid; |
|||
border-width: 1px; |
|||
border-color: black; |
|||
} |
|||
table.mxPopupMenu { |
|||
border-collapse: collapse; |
|||
margin-top: 1px; |
|||
margin-bottom: 1px; |
|||
} |
|||
tr.mxPopupMenuItem { |
|||
color: black; |
|||
cursor: pointer; |
|||
} |
|||
tr.mxPopupMenuItemHover { |
|||
background-color: #000066; |
|||
color: #FFFFFF; |
|||
cursor: pointer; |
|||
} |
|||
td.mxPopupMenuItem { |
|||
padding: 2px 30px 2px 10px; |
|||
white-space: nowrap; |
|||
font-family: Arial; |
|||
font-size: 8pt; |
|||
} |
|||
td.mxPopupMenuIcon { |
|||
background-color: #D0D0D0; |
|||
padding: 2px 4px 2px 4px; |
|||
} |
|||
.mxDisabled { |
|||
opacity: 0.2 !important; |
|||
cursor:default !important; |
|||
} |
@ -0,0 +1,146 @@ |
|||
<template> |
|||
<div ref="containerRef" style="width: 100%"></div> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { ref, onMounted } from 'vue'; |
|||
import { InternalEvent, Graph, Geometry, Cell } from '@maxgraph/core'; |
|||
import type { VertexParameterType } from './types/VertexParameterType'; |
|||
|
|||
const containerRef = ref(); |
|||
let graph: Graph | null = null; |
|||
let parent: Cell | null = null; |
|||
let entries: VertexParameterType[] = []; |
|||
const cellTitleMap = {}; |
|||
|
|||
class ComponentsGraph extends Graph { |
|||
getTooltipForCell(cell) { |
|||
return cellTitleMap[cell.id]; |
|||
} |
|||
} |
|||
|
|||
onMounted(() => { |
|||
InternalEvent.disableContextMenu(containerRef.value); |
|||
graph = new ComponentsGraph(containerRef.value); |
|||
graph.setPanning(true); |
|||
graph.setHtmlLabels(true); |
|||
graph.setTooltips(true); |
|||
parent = graph.getDefaultParent(); |
|||
addEntry({ |
|||
id: 'start', |
|||
title: '开始', |
|||
value: `<div class="w-full h-full align-middle text-center" style="width:47px">开始</div>`, |
|||
width: 50, |
|||
height: 50, |
|||
style: { shape: 'ellipse' }, |
|||
}); |
|||
addEntry({ |
|||
id: 'decide', |
|||
title: '条件判断', |
|||
value: `<div class="w-full h-full align-middle text-center" style="width:97px">条件判断</div>`, |
|||
width: 100, |
|||
height: 50, |
|||
style: { shape: 'rhombus' }, |
|||
}); |
|||
addEntry({ |
|||
id: 'commandSet', |
|||
title: '指令集', |
|||
value: `<div class="w-full h-full align-middle text-center" style="width:47px">指令集</div>`, |
|||
width: 50, |
|||
height: 50, |
|||
style: { shape: 'rectangle' }, |
|||
}); |
|||
addEntry({ |
|||
id: 'resource', |
|||
title: '资源', |
|||
value: `<div class="w-full h-full align-middle text-center" style="width:47px">资源</div>`, |
|||
width: 50, |
|||
height: 50, |
|||
style: { shape: 'rectangle' }, |
|||
}); |
|||
|
|||
addEntry({ |
|||
id: 'resource', |
|||
title: '指令资源', |
|||
value: `<div class="w-full h-full align-middle text-center" style="width:47px">指令资源</div>`, |
|||
width: 50, |
|||
height: 50, |
|||
style: { shape: 'rectangle' }, |
|||
}); |
|||
|
|||
addEntry({ |
|||
id: 'subModel', |
|||
title: '子模型', |
|||
value: `<div class="w-full h-full align-middle text-center" style="width:47px">子模型</div>`, |
|||
width: 50, |
|||
height: 50, |
|||
style: { shape: 'rectangle' }, |
|||
}); |
|||
|
|||
refresh(); |
|||
}); |
|||
|
|||
const addVertexWithDefaultStyle = (parameter: VertexParameterType): Cell | undefined => { |
|||
addVertex({ |
|||
id: parameter.id, |
|||
title: parameter.title, |
|||
value: parameter.value, |
|||
geometry: parameter.geometry, |
|||
style: { |
|||
//'rectangle' | 'ellipse' | 'doubleEllipse' | 'rhombus' | 'line' | 'image' | 'arrow' | 'arrowConnector' | 'label' | 'cylinder' | 'swimlane' | 'connector' | 'actor' | 'cloud' | 'triangle' | 'hexagon'; |
|||
shape: parameter.style?.shape, |
|||
verticalAlign: parameter.style?.verticalAlign || 'middle', |
|||
verticalLabelPosition: parameter.style?.verticalLabelPosition || 'middle', |
|||
align: parameter.style?.align || 'left', |
|||
fontSize: parameter.style?.fontSize || 12, |
|||
rounded: parameter.style?.rounded || true, |
|||
whiteSpace: parameter.style?.whiteSpace || 'wrap', |
|||
fillColor: parameter.style?.fillColor || '#F7F2E0', |
|||
strokeColor: parameter.style?.strokeColor || 'black', |
|||
}, |
|||
}); |
|||
}; |
|||
|
|||
const addVertex = (parameter: VertexParameterType): Cell | undefined => { |
|||
const vertex = graph?.insertVertex({ |
|||
id: parameter.id, |
|||
parent: parent, |
|||
position: [parameter.geometry?.x || 0, parameter.geometry?.y || 0], |
|||
size: [parameter.geometry?.width || 10, parameter.geometry?.height || 10], |
|||
style: parameter.style, |
|||
value: parameter.value, |
|||
}); |
|||
cellTitleMap[parameter.id] = parameter.title; |
|||
return vertex; |
|||
}; |
|||
|
|||
const addEntry = (entry: VertexParameterType) => { |
|||
entry.geometry = new Geometry(0, 0, entry.width, entry.height); |
|||
entries.push(entry); |
|||
}; |
|||
|
|||
const refresh = () => { |
|||
let availableWidth = containerRef.value.clientWidth; |
|||
let currentWidth = 0; |
|||
for (const entry of entries) { |
|||
if (currentWidth + entry.width > availableWidth) { |
|||
entry.geometry.x = 0; |
|||
} else { |
|||
entry.geometry.x = currentWidth; |
|||
} |
|||
currentWidth += entry.width; |
|||
} |
|||
|
|||
graph.batchUpdate(() => { |
|||
for (const entry of entries) { |
|||
entry.geometry = new Geometry(70, 80, entry.width, entry.height); |
|||
} |
|||
for (const entry of entries) { |
|||
addVertexWithDefaultStyle(entry); |
|||
} |
|||
}); |
|||
}; |
|||
|
|||
defineExpose({ |
|||
addEntry, |
|||
}); |
|||
</script> |
@ -0,0 +1,53 @@ |
|||
<template> |
|||
<div ref="containerRef"></div> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { ref, onMounted } from 'vue'; |
|||
import { type CellStyle, Graph, InternalEvent } from '@maxgraph/core'; |
|||
|
|||
const containerRef = ref(); |
|||
|
|||
onMounted(() => { |
|||
//const container = <HTMLElement>document.getElementById('graph-container'); |
|||
// Disables the built-in context menu |
|||
InternalEvent.disableContextMenu(containerRef.value); |
|||
|
|||
const graph = new Graph(containerRef.value); |
|||
graph.setPanning(true); // Use mouse right button for panning |
|||
// Gets the default parent for inserting new cells. This |
|||
// is normally the first child of the root (ie. layer 0). |
|||
const parent = graph.getDefaultParent(); |
|||
|
|||
// Adds cells to the model in a single step |
|||
graph.batchUpdate(() => { |
|||
const vertex01 = graph.insertVertex({ |
|||
parent, |
|||
position: [10, 10], |
|||
size: [100, 100], |
|||
value: 'rectangle', |
|||
}); |
|||
const vertex02 = graph.insertVertex({ |
|||
parent, |
|||
position: [350, 90], |
|||
size: [50, 50], |
|||
style: { |
|||
fillColor: 'orange', |
|||
shape: 'ellipse', |
|||
verticalAlign: 'top', |
|||
verticalLabelPosition: 'bottom', |
|||
}, |
|||
value: 'ellipse', |
|||
}); |
|||
graph.insertEdge({ |
|||
parent, |
|||
source: vertex01, |
|||
target: vertex02, |
|||
value: 'edge', |
|||
style: { |
|||
edgeStyle: 'orthogonalEdgeStyle', |
|||
rounded: true, |
|||
}, |
|||
}); |
|||
}); |
|||
}); |
|||
</script> |
@ -1,56 +1,25 @@ |
|||
<template> |
|||
<w-grid |
|||
ref="userGridRef" |
|||
:height="300" |
|||
:title="$t('system.user.grid.title')" |
|||
:config-button="true" |
|||
selection="multiple" |
|||
:checkbox-selection="true" |
|||
:data-url="Environment.apiContextPath('/api/system/user')" |
|||
:pagination="{ |
|||
sortBy: 'loginName', |
|||
descending: false, |
|||
}" |
|||
:query-form-cols-num="3" |
|||
:query-form-fields="[ |
|||
{ name: 'loginName', label: $t('loginName'), type: 'text' }, |
|||
{ name: 'userName', label: $t('userName'), type: 'text' }, |
|||
{ name: 'enable', label: $t('isEnable'), type: 'select' }, |
|||
]" |
|||
:toolbar-configure="{ noIcon: false }" |
|||
:toolbar-actions="[ |
|||
'query', |
|||
'refresh', |
|||
'separator', |
|||
'add', |
|||
'clone', |
|||
'edit', |
|||
'remove', |
|||
'separator', |
|||
{ |
|||
name: 'download', |
|||
label: $t('download'), |
|||
click: () => { |
|||
//Downloader.get(Environment.apiContextPath('/api/re/resource/export/10e2a868-caaf-423d-a135-23f530f11696')); |
|||
Downloader.get(Environment.apiContextPath('/api/monitor/logger/downloadLogFile?fileName=log.log')); |
|||
}, |
|||
}, |
|||
]" |
|||
:columns="[ |
|||
{ width: 150, name: 'loginName', label: $t('loginName') }, |
|||
{ width: '100%', name: 'userName', label: $t('userName') }, |
|||
{ |
|||
width: 150, |
|||
name: 'enable', |
|||
label: $t('status'), |
|||
format: Formater.checkTag(), |
|||
}, |
|||
{ width: 100, name: 'lastModifier', label: $t('lastModifier') }, |
|||
{ width: 110, name: 'lastModifyDate', label: $t('lastModifyDate') }, |
|||
]" |
|||
></w-grid> |
|||
<div class="w-full border rounded-md" style="height: 100%"> |
|||
<ToolBar></ToolBar> |
|||
<q-splitter :model-value="20" unit="%" separator-style="width:2px;" style="height: calc(100% - 50px)"> |
|||
<template #before> |
|||
<SideBar></SideBar> |
|||
</template> |
|||
<template #after> |
|||
<q-splitter :model-value="65" unit="%" separator-style="width:2px;" style="height: 100%"> |
|||
<template #before><Editor></Editor></template> |
|||
<template #after><Properties></Properties></template> |
|||
</q-splitter> |
|||
</template> |
|||
</q-splitter> |
|||
</div> |
|||
</template> |
|||
|
|||
<script setup lang="ts"> |
|||
import { Environment, Formater, Downloader } from '@/platform'; |
|||
import { ref, onMounted } from 'vue'; |
|||
import { type CellStyle, Graph, InternalEvent } from '@maxgraph/core'; |
|||
import ToolBar from './ToolBar.vue'; |
|||
import SideBar from './SideBar.vue'; |
|||
import Editor from './Editor.vue'; |
|||
import Properties from './Properties.vue'; |
|||
</script> |
|||
|
@ -0,0 +1,22 @@ |
|||
<template> |
|||
<div style="height: 100%" class="px-1"> |
|||
<q-tabs model-value="currentSelectedTabRef" align="left" dense inline-label shrink outside-arrows mobile-arrows :breakpoint="0" no-caps> |
|||
<q-tab name="setting" label="设置" /> |
|||
<q-tab name="style" label="样式" /> |
|||
<q-tab name="text" label="文本" /> |
|||
<q-tab name="arrange" label="排列" /> |
|||
</q-tabs> |
|||
|
|||
<q-tab-panels v-model="currentSelectedTabRef" animated swipeable keep-alive style="height: calc(100% - 48px)"> |
|||
<q-tab-panel name="setting" class="px-0 pb-0" style="height: 100%"> </q-tab-panel> |
|||
<q-tab-panel name="style" class="px-0 pb-0" style="height: 100%"> </q-tab-panel> |
|||
<q-tab-panel name="text" class="px-0 pb-0" style="height: 100%"> </q-tab-panel> |
|||
<q-tab-panel name="arrange" class="px-0 pb-0" style="height: 100%"> </q-tab-panel> |
|||
</q-tab-panels> |
|||
</div> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import { ref } from 'vue'; |
|||
|
|||
const currentSelectedTabRef = ref('style'); |
|||
</script> |
@ -0,0 +1,19 @@ |
|||
<template> |
|||
<q-list class="rounded-borders"> |
|||
<q-expansion-item label="可用组件" default-opened switch-toggle-side header-style="padding-left:8px;padding-right:8px; " expand-icon-class="px-0"> |
|||
<Components></Components> |
|||
</q-expansion-item> |
|||
<q-expansion-item label="Account settings" switch-toggle-side header-style="padding-left:8px;padding-right:8px; " expand-icon-class="px-0"> |
|||
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quidem, eius reprehenderit eos corrupti commodi magni quaerat ex numquam, dolorum officiis modi |
|||
facere maiores architecto suscipit iste eveniet doloribus ullam aliquid. |
|||
</q-expansion-item> |
|||
</q-list> |
|||
</template> |
|||
<script setup lang="ts"> |
|||
import Components from './Components.vue'; |
|||
</script> |
|||
<style> |
|||
.q-item__section--avatar { |
|||
min-width: 36px !important; |
|||
} |
|||
</style> |
@ -0,0 +1,47 @@ |
|||
<template> |
|||
<q-toolbar class="w-full border-b rounded-sm gap-x-1"> |
|||
<q-btn outline icon="bi-floppy" /> |
|||
<q-separator vertical /> |
|||
<q-btn-dropdown label="100%" outline> |
|||
<q-list> |
|||
<q-item v-close-popup clickable> |
|||
<q-item-section> |
|||
<q-item-label>Reset View</q-item-label> |
|||
</q-item-section> |
|||
</q-item> |
|||
|
|||
<q-separator vertical /> |
|||
|
|||
<q-item v-close-popup clickable> |
|||
<q-item-section> |
|||
<q-item-label>25%</q-item-label> |
|||
</q-item-section> |
|||
</q-item> |
|||
|
|||
<q-item v-close-popup clickable> |
|||
<q-item-section> |
|||
<q-item-label>50%</q-item-label> |
|||
</q-item-section> |
|||
</q-item> |
|||
</q-list> |
|||
</q-btn-dropdown> |
|||
<q-separator vertical /> |
|||
<q-btn outline icon="bi-zoom-in" /> |
|||
<q-btn outline icon="bi-zoom-out" /> |
|||
<q-separator vertical /> |
|||
<q-btn outline icon="undo" /> |
|||
<q-btn outline icon="redo" /> |
|||
<q-separator vertical /> |
|||
<q-btn outline icon="bi-trash" /> |
|||
<q-separator vertical /> |
|||
<q-btn outline icon="bi-layers" /> |
|||
<q-btn outline icon="bi-layers-half" /> |
|||
<q-separator vertical /> |
|||
<q-btn outline icon="bi-paint-bucket" /> |
|||
<q-separator vertical /> |
|||
<q-btn outline icon="bi-palette" /> |
|||
<q-separator vertical /> |
|||
<q-btn outline icon="bi-bezier2" /> |
|||
</q-toolbar> |
|||
</template> |
|||
<script setup lang="ts"></script> |
@ -0,0 +1,11 @@ |
|||
import { Geometry,CellStyle } from '@maxgraph/core'; |
|||
|
|||
export type VertexParameterType = { |
|||
id: string | undefined; |
|||
title: string | undefined; |
|||
width?: number; |
|||
height?:number; |
|||
geometry?: Geometry; |
|||
value: any; |
|||
style?: CellStyle; |
|||
}; |
@ -0,0 +1,25 @@ |
|||
package io.sc.platform.mvc.plugins.item; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
public class FrontEndRouteMetaHome { |
|||
private boolean enable; |
|||
private String titleI18nKey; |
|||
|
|||
public boolean isEnable() { |
|||
return enable; |
|||
} |
|||
|
|||
public void setEnable(boolean enable) { |
|||
this.enable = enable; |
|||
} |
|||
|
|||
public String getTitleI18nKey() { |
|||
return titleI18nKey; |
|||
} |
|||
|
|||
public void setTitleI18nKey(String titleI18nKey) { |
|||
this.titleI18nKey = titleI18nKey; |
|||
} |
|||
} |
@ -0,0 +1,4 @@ |
|||
<template> |
|||
<div>License</div> |
|||
</template> |
|||
<script setup lang="ts"></script> |
@ -1,3 +1,5 @@ |
|||
home.default=Home Page (System Default) |
|||
|
|||
parameter.system=System |
|||
parameter.system.homePage=Home Page |
|||
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
@ -1,3 +1,5 @@ |
|||
home.default=\u9996\u9801 (\u7CFB\u7D71\u9ED8\u8A8D) |
|||
|
|||
parameter.system=\u7CFB\u7D71 |
|||
parameter.system.homePage=\u9996\u9801 |
|||
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
@ -1,3 +1,5 @@ |
|||
home.default=\u9996\u9875 (\u7CFB\u7EDF\u9ED8\u8BA4) |
|||
|
|||
parameter.system=\u7CFB\u7EDF |
|||
parameter.system.homePage=\u9996\u9875 |
|||
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
Loading…
Reference in new issue