Browse Source

update

main
wangshaoping 9 months ago
parent
commit
13002374a9
  1. 2
      erm.frontend/package.json
  2. 2
      gradle.properties
  3. 2
      io.sc.engine.mv.frontend/package.json
  4. 2
      io.sc.engine.rule.frontend/package.json
  5. 2
      io.sc.engine.st.frontend/package.json
  6. 1
      io.sc.platform.core.frontend/src/platform/components/form/WForm.vue
  7. 323
      io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue
  8. 3
      io.sc.platform.core.frontend/src/platform/components/index.ts
  9. 1
      io.sc.platform.core.frontend/src/platform/index.ts
  10. 8
      io.sc.platform.core.frontend/src/platform/plugin/environment/index.ts
  11. 15
      io.sc.platform.core.frontend/src/platform/plugin/manager/SessionManager.ts
  12. 2
      io.sc.platform.core.frontend/src/platform/types/ConfigureType.ts
  13. 116
      io.sc.platform.core.frontend/src/views/testcase/form/form.vue
  14. 2
      io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectApplicationDialog.vue
  15. 2
      io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectApplicationGrid.vue
  16. 2
      io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectOrgTreeGrid.vue
  17. 2
      io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectRoleDialog.vue
  18. 2
      io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectRoleGrid.vue
  19. 2
      io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectUserDialog.vue
  20. 2
      io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectUserGrid.vue
  21. 4
      io.sc.platform.core.frontend/template-project/package.json
  22. 10
      io.sc.platform.core/src/main/java/io/sc/platform/core/Environment.java
  23. 2
      io.sc.platform.core/src/main/java/io/sc/platform/core/autoconfigure/AuditLogPersistenterManagerAutoConfiguration.java
  24. 39
      io.sc.platform.core/src/main/java/io/sc/platform/core/autoconfigure/MultiCorporationModeAutoConfiguration.java
  25. 22
      io.sc.platform.core/src/main/java/io/sc/platform/core/service/support/MultiCorporationModeProperties.java
  26. 22
      io.sc.platform.core/src/main/java/io/sc/platform/core/springboot/AfterEnvironmentProcessor.java
  27. 3
      io.sc.platform.core/src/main/resources/META-INF/platform/plugins/application-properties.json
  28. 4
      io.sc.platform.core/src/main/resources/META-INF/spring.factories
  29. 2
      io.sc.platform.developer.frontend/package.json
  30. 2
      io.sc.platform.lcdp.frontend/package.json
  31. 9
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Setting.java
  32. 17
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/service/impl/ConfigureServiceImpl.java
  33. 2
      io.sc.platform.mvc.frontend/package.json
  34. 2
      io.sc.platform.security.frontend/package.json
  35. 2
      io.sc.platform.system.frontend/package.json
  36. 3
      io.sc.platform.system.frontend/src/views/announcement/AnnouncementManager.vue
  37. 1
      io.sc.platform.system.frontend/src/views/department/Department.vue
  38. 1
      io.sc.platform.system.frontend/src/views/dictionary/Dictionary.vue
  39. 1
      io.sc.platform.system.frontend/src/views/i18n/I18n.vue
  40. 2
      io.sc.platform.system.frontend/src/views/monitor/Log.vue
  41. 3
      io.sc.platform.system.frontend/src/views/notification/NotificationManager.vue
  42. 1
      io.sc.platform.system.frontend/src/views/org/Org.vue
  43. 1
      io.sc.platform.system.frontend/src/views/role/Role.vue
  44. 1
      io.sc.platform.system.frontend/src/views/user/User.vue
  45. 2
      io.sc.standard.frontend/package.json

2
erm.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.15.3", "quasar": "2.15.3",
"tailwindcss": "3.4.3", "tailwindcss": "3.4.3",
"vue": "3.4.24", "vue": "3.4.24",

2
gradle.properties

@ -38,7 +38,7 @@ application_version=1.0.0
platform_group=io.sc platform_group=io.sc
platform_version=8.1.43 platform_version=8.1.43
platform_plugin_version=8.1.13 platform_plugin_version=8.1.13
platform_core_frontend_version=8.1.227 platform_core_frontend_version=8.1.228
########################################################### ###########################################################
# dependencies version # dependencies version

2
io.sc.engine.mv.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.15.3", "quasar": "2.15.3",
"tailwindcss": "3.4.3", "tailwindcss": "3.4.3",
"vue": "3.4.24", "vue": "3.4.24",

2
io.sc.engine.rule.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.15.3", "quasar": "2.15.3",
"tailwindcss": "3.4.3", "tailwindcss": "3.4.3",
"vue": "3.4.24", "vue": "3.4.24",

2
io.sc.engine.st.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.15.3", "quasar": "2.15.3",
"tailwindcss": "3.4.3", "tailwindcss": "3.4.3",
"vue": "3.4.24", "vue": "3.4.24",

1
io.sc.platform.core.frontend/src/platform/components/form/WForm.vue

