|
@@ -6,7 +6,7 @@
|
|
<template v-for="(item, index) in menuList" :key="index">
|
|
<template v-for="(item, index) in menuList" :key="index">
|
|
<div class="_fc-l-group">
|
|
<div class="_fc-l-group">
|
|
<h4 class="_fc-l-title">{{ item.title }}</h4>
|
|
<h4 class="_fc-l-title">{{ item.title }}</h4>
|
|
- <draggable :group="{ name: 'default', pull: 'clone', put: false }" :sort="false" itemKey="name" :list="item.list">
|
|
|
|
|
|
+ <draggable :group="{ name: 'default', pull: 'clone', put: false }" :sort="false" item-key="name" :list="item.list">
|
|
<template #item="{ element }">
|
|
<template #item="{ element }">
|
|
<div class="_fc-l-item">
|
|
<div class="_fc-l-item">
|
|
<div class="_fc-l-icon">
|
|
<div class="_fc-l-icon">
|
|
@@ -25,8 +25,8 @@
|
|
<el-button size="small" @click="setJson">导入JSON</el-button>
|
|
<el-button size="small" @click="setJson">导入JSON</el-button>
|
|
<el-button size="small" type="primary" @click="showJson">生成JSON</el-button>
|
|
<el-button size="small" type="primary" @click="showJson">生成JSON</el-button>
|
|
<el-button size="small" type="primary" @click="saveAsForm">暂存表单</el-button>
|
|
<el-button size="small" type="primary" @click="saveAsForm">暂存表单</el-button>
|
|
- <el-button type="primary" plain round size="small" @click="previewFc"
|
|
|
|
- ><i class="fc-icon icon-preview"></i> {{ t('designer.preview') }}
|
|
|
|
|
|
+ <el-button type="primary" plain round size="small" @click="previewFc">
|
|
|
|
+ <i class="fc-icon icon-preview"></i> {{ t('designer.preview') }}
|
|
</el-button>
|
|
</el-button>
|
|
<el-popconfirm
|
|
<el-popconfirm
|
|
:title="t('designer.clearConfirmTitle')"
|
|
:title="t('designer.clearConfirmTitle')"
|
|
@@ -42,24 +42,24 @@
|
|
</el-header>
|
|
</el-header>
|
|
<ElMain style="background: #f5f5f5; padding: 20px">
|
|
<ElMain style="background: #f5f5f5; padding: 20px">
|
|
<div class="_fc-m-drag">
|
|
<div class="_fc-m-drag">
|
|
- <DragForm :rule="dragForm.rule" :option="form.value" v-model:api="dragForm.api"></DragForm>
|
|
|
|
|
|
+ <DragForm v-model:api="dragForm.api" :rule="dragForm.rule" :option="form.value"></DragForm>
|
|
</div>
|
|
</div>
|
|
</ElMain>
|
|
</ElMain>
|
|
</ElContainer>
|
|
</ElContainer>
|
|
- <ElAside class="_fc-r" width="320px" v-if="!config || config.showConfig !== false">
|
|
|
|
|
|
+ <ElAside v-if="!config || config.showConfig !== false" class="_fc-r" width="320px">
|
|
<ElContainer style="height: 100%">
|
|
<ElContainer style="height: 100%">
|
|
<el-header height="40px" class="_fc-r-tabs">
|
|
<el-header height="40px" class="_fc-r-tabs">
|
|
<div
|
|
<div
|
|
|
|
+ v-if="!!activeRule || (config && config.showFormConfig === false)"
|
|
class="_fc-r-tab"
|
|
class="_fc-r-tab"
|
|
:class="{ active: activeTab === 'props' }"
|
|
:class="{ active: activeTab === 'props' }"
|
|
- v-if="!!activeRule || (config && config.showFormConfig === false)"
|
|
|
|
@click="activeTab = 'props'"
|
|
@click="activeTab = 'props'"
|
|
>
|
|
>
|
|
{{ t('designer.config.component') }}
|
|
{{ t('designer.config.component') }}
|
|
</div>
|
|
</div>
|
|
<div
|
|
<div
|
|
- class="_fc-r-tab"
|
|
|
|
v-if="!config || config.showFormConfig !== false"
|
|
v-if="!config || config.showFormConfig !== false"
|
|
|
|
+ class="_fc-r-tab"
|
|
:class="{ active: activeTab === 'form' && !!activeRule }"
|
|
:class="{ active: activeTab === 'form' && !!activeRule }"
|
|
@click="activeTab = 'form'"
|
|
@click="activeTab = 'form'"
|
|
>
|
|
>
|
|
@@ -67,9 +67,9 @@
|
|
</div>
|
|
</div>
|
|
</el-header>
|
|
</el-header>
|
|
<ElMain v-show="activeTab === 'form'" v-if="!config || config.showFormConfig !== false">
|
|
<ElMain v-show="activeTab === 'form'" v-if="!config || config.showFormConfig !== false">
|
|
- <DragForm :rule="form.rule" :option="form.option" v-model="form.value.form" v-model:api="form.api"></DragForm>
|
|
|
|
|
|
+ <DragForm v-model="form.value.form" v-model:api="form.api" :rule="form.rule" :option="form.option"></DragForm>
|
|
</ElMain>
|
|
</ElMain>
|
|
- <ElMain v-show="activeTab === 'props'" style="padding: 0 20px" :key="activeRule ? activeRule._id : ''">
|
|
|
|
|
|
+ <ElMain v-show="activeTab === 'props'" :key="activeRule ? activeRule._id : ''" style="padding: 0 20px">
|
|
<div>
|
|
<div>
|
|
<ElDivider v-if="showBaseRule">{{ t('designer.config.rule') }}</ElDivider>
|
|
<ElDivider v-if="showBaseRule">{{ t('designer.config.rule') }}</ElDivider>
|
|
<DragForm
|
|
<DragForm
|
|
@@ -77,7 +77,7 @@
|
|
v-model:api="baseForm.api"
|
|
v-model:api="baseForm.api"
|
|
:rule="baseForm.rule"
|
|
:rule="baseForm.rule"
|
|
:option="baseForm.options"
|
|
:option="baseForm.options"
|
|
- :modelValue="baseForm.value"
|
|
|
|
|
|
+ :model-value="baseForm.value"
|
|
@change="baseChange"
|
|
@change="baseChange"
|
|
></DragForm>
|
|
></DragForm>
|
|
<ElDivider>{{ t('designer.config.props') }}</ElDivider>
|
|
<ElDivider>{{ t('designer.config.props') }}</ElDivider>
|
|
@@ -85,9 +85,9 @@
|
|
v-model:api="propsForm.api"
|
|
v-model:api="propsForm.api"
|
|
:rule="propsForm.rule"
|
|
:rule="propsForm.rule"
|
|
:option="propsForm.options"
|
|
:option="propsForm.options"
|
|
- :modelValue="propsForm.value"
|
|
|
|
|
|
+ :model-value="propsForm.value"
|
|
@change="propChange"
|
|
@change="propChange"
|
|
- @removeField="propRemoveField"
|
|
|
|
|
|
+ @remove-field="propRemoveField"
|
|
></DragForm>
|
|
></DragForm>
|
|
<ElDivider v-if="showBaseRule">{{ t('designer.config.validate') }}</ElDivider>
|
|
<ElDivider v-if="showBaseRule">{{ t('designer.config.validate') }}</ElDivider>
|
|
<DragForm
|
|
<DragForm
|
|
@@ -95,8 +95,8 @@
|
|
v-model:api="validateForm.api"
|
|
v-model:api="validateForm.api"
|
|
:rule="validateForm.rule"
|
|
:rule="validateForm.rule"
|
|
:option="validateForm.options"
|
|
:option="validateForm.options"
|
|
- :modelValue="validateForm.value"
|
|
|
|
- @update:modelValue="validateChange"
|
|
|
|
|
|
+ :model-value="validateForm.value"
|
|
|
|
+ @update:model-value="validateChange"
|
|
></DragForm>
|
|
></DragForm>
|
|
</div>
|
|
</div>
|
|
</ElMain>
|
|
</ElMain>
|
|
@@ -104,16 +104,16 @@
|
|
</ElAside>
|
|
</ElAside>
|
|
<!-- 预览表单 -->
|
|
<!-- 预览表单 -->
|
|
<ElDialog v-model="preview.state" width="800px" append-to-body>
|
|
<ElDialog v-model="preview.state" width="800px" append-to-body>
|
|
- <ViewForm :rule="preview.rule" :option="preview.option" v-if="preview.state"></ViewForm>
|
|
|
|
|
|
+ <ViewForm v-if="preview.state" :rule="preview.rule" :option="preview.option"></ViewForm>
|
|
</ElDialog>
|
|
</ElDialog>
|
|
<!-- 生成JSON / 导入JSON -->
|
|
<!-- 生成JSON / 导入JSON -->
|
|
- <el-dialog :title="title[type]" v-model="state" class="_fc-t-dialog">
|
|
|
|
- <div ref="editorRef" id="editor" v-if="state"></div>
|
|
|
|
- <span style="color: red" v-if="err">输入内容格式有误!</span>
|
|
|
|
- <template #footer v-if="type > 2">
|
|
|
|
|
|
+ <el-dialog v-model="state" :title="title[type]" class="_fc-t-dialog">
|
|
|
|
+ <div v-if="state" id="editor" ref="editorRef"></div>
|
|
|
|
+ <span v-if="err" style="color: red">输入内容格式有误!</span>
|
|
|
|
+ <template v-if="type > 2" #footer>
|
|
<span slot="footer" class="dialog-footer">
|
|
<span slot="footer" class="dialog-footer">
|
|
- <el-button @click="state = false" size="small">取 消</el-button>
|
|
|
|
- <el-button type="primary" @click="onOk" size="small">确 定</el-button>
|
|
|
|
|
|
+ <el-button size="small" @click="state = false">取 消</el-button>
|
|
|
|
+ <el-button type="primary" size="small" @click="onOk">确 定</el-button>
|
|
</span>
|
|
</span>
|
|
</template>
|
|
</template>
|
|
</el-dialog>
|
|
</el-dialog>
|
|
@@ -741,7 +741,7 @@ export default defineComponent({
|
|
if (!data.activeRule || data.validateForm.api[data.activeRule._id] !== data.activeRule) return
|
|
if (!data.activeRule || data.validateForm.api[data.activeRule._id] !== data.activeRule) return
|
|
data.activeRule.validate = formData.validate || []
|
|
data.activeRule.validate = formData.validate || []
|
|
data.dragForm.api.refreshValidate()
|
|
data.dragForm.api.refreshValidate()
|
|
- data.dragForm.api.nextTick(() => {
|
|
|
|
|
|
+ data.dragForm.api.nextTick()()()()()()()()()()(() => {
|
|
data.dragForm.api.clearValidateState(data.activeRule.__fc__.id)
|
|
data.dragForm.api.clearValidateState(data.activeRule.__fc__.id)
|
|
})
|
|
})
|
|
},
|
|
},
|
|
@@ -785,9 +785,9 @@ export default defineComponent({
|
|
})
|
|
})
|
|
;['props', 'effect', 'attrs'].forEach(name => {
|
|
;['props', 'effect', 'attrs'].forEach(name => {
|
|
rule[name] &&
|
|
rule[name] &&
|
|
- Object.keys(rule[name]).forEach(k => {
|
|
|
|
- formData['formCreate' + upper(name) + '>' + k] = deepCopy(rule[name][k])
|
|
|
|
- })
|
|
|
|
|
|
+ Object.keys(rule[name]).forEach(k => {
|
|
|
|
+ formData['formCreate' + upper(name) + '>' + k] = deepCopy(rule[name][k])
|
|
|
|
+ })
|
|
})
|
|
})
|
|
data.propsForm.value = formData
|
|
data.propsForm.value = formData
|
|
|
|
|
|
@@ -802,7 +802,7 @@ export default defineComponent({
|
|
}
|
|
}
|
|
data.validateForm.value = { validate: rule.validate ? [...rule.validate] : [] }
|
|
data.validateForm.value = { validate: rule.validate ? [...rule.validate] : [] }
|
|
data.dragForm.api.refreshValidate()
|
|
data.dragForm.api.refreshValidate()
|
|
- data.dragForm.api.nextTick(() => {
|
|
|
|
|
|
+ data.dragForm.api.nextTick()()()()()()()()()()(() => {
|
|
data.dragForm.api.clearValidateState(rule.__fc__.id)
|
|
data.dragForm.api.clearValidateState(rule.__fc__.id)
|
|
})
|
|
})
|
|
}
|
|
}
|
|
@@ -904,7 +904,7 @@ export default defineComponent({
|
|
const config = top.parent.config.config
|
|
const config = top.parent.config.config
|
|
const item = ruleList[config.children]
|
|
const item = ruleList[config.children]
|
|
if (!item) return
|
|
if (!item) return
|
|
- ;(!config.drag ? top.parent : top.parent.children[0]).children[0].children.push(methods.makeRule(item))
|
|
|
|
|
|
+ ;(!config.drag ? top.parent : top.parent.children[0]).children[0].children.push(methods.makeRule(item))
|
|
},
|
|
},
|
|
copy: ({ self }) => {
|
|
copy: ({ self }) => {
|
|
const top = methods.getParent(self)
|
|
const top = methods.getParent(self)
|
|
@@ -948,7 +948,7 @@ export default defineComponent({
|
|
const config = self.children[0].config.config
|
|
const config = self.children[0].config.config
|
|
const item = ruleList[config.children]
|
|
const item = ruleList[config.children]
|
|
if (!item) return
|
|
if (!item) return
|
|
- ;(!config.drag ? self : self.children[0]).children[0].children.push(methods.makeRule(item))
|
|
|
|
|
|
+ ;(!config.drag ? self : self.children[0]).children[0].children.push(methods.makeRule(item))
|
|
},
|
|
},
|
|
copy: ({ self }) => {
|
|
copy: ({ self }) => {
|
|
vm.emit('copy', self.children[0])
|
|
vm.emit('copy', self.children[0])
|
|
@@ -1001,8 +1001,8 @@ export default defineComponent({
|
|
onOk() {
|
|
onOk() {
|
|
if (data.err) return
|
|
if (data.err) return
|
|
const json = data.editor.getValue()
|
|
const json = data.editor.getValue()
|
|
- let val = JSON.parse(json)
|
|
|
|
- if (data.type === 3) {
|
|
|
|
|
|
+ let val = JSON.parse(json)
|
|
|
|
+ if (data.type === 3) {
|
|
if (!Array.isArray(val)) {
|
|
if (!Array.isArray(val)) {
|
|
data.err = true
|
|
data.err = true
|
|
return
|
|
return
|
|
@@ -1021,23 +1021,24 @@ export default defineComponent({
|
|
saveAsForm() {
|
|
saveAsForm() {
|
|
data.value = methods.getRule()
|
|
data.value = methods.getRule()
|
|
let val = JSON.parse(JSON.stringify(data.value))
|
|
let val = JSON.parse(JSON.stringify(data.value))
|
|
|
|
+ console.log('--------saveAsForm------', val)
|
|
vm.emit('export-json', val)
|
|
vm.emit('export-json', val)
|
|
},
|
|
},
|
|
- // 初始化
|
|
|
|
- initForm(json) {
|
|
|
|
- // todo 这里需要针对json为空做处理
|
|
|
|
- try {
|
|
|
|
- methods.setRule(formCreate.parseJson(json))
|
|
|
|
- } catch (e) {
|
|
|
|
- console.log(e);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ // 初始化
|
|
|
|
+ initForm(json) {
|
|
|
|
+ // todo 这里需要针对json为空做处理
|
|
|
|
+ try {
|
|
|
|
+ methods.setRule(formCreate.parseJson(json))
|
|
|
|
+ } catch (e) {
|
|
|
|
+ console.log(e)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
data.dragForm.rule = methods.makeDragRule(methods.makeChildren(data.children))
|
|
data.dragForm.rule = methods.makeDragRule(methods.makeChildren(data.children))
|
|
|
|
|
|
defineExpose({
|
|
defineExpose({
|
|
initForm: methods.initForm,
|
|
initForm: methods.initForm,
|
|
- saveFormJson: methods.showJson
|
|
|
|
|
|
+ saveFormJson: methods.showJson
|
|
})
|
|
})
|
|
return {
|
|
return {
|
|
editorRef,
|
|
editorRef,
|