[update]修改El-table

This commit is contained in:
OrangeM21 2020-03-26 19:28:45 +08:00
parent 215ebd3686
commit 888f64e3ca
28 changed files with 113 additions and 36 deletions

View File

@ -9,7 +9,7 @@
<!-- @submit.native.prevent -->
<!-- 阻止表单提交的默认行为 -->
<!-- https://www.w3.org/MarkUp/html-spec/html-spec_8.html#SEC8.2 -->
<el-form-renderer
<!-- <el-form-renderer
v-if="hasSearchForm"
ref="searchForm"
:content="_searchForm"
@ -21,11 +21,11 @@
:slot="slot.replace('search:', 'id:')"
:name="slot"
/>
<!--@slot 额外的搜索内容, 当searchForm不满足需求时可以使用-->
<slot name="search" />
@slot 额外的搜索内容, 当searchForm不满足需求时可以使用-->
<!-- <slot name="search" />
<el-form-item>
<!--https://github.com/ElemeFE/element/pull/5920-->
<el-button
https://github.com/ElemeFE/element/pull/5920-->
<!-- <el-button
native-type="submit"
type="primary"
:size="buttonSize"
@ -33,7 +33,7 @@
>查询</el-button>
<el-button :size="buttonSize" @click="resetSearch">重置</el-button>
</el-form-item>
</el-form-renderer>
</el-form-renderer> -->
<el-form v-if="hasHeader">
<el-form-item>
@ -66,10 +66,58 @@
:disabled="selected.length === 0 || (single && selected.length > 1)"
@click="onDefaultDelete(single ? selected[0] : selected)"
>{{ deleteText }}</el-button>
<!-- @dropdown 修改点: 是否有Actions按钮 -->
<el-dropdown v-if="hasAction" class="slotaction">
<el-button size="small" :disabled="selected.length>0?false:true">
更多菜单<i class="el-icon-arrow-down el-icon--right" />
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>批量删除</el-dropdown-item>
<el-dropdown-item>批量更新</el-dropdown-item>
<el-dropdown-item>禁用所选</el-dropdown-item>
<el-dropdown-item>激活所选</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<!-- 样式bug -->
<el-dropdown v-if="hasUpload" class="slotupload" style="float:right;">
<el-button size="small">
CSV<i class="el-icon-arrow-down el-icon--right" />
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>上传</el-dropdown-item>
<el-dropdown-item>下载</el-dropdown-item>
<el-dropdown-item>更新</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-form-renderer
v-if="hasSearchForm"
ref="searchForm"
class="slotsearch"
style="float:right;"
:content="_searchForm"
inline
@submit.native.prevent
>
<slot
v-for="slot in searchLocatedSlotKeys"
:slot="slot.replace('search:', 'id:')"
:name="slot"
/>
<!--@slot 额外的搜索内容, 当searchForm不满足需求时可以使用-->
<slot name="search" />
<el-form-item style="display:none">
<!--https://github.com/ElemeFE/element/pull/5920-->
<el-button
native-type="submit"
type="primary"
:size="buttonSize"
@click="search"
>查询</el-button>
<el-button :size="buttonSize" @click="resetSearch">重置</el-button>
</el-form-item>
</el-form-renderer>
<!--@slot 额外的header内容, 当headerButtons不满足需求时可以使用作用域传入selected -->
<slot name="header" :selected="selected" />
<!--@collapse 自定义折叠按钮, 默认的样式文案不满足时可以使用scope 默认返回当前折叠状态 Boolean -->
<slot name="collapse" :isSearchCollapse="isSearchCollapse">
<el-button
@ -169,8 +217,22 @@
<!--非树-->
<template v-else>
<!-- 硬核Hack修改 -->
<el-data-table-column
v-for="col in columns"
key="selection-key"
v-bind="{align: columnsAlign, ...columns[0]}"
/>
<el-data-table-column
key="columns-url"
v-bind="{align: columnsAlign, ...columns[1]}"
>
<template slot-scope="scope">
<!-- 硬编码到ID -->
<el-button type="text" size="small" style="font-size:14px" @click="$router.push({name: columns[1].url, params: { id: scope.row.id }})">{{ scope.row.name }}</el-button>
</template>
</el-data-table-column>
<el-data-table-column
v-for="col in columns.filter((c, i) => i !== 0&& i !=1) "
:key="col.prop"
v-bind="{align: columnsAlign, ...col}"
/>
@ -436,6 +498,20 @@ export default {
type: Boolean,
default: true
},
/**
* 是否有动作按钮
*/
hasAction: {
type: Boolean,
default: true
},
/**
* 是否有动作按钮
*/
hasUpload: {
type: Boolean,
default: true
},
/**
* 是否有编辑按钮
*/
@ -813,14 +889,12 @@ export default {
hasSelect() {
return this.columns.length && this.columns[0].type === 'selection'
},
selectable() {
if (this.hasSelect && this.columns[0].selectable) {
return this.columns[0].selectable
}
return () => true
},
columnsAlign() {
if (this.columns.some(col => col.columns && col.columns.length)) {
//
@ -1091,8 +1165,8 @@ export default {
//
// , row MouseEvent
onDefaultNew(row) {
this.row = row
this.$refs.dialog.show(dialogModes.new)
// New
this.onNew()
},
onDefaultView(row) {
this.row = row

View File

@ -11,4 +11,8 @@ const i18n = new VueI18n({
})
locale.i18n((key, value) => i18n.t(key, value)) // 重点: 为了实现element插件的多语言切换
Vue.prototype.$ti = (key) => {
i18n.t(key.toLowerCase)
}
export default i18n

View File

@ -1,6 +1,6 @@
<template>
<div class="wrapper-content">
<slot></slot>
<slot />
</div>
</template>

View File

@ -4,7 +4,7 @@
<div class="page-heading-left-title">
<slot><h2>{{ title }}</h2></slot>
</div>
<Breadcrumb></Breadcrumb>
<Breadcrumb />
</el-col>
<el-col :span="4" />
</el-row>

View File

@ -4,7 +4,7 @@
<slot name="title">{{ pageTitle }}</slot>
</PageHeading>
<PageContent>
<slot name="content"></slot>
<slot name="content" />
</PageContent>
</div>
</template>

View File

@ -4,6 +4,5 @@ export { default as AppMain } from './AppMain'
export { default as Page } from './Page'
export { default as ListTables } from './ListTables'
export { default as TagsView } from './TagsView'
export { default as ElDataTable } from './el-data-table'
export { default as Footer } from './Footer'
export { default as IBox } from './IBox'

View File

@ -36,8 +36,8 @@ Vue.use(ElementUI, { locale })
Vue.config.productionTip = false
import ElDataTable from '@/layout/components/el-data-table/el-data-table.vue'
import ElFormRenderer from '@/layout/components/el-form-renderer/el-form-renderer.vue'
import ElDataTable from '@/components/el-data-table/el-data-table.vue'
import ElFormRenderer from '@/components/el-form-renderer/el-form-renderer.vue'
import {
Message,
MessageBox

View File

@ -1,20 +1,6 @@
<template>
<IBox :title="$t('route.UserList')">
<el-data-table v-bind="tableConfig" style="margin:0 12px 12px 12px;">
<template v-slot:header="{selected}">
<el-dropdown>
<el-button size="small" :disabled="selected.length>0?false:true">
更多菜单<i class="el-icon-arrow-down el-icon--right" />
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>批量删除</el-dropdown-item>
<el-dropdown-item>批量更新</el-dropdown-item>
<el-dropdown-item>禁用所选</el-dropdown-item>
<el-dropdown-item>激活所选</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-data-table>
<el-data-table v-bind="tableConfig" :on-new="onNew" style="margin:0 12px 12px 12px;" />
</IBox>
</template>
@ -41,6 +27,8 @@ export default {
hasEdit: false, //
newText: '创建',
hasDelete: false,
hasAction: true, //
hasUpload: false,
hasNew: true,
// editText: this.$t('action.update'), //
tableAttrs: {
@ -67,6 +55,15 @@ export default {
}
}
],
searchForm: [
{
type: 'input',
id: 'search', //
width: '200px',
el: { placeholder: '搜索', clearable: true, size: 'small' },
rules: [{ required: false, trigger: 'blur', max: 12 }]
}
],
columns: [
{ type: 'selection' },
// Bug
@ -74,7 +71,8 @@ export default {
{
prop: 'name',
label: this.$t('users.name'),
sortable: true //
sortable: true, //
url: 'UserDetail' // Template
},
{
prop: 'username',
@ -104,7 +102,9 @@ export default {
created() {
},
methods: {
onNew: () => {
alert('创建')
}
}
}
</script>