@ -89,6 +89,7 @@ const fiedType = {
icon: 'w-icon', icon: 'w-icon',
number: 'w-number', number: 'w-number',
select: 'w-select', select: 'w-select',
treeSelect: 'w-tree-select',
text: 'w-text', text: 'w-text',
textarea: 'w-textarea', textarea: 'w-textarea',
'text-btn': 'w-text-btn', 'text-btn': 'w-text-btn',

323
io.sc.platform.core.frontend/src/platform/components/form/elements/WTreeSelect.vue

@ -0,0 +1,323 @@
<template>
<div v-show="showIfComputed">
<q-field
ref="fieldRef"
v-model="codeMirrorValue"
:hide-bottom-space="true"
:hide-hint="true"
:outlined="true"
:dense="true"
v-bind="attrs"
:stack-label="stackLabelRef"
:rules="rulesComputed"
:readonly="readonlyIfComputed"
:disable="disableIfComputed"
style="position: relative"
@focus.stop.prevent="focus"
@blur.stop.prevent="blur"
@update:model-value="updateModelValue"
@change="changeValue"
>
<template #label> <span v-if="requiredIfComputed" style="color: red">*</span> {{ attrs.label }}</template>
<template #control>
<q-btn label="sdfds"></q-btn>
</template>
<template v-if="!Tools.isEmpty(codeMirrorValue) && attrs.button" #append>
<q-btn
round
dense
flat
v-bind="attrs.button"
:style="{
content: '',
position: 'absolute',
bottom: '5px',
right: '5px',
}"
@click.stop.prevent="buttonClick(attrs.button)"
/>
</template>
</q-field>
</div>
</template>
<script setup lang="ts">
import { ref, useAttrs, onMounted, onUnmounted, watch, computed, toRaw } from 'vue';
import { Tools } from '@/platform';
import { FormValidators } from '@/platform/components';
import { EditorView } from '@codemirror/view';
import { EditorState, StateEffect, Compartment } from '@codemirror/state';
import * as view from '@codemirror/view';
import * as language from '@codemirror/language';
import * as commands from '@codemirror/commands';
import * as search from '@codemirror/search';
import * as autocomplete from '@codemirror/autocomplete';
import { LanguageSupport } from '@codemirror/language';
import { html } from '@codemirror/lang-html';
import { java } from '@codemirror/lang-java';
import { javascript } from '@codemirror/lang-javascript';
import { json } from '@codemirror/lang-json';
import { sql } from '@codemirror/lang-sql';
import { xml } from '@codemirror/lang-xml';
const attrs = useAttrs();
const rules = attrs.rules;
const fieldRef = ref();
const props = defineProps({
onChange: {
type: Function,
default: () => {},
},
modelValue: { type: String, default: '' },
lang: { type: String, default: 'json' },
width: { type: [Number, String], default: '100%' },
height: { type: [Number, String], default: undefined },
rows: { type: Number, default: 4 },
tabSize: { type: Number, default: 4 },
showIf: {
type: Function,
default: () => {
return true;
},
},
required: {
type: Boolean,
default: false,
},
requiredIf: {
type: Function,
default: undefined,
},
readOnlyIf: {
type: Function,
default: () => {
return false;
},
},
disableIf: {
type: Function,
default: () => {
return false;
},
},
form: {
type: Object,
default: undefined,
},
});
const emits = defineEmits(['update:modelValue', 'change']);
const codeMirrorValue = ref(props.modelValue);
watch(
() => props.modelValue,
(newVal, oldVal) => {
codeMirrorValue.value = newVal;
},
);
const rulesComputed = computed(() => {
let result = rules || <any>[];
if (showIfComputed.value && requiredIfComputed.value) {
result.push(FormValidators.required());
} else if (!showIfComputed.value) {
result = [];
}
if (fieldRef?.value) {
fieldRef.value.resetValidation();
}
return result;
});
const showIfComputed = computed(() => {
return props.showIf({
value: codeMirrorValue.value,
form: props.form,
});
});
const requiredIfComputed = computed(() => {
if (props.requiredIf) {
return (
props.requiredIf({
value: codeMirrorValue.value,
form: props.form,
}) || false
);
} else if (props.required) {
return true;
}
return false;
});
const readonlyIfComputed = computed(() => {
if (props.form && props.form.getStatus() === 'view') {
return true;
}
return props.readOnlyIf({
value: codeMirrorValue.value,
form: props.form,
});
});
const disableIfComputed = computed(() => {
return props.disableIf({
value: codeMirrorValue.value,
form: props.form,
});
});
const basicSetup = [
EditorState.allowMultipleSelections.of(true),
//view.lineNumbers(),
//view.highlightActiveLine(),
view.highlightActiveLineGutter(),
view.highlightSpecialChars(),
view.drawSelection(),
view.dropCursor(),
view.rectangularSelection(),
view.crosshairCursor(),
commands.history(),
//language.foldGutter(),
language.indentOnInput(),
language.syntaxHighlighting(language.defaultHighlightStyle, { fallback: true }),
language.bracketMatching(),
autocomplete.closeBrackets(),
autocomplete.autocompletion(),
search.highlightSelectionMatches(),
view.keymap.of([
...commands.defaultKeymap,
...commands.historyKeymap,
...language.foldKeymap,
...autocomplete.completionKeymap,
...autocomplete.closeBracketsKeymap,
...search.searchKeymap,
//commands.indentWithTab,
]),
];
const getLanguage = (lang: string): LanguageSupport => {
lang = lang || 'json';
switch (lang.toLowerCase()) {
case 'html':
return html();
case 'java':
return java();
case 'javascript':
return javascript();
case 'json':
return json();
case 'sql':
return sql();
case 'xml':
return xml();
default:
return json();
}
};
const codemirrorRef = ref();
// q-field stack-label field label
// field , label
// field , field label , label
const stackLabelRef = ref(!Tools.isUndefinedOrNull(codeMirrorValue.value));
let editorView;
let isFocus = false;
onMounted(() => {
if (codemirrorRef.value) {
let language = new Compartment();
let tabSize = new Compartment();
editorView = new EditorView({
extensions: [
basicSetup,
language.of(getLanguage(props.lang)),
tabSize.of(EditorState.tabSize.of(props.tabSize)),
EditorState.readOnly.of(props.readOnlyIf(props.form)),
EditorView.theme({
'&': {
outline: 'none !important',
width: Tools.px(props.width),
height: props.height ? Tools.px(props.height) : props.rows * 22 + 'px',
},
}),
// , , blur
EditorView.updateListener.of(function (e) {
// emits('update:modelValue', e.state.doc.toString());
updateModelValue(e.state.doc.toString());
}),
],
parent: codemirrorRef.value,
doc: codeMirrorValue.value,
});
watch(
() => codeMirrorValue.value,
() => {
// ,,
if (!isFocus) {
editorView.dispatch({ changes: { from: 0, to: editorView.state.doc.length, insert: codeMirrorValue.value } });
}
},
);
}
});
onUnmounted(() => {
editorView.destroy();
});
const focus = () => {
isFocus = true;
stackLabelRef.value = true;
};
const blur = () => {
isFocus = false;
const content = editorView.state.doc.toString();
//emits('update:modelValue', content);
if (content) {
stackLabelRef.value = true;
} else {
stackLabelRef.value = false;
}
};
const getValue = () => {
return editorView.state.doc.toString();
};
const setValue = (value: string) => {
editorView.dispatch({ changes: { from: 0, to: editorView.state.doc.length, insert: value } });
};
const configure = (values) => {
editorView.dispatch({ effects: StateEffect.reconfigure.of(values) });
};
const updateModelValue = (value) => {
emits('update:modelValue', value, props.form);
changeValue(value);
};
const changeValue = (value) => {
emits('change', {
value: value,
form: props.form,
});
};
const buttonClick = (button) => {
if (button.click) {
button.click({
value: codeMirrorValue.value,
form: props.form,
});
}
};
defineExpose({
getValue,
setValue,
configure,
});
</script>

3
io.sc.platform.core.frontend/src/platform/components/index.ts

@ -17,6 +17,7 @@ import WText from './form/elements/WText.vue';
import WNumber from './form/elements/WNumber.vue'; import WNumber from './form/elements/WNumber.vue';
import WTextarea from './form/elements/WTextarea.vue'; import WTextarea from './form/elements/WTextarea.vue';
import WSelect from './form/elements/WSelect.vue'; import WSelect from './form/elements/WSelect.vue';
import WTreeSelect from './form/elements/WTreeSelect.vue';
import WDate from './form/elements/WDate.vue'; import WDate from './form/elements/WDate.vue';
import WCheckbox from './form/elements/WCheckbox.vue'; import WCheckbox from './form/elements/WCheckbox.vue';
import WTextBtn from './form/elements/WTextBtn.vue'; import WTextBtn from './form/elements/WTextBtn.vue';
@ -71,6 +72,7 @@ export default {
app.component('WNumber', WNumber); app.component('WNumber', WNumber);
app.component('WTextarea', WTextarea); app.component('WTextarea', WTextarea);
app.component('WSelect', WSelect); app.component('WSelect', WSelect);
app.component('WTreeSelect', WTreeSelect);
app.component('WDate', WDate); app.component('WDate', WDate);
app.component('WCheckbox', WCheckbox); app.component('WCheckbox', WCheckbox);
app.component('WTextBtn', WTextBtn); app.component('WTextBtn', WTextBtn);
@ -122,6 +124,7 @@ export {
WNumber, WNumber,
WTextarea, WTextarea,
WSelect, WSelect,
WTreeSelect,
WDate, WDate,
WCheckbox, WCheckbox,
WTextBtn, WTextBtn,

1
io.sc.platform.core.frontend/src/platform/index.ts

@ -132,6 +132,7 @@ export {
WNumber, WNumber,
WTextarea, WTextarea,
WSelect, WSelect,
WTreeSelect,
WDate, WDate,
WCheckbox, WCheckbox,
WTextBtn, WTextBtn,

8
io.sc.platform.core.frontend/src/platform/plugin/environment/index.ts

@ -220,6 +220,14 @@ class Environment {
public static getLocale(): string { public static getLocale(): string {
return gc.setting.i18n.locale; return gc.setting.i18n.locale;
} }
/**
*
* @returns
*/
public static isMultiCorporationMode(): boolean {
return gc.setting.isMultiCorporationMode;
}
} }
export { Environment }; export { Environment };

15
io.sc.platform.core.frontend/src/platform/plugin/manager/SessionManager.ts

@ -22,6 +22,14 @@ class SessionManager {
return SessionManager.#session; return SessionManager.#session;
} }
/**
*
* @returns
*/
public static getUser(): UserType | undefined {
return SessionManager.#session.user;
}
/** /**
* *
* @param user * @param user
@ -30,6 +38,13 @@ class SessionManager {
SessionManager.#session.user = user; SessionManager.#session.user = user;
} }
/**
*
*/
public static isPrimaryCorporation(): boolean {
return Environment.isMultiCorporationMode() && SessionManager.getUser()?.corporationCode === '_PRIMARY_';
}
/** /**
* *
* @param menus * @param menus

2
io.sc.platform.core.frontend/src/platform/types/ConfigureType.ts

@ -54,6 +54,8 @@ export type ConfigureType = {
missingWarn: boolean; // 在找不到国际化多语言消息时的是否警告 missingWarn: boolean; // 在找不到国际化多语言消息时的是否警告
changeNotify: boolean; // 当切换区域成功后是否显示通知 changeNotify: boolean; // 当切换区域成功后是否显示通知
}; };
isMultiCorporationMode: boolean; //是否多法人模式
isPrimaryCorporation: boolean; //是否是主法人(主法人可以管理其他法人)
}; };
// --------------------------------------------- // ---------------------------------------------

116
io.sc.platform.core.frontend/src/views/testcase/form/form.vue

@ -2,14 +2,18 @@
<q-splitter :model-value="60" class="w-full" style="height: 100%"> <q-splitter :model-value="60" class="w-full" style="height: 100%">
<template #before> <template #before>
<div class="pr-1" style="height: 100%"> <div class="pr-1" style="height: 100%">
<w-tree-select></w-tree-select>
<w-grid <w-grid
ref="applicationGridRef" ref="roleGridRef"
:title="$t('system.application.grid.title')" :title="$t('system.role.grid.title')"
:config-button="true" :config-button="true"
selection="multiple" selection="multiple"
:checkbox-selection="true" :checkbox-selection="true"
:data-url="Environment.apiContextPath('/api/system/application')" :data-url="Environment.apiContextPath('/api/system/role')"
:sort-by="['order']" :pagination="{
sortBy: 'name',
descending: false,
}"
:query-form-cols-num="3" :query-form-cols-num="3"
:query-form-fields="[ :query-form-fields="[
{ name: 'code', label: $t('code'), type: 'text' }, { name: 'code', label: $t('code'), type: 'text' },
@ -19,17 +23,16 @@
:toolbar-configure="{ noIcon: false }" :toolbar-configure="{ noIcon: false }"
:toolbar-actions="['query', 'refresh', 'separator', 'add', 'clone', 'edit', 'remove', 'separator', 'view', 'separator', 'export']" :toolbar-actions="['query', 'refresh', 'separator', 'add', 'clone', 'edit', 'remove', 'separator', 'view', 'separator', 'export']"
:columns="[ :columns="[
{ width: 60, name: 'order', label: $t('order') }, { width: 150, name: 'code', label: $t('code') },
{ width: 100, name: 'code', label: $t('code') },
{ width: '100%', name: 'name', label: $t('name') }, { width: '100%', name: 'name', label: $t('name') },
{ width: 80, name: 'enable', label: $t('status'), format: Formater.enableTag() }, { width: 80, name: 'enable', label: $t('status'), format: Formater.enableTag() },
{ width: 100, name: 'corporationCode', label: $t('corporation'), hidden: !SessionManager.isPrimaryCorporation() },
{ width: 120, name: 'lastModifier', label: $t('lastModifier') }, { width: 120, name: 'lastModifier', label: $t('lastModifier') },
{ width: 120, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() }, { width: 120, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]" ]"
:editor="{ :editor="{
dialog: { dialog: {
width: '600px', width: '600px',
height: '300px',
}, },
form: { form: {
colsNum: 1, colsNum: 1,
@ -37,8 +40,12 @@
{ name: 'code', label: $t('code'), type: 'text', required: true }, { name: 'code', label: $t('code'), type: 'text', required: true },
{ name: 'name', label: $t('name'), type: 'text', required: true }, { name: 'name', label: $t('name'), type: 'text', required: true },
{ name: 'description', label: $t('description'), type: 'textarea', rows: 1 }, { name: 'description', label: $t('description'), type: 'textarea', rows: 1 },
{ name: 'order', label: $t('order'), type: 'number' },
{ name: 'enable', label: $t('enable'), type: 'checkbox', defaultValue: true }, { name: 'enable', label: $t('enable'), type: 'checkbox', defaultValue: true },
{
name: 'corporationCode',
label: $t('corporation'),
type: 'tree-select',
},
], ],
}, },
}" }"
@ -51,7 +58,6 @@
{ name: 'name', label: $t('name') }, { name: 'name', label: $t('name') },
{ name: 'description', label: $t('description') }, { name: 'description', label: $t('description') },
{ name: 'enable', label: $t('enable'), format: Formater.none() }, { name: 'enable', label: $t('enable'), format: Formater.none() },
{ name: 'order', label: $t('order') },
{ name: 'dataComeFrom', label: $t('dataComeFrom') }, { name: 'dataComeFrom', label: $t('dataComeFrom') },
{ name: 'creator', label: $t('creator') }, { name: 'creator', label: $t('creator') },
{ name: 'createDate', label: $t('createDate') }, { name: 'createDate', label: $t('createDate') },
@ -63,16 +69,12 @@
}" }"
@row-click=" @row-click="
(evt, row, index) => { (evt, row, index) => {
currentSelectedApplicationId = row.id; refreshRelationshipComponents(row.id);
menuTreeGridRef?.refresh();
userGridRef?.refresh();
} }
" "
@before-request-data=" @before-request-data="
() => { () => {
currentSelectedApplicationId = ''; refreshRelationshipComponents('');
menuTreeGridRef?.refresh();
userGridRef?.refresh();
} }
" "
> >
@ -83,18 +85,34 @@
<div class="pl-1" style="height: 100%"> <div class="pl-1" style="height: 100%">
<q-tabs v-model="selectedTabRef" inline-label align="left" :breakpoint="0" no-caps> <q-tabs v-model="selectedTabRef" inline-label align="left" :breakpoint="0" no-caps>
<q-tab name="menu" icon="bi-menu-app" :label="$t('menu')" /> <q-tab name="menu" icon="bi-menu-app" :label="$t('menu')" />
<q-tab name="user" icon="bi-person" :label="$t('user')" />
</q-tabs> </q-tabs>
<q-tab-panels v-model="selectedTabRef" animated swipeable keep-alive style="height: calc(100% - 48px)"> <q-tab-panels v-model="selectedTabRef" animated swipeable keep-alive style="height: calc(100% - 48px)">
<q-tab-panel name="menu" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px"> <q-tab-panel name="menu" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px">
<SelectMenuTreeGrid <SelectMenuTreeGrid
ref="menuTreeGridRef" ref="menuTreeGridRef"
:fetch-data-url="Environment.apiContextPath('/api/system/menu/listAllMenusWithSelectedStatusByApplication')" :fetch-data-url="Environment.apiContextPath('/api/system/menu/listAllMenusWithSelectedStatusByRole')"
foreign-key="applicationId" foreign-key="roleId"
:foreign-value="currentSelectedApplicationId" :foreign-value="currentSelectedRoleId"
@update="update" @update="update"
></SelectMenuTreeGrid> ></SelectMenuTreeGrid>
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="user" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px">
<SelectUserGrid
ref="userGridRef"
:fetch-data-url="Environment.apiContextPath('/api/system/user/queryUsersByRole')"
:fetch-other-data-url="Environment.apiContextPath('/api/system/user/queryOtherUsersByRole')"
foreign-key="roleId"
:foreign-value="currentSelectedRoleId"
@select-in="selectIn"
@select-out="selectOut"
@select-all-in="selectAllIn"
@select-all-out="selectAllOut"
>
</SelectUserGrid>
</q-tab-panel>
</q-tab-panels> </q-tab-panels>
</div> </div>
</template> </template>
@ -102,20 +120,72 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref } from 'vue'; import { ref } from 'vue';
import { Environment, axios, EnumTools, Options, Formater } from '@/platform'; import { Environment, SessionManager, axios, Options, Formater } from '@/platform';
import SelectUserGrid from './shared/SelectUserGrid.vue';
import SelectMenuTreeGrid from './shared/SelectMenuTreeGrid.vue'; import SelectMenuTreeGrid from './shared/SelectMenuTreeGrid.vue';
const applicationGridRef = ref(); const roleGridRef = ref();
const userGridRef = ref(); const userGridRef = ref();
const menuTreeGridRef = ref(); const menuTreeGridRef = ref();
const selectedTabRef = ref('menu'); const selectedTabRef = ref('menu');
const currentSelectedApplicationId = ref(''); const currentSelectedRoleId = ref('');
const refreshRelationshipComponents = (id) => {
currentSelectedRoleId.value = id;
menuTreeGridRef.value?.refresh();
userGridRef.value?.refresh();
};
const selectIn = (ids: string[], gridComponent, dialogComponent) => {
axios
.post(Environment.apiContextPath('/api/system/role/addUsers'), {
one: roleGridRef.value.getSelectedRows()[0].id,
many: ids,
})
.then(() => {
gridComponent?.refresh();
dialogComponent?.close();
});
};
const selectOut = (ids, gridComponent) => {
axios
.post(Environment.apiContextPath('/api/system/role/removeUsers'), {
one: roleGridRef.value.getSelectedRows()[0].id,
many: ids,
})
.then(() => {
gridComponent?.refresh();
});
};
const selectAllIn = (gridComponent) => {
axios
.post(Environment.apiContextPath('/api/system/role/addAllUsers'), {
one: roleGridRef.value.getSelectedRows()[0].id,
many: [],
})
.then(() => {
gridComponent?.refresh();
});
};
const selectAllOut = (gridComponent) => {
axios
.post(Environment.apiContextPath('/api/system/role/removeAllUsers'), {
one: roleGridRef.value.getSelectedRows()[0].id,
many: [],
})
.then(() => {
gridComponent?.refresh();
});
};
const update = (ids, gridComponent) => { const update = (ids, gridComponent) => {
axios axios
.post(Environment.apiContextPath('/api/system/application/updateMenus'), { .post(Environment.apiContextPath('/api/system/role/updateMenus'), {
one: applicationGridRef.value.getSelectedRows()[0].id, one: roleGridRef.value.getSelectedRows()[0].id,
many: ids, many: ids,
}) })
.then(() => { .then(() => {

2
io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectApplicationDialog.vue

@ -61,7 +61,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, nextTick } from 'vue'; import { ref, nextTick } from 'vue';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { Environment, Tools, EnumTools, Options, Formater } from 'platform-core'; import { Environment, Tools, EnumTools, Options, Formater } from '@/platform';
const props = defineProps({ const props = defineProps({
opener: { type: Object, default: undefined }, opener: { type: Object, default: undefined },

2
io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectApplicationGrid.vue

@ -107,7 +107,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onUpdated } from 'vue'; import { ref, onUpdated } from 'vue';
import { EnumTools, DialogManager, Formater, Tools } from 'platform-core'; import { EnumTools, DialogManager, Formater, Tools } from '@/platform';
import SelectApplicationDialog from './SelectApplicationDialog.vue'; import SelectApplicationDialog from './SelectApplicationDialog.vue';
const props = defineProps({ const props = defineProps({

2
io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectOrgTreeGrid.vue

@ -69,7 +69,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onUpdated } from 'vue'; import { ref, onUpdated } from 'vue';
import { Environment, DialogManager, Formater, Tools } from 'platform-core'; import { Environment, DialogManager, Formater, Tools } from '@/platform';
const props = defineProps({ const props = defineProps({
fetchDataUrl: { type: String, default: '' }, fetchDataUrl: { type: String, default: '' },

2
io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectRoleDialog.vue

@ -61,7 +61,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, nextTick } from 'vue'; import { ref, nextTick } from 'vue';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { Environment, Tools, EnumTools, Options, Formater } from 'platform-core'; import { Environment, Tools, EnumTools, Options, Formater } from '@/platform';
const props = defineProps({ const props = defineProps({
opener: { type: Object, default: undefined }, opener: { type: Object, default: undefined },

2
io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectRoleGrid.vue

@ -107,7 +107,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, onUpdated } from 'vue'; import { ref, onUpdated } from 'vue';
import { EnumTools, DialogManager, Formater, Tools } from 'platform-core'; import { EnumTools, DialogManager, Formater, Tools } from '@/platform';
import SelectRoleDialog from './SelectRoleDialog.vue'; import SelectRoleDialog from './SelectRoleDialog.vue';
const props = defineProps({ const props = defineProps({

2
io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectUserDialog.vue

@ -64,7 +64,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, nextTick } from 'vue'; import { ref, nextTick } from 'vue';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { Environment, Tools, EnumTools, Options, Formater } from 'platform-core'; import { Environment, Tools, EnumTools, Options, Formater } from '@/platform';
import UserStatusTag from './UserStatusTag.vue'; import UserStatusTag from './UserStatusTag.vue';
const props = defineProps({ const props = defineProps({

2
io.sc.platform.core.frontend/src/views/testcase/form/shared/SelectUserGrid.vue

@ -125,7 +125,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onUpdated } from 'vue'; import { ref, onUpdated } from 'vue';
import { DialogManager, Tools } from 'platform-core'; import { DialogManager, Tools } from '@/platform';
import SelectUserDialog from './SelectUserDialog.vue'; import SelectUserDialog from './SelectUserDialog.vue';
import UserStatusTag from './UserStatusTag.vue'; import UserStatusTag from './UserStatusTag.vue';

4
io.sc.platform.core.frontend/template-project/package.json

@ -1,6 +1,6 @@
{ {
"name": "platform-core", "name": "platform-core",
"version": "8.1.227", "version": "8.1.228",
"description": "前端核心包,用于快速构建前端的脚手架", "description": "前端核心包,用于快速构建前端的脚手架",
"private": false, "private": false,
"keywords": [], "keywords": [],
@ -104,7 +104,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.15.3", "quasar": "2.15.3",
"tailwindcss": "3.4.3", "tailwindcss": "3.4.3",
"vue": "3.4.24", "vue": "3.4.24",

10
io.sc.platform.core/src/main/java/io/sc/platform/core/Environment.java

@ -19,11 +19,13 @@ public class Environment {
public static final String KEY_APPLICATION_NAME ="application.name"; public static final String KEY_APPLICATION_NAME ="application.name";
public static final String KEY_IS_RUNNING_IN_DEVELOPMENT ="application.is-running-in-development"; public static final String KEY_IS_RUNNING_IN_DEVELOPMENT ="application.is-running-in-development";
public static final String KEY_IS_RUNNING_IN_WEB_CONTAINER ="application.is-running-in-web-container"; public static final String KEY_IS_RUNNING_IN_WEB_CONTAINER ="application.is-running-in-web-container";
public static final String KEY_IS_MULTI_CORPORATION_MODE ="application.is-multi-corporation-mode";
private ApplicationContext applicationContext; private ApplicationContext applicationContext;
private String applicationName; private String applicationName;
private boolean isRunningInDevelopment; private boolean isRunningInDevelopment;
private boolean isRunningInWebContainer; private boolean isRunningInWebContainer;
private boolean isMultiCorportationMode;
private RuntimeStatus runtimeStatus; private RuntimeStatus runtimeStatus;
private static class EnvironmentHolder{ private static class EnvironmentHolder{
@ -83,6 +85,14 @@ public class Environment {
isRunningInWebContainer = runningInWebContainer; isRunningInWebContainer = runningInWebContainer;
} }
public boolean isMultiCorportationMode() {
return isMultiCorportationMode;
}
public void setMultiCorportationMode(boolean multiCorportationMode) {
isMultiCorportationMode = multiCorportationMode;
}
public RuntimeStatus getRuntimeStatus() { public RuntimeStatus getRuntimeStatus() {
return runtimeStatus; return runtimeStatus;
} }

2
io.sc.platform.core/src/main/java/io/sc/platform/core/autoconfigure/AuditLogPersistenterManagerAutoConfiguration.java

@ -38,7 +38,7 @@ public class AuditLogPersistenterManagerAutoConfiguration {
public void environmentChangeEventHandle(EnvironmentChangeEvent event){ public void environmentChangeEventHandle(EnvironmentChangeEvent event){
Set<String> changedKeys =event.getKeys(); Set<String> changedKeys =event.getKeys();
for(String key : changedKeys) { for(String key : changedKeys) {
// 如果是数据源配置信息发生变化 // 如果是审计日志持久化配置信息发生变化
if (key.startsWith("application.audit-log-mode")) { if (key.startsWith("application.audit-log-mode")) {
manager.setAuditLogPersister(properties.getAuditLogMode()); manager.setAuditLogPersister(properties.getAuditLogMode());
break; break;

39
io.sc.platform.core/src/main/java/io/sc/platform/core/autoconfigure/MultiCorporationModeAutoConfiguration.java

@ -0,0 +1,39 @@
package io.sc.platform.core.autoconfigure;
import io.sc.platform.core.Environment;
import io.sc.platform.core.service.support.MultiCorporationModeProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.EventListener;
import java.util.Set;
/**
* 多法人模式自动配置类
*/
@Configuration
@EnableConfigurationProperties({MultiCorporationModeProperties.class})
public class MultiCorporationModeAutoConfiguration {
/**
* 多法人模式配置属性类
* 支持的持久化器包括:
* application.is-multi-corporation-mode = true
* application.is-multi-corporation-mode = false
*/
@Autowired
private MultiCorporationModeProperties properties;
@EventListener
public void environmentChangeEventHandle(EnvironmentChangeEvent event){
Set<String> changedKeys =event.getKeys();
for(String key : changedKeys) {
// 如果是多法人模式配置信息发生变化
if (key.startsWith(Environment.KEY_IS_MULTI_CORPORATION_MODE)) {
Environment.getInstance().setMultiCorportationMode(properties.isMultiCorporationMode());
break;
}
}
}
}

22
io.sc.platform.core/src/main/java/io/sc/platform/core/service/support/MultiCorporationModeProperties.java

@ -0,0 +1,22 @@
package io.sc.platform.core.service.support;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 多法人模式配置属性类
* 支持的持久化器包括:
* application.is-multi-corporation-mode = true
* application.is-multi-corporation-mode = false
*/
@ConfigurationProperties("application")
public class MultiCorporationModeProperties {
private boolean isMultiCorporationMode;
public boolean isMultiCorporationMode() {
return isMultiCorporationMode;
}
public void setMultiCorporationMode(boolean multiCorporationMode) {
isMultiCorporationMode = multiCorporationMode;
}
}

22
io.sc.platform.core/src/main/java/io/sc/platform/core/springboot/AfterEnvironmentProcessor.java

@ -0,0 +1,22 @@
package io.sc.platform.core.springboot;
import io.sc.platform.core.Environment;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;
/**
* Spring Boot 环境准备好后
*/
public class AfterEnvironmentProcessor implements EnvironmentPostProcessor, Ordered {
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE + 100;
}
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
Environment.getInstance().setMultiCorportationMode(environment.getProperty(Environment.KEY_IS_MULTI_CORPORATION_MODE,Boolean.class,false));
}
}

