This commit is contained in:
limengnan 2025-05-28 13:32:53 +08:00
parent 30f10660d0
commit ac3c164adc
5 changed files with 73 additions and 25 deletions

View File

@ -67,7 +67,8 @@
</div> </div>
</div> --> </div> -->
<fc-designer ref="designer" :theme="theme" :list="list" @save="onSave" @switchForm="switchForm" :field="field" <fc-designer ref="designer" :theme="theme" :list="list" @save="onSave" @switchForm="switchForm" :field="field"
:locale="locale" :handle="handle" :config="config"> :locale="locale" :handle="handle" :config="config" :appUrl="'http://192.168.1.38:8100'"
:appId="'1907238244651679745'">
<template #block_fff="scope"> <template #block_fff="scope">
&lt;template #block_fff="scope"&gt; &lt;template #block_fff="scope"&gt;
自定义内容 自定义内容
@ -722,7 +723,10 @@ 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>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.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.setOption(formCreate.parseJson(`{"form":{"inline":false,"hideRequiredAsterisk":false,"labelPosition":"right","size":"default","labelWidth":"125px","showMessage":false},"resetBtn":{"show":false,"innerText":""},"submitBtn":{"show":false,"innerText":""},"datasetInfo":{"datasource_id":"985188400292302848","group_name":"","table_id":"7330790222512263168","table_name":"data_test"},"appUrl":"/api"}`));
// this.$refs.designer.setGlobalEvent({ // this.$refs.designer.setGlobalEvent({
// "event_Feq4lui56zxbabc": { // "event_Feq4lui56zxbabc": {
// "label": "", // "label": "",

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="datasetId" clearable filterable <el-select v-model="tableId" clearable filterable
style="width: 240px; margin: 12px" style="width: 240px; margin: 12px"
@change="dsClick"> @change="dsClick">
<el-option <el-option
@ -913,7 +913,8 @@ export default defineComponent({
provide('fcx', fcx); provide('fcx', fcx);
provide('designer', vm); provide('designer', vm);
const gisBiUrl = props.appUrl;
const configRef = toRef(props, 'config', {}); const configRef = toRef(props, 'config', {});
const theme = toRef(props, 'theme'); const theme = toRef(props, 'theme');
const fieldRef = toRef(props, 'field', []); const fieldRef = toRef(props, 'field', []);
@ -1027,7 +1028,7 @@ export default defineComponent({
isLeaf: node => !node.children?.length isLeaf: node => !node.children?.length
}, },
fieldData:[], fieldData:[],
datasetId: '', // id tableId: '', // id
pageData: [], pageData: [],
@ -1072,6 +1073,7 @@ export default defineComponent({
api: {}, api: {},
}), }),
formOptions: { formOptions: {
appUrl:gisBiUrl,
datasetInfo:{} datasetInfo:{}
}, },
oldOptionsKeys: [], oldOptionsKeys: [],
@ -1344,8 +1346,12 @@ export default defineComponent({
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const methods = { const methods = {
/**
* 开始
* 李梦楠 2025.05.25
* 自定义方法
*/
dsClick(id) { dsClick(id) {
methods.onDatasetChange(id)
data.datasetData.forEach(element => { data.datasetData.forEach(element => {
if(element.table_id == id){ if(element.table_id == id){
data.datasetInfo = element data.datasetInfo = element
@ -1353,27 +1359,41 @@ export default defineComponent({
data.formOptions.datasetInfo = element data.formOptions.datasetInfo = element
} }
}); });
methods.onDatasetChange(data.datasetInfo)
}, },
onDatasetChange(id){ onDatasetChange(row){
let appUrl = data.appUrl let token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm9pZCI6MX0.i8pMPviPZoQyjXML3dLfLek4XML2acUf-x0K90u9KoY"
if( data.appUrl == null){ if(localStorage.getItem("user.token")!=undefined && localStorage.getItem("user.token") !=""){
appUrl = "http://192.168.1.38:8100" const usertoken = JSON.parse(localStorage.getItem('user.token'))
token = JSON.parse(usertoken.v)
}
let appUrl = gisBiUrl
if( appUrl == null){
appUrl = ""
} }
data.fieldData = [] data.fieldData = []
axios.get( appUrl + '/datasetData/getFieldsByTableId', { axios.get( appUrl + '/datasetData/getFieldsByTableId', {
headers: {
"X-De-Token":token
},
params: { params: {
id: id datasourceId: row.datasource_id,
tablename:row.table_name
} }
}).then(response => { }).then(response => {
console.log(response) console.log(response)
response.data.data.forEach(element => {
data.datasetInfo.keyfeilds = response.data.data.keyfeilds
data.formOptions.datasetInfo.keyfeilds = response.data.data.keyfeilds
response.data.data.fields.forEach(element => {
element.label = element.name element.label = element.name
element.item = 'input', element.item = 'input',
element.iskey = element.iskey
element.fieldtype = element.type, element.fieldtype = element.type,
element.maxlength = element.size, element.maxlength = element.size,
element.field = element.origin_name element.field = element.origin_name
element.update = { element.update = {
disabled: false disabled:element.iskey
} }
data.fieldData.push(element) data.fieldData.push(element)
}) })
@ -1382,13 +1402,22 @@ export default defineComponent({
}); });
}, },
getInit(){ getInit(){
let appUrl = data.appUrl data.formOptions.appUrl = gisBiUrl
if( data.appUrl == null){ let appUrl = gisBiUrl
appUrl = "http://192.168.1.38:8100" if( appUrl == null){
appUrl = ""
}
let token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOjEsIm9pZCI6MX0.i8pMPviPZoQyjXML3dLfLek4XML2acUf-x0K90u9KoY"
if(localStorage.getItem("user.token")!=undefined && localStorage.getItem("user.token") !=""){
const usertoken = JSON.parse(localStorage.getItem('user.token'))
token = JSON.parse(usertoken.v)
} }
axios.get( appUrl+ '/datasetData/getTablesByAppId', { axios.get( appUrl+ '/datasetData/getTablesByAppId', {
headers: {
"X-De-Token":token
},
params: { params: {
appid: '1907238244651679745' appid: props.appId
} }
}).then(response => { }).then(response => {
data.datasetData = response.data.data data.datasetData = response.data.data
@ -1396,7 +1425,11 @@ export default defineComponent({
console.error(' 请求出错:', error); console.error(' 请求出错:', error);
}); });
}, },
/**
* 结束
* 李梦楠 2025.05.25
* 自定义方法
*/
setDevice(device) { setDevice(device) {
data.device = device; data.device = device;
vm.emit('changeDevice', device); vm.emit('changeDevice', device);
@ -1891,6 +1924,10 @@ export default defineComponent({
fcx.active = ''; fcx.active = '';
}, },
setOption(opt) { setOption(opt) {
if( opt.datasetInfo && opt.datasetInfo.table_id ){
data.tableId = opt.datasetInfo.table_id
methods.dsClick(data.tableId)
}
const defOptions = deepCopy(methods.getConfig('formOptions', {})); const defOptions = deepCopy(methods.getConfig('formOptions', {}));
const defForm = defOptions.form || {}; const defForm = defOptions.form || {};
delete defOptions.form; delete defOptions.form;
@ -1917,6 +1954,7 @@ export default defineComponent({
if (!hasProperty(options, 'globalEvent')) { if (!hasProperty(options, 'globalEvent')) {
options.globalEvent = {}; options.globalEvent = {};
} }
options.appUrl = gisBiUrl || '';
if (!hasProperty(options, 'globalData')) { if (!hasProperty(options, 'globalData')) {
options.globalData = {}; options.globalData = {};
} }
@ -2134,7 +2172,6 @@ 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) {
@ -2461,7 +2498,7 @@ export default defineComponent({
fieldtype: rule.fieldtype || '', fieldtype: rule.fieldtype || '',
info: rule.info, info: rule.info,
ignore: rule.ignore || false, ignore: rule.ignore || false,
attributeId: rule.attributeId || false, iskey: rule.iskey || false,
_control: rule._control, _control: rule._control,
...formData ...formData
}; };
@ -2511,6 +2548,10 @@ export default defineComponent({
update update
}); });
} else if (menu.item) { } else if (menu.item) {
if(data.dragRuleList[menu.item] !=undefined && menu.iskey != undefined ){
data.dragRuleList[menu.item].iskey = menu.iskey;
}
methods.dragMenu({ methods.dragMenu({
menu: data.dragRuleList[menu.item], menu: data.dragRuleList[menu.item],
children: children || data.children, children: children || data.children,
@ -2839,6 +2880,9 @@ export default defineComponent({
}, },
makeRule(config, _rule) { makeRule(config, _rule) {
let rule = _rule || config.rule({t}); let rule = _rule || config.rule({t});
if(config && config.iskey){
rule.iskey = config.iskey;
}
const updateRule = updateDefaultRule.value && updateDefaultRule.value[config.name]; const updateRule = updateDefaultRule.value && updateDefaultRule.value[config.name];
if (!_rule && updateRule) { if (!_rule && updateRule) {
if (typeof updateRule === 'function') { if (typeof updateRule === 'function') {

View File

@ -6,14 +6,14 @@ export default function field({t}) {
type: 'ConfigItem', type: 'ConfigItem',
col: {show: true}, col: {show: true},
style: 'margin-bottom: 10px', style: 'margin-bottom: 10px',
name: 'attributeId', name: 'iskey',
props: { props: {
label: t('form.attributeId'), label: t('form.iskey'),
warning: t('warning.attributeId'), warning: t('warning.iskey'),
}, },
children: [{ children: [{
type: 'switch', type: 'switch',
field: 'attributeId', field: 'iskey',
value: false, value: false,
wrap: {show: false}, wrap: {show: false},
col: {show: false}, col: {show: false},

View File

@ -3,7 +3,7 @@ const ZhCn = {
form: { form: {
field: '字段 ID', field: '字段 ID',
title: '字段名称', title: '字段名称',
attributeId: '是否主键', iskey: '是否主键',
fieldtype: '字段类型', fieldtype: '字段类型',
info: '提示信息', info: '提示信息',
ignore: '忽略字段', ignore: '忽略字段',

Binary file not shown.