This commit is contained in:
limengnan 2025-05-24 17:26:35 +08:00
parent 34bb8b1c00
commit 30f10660d0
7 changed files with 165 additions and 158 deletions

BIN
FcDesigner文档说明.docx Normal file

Binary file not shown.

View File

@ -721,62 +721,62 @@ export default {
} }
} }
}); });
this.$refs.designer.setRule(formCreate.parseJson("[{\"type\":\"html\",\"native\":true,\"attrs\":{\"innerHTML\":\"\"},\"style\":{\"height\":\"100px\",\"width\":\"100%\",\"display\":\"flex\",\"justifyContent\":\"center\",\"alignItems\":\"center\"},\"children\":[\"<div style=\\\"width: 100%; display: flex; justify-content: center; align-items: center;border: 1px solid #f6f6f7;\\n border-radius: 12px;\\n height: 100%;\\n background-color: var(--fc-bg-color-3);\\\">\\n👈🏻 点击左侧边栏 <i class=\\\"fc-icon icon-menu2\\\" style=\\\"font-size:26px;margin:0 2px;color:var(--fc-style-color-1);\\\"></i> 按钮查看更多功能示例\\n </div>\"],\"_fc_id\":\"id_F85km1usjbq4egc\",\"name\":\"ref_F2n0m1usjbq4ehc\",\"_fc_drag_tag\":\"html\",\"display\":true,\"hidden\":false},{\"type\":\"html\",\"native\":true,\"attrs\":{\"innerHTML\":\"\"},\"style\":{\"display\":\"block\",\"width\":\"100%\"},\"children\":[\"<div class=\\\"_fd-view-box\\\">\\n <div class=\\\"title\\\">FormCreate 设计器高级版演示站</div>\\n <div class=\\\"desc\\\">全面实现多端表单设计,为企业提供低代码表单解决方案</div>\\n<div class=\\\"_fd-view-products\\\">\\n <a class=\\\"_fd-view-product\\\" href=\\\"https://pro.form-create.com/view\\\" target=\\\"_blank\\\">\\n <div><div>ElementPlus版PC端设计器👨🏻💻(Vue3)</div><span>立即体验</span></div> <span>采用 Vue3.0 和 ElementPlus 进行页面构建</span>\\n </a>\\n <a class=\\\"_fd-view-product vue2\\\" href=\\\"https://pro.form-create.com/vue2/view\\\" target=\\\"_blank\\\">\\n <div><div>ElementUI版PC端设计器👨🏻💻(Vue2)</div><span>立即体验</span></div> <span>采用 Vue2.7 和 ElementUI 进行页面构建</span>\\n </a>\\n <a class=\\\"_fd-view-product\\\" href=\\\"https://pro.form-create.com/mobile\\\" target=\\\"_blank\\\">\\n <div><div>ElementPlus版移动端设计器📱(Vue3)</div><span>立即体验</span></div> <span>采用 Vue3.0 和 ElementPlus 进行页面构建移动端采用Vant4.0</span>\\n </a>\\n <a class=\\\"_fd-view-product vue2\\\" href=\\\"https://pro.form-create.com/vue2/mobile\\\" target=\\\"_blank\\\">\\n <div><div>ElementUI版移动端设计器📱(Vue2)</div><span>立即体验</span></div> <span>采用 Vue2.7 和 ElementUI 进行页面构建移动端采用Vant2.0</span>\\n </a>\\n <a class=\\\"_fd-view-product\\\" href=\\\"https://pro.form-create.com/antd/view\\\" target=\\\"_blank\\\">\\n <div><div>Ant Design Vue版PC端设计器👨🏻💻(Vue3)</div><span>立即体验</span></div> <span>采用 Vue3.0 和 Ant Design Vue 进行页面构建</span>\\n </a>\\n <a class=\\\"_fd-view-product vue2\\\" href=\\\"https://pro.form-create.com/vue2/antd/view\\\" target=\\\"_blank\\\">\\n <div><div>Ant Design Vue版PC端设计器👨🏻💻(Vue2)</div><span>立即体验</span></div> <span>采用 Vue2.7 和 Ant Design Vue 进行页面构建</span>\\n </a>\\n <a class=\\\"_fd-view-product\\\" href=\\\"https://pro.form-create.com/antd/mobile\\\" target=\\\"_blank\\\">\\n <div><div>Ant Design Vue版移动端设计器📱(Vue3)</div><span>立即体验</span></div> <span>采用 Vue3.0 和 Ant Design Vue 进行页面构建移动端采用Vant4.0</span>\\n </a>\\n <a class=\\\"_fd-view-product vue2\\\" href=\\\"https://pro.form-create.com/vue2/antd/mobile\\\" target=\\\"_blank\\\">\\n <div><div>Ant Design Vue版移动端设计器📱(Vue2)</div><span>立即体验</span></div> <span>采用 Vue2.7 和 Ant Design Vue 进行页面构建移动端采用Vant2.0</span>\\n </a>\\n </div>\\n</div>\"],\"_fc_id\":\"id_Fr6ym35jirw4acc\",\"name\":\"ref_Fcfnm35jirw4adc\",\"_fc_drag_tag\":\"html\",\"display\":true,\"hidden\":false}]")) // this.$refs.designer.setRule(formCreate.parseJson("[{\"type\":\"html\",\"native\":true,\"attrs\":{\"innerHTML\":\"\"},\"style\":{\"height\":\"100px\",\"width\":\"100%\",\"display\":\"flex\",\"justifyContent\":\"center\",\"alignItems\":\"center\"},\"children\":[\"<div style=\\\"width: 100%; display: flex; justify-content: center; align-items: center;border: 1px solid #f6f6f7;\\n border-radius: 12px;\\n height: 100%;\\n background-color: var(--fc-bg-color-3);\\\">\\n👈🏻 <i class=\\\"fc-icon icon-menu2\\\" style=\\\"font-size:26px;margin:0 2px;color:var(--fc-style-color-1);\\\"></i> \\n </div>\"],\"_fc_id\":\"id_F85km1usjbq4egc\",\"name\":\"ref_F2n0m1usjbq4ehc\",\"_fc_drag_tag\":\"html\",\"display\":true,\"hidden\":false},{\"type\":\"html\",\"native\":true,\"attrs\":{\"innerHTML\":\"\"},\"style\":{\"display\":\"block\",\"width\":\"100%\"},\"children\":[\"<div class=\\\"_fd-view-box\\\">\\n <div class=\\\"title\\\">FormCreate </div>\\n <div class=\\\"desc\\\"></div>\\n<div class=\\\"_fd-view-products\\\">\\n <a class=\\\"_fd-view-product\\\" href=\\\"https://pro.form-create.com/view\\\" target=\\\"_blank\\\">\\n <div><div>ElementPlusPC👨🏻💻(Vue3)</div><span></span></div> <span> Vue3.0 ElementPlus </span>\\n </a>\\n <a class=\\\"_fd-view-product vue2\\\" href=\\\"https://pro.form-create.com/vue2/view\\\" target=\\\"_blank\\\">\\n <div><div>ElementUIPC👨🏻💻(Vue2)</div><span></span></div> <span> Vue2.7 ElementUI </span>\\n </a>\\n <a class=\\\"_fd-view-product\\\" href=\\\"https://pro.form-create.com/mobile\\\" target=\\\"_blank\\\">\\n <div><div>ElementPlus📱(Vue3)</div><span></span></div> <span> Vue3.0 ElementPlus Vant4.0</span>\\n </a>\\n <a class=\\\"_fd-view-product vue2\\\" href=\\\"https://pro.form-create.com/vue2/mobile\\\" target=\\\"_blank\\\">\\n <div><div>ElementUI📱(Vue2)</div><span></span></div> <span> Vue2.7 ElementUI Vant2.0</span>\\n </a>\\n <a class=\\\"_fd-view-product\\\" href=\\\"https://pro.form-create.com/antd/view\\\" target=\\\"_blank\\\">\\n <div><div>Ant Design VuePC👨🏻💻(Vue3)</div><span></span></div> <span> Vue3.0 Ant Design Vue </span>\\n </a>\\n <a class=\\\"_fd-view-product vue2\\\" href=\\\"https://pro.form-create.com/vue2/antd/view\\\" target=\\\"_blank\\\">\\n <div><div>Ant Design VuePC👨🏻💻(Vue2)</div><span></span></div> <span> Vue2.7 Ant Design Vue </span>\\n </a>\\n <a class=\\\"_fd-view-product\\\" href=\\\"https://pro.form-create.com/antd/mobile\\\" target=\\\"_blank\\\">\\n <div><div>Ant Design Vue📱(Vue3)</div><span></span></div> <span> Vue3.0 Ant Design Vue Vant4.0</span>\\n </a>\\n <a class=\\\"_fd-view-product vue2\\\" href=\\\"https://pro.form-create.com/vue2/antd/mobile\\\" target=\\\"_blank\\\">\\n <div><div>Ant Design Vue📱(Vue2)</div><span></span></div> <span> Vue2.7 Ant Design Vue Vant2.0</span>\\n </a>\\n </div>\\n</div>\"],\"_fc_id\":\"id_Fr6ym35jirw4acc\",\"name\":\"ref_Fcfnm35jirw4adc\",\"_fc_drag_tag\":\"html\",\"display\":true,\"hidden\":false}]"))
} }
this.$refs.designer.setGlobalEvent({ // this.$refs.designer.setGlobalEvent({
"event_Feq4lui56zxbabc": { // "event_Feq4lui56zxbabc": {
"label": "自定义", // "label": "",
"deletable": false, // "deletable": false,
"handle": "[[FORM-CREATE-PREFIX-function handle($inject){aaa;}-FORM-CREATE-SUFFIX]]" // "handle": "[[FORM-CREATE-PREFIX-function handle($inject){aaa;}-FORM-CREATE-SUFFIX]]"
}, // },
"event_Feq4lui56zxbab2c": { // "event_Feq4lui56zxbab2c": {
"label": "自定义2", // "label": "2",
"handle": function ($inject) { // "handle": function ($inject) {
console.log($inject); // console.log($inject);
} // }
} // }
}); // });
this.$refs.designer.setGlobalVariable({ // this.$refs.designer.setGlobalVariable({
"var_Fppdlz6gytmzb1c": { // "var_Fppdlz6gytmzb1c": {
"label": "token", // "label": "token",
"deletable": false, // "deletable": false,
"handle": function (get, api) { // "handle": function (get, api) {
return get('$cookie.token') || 'default Token' // return get('$cookie.token') || 'default Token'
} // }
} // }
}) // })
this.$refs.designer.setGlobalClass({ // this.$refs.designer.setGlobalClass({
"cls_Fzmulzw3u0oib0c": { // "cls_Fzmulzw3u0oib0c": {
"label": "fff", // "label": "fff",
"deletable": false, // "deletable": false,
"style": { // "style": {
"color": "red" // "color": "red"
} // }
} // }
}) // })
this.$refs.designer.setGlobalData({ // this.$refs.designer.setGlobalData({
"data_Fk6dlui4k0xuabc": { // "data_Fk6dlui4k0xuabc": {
"label": "自定义数据", // "label": "",
"type": "static", // "type": "static",
"data": [ // "data": [
1, // 1,
2, // 2,
3, // 3,
4 // 4
] // ]
}, // },
"data_Fs1elui4kttlacc": { // "data_Fs1elui4kttlacc": {
"action": "http://192.168.1.4:8081/", // "action": "http://192.168.1.4:8081/",
"deletable": false, // "deletable": false,
"method": "GET", // "method": "GET",
"headers": {}, // "headers": {},
"data": {}, // "data": {},
"parse": "[[FORM-CREATE-PREFIX-function parse(res){return res.data;}-FORM-CREATE-SUFFIX]]", // "parse": "[[FORM-CREATE-PREFIX-function parse(res){return res.data;}-FORM-CREATE-SUFFIX]]",
"onError": "[[FORM-CREATE-PREFIX-function onError(e){}-FORM-CREATE-SUFFIX]]", // "onError": "[[FORM-CREATE-PREFIX-function onError(e){}-FORM-CREATE-SUFFIX]]",
"label": "自定义接口数据", // "label": "",
"type": "fetch" // "type": "fetch"
} // }
}) // })
} }
}; };