3
io.sc.platform.core/src/main/resources/META-INF/platform/plugins/application-properties.json

@ -17,7 +17,8 @@
"application.audit-log-mode = none", "application.audit-log-mode = none",
"#application.audit-log-mode = none", "#application.audit-log-mode = none",
"#application.audit-log-mode = log", "#application.audit-log-mode = log",
"#application.audit-log-mode = database" "#application.audit-log-mode = database",
"application.is-multi-corporation-mode = false"
] ]
}, },
{ {

4
io.sc.platform.core/src/main/resources/META-INF/spring.factories

@ -3,6 +3,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
io.sc.platform.core.autoconfigure.AspectJAutoConfiguration,\ io.sc.platform.core.autoconfigure.AspectJAutoConfiguration,\
io.sc.platform.core.autoconfigure.AsyncExecutorAutoConfiguration,\ io.sc.platform.core.autoconfigure.AsyncExecutorAutoConfiguration,\
io.sc.platform.core.autoconfigure.AuditLogPersistenterManagerAutoConfiguration,\ io.sc.platform.core.autoconfigure.AuditLogPersistenterManagerAutoConfiguration,\
io.sc.platform.core.autoconfigure.MultiCorporationModeAutoConfiguration,\
io.sc.platform.core.autoconfigure.ComponentScanAutoConfiguration,\ io.sc.platform.core.autoconfigure.ComponentScanAutoConfiguration,\
io.sc.platform.core.autoconfigure.Jackson2ObjectMapperAutoConfiguration,\ io.sc.platform.core.autoconfigure.Jackson2ObjectMapperAutoConfiguration,\
io.sc.platform.core.autoconfigure.MessageSourceAutoConfiguration,\ io.sc.platform.core.autoconfigure.MessageSourceAutoConfiguration,\
@ -12,7 +13,8 @@ io.sc.platform.core.autoconfigure.StringEncryptorAutoConfiguration
# Environment Post Processors # Environment Post Processors
org.springframework.boot.env.EnvironmentPostProcessor=\ org.springframework.boot.env.EnvironmentPostProcessor=\
io.sc.platform.core.springboot.BeforeEnvironmentProcessor io.sc.platform.core.springboot.BeforeEnvironmentProcessor,\
io.sc.platform.core.springboot.AfterEnvironmentProcessor
# platform plugin spi service # platform plugin spi service
io.sc.platform.core.spi.PluginSpiService=\ io.sc.platform.core.spi.PluginSpiService=\

2
io.sc.platform.developer.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.15.3", "quasar": "2.15.3",
"tailwindcss": "3.4.3", "tailwindcss": "3.4.3",
"vue": "3.4.24", "vue": "3.4.24",

2
io.sc.platform.lcdp.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.15.3", "quasar": "2.15.3",
"tailwindcss": "3.4.3", "tailwindcss": "3.4.3",
"vue": "3.4.24", "vue": "3.4.24",

9
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/api/Setting.java

@ -4,6 +4,7 @@ public class Setting {
private String routerHistoryMode="hash"; // vue-router 历史模式(hash,web) private String routerHistoryMode="hash"; // vue-router 历史模式(hash,web)
private String homePage ="/home"; // 首页路由 path private String homePage ="/home"; // 首页路由 path
private I18n i18n =new I18n(); // 多语言国际化 private I18n i18n =new I18n(); // 多语言国际化
private boolean isMultiCorporationMode =false; // 是否是多法人模式
public String getRouterHistoryMode() { public String getRouterHistoryMode() {
return routerHistoryMode; return routerHistoryMode;
@ -28,4 +29,12 @@ public class Setting {
public void setI18n(I18n i18n) { public void setI18n(I18n i18n) {
this.i18n = i18n; this.i18n = i18n;
} }
public boolean getIsMultiCorporationMode() {
return isMultiCorporationMode;
}
public void setIsMultiCorporationMode(boolean multiCorporationMode) {
isMultiCorporationMode = multiCorporationMode;
}
} }

17
io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/configure/service/impl/ConfigureServiceImpl.java

@ -1,5 +1,6 @@
package io.sc.platform.lcdp.configure.service.impl; package io.sc.platform.lcdp.configure.service.impl;
import io.sc.platform.core.Environment;
import io.sc.platform.lcdp.configure.api.Setting; import io.sc.platform.lcdp.configure.api.Setting;
import io.sc.platform.lcdp.configure.api.Theme; import io.sc.platform.lcdp.configure.api.Theme;
import io.sc.platform.lcdp.configure.jpa.entity.ConfigureEntity; import io.sc.platform.lcdp.configure.jpa.entity.ConfigureEntity;
@ -23,24 +24,19 @@ public class ConfigureServiceImpl extends DaoServiceImpl<ConfigureEntity, String
@Override @Override
public Configure getActiveConfigure() { public Configure getActiveConfigure() {
ConfigureEntity entity =repository.findActiveConfigure(); ConfigureEntity entity =repository.findActiveConfigure();
if(entity!=null) {
Configure configure = new Configure(); Configure configure = new Configure();
configure.setSetting(entity.getSetting());
configure.setTheme(entity.getTheme());
String homePage =systemParameterService.getParameter("parameter.system.homePage"); String homePage =systemParameterService.getParameter("parameter.system.homePage");
if(StringUtils.hasText(homePage)) { if(StringUtils.hasText(homePage)) {
configure.getSetting().setHomePage(homePage); configure.getSetting().setHomePage(homePage);
} }
return configure; if(entity!=null) {
}else{ configure.setSetting(entity.getSetting());
Configure configure = new Configure(); configure.setTheme(entity.getTheme());
String homePage =systemParameterService.getParameter("parameter.system.homePage");
if(StringUtils.hasText(homePage)) {
configure.getSetting().setHomePage(homePage);
} }
configure.getSetting().setIsMultiCorporationMode(Environment.getInstance().isMultiCorportationMode());
return configure; return configure;
} }
}
@Override @Override
@Transactional @Transactional
@ -58,6 +54,7 @@ public class ConfigureServiceImpl extends DaoServiceImpl<ConfigureEntity, String
if(entity==null){ throw exceptionProvider.getCreateNullObjectException(); } if(entity==null){ throw exceptionProvider.getCreateNullObjectException(); }
entity.setTheme(new Theme()); entity.setTheme(new Theme());
entity.setSetting(new Setting()); entity.setSetting(new Setting());
entity.getSetting().setIsMultiCorporationMode(Environment.getInstance().isMultiCorportationMode());
return super.add(entity); return super.add(entity);
} }
} }

