2021-10-09 02:41:52 +00:00
|
|
|
<template>
|
2021-10-09 21:48:45 +00:00
|
|
|
<div>
|
2021-10-09 02:41:52 +00:00
|
|
|
<table class="layui-hide" id="test" lay-filter="test"></table>
|
|
|
|
<div
|
|
|
|
class="layui-form layui-border-box layui-table-view layui-table-view-1"
|
|
|
|
>
|
2021-10-10 20:10:14 +00:00
|
|
|
<div class="layui-table-tool" v-if="defaultToolbar || slot.toolbar">
|
2021-10-10 16:57:32 +00:00
|
|
|
<div class="layui-table-tool-temp">
|
|
|
|
<div class="layui-btn-container">
|
|
|
|
<slot name="toolbar"></slot>
|
|
|
|
</div>
|
|
|
|
</div>
|
2021-10-10 20:10:14 +00:00
|
|
|
<div class="layui-table-tool-self" v-if="defaultToolbar">
|
2021-10-09 02:41:52 +00:00
|
|
|
<div class="layui-inline" title="筛选列" lay-event="LAYTABLE_COLS">
|
|
|
|
<i class="layui-icon layui-icon-cols"></i>
|
|
|
|
</div>
|
|
|
|
<div class="layui-inline" title="导出" lay-event="LAYTABLE_EXPORT">
|
|
|
|
<i class="layui-icon layui-icon-export"></i>
|
|
|
|
</div>
|
|
|
|
<div class="layui-inline" title="打印" lay-event="LAYTABLE_PRINT">
|
|
|
|
<i class="layui-icon layui-icon-print"></i>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="layui-table-box">
|
|
|
|
<div class="layui-table-header">
|
|
|
|
<table cellspacing="0" cellpadding="0" border="0" class="layui-table">
|
|
|
|
<thead>
|
|
|
|
<tr>
|
2021-10-10 22:20:09 +00:00
|
|
|
<th class="layui-table-col-special" v-if="checkbox">
|
2021-10-09 21:48:45 +00:00
|
|
|
<div class="layui-table-cell laytable-cell-checkbox">
|
2021-10-10 22:20:09 +00:00
|
|
|
<lay-checkbox skin="primary" v-model="tableSelectedKeys" label="all"></lay-checkbox>
|
2021-10-09 02:41:52 +00:00
|
|
|
</div>
|
|
|
|
</th>
|
2021-10-09 21:48:45 +00:00
|
|
|
<th v-for="column in columns" :key="column">
|
|
|
|
<div
|
|
|
|
class="layui-table-cell"
|
|
|
|
:style="{ width: column.width }"
|
|
|
|
>
|
|
|
|
<span>{{ column.title }}</span>
|
2021-10-09 02:41:52 +00:00
|
|
|
</div>
|
|
|
|
</th>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
<div class="layui-table-body layui-table-main">
|
|
|
|
<table cellspacing="0" cellpadding="0" border="0" class="layui-table">
|
|
|
|
<tbody>
|
2021-10-09 21:48:45 +00:00
|
|
|
<template v-for="data in dataSource" :key="data">
|
|
|
|
<tr>
|
2021-10-10 22:20:09 +00:00
|
|
|
<td class="layui-table-col-special" v-if="checkbox">
|
2021-10-09 21:48:45 +00:00
|
|
|
<div class="layui-table-cell laytable-cell-checkbox">
|
2021-10-10 22:20:09 +00:00
|
|
|
<lay-checkbox skin="primary" v-model="tableSelectedKeys" :label="data[id]"></lay-checkbox>
|
2021-10-09 02:41:52 +00:00
|
|
|
</div>
|
2021-10-09 21:48:45 +00:00
|
|
|
</td>
|
|
|
|
|
2021-10-10 07:22:07 +00:00
|
|
|
<template v-for="column in columns" :key="column">
|
|
|
|
<template v-if="column.customSlot">
|
|
|
|
<td>
|
|
|
|
<div
|
|
|
|
:style="{ width: column.width }"
|
|
|
|
style="padding: 0px 16px"
|
|
|
|
>
|
|
|
|
<slot :name="column.customSlot" :data="data"></slot>
|
|
|
|
</div>
|
|
|
|
</td>
|
|
|
|
</template>
|
2021-10-10 16:57:32 +00:00
|
|
|
|
2021-10-10 07:22:07 +00:00
|
|
|
<template
|
|
|
|
v-else
|
|
|
|
v-for="(value, key, index) in data"
|
|
|
|
:key="index"
|
|
|
|
>
|
2021-10-09 21:48:45 +00:00
|
|
|
<td v-if="column.key == key">
|
|
|
|
<div
|
|
|
|
:style="{ width: column.width }"
|
|
|
|
style="padding: 0px 16px"
|
|
|
|
>
|
|
|
|
<span v-if="column.slot">
|
|
|
|
<slot :name="column.slot" :data="data"></slot>
|
|
|
|
</span>
|
|
|
|
<span v-else> {{ value }} </span>
|
|
|
|
</div>
|
|
|
|
</td>
|
|
|
|
</template>
|
|
|
|
</template>
|
|
|
|
</tr>
|
|
|
|
</template>
|
2021-10-09 02:41:52 +00:00
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
|
|
|
</div>
|
2021-10-10 16:44:00 +00:00
|
|
|
<div v-if="page" class="layui-table-page">
|
2021-10-10 16:57:32 +00:00
|
|
|
<lay-page
|
|
|
|
:total="page.total"
|
|
|
|
:limit="page.limit"
|
|
|
|
@jump="change"
|
|
|
|
showPage
|
|
|
|
showLimit
|
|
|
|
showSkip
|
|
|
|
></lay-page>
|
2021-10-09 02:41:52 +00:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
<script setup name="LayTable" lang="ts">
|
2021-10-10 22:20:09 +00:00
|
|
|
import { defineProps, ref, useSlots, watch, withDefaults, defineEmits } from 'vue'
|
2021-10-09 17:07:37 +00:00
|
|
|
|
2021-10-10 22:20:09 +00:00
|
|
|
const props = withDefaults(
|
2021-10-09 17:07:37 +00:00
|
|
|
defineProps<{
|
2021-10-11 01:29:45 +00:00
|
|
|
id?: string,
|
2021-10-09 21:48:45 +00:00
|
|
|
skin?: string
|
2021-10-10 16:44:00 +00:00
|
|
|
page?: Object
|
2021-10-10 22:20:09 +00:00
|
|
|
checkbox?: Boolean
|
2021-10-11 01:29:45 +00:00
|
|
|
columns?: Object[]
|
|
|
|
dataSource?: Object[]
|
|
|
|
defaultToolbar?: Boolean
|
2021-10-10 22:20:09 +00:00
|
|
|
selectedKeys: Array<String>
|
|
|
|
}>(),
|
|
|
|
{
|
|
|
|
id: "id",
|
|
|
|
selectedKeys: function() { return [] }
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
const tableSelectedKeys = ref(props.selectedKeys)
|
2021-10-09 17:07:37 +00:00
|
|
|
|
2021-10-10 16:44:00 +00:00
|
|
|
const emit = defineEmits(['change'])
|
|
|
|
|
2021-10-09 21:48:45 +00:00
|
|
|
const slot = useSlots()
|
|
|
|
const slots = slot.default && slot.default()
|
2021-10-10 16:44:00 +00:00
|
|
|
|
2021-10-10 16:57:32 +00:00
|
|
|
const change = function (page: any) {
|
|
|
|
emit('change', page)
|
2021-10-10 16:44:00 +00:00
|
|
|
}
|
2021-10-09 21:48:45 +00:00
|
|
|
</script>
|