diff --git a/packages/designer/src/components/components/form-designer/components/custom-class-editor/custom-class-editor.component.tsx b/packages/designer/src/components/components/form-designer/components/custom-class-editor/custom-class-editor.component.tsx
index 880b94736952c3775b9c83654f0ff44794503dad..d582aaba6951dedda3a219f009a622314584ce95 100644
--- a/packages/designer/src/components/components/form-designer/components/custom-class-editor/custom-class-editor.component.tsx
+++ b/packages/designer/src/components/components/form-designer/components/custom-class-editor/custom-class-editor.component.tsx
@@ -5,6 +5,7 @@ import { useViewModelNavigation } from "../../../view-model-designer/method-mana
import MonacoEditor from '../../../monaco-editor/monaco-editor.component';
import './custom-class-editor.scss';
import { CustomClassEditorProps, customClassEditorProps } from "./custom-class-editor.props";
+import { useLocation } from "../../../../composition/use-location";
export default defineComponent({
name: 'FCustomClassEditor',
@@ -27,10 +28,13 @@ export default defineComponent({
const monacoEditorRef = ref();
/** 自定义样式Dom */
formSchema.module.customClass ??= {};
+
const { customClass } = formSchema.module;
/** 当前编辑器内的样式代码 */
const currentClassCode = ref();
+ const { getUrlParam } = useLocation();
+
/** 视图模型页签的样式 */
const viewModelTabClass = computed(() => (viewModelTabId: string) => {
const showActiceClass = activeViewModel.value?.id === viewModelTabId;
@@ -100,8 +104,17 @@ export default defineComponent({
updateCurrentClassCode();
}
+ function customStyleFilePath() {
+ const {code:formCode, projectName} = formSchema.module;
+ const basePath = getUrlParam('id').split('/').slice(0,3).join('/');
+ return `/apps${basePath}/web/${projectName}/${formCode}/${formCode}.css`;
+ }
+
onBeforeMount(() => {
updateCurrentClassCode();
+ if (!formSchema.module.customStyleFile) {
+ formSchema.module.customStyleFile = customStyleFilePath();
+ }
});
context.expose({
@@ -136,15 +149,19 @@ export default defineComponent({
return (
-
+
{renderViewModelNavgation()}
-
+
+
+ 部署路径:
+
+
);
};
diff --git a/packages/designer/src/components/components/form-designer/form-designer.component.tsx b/packages/designer/src/components/components/form-designer/form-designer.component.tsx
index 96f444f8839e37fe66a5bd09d654415122b92267..f6a4178787ecd09f924acfa32eff7ef36c6fe0a7 100644
--- a/packages/designer/src/components/components/form-designer/form-designer.component.tsx
+++ b/packages/designer/src/components/components/form-designer/form-designer.component.tsx
@@ -128,7 +128,7 @@ export default defineComponent({
const customClassEditorClass = computed(() => {
return {
- 'pl-2 pr-2 d-flex': true,
+ 'pl-2 pr-2 d-flex ml-2': true,
'f-designer-view-tabs-item': true,
'active': activeDesignerView.value === 'customClassEditor'
};
@@ -265,8 +265,8 @@ export default defineComponent({
class={formDesignerViewClass.value}>可视化设计器
onChangeDesignerView('formDesignerCode')}
class={formDesignerCodeViewClass.value}>设计时代码
- {/* onChangeDesignerView('customClassEditor')}
- class={customClassEditorClass.value}>自定义样式
*/}
+ { onChangeDesignerView('customClassEditor')}
+ class={customClassEditorClass.value}>自定义样式
}
diff --git a/packages/designer/src/components/types/metadata.ts b/packages/designer/src/components/types/metadata.ts
index a73a962a3ee238a6f0fbee9ab15ff4b260283e03..e7048c8bb10e90c0101c3368286624f3a0e62750 100644
--- a/packages/designer/src/components/types/metadata.ts
+++ b/packages/designer/src/components/types/metadata.ts
@@ -84,6 +84,8 @@ export interface FormMetaDataModule {
// 自定义样式
customClass: any;
+ customStyleFile?: string;
+
// 外部模块声明
extraImports: Array<{ name: string; path: string }>;
diff --git a/packages/renderer/src/preview.vue b/packages/renderer/src/preview.vue
index 466b497f82e4369b7764607e2fc7ed57f4034864..b8842d66810cb7aa003d1c28af495d01e004a9fa 100644
--- a/packages/renderer/src/preview.vue
+++ b/packages/renderer/src/preview.vue
@@ -1,7 +1,7 @@
(props.repositoryToken);
@@ -63,8 +70,12 @@ export default defineComponent({
});
}
// 打开下拉面板 默认选中当前行
- if(selectionValues.value){
- treeViewRef.value.activeRowById(selectionValues.value[0]);
+ if(selectionValues.value && selectionValues.value.length) {
+ if (props.multiSelect) {
+ treeViewRef.value.selectItemByIds(selectionValues.value);
+ } else {
+ treeViewRef.value.activeRowById(selectionValues.value[0]);
+ }
}
});
@@ -82,6 +93,7 @@ export default defineComponent({
columnOption={{ fitColumns: true, fitMode: 'expand' }}
rowOption={rowOption}
rowNumber={{enable:false}}
+ selection={selectionOptions}
>
);
diff --git a/packages/ui-vue/components/combo-tree/src/schema/combo-tree.schema.json b/packages/ui-vue/components/combo-tree/src/schema/combo-tree.schema.json
index f2cf9285a54c16b2634896ad084947c799aaf768..bc1b4f86a676e82d922c81a2bb7794f67eb856a0 100644
--- a/packages/ui-vue/components/combo-tree/src/schema/combo-tree.schema.json
+++ b/packages/ui-vue/components/combo-tree/src/schema/combo-tree.schema.json
@@ -127,6 +127,16 @@
"description": "",
"type": "number",
"default": 160
+ },
+ "multiSelect": {
+ "description": "",
+ "type": "boolean",
+ "default": false
+ },
+ "idField": {
+ "description": "",
+ "type": "string",
+ "default": "id"
}
},
"required": [
diff --git a/packages/ui-vue/components/component/src/component.component.tsx b/packages/ui-vue/components/component/src/component.component.tsx
index 079d6a38cff4a4e50d9d3ed76722ab94908ac6cd..4f080d68e86faaa661b5ee36f91220955bdbc04e 100644
--- a/packages/ui-vue/components/component/src/component.component.tsx
+++ b/packages/ui-vue/components/component/src/component.component.tsx
@@ -1,4 +1,4 @@
-import { SetupContext, defineComponent, onBeforeMount, onMounted } from 'vue';
+import { SetupContext, defineComponent, onBeforeMount, onMounted, ref } from 'vue';
import { ComponentPropsType, componentProps } from './component.props';
export default defineComponent({
@@ -6,14 +6,18 @@ export default defineComponent({
props: componentProps,
emits: ['init', 'afterViewInit'],
setup(props: ComponentPropsType, context) {
+ const elementRef = ref();
onBeforeMount(() => {
context.emit('init', props.id);
});
onMounted(() => {
+ if (elementRef.value && props.code) {
+ elementRef.value.setAttribute('scope-'+ props.code.toLowerCase(), '');
+ }
context.emit('afterViewInit', props.id);
});
return () => {
- return {context.slots.default && context.slots.default()}
;
+ return {context.slots.default && context.slots.default()}
;
};
}
});
diff --git a/packages/ui-vue/components/component/src/component.props.ts b/packages/ui-vue/components/component/src/component.props.ts
index d681b0fcf664272e269ae89516ce1076abe8db78..d8db90857fa2a03a8e0bc589a8458ef83f6432cd 100644
--- a/packages/ui-vue/components/component/src/component.props.ts
+++ b/packages/ui-vue/components/component/src/component.props.ts
@@ -10,7 +10,8 @@ export const componentProps = {
customClass: { type: String, default: '' },
customStyle: { type: String, default: '' },
componentType: { type: String, default: '' },
- formColumns: { type: Number, default: 4 }
+ formColumns: { type: Number, default: 4 },
+ code: { type: String, default: '' }
} as Record;
export type ComponentPropsType = ExtractPropTypes;
diff --git a/packages/ui-vue/components/dynamic-view/src/dynamic-view.component.tsx b/packages/ui-vue/components/dynamic-view/src/dynamic-view.component.tsx
index e4f6f8848e0df660e9b293617b4cad26ff7d251c..4cfb17800e6caca67807e0d2cde5e3866aca23c2 100644
--- a/packages/ui-vue/components/dynamic-view/src/dynamic-view.component.tsx
+++ b/packages/ui-vue/components/dynamic-view/src/dynamic-view.component.tsx
@@ -127,6 +127,11 @@ const FDynamicView = defineComponent({
...resolveModels(viewSchema),
...resolveExtraProps(viewSchema)
};
+
+ if (componentKey === 'component') {
+ viewProps['code'] = schema.value?.module?.code;
+ }
+
const props = {
...viewProps,
key: viewSchema.id,
@@ -343,6 +348,7 @@ const FDynamicView = defineComponent({
if (!frameComponent) {
return null;
}
+
return frameComponent;
}
diff --git a/packages/ui-vue/components/lookup/src/property-config/lookup.property-config.ts b/packages/ui-vue/components/lookup/src/property-config/lookup.property-config.ts
index 474aa68545165f0a7464a7c8d036c64e1d77c1ac..eae13f01b26bfb5d739449724b8f468be3b5b789 100644
--- a/packages/ui-vue/components/lookup/src/property-config/lookup.property-config.ts
+++ b/packages/ui-vue/components/lookup/src/property-config/lookup.property-config.ts
@@ -389,13 +389,13 @@ export class LookupPropertyConfig extends InputBaseProperty {
formatter: (cell, data) => {
return `${data.raw['name']} [${data.raw['bindingPath']}]`;
},
- idField: 'id',
+ idField: 'bindingPath',
textField: 'bindingPath',
valueField: 'bindingPath',
repositoryToken: FieldSelectorRepositoryToken
},
toData: {
- idField: 'id',
+ idField: 'bindingPath',
textField: 'bindingPath',
valueField: 'bindingPath',
dataSource: this.designViewModelUtils.getAllFields2TreeByVMId(this.viewModelId),
diff --git a/packages/ui-vue/components/mapping-editor/src/mapping-editor.component.tsx b/packages/ui-vue/components/mapping-editor/src/mapping-editor.component.tsx
index fb7ec0f506517a9658aef832df2d6868756dd026..788f9c7e5580af88888509b661b125a8d4e3b3e0 100644
--- a/packages/ui-vue/components/mapping-editor/src/mapping-editor.component.tsx
+++ b/packages/ui-vue/components/mapping-editor/src/mapping-editor.component.tsx
@@ -58,6 +58,7 @@ export default defineComponent({
formatter: props.toData.formatter,
editorParams: props.toData.editorParams,
editable: false,
+ multiSelect: true,
customRowStatus: treeNodeStatus
}
}