2
io.sc.platform.mvc.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.15.3", "quasar": "2.15.3",
"tailwindcss": "3.4.3", "tailwindcss": "3.4.3",
"vue": "3.4.24", "vue": "3.4.24",

2
io.sc.platform.security.frontend/package.json

@ -93,7 +93,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.14.5", "quasar": "2.14.5",
"tailwindcss": "3.4.0", "tailwindcss": "3.4.0",
"vue": "3.4.3", "vue": "3.4.3",

2
io.sc.platform.system.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.15.3", "quasar": "2.15.3",
"tailwindcss": "3.4.3", "tailwindcss": "3.4.3",
"vue": "3.4.24", "vue": "3.4.24",

3
io.sc.platform.system.frontend/src/views/announcement/AnnouncementManager.vue

@ -19,8 +19,7 @@
]" ]"
:editor="{ :editor="{
dialog: { dialog: {
width: '600px', width: '800px',
height: '380px',
}, },
form: { form: {
colsNum: 1, colsNum: 1,

1
io.sc.platform.system.frontend/src/views/department/Department.vue

@ -43,7 +43,6 @@
:editor="{ :editor="{
dialog: { dialog: {
width: '600px', width: '600px',
height: '300px',
}, },
form: { form: {
colsNum: 1, colsNum: 1,

1
io.sc.platform.system.frontend/src/views/dictionary/Dictionary.vue

@ -27,7 +27,6 @@
:editor="{ :editor="{
dialog: { dialog: {
width: '600px', width: '600px',
height: '300px',
}, },
form: { form: {
colsNum: 1, colsNum: 1,

1
io.sc.platform.system.frontend/src/views/i18n/I18n.vue

@ -62,7 +62,6 @@
:editor="{ :editor="{
dialog: { dialog: {
width: '600px', width: '600px',
height: '300px',
}, },
form: { form: {
colsNum: 1, colsNum: 1,

2
io.sc.platform.system.frontend/src/views/monitor/Log.vue

@ -8,7 +8,7 @@
<q-tab-panels v-model="selectedTabRef" animated swipeable keep-alive style="height: calc(100% - 48px)"> <q-tab-panels v-model="selectedTabRef" animated swipeable keep-alive style="height: calc(100% - 48px)">
<q-tab-panel name="view" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px"> <q-tab-panel name="view" class="px-0 pb-0" style="height: 100%; padding-left: 0px; padding-right: 0px; padding-bottom: 0px">
<div class="row q-pt-sm" style="height: 50px"> <div class="row q-pt-sm items-center" style="height: 50px">
<div class="col-2"> <div class="col-2">
<q-input v-model="logRows" :label="$t('system.monitor.log.viewer.logRows')" outlined dense /> <q-input v-model="logRows" :label="$t('system.monitor.log.viewer.logRows')" outlined dense />
</div> </div>

3
io.sc.platform.system.frontend/src/views/notification/NotificationManager.vue

@ -28,8 +28,7 @@
]" ]"
:editor="{ :editor="{
dialog: { dialog: {
width: '600px', width: '800px',
height: '380px',
}, },
form: { form: {
colsNum: 1, colsNum: 1,

1
io.sc.platform.system.frontend/src/views/org/Org.vue

@ -42,7 +42,6 @@
:editor="{ :editor="{
dialog: { dialog: {
width: '600px', width: '600px',
height: '300px',
}, },
form: { form: {
colsNum: 1, colsNum: 1,

1
io.sc.platform.system.frontend/src/views/role/Role.vue

@ -25,6 +25,7 @@
{ width: 150, name: 'code', label: $t('code') }, { width: 150, name: 'code', label: $t('code') },
{ width: '100%', name: 'name', label: $t('name') }, { width: '100%', name: 'name', label: $t('name') },
{ width: 80, name: 'enable', label: $t('status'), format: Formater.enableTag() }, { width: 80, name: 'enable', label: $t('status'), format: Formater.enableTag() },
{ width: 100, name: 'corporation', label: $t('corporation'), hidden: !Environment.getConfigure().setting.isMultiCorporationMode },
{ width: 120, name: 'lastModifier', label: $t('lastModifier') }, { width: 120, name: 'lastModifier', label: $t('lastModifier') },
{ width: 120, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() }, { width: 120, name: 'lastModifyDate', label: $t('lastModifyDate'), format: Formater.dateOnly() },
]" ]"

1
io.sc.platform.system.frontend/src/views/user/User.vue

@ -104,7 +104,6 @@
:editor="{ :editor="{
dialog: { dialog: {
width: '800px', width: '800px',
height: '420px',
}, },
form: { form: {
colsNum: 4, colsNum: 4,

2
io.sc.standard.frontend/package.json

@ -92,7 +92,7 @@
"luckyexcel": "1.0.1", "luckyexcel": "1.0.1",
"mockjs": "1.1.0", "mockjs": "1.1.0",
"pinia": "2.1.7", "pinia": "2.1.7",
"platform-core": "8.1.227", "platform-core": "8.1.228",
"quasar": "2.15.3", "quasar": "2.15.3",
"tailwindcss": "3.4.3", "tailwindcss": "3.4.3",
"vue": "3.4.24", "vue": "3.4.24",

Loading…
Cancel
Save