Merge pull request '完善属性编辑器基本功能' (#1) from master into stage

Reviewed-on: http://159.75.202.135:33300/liuhuajie/lowcode-frontend/pulls/1
This commit is contained in:
2024-11-10 01:44:05 +08:00
116 changed files with 1105 additions and 744 deletions

4
.gitignore vendored
View File

@ -23,3 +23,7 @@ dist-ssr
*.njsproj
*.sln
*.sw?
package-lock.json
src/utils/*.cjs
src/**/*.js
/stats.html

View File

@ -26,12 +26,13 @@
"@types/node": "^22.9.0",
"@vitejs/plugin-vue": "^5.0.5",
"less": "^4.2.0",
"rollup-plugin-visualizer": "^5.12.0",
"sass": "^1.77.8",
"typescript": "^5.5.4",
"unplugin-auto-import": "^0.18.2",
"unplugin-vue-components": "^0.27.3",
"vfonts": "^0.0.3",
"vite": "^5.3.4",
"vite": "5.4.6",
"vue-loader": "^17.4.2",
"vue-template-compiler": "^2.7.16",
"vue-tsc": "^2.0.24"

View File

@ -13,7 +13,7 @@
<VueDraggable
v-model="store.components"
:animation="150"
:group="{ name: 'people', pull: 'clone', put: false }"
:group="{ name: 'designer', pull: 'clone', put: false }"
:sort="false"
:clone="clone"
@start="onStart"
@ -27,34 +27,49 @@
<div ref="targetContent" class="center">
<VueDraggable
v-model="store.previewScheme"
:group="{name: 'designer', pull: 'clone', put: false}"
:sort="true"
:animation="150"
group="designer"
ghost-class="ghost"
class="canvas"
@start="onPreviewStart"
@update="onPreviewUpdate"
@stop="onPreviewStop"
>
<NestedFunction v-model="store.previewScheme"></NestedFunction>
<!-- {{store.previewScheme}}-->
<DynamicComponent v-for="component in store.previewScheme" :key="component.id" :componentData="component">
{{ component.id }}
</DynamicComponent>
</VueDraggable>
</div>
<div class="right">
<PropertyEditor :scheme="store.nowComponentsData"></PropertyEditor>
</div>
<!-- <div class="right">-->
<!-- <component :is="componentsList[store?.nowComponent?.set]"></component>-->
<!-- </div>-->
</div>
</div>
</template>
<script setup lang="ts">
import {VueDraggable} from "vue-draggable-plus";
import {onMounted, watch} from 'vue';
import {RadioGroup,Radio} from '@arco-design/web-vue'
import {onMounted, ref, watch} from 'vue';
import {uuid} from 'lsp-uuid';
import {componentScheme} from "@/schemes/scheme";
import {useSchemeStore} from '@/stores/useSchemeStore';
import {IComponent} from "@/type/IComponent";
import NestedFunction from "@/components/NestedFunction.vue";
import DynamicComponent from "@/components/DynamicComponent.vue";
import PropertyEditor from "@/components/PropertyEditor.vue";
import {DraggableEvent, VueDraggable} from "vue-draggable-plus";
let list0 = ref([])
let list = ref([])
let componentsList = [];
const store = useSchemeStore();
watch(store, (n, e) => {
console.log("数据", n);
watch(store, (n) => {
console.log("store发生了变化", n);
});
const baseScheme =
@ -84,7 +99,7 @@ store.$onAction(
onError, // action 抛出或拒绝的钩子
}) => {
after((result) => {
console.log(result);
console.log(`store action-${name}回调后:` + result);
})
// 如果 action 抛出或返回一个拒绝的 promise这将触发
onError((error) => {
@ -103,11 +118,23 @@ const initScheme = () => {
onMounted(() => {
list0.value.push(
{
"id": 123,
"name": "www"
},
{
"id": 125,
"name": "rrr"
}
);
list.value = []
initScheme();
// @ts-ignore
});
const clone = function (element: IComponent) {
function clone(element: Record<'name' | 'id' | 'type' | 'props' | 'class' | 'text' | 'style' | 'slots'|'visible'|'disable'|'children', IComponent>) {
console.log("clone", element)
return {
id: `${element.type}-${uuid()}`,
name: element.name,
@ -116,25 +143,38 @@ const clone = function (element: IComponent) {
class: element.class,
designer: '',
text: element.text,
children: [],
children: element.children||[],
style: element.style,
visible: "",
visible: element.visible,
slots: element.slots,
disable: "",
disable: element.visible,
events: {},
loop: {},
};
}
const onEnd = (obj: any) => {
const onEnd = (event: DraggableEvent) => {
console.log("onEnd", event)
store.nowComponentsData=event.clonedData
// const {oldDraggableIndex} = obj;
// store.previewData(store.component[oldDraggableIndex]);
// store.nowComponentsData(store.component[oldDraggableIndex]);
};
const onStart = function () {
console.log("start")
const onStart = function (event) {
console.log("onStart", event)
}
const onPreviewStart = function (event) {
console.log("onPreviewStart", event)
}
const onPreviewUpdate = function (event) {
console.log("onPreviewUpdate", event)
}
const onPreviewStop = function (event) {
console.log(event)
}
const view = () => {
localStorage.setItem("lowcode", JSON.stringify(store.previewScheme));
@ -183,7 +223,7 @@ const view = () => {
}
.tem_btn {
padding: 0px 10px;
padding: 0 10px;
height: 30px;
line-height: 30px;
text-align: center;
@ -208,6 +248,7 @@ const view = () => {
background-color: #fff;
width: 100%;
height: 100%;
overflow-y: auto; /* 确保当内容超出时,出现垂直滚动条 */
}
.ghost {

View File

@ -1,9 +1,9 @@
<template>
<div>
<div style="overflow-y: scroll">
<div style="width: 100%;">
<slot name="header"></slot>
</div>
<div style="width: 100%;min-height: 480px;background-color: #f7f8fa;">
<div style="width: 100%;height: 100%;background-color: #f7f8fa;">
<slot>
MAIN
</slot>

View File

@ -1,6 +1,6 @@
<template>
<component @click.stop="handleClick" :id="componentId" :is="componentType" v-bind="componentProps"
:class="componentClass" :style="componentStyle">
<component v-if="componentVisible" @click.stop="handleClick" :id="componentId" :is="componentType" v-bind="componentProps"
:class="componentClass" :style="componentStyle">
{{ componentText }}
<template v-for="child in componentChildren" :key="child.id">
<DynamicComponent :component-data="child" />
@ -10,39 +10,63 @@
</template>
</component>
</template>
<script setup lang="ts">
import { defineProps, computed, onMounted } from 'vue';
import { componentMapping } from './componentMapping';
import { useSchemeStore } from '../stores/useSchemeStore'
const store = useSchemeStore()
<script setup lang="ts">
import { defineProps, ref, computed, onMounted, watch, markRaw } from 'vue';
import { componentMapping } from './componentMapping';
import { useSchemeStore } from '../stores/useSchemeStore';
const store = useSchemeStore();
const props = defineProps({
componentData: Object
});
onMounted(() => {
// console.log(props.componentData)
})
console.log(props.componentData);
});
const componentId = computed(() => props.componentData?.id || '');
const componentType = computed(() => componentMapping[props.componentData?.type] || 'div');
const componentProps = computed(() => props.componentData?.props || {});
const componentChildren = computed(() => props.componentData?.children || []);
const componentText = computed(() => props.componentData?.text || '');
const componentClass = computed(() => props.componentData?.class || []);
const componentStyle = computed(() => props.componentData?.style || []);
const componentSlots = computed(() => props.componentData?.slots || []);
const componentId = ref(props.componentData?.id || '');
const componentType = ref(markRaw(componentMapping[props.componentData?.type]) || 'div'); // 使用 markRaw
const componentProps = ref(props.componentData?.props || {});
const componentDisable = ref(props.componentData?.disable || false);
const componentVisible = ref(props.componentData?.visible || true);
const componentChildren = ref(props.componentData?.children || []);
const componentText = ref(props.componentData?.text || '');
const componentClass = ref(props.componentData?.class || []);
const componentStyle = ref(props.componentData?.style || []);
const componentSlots = ref(props.componentData?.slots || {});
// @ts-ignore
const updateScheme = () => {
}
// 确保 componentProps 包含 disabled 属性
watch(componentDisable, (newDisable) => {
componentProps.value['disabled'] = newDisable;
});
// 获取当前组件的最新数据
const getCurrentSchemeObj = () => {
return store.getSchemeObj(componentId.value)
}
return store.getSchemeObj(componentId.value);
};
// 监听 previewScheme 的变化
watch(() => store.previewScheme, (newPreviewScheme) => {
// 重新获取当前组件的最新数据
const currentComponent = getCurrentSchemeObj();
console.log("currentComponent", JSON.stringify(currentComponent));
if (currentComponent) {
// 更新组件数据
componentProps.value = currentComponent.props ;
componentDisable.value = currentComponent.disable ;
componentVisible.value = currentComponent?.visible;
componentChildren.value = currentComponent.children ;
componentText.value = currentComponent.text;
componentClass.value = currentComponent.class ;
componentStyle.value = currentComponent.style ;
componentSlots.value = currentComponent.slots ;
}
console.log("store.previewScheme has changed",componentVisible.value)
}, { deep: true });
const handleClick = () => {
console.log(`Div with id ${JSON.stringify(getCurrentSchemeObj())} was clicked.`);
console.log(`Component with id ${JSON.stringify(getCurrentSchemeObj())} was clicked.`);
// 你可以在这里执行更多的逻辑,例如发出一个事件或调用一个方法
};
</script>

View File

@ -3,7 +3,7 @@
<!-- 属性选择器 -->
<div style="display: flex;justify-content: center;padding-top: 8px;width: 100%">
<a-radio-group size="large" type="button" v-model="selectedOption"
style="width: 100%;justify-content: center;text-align: center">
style="width: 100%;justify-content: center;text-align: center">
<a-radio style="width: 100%;" value="property" default-checked>属性</a-radio>
<a-radio style="width: 100%;" value="style">样式</a-radio>
<a-radio style="width: 100%;" value="interaction">交互</a-radio>
@ -22,7 +22,11 @@
</div>
<div style="display: flex;justify-content: space-between;vertical-align: middle;">
<span>是否可见</span>
<a-switch />
<a-switch v-model="scheme.visible" />
</div>
<div style="display: flex;justify-content: space-between;vertical-align: middle;">
<span>是否禁用</span>
<a-switch v-model="scheme.disable" />
</div>
<a-collapse :expand-icon-position="`right`" :default-active-key="['1', 2]">
<a-collapse-item header="基本配置" key="1">
@ -56,20 +60,31 @@
</template>
<script setup lang="ts">
import { defineProps, computed, ref, onMounted } from 'vue';
import { IPageComponent } from '../type/IPageComponent';
import { watch, defineProps, computed, ref, onMounted } from 'vue';
import { IPageComponent } from '@/type/IPageComponent';
import { useSchemeStore } from '../stores/useSchemeStore'
import {IComponent} from "@/type/IComponent.ts";
const props = defineProps<{
scheme: IPageComponent
}>();
const store = useSchemeStore()
const selectedOption = ref('property')
const scheme = computed(() => props.scheme || '');
const selectedOption = ref('property');
const scheme = computed<IPageComponent>(() => props.scheme || {} as IPageComponent);
// 使用 deep 选项来深度监听对象的变化
watch(scheme, (value, oldValue) => {
console.log("scheme Changed", value);
store.updateScheme(value.id,value as IComponent);
}, { deep: true });
onMounted(() => {
})
// 初始化时的逻辑
});
</script>
<style scoped>

View File

@ -1,6 +1,5 @@
// componentMapping.ts
import TestComponent from './TestComponent.vue';
import AdaptivePage from './AdaptivePage.vue';
import AdaptivePage from '@/components/AdaptivePage.vue';
import Icon from './Icon.tsx';
import {
@ -31,8 +30,7 @@ import {
} from '@arco-design/web-vue';
export const componentMapping: { [key: string]: any } = {
TestComponent, AdaptivePage,
Affix, Alert, Anchor, AnchorLink,
AdaptivePage, Affix, Alert, Anchor, AnchorLink,
AutoComplete, Avatar, AvatarGroup, BackTop,
Badge, Breadcrumb, BreadcrumbItem, Button,
ButtonGroup, Card, CardGrid, CardMeta,

View File

@ -1,19 +1,21 @@
{
"type": "AdaptivePage",
"name":"AdaptivePage",
"id":"AdaptivePage",
"version": "2.0",
"props": {},
"class":"",
"style":"",
"variables": {},
"dataSources":{},
"functions" : {},
"orchestrations" : {},
"events":{},
"slots":{},
"header":{},
"footer":{},
"children":[],
"meta":{}
"type": "AdaptivePage",
"name": "AdaptivePage",
"id": "AdaptivePage",
"version": "2.0",
"props": {},
"class": "",
"style": "",
"variables": {},
"dataSources": {},
"functions": {},
"orchestrations": {},
"events": {},
"slots": {},
"header": {},
"footer": {},
"children": [],
"meta": {},
"visible": true,
"disable": false
}

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -5,14 +5,14 @@
"designer": {},
"text": "button",
"props": {
"type":"primary",
"status":"waring"
"type": "primary",
"status": "waring"
},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -9,9 +9,9 @@
},
"style": "width:360px",
"class": "arco-card arco-card-size-medium arco-card-bordered",
"visible": "",
"visible": true,
"slots": {
"extra":{
"extra": {
"id": "9f8289a12910000",
"name": "avatar",
"type": "Avatar",
@ -28,7 +28,7 @@
"loop": {}
}
},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -5,16 +5,16 @@
"designer": {},
"text": "分割",
"props": {
"direction":"horizontal",
"orientation":"center",
"type":"dotted",
"size":2.5
"direction": "horizontal",
"orientation": "center",
"type": "dotted",
"size": 2.5
},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -5,13 +5,13 @@
"designer": {},
"text": "grid",
"props": {
"cols":24
"cols": 24
},
"style": "display: block;",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -4,14 +4,13 @@
"id": "icon",
"designer": {},
"text": "",
"props": {
},
"props": {},
"style": "{fontSize:'32px'}",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []
}
}

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -3,15 +3,19 @@
"name": "link",
"id": "link",
"designer": {},
"text": "Link",
"text": "链接",
"props": {
"status":""
"status": "normal",
"href": "https://www.baidu.com",
"loading": false,
"hoverable": "",
"icon": false
},
"style": "",
"class": "",
"visible": "",
"slots": {},
"disable": "",
"disable": false,
"visible": true,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -4,13 +4,52 @@
"id": "radiogroup",
"designer": {},
"text": "",
"props": {},
"props": {
"type": "button"
},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []
"children": [
{
"type": "Radio",
"name": "radio",
"id": "radio",
"designer": {},
"text": "广州",
"props": {
"value": "guangzhou"
},
"style": "",
"class": "",
"visible": "",
"slots": {},
"disable": "",
"events": {},
"loop": {},
"children": []
},
{
"type": "Radio",
"name": "radio",
"id": "radio",
"designer": {},
"text": "深圳",
"props": {
"value": "shenzhen"
},
"style": "",
"class": "",
"visible": "",
"slots": {},
"disable": "",
"events": {},
"loop": {},
"children": []
}
]
}

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

View File

@ -7,9 +7,9 @@
"props": {},
"style": "",
"class": "",
"visible": "",
"visible": true,
"slots": {},
"disable": "",
"disable": false,
"events": {},
"loop": {},
"children": []

Some files were not shown because too many files have changed in this diff Show More