View File

@ -202,7 +202,7 @@
</template> </template>
</el-main> </el-main>
<el-main v-if="activeMenuTab === 'field'"> <el-main v-if="activeMenuTab === 'field'">
<el-select v-model="eventKey" clearable filterable <el-select v-model="datasetId" clearable filterable
style="width: 240px; margin: 12px" style="width: 240px; margin: 12px"
@change="dsClick"> @change="dsClick">
<el-option <el-option
@ -879,6 +879,7 @@ export default defineComponent({
menu: Array, menu: Array,
field: Array, field: Array,
appId: String, appId: String,
appUrl: String,
list: Array, list: Array,
theme: String, theme: String,
height: [String, Number], height: [String, Number],
@ -895,18 +896,6 @@ export default defineComponent({
}, },
data() { data() {
return { return {
value1:'',
modelValue: '',
selectedNodeName: '',
datasetData: [],
datasetInfo:{},
dsSelectProps: {
label: 'name',
children: 'children',
value: 'id',
isLeaf: node => !node.children?.length
},
fieldData:[]
} }
}, },
@ -1027,6 +1016,20 @@ export default defineComponent({
idx: -1, idx: -1,
list: [] list: []
}, },
modelValue: '',
selectedNodeName: '',
datasetData: [],
datasetInfo:{},
dsSelectProps: {
label: 'name',
children: 'children',
value: 'id',
isLeaf: node => !node.children?.length
},
fieldData:[],
datasetId: '', // id
pageData: [], pageData: [],
gridLine: false, gridLine: false,
hiddenLeft: false, hiddenLeft: false,
@ -1068,7 +1071,9 @@ export default defineComponent({
rule: [], rule: [],
api: {}, api: {},
}), }),
formOptions: {}, formOptions: {
datasetInfo:{}
},
oldOptionsKeys: [], oldOptionsKeys: [],
form: { form: {
rule: tidyRuleConfig(form, formRule.value, {t}), rule: tidyRuleConfig(form, formRule.value, {t}),
@ -1339,6 +1344,59 @@ export default defineComponent({
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const methods = { const methods = {
dsClick(id) {
methods.onDatasetChange(id)
data.datasetData.forEach(element => {
if(element.table_id == id){
data.datasetInfo = element
// data.inputForm.datasetInfo = element
data.formOptions.datasetInfo = element
}
});
},
onDatasetChange(id){
let appUrl = data.appUrl
if( data.appUrl == null){
appUrl = "http://192.168.1.38:8100"
}
data.fieldData = []
axios.get( appUrl + '/datasetData/getFieldsByTableId', {
params: {
id: id
}
}).then(response => {
console.log(response)
response.data.data.forEach(element => {
element.label = element.name
element.item = 'input',
element.fieldtype = element.type,
element.maxlength = element.size,
element.field = element.origin_name
element.update = {
disabled: false
}
data.fieldData.push(element)
})
}).catch(error => {
console.error(' 请求出错:', error);
});
},
getInit(){
let appUrl = data.appUrl
if( data.appUrl == null){
appUrl = "http://192.168.1.38:8100"
}
axios.get( appUrl+ '/datasetData/getTablesByAppId', {
params: {
appid: '1907238244651679745'
}
}).then(response => {
data.datasetData = response.data.data
}).catch(error => {
console.error(' 请求出错:', error);
});
},
setDevice(device) { setDevice(device) {
data.device = device; data.device = device;
vm.emit('changeDevice', device); vm.emit('changeDevice', device);
@ -2076,6 +2134,7 @@ export default defineComponent({
return data.dragForm.api.all().map(rule => rule.field).filter(id => !!id); return data.dragForm.api.all().map(rule => rule.field).filter(id => !!id);
}, },
getTitle(rule) { getTitle(rule) {
debugger
return (rule?.__fc__?.refRule?.__$title?.value || rule.title || '').trim() || (rule.props && rule.props.label) || t('com.' + (rule._menu && rule._menu.name) + '.name') || (rule._menu && rule._menu.label) || rule.type return (rule?.__fc__?.refRule?.__$title?.value || rule.title || '').trim() || (rule.props && rule.props.label) || t('com.' + (rule._menu && rule._menu.name) + '.name') || (rule._menu && rule._menu.label) || rule.type
}, },
baseChange(field, value, _, fapi) { baseChange(field, value, _, fapi) {
@ -2399,8 +2458,10 @@ export default defineComponent({
data.baseForm.value = { data.baseForm.value = {
field: rule.field, field: rule.field,
title: rule.title || '', title: rule.title || '',
fieldtype: rule.fieldtype || '',
info: rule.info, info: rule.info,
ignore: rule.ignore || false, ignore: rule.ignore || false,
attributeId: rule.attributeId || false,
_control: rule._control, _control: rule._control,
...formData ...formData
}; };
@ -2437,6 +2498,10 @@ export default defineComponent({
if (menu.field) { if (menu.field) {
update.field = menu.field; update.field = menu.field;
} }
if (menu.fieldtype) {
update.fieldtype = menu.fieldtype;
}
if (menu.rule) { if (menu.rule) {
methods.dragMenu({ methods.dragMenu({
rule: menu.rule, rule: menu.rule,
@ -2719,7 +2784,7 @@ export default defineComponent({
} }
return !(globalDenyDrag && checkDragCondition(globalDenyDrag)); return !(globalDenyDrag && checkDragCondition(globalDenyDrag));
}, },
dragAdd(children, evt, slot) { dragAdd(children, evt, slot) { //
delete evt.item._fc_allow_drag; delete evt.item._fc_allow_drag;
const newIndex = evt.newIndex; const newIndex = evt.newIndex;
const menu = evt.item._underlying_vm_ || evt.item.__rule__; const menu = evt.item._underlying_vm_ || evt.item.__rule__;
@ -3488,93 +3553,6 @@ export default defineComponent({
}, },
onPopoverHide() { onPopoverHide() {
}, },
getInit(){
axios.get('http://192.168.1.38:8100/datasetData/getTablesByAppId', {
headers: {
'X-De-Token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm9pZCI6MX0.i8pMPviPZoQyjXML3dLfLek4XML2acUf-x0K90u9KoY'
},
params: {
appid: '1907238244651679745'
}
}).then(response => {
this.datasetData = response.data.data
console.log(this.datasetData);
}).catch(error => {
console.error(' 请求出错:', error);
});
},
dsClick(id) {
this.onDatasetChange(id)
this.datasetData.forEach(element => {
if(element.id == id){
this.datasetInfo = element
}
});
console.log(data);
// if (data.leaf) {
// if (this.modelValue !== data.id) {
//
// }
// //
// // _modelValue.value = data.id
// this.modelValue = data.id
// this.selectedNodeName = data.name
// // //
// // datasetSelectorPopover.value?.hide()
// this.$refs.datasetSelectorPopover.hide()
// }
},
onDatasetChange(id){
this.fieldData = []
axios.post('http://192.168.1.38:8100/chart/listByDQ/'+ id +'/00', {
type: "table-info",
}, {
headers: {
'X-De-Token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm9pZCI6MX0.i8pMPviPZoQyjXML3dLfLek4XML2acUf-x0K90u9KoY'
}
}).then(response => {
if(response.data.data.dimensionList.length>0){
this.fieldData.push({
label:'维度',
children:[]
})
let dimensionList = response.data.data.dimensionList
dimensionList.forEach(element => {
element.label = element.name
element.item = 'input',
element.field = element.originName
element.update = {
disabled: true
}
this.fieldData[0].children.push(element)
});
}
if(response.data.data.quotaList.length>0){
this.fieldData.push({
label:'指标',
children:[]
})
let quotaList = response.data.data.quotaList
quotaList.forEach(element => {
element.label = element.name
element.item = 'input',
element.field = element.originName
element.update = {
disabled: true
}
this.fieldData[1].children.push(element)
});
}
}).catch(error => {
console.error(' 请求出错:', error);
});
}
}, },
}); });
</script> </script>

View File

@ -3,6 +3,22 @@ import {localeOptions} from '../../utils';
export default function field({t}) { export default function field({t}) {
return [ return [
{ {
type: 'ConfigItem',
col: {show: true},
style: 'margin-bottom: 10px',
name: 'attributeId',
props: {
label: t('form.attributeId'),
warning: t('warning.attributeId'),
},
children: [{
type: 'switch',
field: 'attributeId',
value: false,
wrap: {show: false},
col: {show: false},
}]
}, {
type: 'FieldInput', type: 'FieldInput',
field: 'field', field: 'field',
value: '', value: '',
@ -14,6 +30,11 @@ export default function field({t}) {
value: '', value: '',
title: t('form.title'), title: t('form.title'),
}, { }, {
type: 'Input',
field: 'fieldtype',
value: '',
title: t('form.fieldtype'),
},{
type: 'LanguageInput', type: 'LanguageInput',
field: 'info', field: 'info',
value: '', value: '',

View File

@ -33,6 +33,11 @@ export default function form({t}) {
{value: 'right', label: 'right'}, {value: 'right', label: 'right'},
{value: 'top', label: 'top'}, {value: 'top', label: 'top'},
]) ])
}, {
type: 'input',
field: '>tableName',
value: '',
title: t('form.tableName'),
}, { }, {
type: 'radio', type: 'radio',
field: 'size', field: 'size',

View File

@ -3,12 +3,15 @@ const ZhCn = {
form: { form: {
field: '字段 ID', field: '字段 ID',
title: '字段名称', title: '字段名称',
attributeId: '是否主键',
fieldtype: '字段类型',
info: '提示信息', info: '提示信息',
ignore: '忽略字段', ignore: '忽略字段',
native: '是否显示标题', native: '是否显示标题',
control: '组件联动', control: '组件联动',
labelShow: '是否显示', labelShow: '是否显示',
labelPosition: '标签的位置', labelPosition: '标签的位置',
tableName: '自定义名称',
labelStyle: '标签的样式', labelStyle: '标签的样式',
labelSuffix: '标签的后缀', labelSuffix: '标签的后缀',
formItem: '配置表单项', formItem: '配置表单项',

BIN
方法集合.docx Normal file

Binary file not shown.