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> |
<template> |
||||
<w-grid |
<div class="w-full border rounded-md" style="height: 100%"> |
||||
ref="userGridRef" |
<ToolBar></ToolBar> |
||||
:height="300" |
<q-splitter :model-value="20" unit="%" separator-style="width:2px;" style="height: calc(100% - 50px)"> |
||||
:title="$t('system.user.grid.title')" |
<template #before> |
||||
:config-button="true" |
<SideBar></SideBar> |
||||
selection="multiple" |
</template> |
||||
:checkbox-selection="true" |
<template #after> |
||||
:data-url="Environment.apiContextPath('/api/system/user')" |
<q-splitter :model-value="65" unit="%" separator-style="width:2px;" style="height: 100%"> |
||||
:pagination="{ |
<template #before><Editor></Editor></template> |
||||
sortBy: 'loginName', |
<template #after><Properties></Properties></template> |
||||
descending: false, |
</q-splitter> |
||||
}" |
</template> |
||||
:query-form-cols-num="3" |
</q-splitter> |
||||
:query-form-fields="[ |
</div> |
||||
{ 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> |
|
||||
</template> |
</template> |
||||
|
|
||||
<script setup lang="ts"> |
<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> |
</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=System |
||||
parameter.system.homePage=Home Page |
parameter.system.homePage=Home Page |
||||
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
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=\u7CFB\u7D71 |
||||
parameter.system.homePage=\u9996\u9801 |
parameter.system.homePage=\u9996\u9801 |
||||
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
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=\u7CFB\u7EDF |
||||
parameter.system.homePage=\u9996\u9875 |
parameter.system.homePage=\u9996\u9875 |
||||
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
parameter.login.encodePassword=\u767B\u9304\u9801\u9762\u5BC6\u78BC\u52A0\u5BC6 |
Loading…
Reference in new issue