Compare commits

...

19 Commits

Author SHA1 Message Date
36220bbb02 Merge pull request '完善属性编辑器基本功能' (#1) from master into stage
Reviewed-on: http://159.75.202.135:33300/liuhuajie/lowcode-frontend/pulls/1
2024-11-10 01:44:05 +08:00
lhj
1d57d21d50 refactor:增加组件在属性编辑器更新后同步状态到相应的组件中 2024-11-10 01:41:40 +08:00
lhj
991e003e20 add:增加导出组件和为组件全局增加属性功能 2024-11-10 01:40:35 +08:00
lhj
59b129d7b4 fix:为所有组件默认visible属性设置为true、disable属性设置为false 2024-11-10 01:38:13 +08:00
lhj
b0984589f4 fix:更新IComponent接口 2024-11-09 23:34:44 +08:00
lhj
91471748f3 fix:完善根据id查询并修改对应组件的数据 2024-11-09 23:18:21 +08:00
lhj
8600606845 fix:调整canva布局,当高度不够时出现滚动条 2024-11-09 18:20:25 +08:00
lhj
87d5c1fe30 fix 2024-11-09 01:18:32 +08:00
898f2c3b34 fix:移除elementui plus的组件 2024-11-08 17:56:28 +08:00
3be291b97b fix:更新依赖 2024-11-08 16:09:09 +08:00
d6561dba7e fix:适配属性编辑器 2024-11-08 11:42:51 +08:00
2f9e4d3132 fix:store数据绑定 2024-11-08 11:40:46 +08:00
lhj
1ec747acc7 fix 2024-11-07 01:04:16 +08:00
lhj
729a172c05 fix:打包优化 2024-11-06 23:41:43 +08:00
lhj
63f1c87cac fix:打包优化 2024-11-06 23:32:22 +08:00
lhj
c399e9dfe6 fix:更新.gitignore 2024-11-06 23:20:29 +08:00
lhj
fe4a3bdd4a fix:更新.gitignore 2024-11-06 23:20:00 +08:00
lhj
0d5773175b fix:更新.gitignore 2024-11-06 23:18:54 +08:00
lhj
f52e5b3c11 fix:更新.gitignore 2024-11-06 23:18:27 +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