表格页面
<template>
<el-row :gutter="0">
<el-col class="user-filter" :span="3"><div class="grid-content ep-bg-purple" />
<el-input v-model="filterText" placeholder="Filter keyword" />
<el-tree
ref="treeRef"
class="filter-tree"
:data="list"
:props="{children: 'children', label: 'label'}"
default-expand-all
:filter-node-method="filterNode"
:expand-on-click-node="false"
@node-click="NodeClick"
/>
</el-col>
<el-col :span="21">
<div class="default-main ba-table-box">
<el-alert class="ba-table-alert" v-if="baTable.table.remark" :title="baTable.table.remark" type="info" show-icon />
<TableHeader
:buttons="['refresh', 'add', 'edit', 'delete', 'comSearch', 'quickSearch', 'columnDisplay']"
:quick-search-placeholder="t('Quick search placeholder', { fields: t('goods.quick Search Fields') })"
>
<el-button style="margin-left:10px" class="table-header-operate" type="success" @click="exportExcel">
<span class="table-header-operate-text">导出</span>
</el-button>
</TableHeader>
<Table ref="tableRef">
<template #detail>
<el-table-column label="详情" width="130">
<template #default="scope">
<el-link type="success" @dblclick="isOpen = true">{{scope.row.sn}}</el-link>
</template>
</el-table-column>
</template>
</Table>
<PopupForm />
<Detail />
</div>
</el-col>
</el-row>
</template>
<script setup lang="ts">
import { ref, provide, onMounted } from 'vue'
import baTableClass from '/@/utils/baTable'
import { defaultOptButtons } from '/@/components/table'
import { baTableApi } from '/@/api/common'
import { useI18n } from 'vue-i18n'
import PopupForm from './popupForm.vue'
import Detail from './detail.vue'
import Table from '/@/components/table/index.vue'
import TableHeader from '/@/components/table/header/index.vue'
import goodsStatus from '/@/config/status/goodsStatus'
import { goodsCategory, exportGoods } from '/@/api/controllerUrls'
defineOptions({
name: 'goods',
})
const { t } = useI18n()
const tableRef = ref()
const optButtons: OptButton[] = defaultOptButtons(['edit', 'delete'])
const baTable = new baTableClass(
new baTableApi('/admin/Goods/'),
{
pk: 'id',
column: [
{ type: 'selection', operator: false },
{ label: t('goods.sn'), prop: 'id', render: 'slot', slotName: 'detail', operator: 'LIKE' }
],
dblClickNotEditColumn: ['all'],
},
{
defaultItems: { default_sku_id: '0', status: '1', type: '1', new_product_id: '0', weight: 0, goods_type_id: '0', supplier_id: '0', updated_at: null, created_at: null },
}, {
onTableDblclick({ row, column }) {
console.info('%c-------双击了单元格,双击具体操作执行前置--------', 'color:blue')
console.log('双击携带了数据', row, column)
}
}
)
provide('baTable', baTable)
onMounted(() => {
baTable.table.ref = tableRef.value
baTable.mount()
baTable.getIndex()?.then(() => {
baTable.initSort()
baTable.dragSort()
})
})
const exportExcel = () => {
window.location.href = exportGoods
}
const isOpen = ref(false)
provide('isOpen', isOpen)
</script>
<style scoped lang="scss">
.user-filter {
margin-top: 20px;
padding: 0 5px;
}
</style>
弹窗页
<template>
<div>
<el-dialog v-model="isOpen" title="添加用户">
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="商品信息" name="first">商品信息</el-tab-pane>
<el-tab-pane label="订单日志" name="second">订单日志</el-tab-pane>
<el-tab-pane label="采购日志" name="third">采购日志</el-tab-pane>
<el-tab-pane label="库存日志" name="fourth">库存日志</el-tab-pane>
</el-tabs>
</el-dialog>
</div>
</template>
<script setup lang='ts'>
import { ref, inject } from 'vue'
import type { TabsPaneContext } from 'element-plus'
const activeName = ref('first')
const handleClick = (tab: TabsPaneContext, event: Event) => {
console.log(tab, event)
}
const isOpen = inject('isOpen')
</script>
<style>
.demo-tabs > .el-tabs__content {
padding: 32px;
color: #6b778c;
font-size: 32px;
font-weight: 600;
}
</style>