Vue3 重构:REVIEW 表单构建
This commit is contained in:
parent
2abc7eca67
commit
7463eea243
@ -3,77 +3,99 @@
|
|||||||
<el-row>
|
<el-row>
|
||||||
<el-col>
|
<el-col>
|
||||||
<div class="mb-2 float-right">
|
<div class="mb-2 float-right">
|
||||||
<el-button size="small" @click="setJson"> 导入JSON</el-button>
|
<el-button size="small" type="primary" @click="showJson">生成 JSON</el-button>
|
||||||
<el-button size="small" @click="setOption"> 导入Options</el-button>
|
<el-button size="small" type="success" @click="showOption">生成O ptions</el-button>
|
||||||
<el-button size="small" type="primary" @click="showJson">生成JSON</el-button>
|
|
||||||
<el-button size="small" type="success" @click="showOption">生成Options</el-button>
|
|
||||||
<el-button size="small" type="danger" @click="showTemplate">生成组件</el-button>
|
<el-button size="small" type="danger" @click="showTemplate">生成组件</el-button>
|
||||||
<!-- <el-button size="small" @click="changeLocale">中英切换</el-button> -->
|
|
||||||
</div>
|
</div>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<!-- 表单设计器 -->
|
||||||
<el-col>
|
<el-col>
|
||||||
<fc-designer ref="designer" height="780px" />
|
<fc-designer ref="designer" height="780px" />
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<Dialog :title="dialogTitle" v-model="dialogVisible" maxHeight="600">
|
</ContentWrap>
|
||||||
|
|
||||||
|
<!-- 弹窗:表单预览 -->
|
||||||
|
<Dialog :title="dialogTitle" v-model="dialogVisible" max-height="600">
|
||||||
<div ref="editor" v-if="dialogVisible">
|
<div ref="editor" v-if="dialogVisible">
|
||||||
<XTextButton style="float: right" :title="t('common.copy')" @click="copy(formValue)" />
|
<el-button style="float: right" @click="copy(formData)">
|
||||||
|
{{ t('common.copy') }}
|
||||||
|
</el-button>
|
||||||
<el-scrollbar height="580">
|
<el-scrollbar height="580">
|
||||||
<div v-highlight>
|
<div v-highlight>
|
||||||
<code class="hljs">
|
<code class="hljs">
|
||||||
{{ formValue }}
|
{{ formData }}
|
||||||
</code>
|
</code>
|
||||||
</div>
|
</div>
|
||||||
</el-scrollbar>
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
<span style="color: red" v-if="err">输入内容格式有误!</span>
|
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</ContentWrap>
|
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts" name="Build">
|
<script setup lang="ts" name="Build">
|
||||||
import formCreate from '@form-create/element-ui'
|
import formCreate from '@form-create/element-ui'
|
||||||
import { useClipboard } from '@vueuse/core'
|
import { useClipboard } from '@vueuse/core'
|
||||||
|
const { t } = useI18n() // 国际化
|
||||||
|
const message = useMessage() // 消息
|
||||||
|
|
||||||
const { t } = useI18n()
|
const designer = ref() // 表单设计器
|
||||||
const message = useMessage()
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
||||||
|
const dialogTitle = ref('') // 弹窗的标题
|
||||||
const designer = ref()
|
const formType = ref(-1) // 表单的类型:0 - 生成 JSON;1 - 生成 Options;2 - 生成组件
|
||||||
|
const formData = ref('') // 表单数据
|
||||||
const dialogVisible = ref(false)
|
|
||||||
const dialogTitle = ref('')
|
|
||||||
const err = ref(false)
|
|
||||||
const type = ref(-1)
|
|
||||||
const formValue = ref('')
|
|
||||||
|
|
||||||
|
/** 打开弹窗 */
|
||||||
const openModel = (title: string) => {
|
const openModel = (title: string) => {
|
||||||
dialogVisible.value = true
|
dialogVisible.value = true
|
||||||
dialogTitle.value = title
|
dialogTitle.value = title
|
||||||
}
|
}
|
||||||
|
|
||||||
const setJson = () => {
|
/** 生成 JSON */
|
||||||
openModel('导入JSON--未实现')
|
|
||||||
}
|
|
||||||
const setOption = () => {
|
|
||||||
openModel('导入Options--未实现')
|
|
||||||
}
|
|
||||||
const showJson = () => {
|
const showJson = () => {
|
||||||
openModel('生成JSON')
|
openModel('生成 JSON')
|
||||||
type.value = 0
|
formType.value = 0
|
||||||
formValue.value = designer.value.getRule()
|
formData.value = designer.value.getRule()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 生成 Options */
|
||||||
const showOption = () => {
|
const showOption = () => {
|
||||||
openModel('生成Options')
|
openModel('生成 Options')
|
||||||
type.value = 1
|
formType.value = 1
|
||||||
formValue.value = designer.value.getOption()
|
formData.value = designer.value.getOption()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 生成组件 */
|
||||||
const showTemplate = () => {
|
const showTemplate = () => {
|
||||||
openModel('生成组件')
|
openModel('生成组件')
|
||||||
type.value = 2
|
formType.value = 2
|
||||||
formValue.value = makeTemplate()
|
formData.value = makeTemplate()
|
||||||
|
}
|
||||||
|
|
||||||
|
const makeTemplate = () => {
|
||||||
|
const rule = designer.value.getRule()
|
||||||
|
const opt = designer.value.getOption()
|
||||||
|
return `<template>
|
||||||
|
<form-create
|
||||||
|
v-model="fapi"
|
||||||
|
:rule="rule"
|
||||||
|
:option="option"
|
||||||
|
@submit="onSubmit"
|
||||||
|
></form-create>
|
||||||
|
</template>
|
||||||
|
<script setup lang=ts>
|
||||||
|
import formCreate from "@form-create/element-ui";
|
||||||
|
const faps = ref(null)
|
||||||
|
const rule = ref('')
|
||||||
|
const option = ref('')
|
||||||
|
const init = () => {
|
||||||
|
rule.value = formCreate.parseJson('${formCreate.toJson(rule).replaceAll('\\', '\\\\')}')
|
||||||
|
option.value = formCreate.parseJson('${JSON.stringify(opt)}')
|
||||||
|
}
|
||||||
|
const onSubmit = (formData) => {
|
||||||
|
//todo 提交表单
|
||||||
|
}
|
||||||
|
init()
|
||||||
|
<\/script>`
|
||||||
}
|
}
|
||||||
// const changeLocale = () => {
|
|
||||||
// console.info('changeLocale')
|
|
||||||
// }
|
|
||||||
|
|
||||||
/** 复制 **/
|
/** 复制 **/
|
||||||
const copy = async (text: string) => {
|
const copy = async (text: string) => {
|
||||||
@ -87,31 +109,4 @@ const copy = async (text: string) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const makeTemplate = () => {
|
|
||||||
const rule = designer.value.getRule()
|
|
||||||
const opt = designer.value.getOption()
|
|
||||||
return `<template>
|
|
||||||
<form-create
|
|
||||||
v-model="fapi"
|
|
||||||
:rule="rule"
|
|
||||||
:option="option"
|
|
||||||
@submit="onSubmit"
|
|
||||||
></form-create>
|
|
||||||
</template>
|
|
||||||
<script setup lang=ts>
|
|
||||||
import formCreate from "@form-create/element-ui";
|
|
||||||
const faps = ref(null)
|
|
||||||
const rule = ref('')
|
|
||||||
const option = ref('')
|
|
||||||
const init = () => {
|
|
||||||
rule.value = formCreate.parseJson('${formCreate.toJson(rule).replaceAll('\\', '\\\\')}')
|
|
||||||
option.value = formCreate.parseJson('${JSON.stringify(opt)}')
|
|
||||||
}
|
|
||||||
const onSubmit = (formData) => {
|
|
||||||
//todo 提交表单
|
|
||||||
}
|
|
||||||
init()
|
|
||||||
<\/script>`
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
Loading…
Reference in New Issue
Block a user