buildadmin:表格中实现详情按钮

2023-12-16 21:50:11

其一:创建组件并在当前控制器中引入组件

<!-- 示例核心代码(1/3) -->
<!-- 详情组件在此处使用,但显示与否的判断是写在组件内的 -->
<Detail />

<!-- 引入组件 -->
import Detail from './detail.vue'

?其二:注册按钮

const optButtons: OptButton[] = defaultOptButtons(['edit', 'delete'])
放在此处之后
/**
 * 示例核心代码(2/3)
 * 表格操作按钮组 optButtons 只是个普通的数组,此处向其 push 一个 OptButton
 */
optButtons.push({
    render: 'tipButton',
    // name 是任意的
    name: 'detail',
    // title 是语言翻译 key
    title: 'treetable.detailBtnTitle',
    text: '',
    type: 'warning',
    icon: 'fa fa-search-plus icon',
    click(row, field) {
        console.info('%c-------详情按钮被点击了--------', 'color:blue')
        console.log('接受到行数据和列数据', row, field)
        console.log('%c赋值:baTable.table.extend!.showInfo = true', 'color:red')

        // 在 extend 上自定义一个变量标记详情弹窗显示状态,详情组件内以此判断显示即可!
        baTable.table.extend!.showInfo = true

        // 您也可以使用 baTable.form.operate,默认情况它有三个值`Add、Edit、空字符串`,前两个值将显示添加和编辑弹窗

        // 您也可以再来个 loading 态,然后请求详情数据等
        baTable.table.extend!.infoLoading = true
        setTimeout(() => {
            baTable.table.extend!.infoData = row
            baTable.table.extend!.infoLoading = false
        }, 1000)
    },
})

?其三:详情组件代码

<!-- 示例核心代码(3/3) -->
<script setup lang="ts">
import { inject } from 'vue'
import { timeFormat } from '/@/utils/common'
import type baTableClass from '/@/utils/baTable'

const baTable = inject('baTable') as baTableClass
</script>

<template>
    <el-dialog class="ba-operate-dialog" v-model="baTable.table.extend!.showInfo" width="50%">
        <template #header>
            <div class="title" v-drag="['.ba-operate-dialog', '.el-dialog__header']" v-zoom="'.ba-operate-dialog'">详情</div>
        </template>
        <div v-loading="baTable.table.extend!.infoLoading" class="info-box ba-markdown">
            <div v-if="baTable.table.extend!.infoData">
<!--                <div><code>baTable.table.extend!.showInfo == true</code>时,本弹窗就显示了,它是在按钮被点击时赋值的</div>-->

                <div class="mt-40">id:{{ baTable.table.extend!.infoData.id }}</div>
                <div>父级ID:{{ baTable.table.extend!.infoData.pid }}</div>
                <div>上下级:{{ baTable.table.extend!.infoData.name}}</div>
                <div>创建时间:{{ timeFormat(baTable.table.extend!.infoData.create_time) }}</div>
            </div>
        </div>
    </el-dialog>
</template>

<style scoped lang="scss">
.info-box {
    margin-top: 60px;
    div {
        width: 100%;
        text-align: center;
    }
    .mt-40 {
        margin-top: 40px;
    }
}
</style>

文章来源:https://blog.csdn.net/qq_53457276/article/details/135037968
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。