Skip to content

Commit 1e09946

Browse files
committed
远程接口返回数据位置读取
1 parent 742c4e0 commit 1e09946

File tree

4 files changed

+27
-14
lines changed

4 files changed

+27
-14
lines changed

src/components/generator/config.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ export const selectComponents = [
186186
label: '级联选择',
187187
url: 'https://www.fastmock.site/mock/f8d7a54fb1e60561e2f720d5a810009d/fg/cascaderList',
188188
method: 'get',
189-
dataKey: 'list',
189+
dataPath: 'list',
190+
dataConsumer: 'options',
190191
showLabel: true,
191192
labelWidth: null,
192193
tag: 'el-cascader',
@@ -561,7 +562,8 @@ export const layoutComponents = [
561562
label: '表格[开发中]',
562563
dataType: 'dynamic',
563564
method: 'get',
564-
dataKey: 'list',
565+
dataPath: 'list',
566+
dataConsumer: 'data',
565567
url: 'https://www.fastmock.site/mock/f8d7a54fb1e60561e2f720d5a810009d/fg/tableData',
566568
children: [{
567569
__config__: {

src/components/generator/js.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ function buildOptionMethod(methodName, model, methodList, scheme) {
232232
url: '${config.url}'
233233
}).then(resp => {
234234
var { data } = resp
235-
this.${model} = data.${config.dataKey}
235+
this.${model} = data.${config.dataPath}
236236
})
237237
},`
238238
methodList.push(str)

src/views/index/Home.vue

+21-10
Original file line numberDiff line numberDiff line change
@@ -267,24 +267,35 @@ export default {
267267
})
268268
},
269269
methods: {
270+
setObjectValueByStringKeys(obj, strKeys, val) {
271+
const arr = strKeys.split('.')
272+
arr.reduce((pre, item, i) => {
273+
if (arr.length === i + 1) {
274+
pre[item] = val
275+
} else if (Object.prototype.toString.call(pre[item]) !== '[Object Object]') {
276+
pre[item] = {}
277+
}
278+
return pre[item]
279+
}, obj)
280+
},
281+
setRespData(component, respData) {
282+
const { dataPath, renderKey, dataConsumer } = component.__config__
283+
if (!dataPath || !dataConsumer) return
284+
const data = dataPath.split('.').reduce((pre, item) => pre[item], respData)
285+
this.setObjectValueByStringKeys(component, dataConsumer, data)
286+
const i = this.drawingList.findIndex(item => item.__config__.renderKey === renderKey)
287+
if (i > -1) this.$set(this.drawingList, i, component)
288+
},
270289
fetchData(component) {
271-
const {
272-
dataType, method, url, dataKey, renderKey
273-
} = component.__config__
290+
const { dataType, method, url } = component.__config__
274291
if (dataType === 'dynamic' && method && url) {
275292
this.setLoading(component, true)
276293
this.$axios({
277294
method,
278295
url
279296
}).then(resp => {
280297
this.setLoading(component, false)
281-
if (dataKey) {
282-
component.data = dataKey.split('.').reduce((pre, item) => pre[item], resp.data)
283-
} else {
284-
component.data = resp.data
285-
}
286-
const i = this.drawingList.findIndex(item => item.__config__.renderKey === renderKey)
287-
if (i > -1) this.$set(this.drawingList, i, component)
298+
this.setRespData(component, resp.data)
288299
})
289300
}
290301
},

src/views/index/RightPanel.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@
376376
</el-form-item>
377377
<el-form-item label="数据位置">
378378
<el-input
379-
v-model="activeData.__config__.dataKey"
379+
v-model="activeData.__config__.dataPath"
380380
placeholder="请输入数据位置"
381381
@blur="$emit('fetch-data', activeData)"
382382
/>

0 commit comments

Comments
 (0)