Commit 09f8dc0f authored by 杨柠瑞's avatar 杨柠瑞

添加外链支持

parent 32acc360
......@@ -149,6 +149,32 @@
type: Array,
required: false
},
/**
* 用来将本表的外链字段(table_id类似的字段)指向的外链表相关联, 格式为:
* {
* "hm_user": { //外链表 表名 本表所对应的主键表)
* includes:['user_id'] // 与主表所对应的外键
* }
* }
*
*/
includes: {
type: Object,
required: false
},
/**
* 用来将其他表的外链字段指向本表关联,同时返回数据, 格式为:
* {
* 'auth_token': { //主键id所对应的外键表 表名1 (本表所对应的外键表)
* includes: ['user_id'] //外键表的外键字段
* }
* }
*/
refers: {
type: Object,
required: false
},
/**
* 指定要显示的列。默认为根据schema得到的所有列。完整示例为:
* [
......@@ -192,7 +218,11 @@
* "showRefresh": false, //默认不显示刷新按钮
* "showDeleteButton": false, //默认不显示删除按钮
* "buttonGroup": false //默认不以按钮组的方式呈现button
* showDetail: false // 默认不显示详情
* showDetail: {
* isShow: false, // 默认不显示详情
* showColumns: ['mobile', 'loginid', 'username', 'email']
* },
* dataProcessing(value){} // 对接口返回数据进行处理
* "changeValue": { // 数据库字段转化显示,例如(0=否,1=是)
* username: {1: '是', 0: '否'}
* },
......@@ -341,7 +371,10 @@
const tableName = self.schema['modelUnderscore']
const filters = {}
filters[tableName] = {}
_.each(_.cloneDeep(self.filters), function(filter) {
_.each(_.cloneDeep(self.filters), function(filter, index) {
if (filter.isShow === undefined) {
self.filters[index].isShow = true
}
filters[tableName] = Object.assign(filters[tableName], filter)
})
delete filters[tableName]['placeholder']
......@@ -388,13 +421,34 @@
params.filters = self.filterParams
params.filters = this.deleteFilter(params.filters)
if (self.includes) {
params.includes = self.includes
}
if (self.refers) {
params.refers = self.refers
}
request(self.schema.modelUnderscorePlural, {
params: params
}).then(resp => {
// 数据库字段转化显示
if (self.options.changeValue) {
resp.data = self.changeValue(resp.data)
}
if (resp.data[0].superior !== undefined && resp.data[0].includes !== undefined &&
resp.data[0].refers !== undefined && resp.data[0].relates !== undefined) {
self.list = []
_.each(resp.data, function(item, index) {
self.list.push(item.superior)
})
} else {
self.list = resp.data
}
// 数据处理
if (self.options.dataProcessing) {
self.list = self.options.dataProcessing(resp.data)
}
self.total = parseInt(resp.headers.total)
self.listLoading = false
})
......
......@@ -3,6 +3,8 @@
<hm-complex-table :schema="schema['HmUser']"
:columns="showUserColumns"
:filters="userFilters"
:includes="userIncludes"
:refers="userRefers"
:options="userOptions"></hm-complex-table>
</div>
</template>
......@@ -10,6 +12,7 @@
<script>
import HmComplexTable from './HmComplexTable.vue'
import schema from '../../schemas/hm_org_schema'
import _ from 'lodash'
export default {
name: 'HmComplexTableIndex',
......@@ -21,11 +24,21 @@
},
data() {
return {
showUserColumns: ['mobile', 'loginid', 'username', 'email', 'securityLevel'],
showUserColumns: ['mobile', 'loginid', 'username', 'email'],
userFilters: [
{ placeholder: '过滤手机号', 'mobile': { 'like': '' }, isShow: true },
{ placeholder: '过滤用户名', 'username': { 'equalTo': '' }, isShow: true }
]
],
userIncludes: {
'hm_user': {
includes: ['user_id']
}
},
userRefers: {
'auth_token': {
includes: ['userId']
}
}
}
},
filters: {
......@@ -67,6 +80,18 @@
showDetail: {
isShow: true,
showColumns: ['mobile', 'loginid', 'username', 'email']
},
dataProcessing(value) {
let list = []
if (value[0].superior !== undefined && value[0].includes !== undefined &&
value[0].refers !== undefined && value[0].relates !== undefined) {
_.each(value, function(item, index) {
list.push(item.superior)
})
} else {
list = value
}
return list
}
}
},
......
......@@ -3487,7 +3487,7 @@ const ModelSchema = {
]
},
'HmUser': {
'model': 'HmUser3',
'model': 'HmUser',
'modelPlural': 'HmUsers',
'modelCamel': 'hmUser',
'modelCamelPlural': 'hmUsers',
......@@ -3505,6 +3505,13 @@ const ModelSchema = {
'modifier': 'yide',
'dataType': 'varchar(256)',
'length': '256',
'foreignTable': {
'model': 'authToken',
'modelCamel': 'authToken',
'modelCamelPlural': 'authTokens',
'modelUnderscore': 'auth_token',
'modelUnderscorePlural': 'auth_tokens'
},
'codeCamel': 'username',
'codeCamelPlural': 'usernames',
'codeUnderscore': 'username',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment