多端适配
FcDesigner
支持将 PC 端设计的 ElementPlus / AntDesignVue 表单规则在移动端渲染为VantUI风格的表单,提供了一致的用户体验,并确保在不同设备上都能良好展示。
功能概述
通过多端适配功能,您可以确保在不同设备上的表单显示效果一致。无论是在 PC 端还是移动端,表单都能根据设备类型自动调整样式和布局。具体而言,移动端的表单将使用 Vant 风格组件,以优化在小屏幕上的展示效果和交互体验。
注意
当前移动端自适应功能仅支持部分基础表单组件和布局组件,尚未覆盖所有组件类型。
使用方式
1. 安装和加载组件
首先,确保在项目中加载移动端专用的 form-create.vant
组件。请根据项目实际情况调整组件的路径。
js
import formCreateMobile from "./fcDesignerPro/dist/render/vant/form-create.es";
import ElementPlus from 'element-plus'
import vant from 'vant';
import 'element-plus/dist/index.css';
import 'vant/lib/index.css';
// 挂载 form-create
app.use(formCreateMobile);
// 挂载 ElementPlus
app.use(ElementPlus)
// 挂载 Vant
app.use(vant)
2. 渲染移动端表单
在 Vue 组件中,使用 form-create-mobile 组件来渲染表单。该组件会自动根据设备类型渲染为适合的样式。
vue
<template>
<!-- ant-design-vue版本driver是"antd" -->
<form-create-mobile
driver="elm"
v-model="formData"
v-model:api="fapi"
:rule="rule"
:option="option"
@submit="onSubmit"
></form-create-mobile>
</template>
<script setup>
import { ref } from 'vue';
import formCreateMobile from "./fcDesignerPro/dist/render/vant/form-create.es";
const formData = ref({});
const fapi = ref({});
//加载json数据
const rule = ref(formCreateMobile.parseJson('/*json*/'));
const option = ref(formCreateMobile.parseJson('/*json*/'));
function onSubmit(data) {
console.log('Form submitted:', data);
}
</script>
组件适配
通过在不同端挂载功能相同但 UI 不同的组件。业务层使用统一的组件接口,底层根据运行环境自动选择对应的 UI 实现。
假设当前有一个基于 ElementUI 的自定义 UnifiedSelect
业务组件
ts
<template>
<!-- Element UI 版本 -->
<el-select
v-model="innerValue"
:placeholder="placeholder"
:disabled="disabled"
:clearable="clearable"
:multiple="multiple"
@change="handleChange"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
<script>
export default {
name: 'UnifiedSelect',
props: {
value: [String, Number, Array],
options: {
type: Array,
default: () => []
},
placeholder: String,
disabled: Boolean,
clearable: Boolean,
multiple: Boolean,
},
data() {
return {
innerValue: this.value,
showPicker: false,
selectedLabel: ''
}
},
watch: {
value(newVal) {
this.innerValue = newVal
}
},
methods: {
handleChange(value) {
this.$emit('input', value)
this.$emit('change', value)
},
}
}
</script>
(Vant UI 实现)
实现移动端适配需创建功能相同的同名组件,并在移动端渲染时挂载该组件。
ts
<template>
<!-- Vant UI 版本 -->
<van-field
v-model="selectedLabel"
readonly
:placeholder="placeholder"
:disabled="disabled"
@click="showPicker = true"
/>
<van-popup v-model="showPicker" round position="bottom">
<van-picker
:columns="pickerOptions"
@confirm="handleVantConfirm"
@cancel="showPicker = false"
/>
</van-popup>
</template>
<script>
export default {
name: 'UnifiedSelect',
props: {
value: [String, Number, Array],
options: {
type: Array,
default: () => []
},
placeholder: String,
disabled: Boolean,
clearable: Boolean,
multiple: Boolean,
},
data() {
return {
innerValue: this.value,
showPicker: false,
selectedLabel: ''
}
},
computed: {
pickerOptions() {
return this.options.map(item => ({
text: item.label,
value: item.value
}))
}
},
watch: {
value(newVal) {
this.innerValue = newVal
this.updateSelectedLabel()
},
options() {
this.updateSelectedLabel()
}
},
methods: {
handleChange(value) {
this.$emit('input', value)
this.$emit('change', value)
},
handleVantConfirm(value) {
this.innerValue = value.value
this.handleChange(value.value)
this.showPicker = false
},
updateSelectedLabel() {
const selected = this.options.find(item => item.value === this.innerValue)
this.selectedLabel = selected ? selected.label : ''
}
}
}
</script>
在移动端挂载该组件
在移动端使用 formCreateMobile.component 方法挂载自定义组件
ts
formCreateMobile.component('UnifiedSelect', UnifiedSelect);
通过 FcDesigner 的多端适配功能,您可以轻松实现跨平台的表单展示。移动端使用 Vant 组件优化展示效果,同时确保 PC 端和移动端都能获得一致且良好的用户体验。