mirror of
				https://gitee.com/hhyykk/ipms-sjy-ui.git
				synced 2025-11-01 02:38:44 +08:00 
			
		
		
		
	Vue3 重构:REVIEW 表单构建
This commit is contained in:
		| @@ -3,77 +3,99 @@ | ||||
|     <el-row> | ||||
|       <el-col> | ||||
|         <div class="mb-2 float-right"> | ||||
|           <el-button size="small" @click="setJson"> 导入JSON</el-button> | ||||
|           <el-button size="small" @click="setOption"> 导入Options</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="primary" @click="showJson">生成 JSON</el-button> | ||||
|           <el-button size="small" type="success" @click="showOption">生成O ptions</el-button> | ||||
|           <el-button size="small" type="danger" @click="showTemplate">生成组件</el-button> | ||||
|           <!-- <el-button size="small" @click="changeLocale">中英切换</el-button> --> | ||||
|         </div> | ||||
|       </el-col> | ||||
|       <!-- 表单设计器 --> | ||||
|       <el-col> | ||||
|         <fc-designer ref="designer" height="780px" /> | ||||
|       </el-col> | ||||
|     </el-row> | ||||
|     <Dialog :title="dialogTitle" v-model="dialogVisible" maxHeight="600"> | ||||
|       <div ref="editor" v-if="dialogVisible"> | ||||
|         <XTextButton style="float: right" :title="t('common.copy')" @click="copy(formValue)" /> | ||||
|         <el-scrollbar height="580"> | ||||
|           <div v-highlight> | ||||
|             <code class="hljs"> | ||||
|               {{ formValue }} | ||||
|             </code> | ||||
|           </div> | ||||
|         </el-scrollbar> | ||||
|       </div> | ||||
|       <span style="color: red" v-if="err">输入内容格式有误!</span> | ||||
|     </Dialog> | ||||
|   </ContentWrap> | ||||
|  | ||||
|   <!-- 弹窗:表单预览 --> | ||||
|   <Dialog :title="dialogTitle" v-model="dialogVisible" max-height="600"> | ||||
|     <div ref="editor" v-if="dialogVisible"> | ||||
|       <el-button style="float: right" @click="copy(formData)"> | ||||
|         {{ t('common.copy') }} | ||||
|       </el-button> | ||||
|       <el-scrollbar height="580"> | ||||
|         <div v-highlight> | ||||
|           <code class="hljs"> | ||||
|             {{ formData }} | ||||
|           </code> | ||||
|         </div> | ||||
|       </el-scrollbar> | ||||
|     </div> | ||||
|   </Dialog> | ||||
| </template> | ||||
| <script setup lang="ts" name="Build"> | ||||
| import formCreate from '@form-create/element-ui' | ||||
| import { useClipboard } from '@vueuse/core' | ||||
| const { t } = useI18n() // 国际化 | ||||
| const message = useMessage() // 消息 | ||||
|  | ||||
| const { t } = useI18n() | ||||
| const message = useMessage() | ||||
|  | ||||
| const designer = ref() | ||||
|  | ||||
| const dialogVisible = ref(false) | ||||
| const dialogTitle = ref('') | ||||
| const err = ref(false) | ||||
| const type = ref(-1) | ||||
| const formValue = ref('') | ||||
| const designer = ref() // 表单设计器 | ||||
| const dialogVisible = ref(false) // 弹窗的是否展示 | ||||
| const dialogTitle = ref('') // 弹窗的标题 | ||||
| const formType = ref(-1) // 表单的类型:0 - 生成 JSON;1 - 生成 Options;2 - 生成组件 | ||||
| const formData = ref('') // 表单数据 | ||||
|  | ||||
| /** 打开弹窗 */ | ||||
| const openModel = (title: string) => { | ||||
|   dialogVisible.value = true | ||||
|   dialogTitle.value = title | ||||
| } | ||||
|  | ||||
| const setJson = () => { | ||||
|   openModel('导入JSON--未实现') | ||||
| } | ||||
| const setOption = () => { | ||||
|   openModel('导入Options--未实现') | ||||
| } | ||||
| /** 生成 JSON */ | ||||
| const showJson = () => { | ||||
|   openModel('生成JSON') | ||||
|   type.value = 0 | ||||
|   formValue.value = designer.value.getRule() | ||||
|   openModel('生成 JSON') | ||||
|   formType.value = 0 | ||||
|   formData.value = designer.value.getRule() | ||||
| } | ||||
|  | ||||
| /** 生成 Options */ | ||||
| const showOption = () => { | ||||
|   openModel('生成Options') | ||||
|   type.value = 1 | ||||
|   formValue.value = designer.value.getOption() | ||||
|   openModel('生成 Options') | ||||
|   formType.value = 1 | ||||
|   formData.value = designer.value.getOption() | ||||
| } | ||||
|  | ||||
| /** 生成组件 */ | ||||
| const showTemplate = () => { | ||||
|   openModel('生成组件') | ||||
|   type.value = 2 | ||||
|   formValue.value = makeTemplate() | ||||
|   formType.value = 2 | ||||
|   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) => { | ||||
| @@ -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> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV