添加父子表格联动页面
parent
ffef49a080
commit
9c7a2ac1fb
@ -0,0 +1,350 @@
|
|||||||
|
<template>
|
||||||
|
<div class="p-2">
|
||||||
|
<el-card shadow="never">
|
||||||
|
<el-form label-width="120px" label-position="right" :inline="true" :model="queryForm" class="demo-form-inline">
|
||||||
|
<el-form-item label="字段1">
|
||||||
|
<el-input v-model="queryForm.user" placeholder="字段1" clearable/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="字段2">
|
||||||
|
<el-select
|
||||||
|
v-model="queryForm.region"
|
||||||
|
placeholder="字段2"
|
||||||
|
clearable
|
||||||
|
>
|
||||||
|
<el-option label="选项1" value="shanghai"/>
|
||||||
|
<el-option label="选项2" value="beijing"/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="字段3">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="queryForm.date"
|
||||||
|
type="date"
|
||||||
|
placeholder="字段3"
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="query">查询</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<el-card style="margin-top: 8px" shadow="never">
|
||||||
|
<template #header>
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="parentTableAdd">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="success" plain icon="Edit" :disabled="ids.length !== 1" @click="parentTableUpdate()">修改
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" plain icon="Delete" :disabled="ids.length < 1" @click="parentTableDelete()">删除
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="warning" plain icon="Download" @click="handleExport">导出</el-button>
|
||||||
|
</el-col>
|
||||||
|
<right-toolbar v-model:showSearch="showSearch" :columns="columns" :search="true"
|
||||||
|
@queryTable="getList"></right-toolbar>
|
||||||
|
</el-row>
|
||||||
|
</template>
|
||||||
|
<el-table :data="tableData" style="width: 100%" @cell-click="parentTableCellClick"
|
||||||
|
@selection-change="selectionChange" ref="parentTableRef">
|
||||||
|
<el-table-column type="selection" width="55"/>
|
||||||
|
<el-table-column label="Date" prop="date"/>
|
||||||
|
<el-table-column label="Date" prop="name"/>
|
||||||
|
<el-table-column label="Operations" fixed="right" width="200">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button size="small" @click.stop="viewDetails(scope.row)">
|
||||||
|
查看
|
||||||
|
</el-button>
|
||||||
|
<el-button size="small" @click.stop="parentTableUpdate(scope.row)">
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
type="danger"
|
||||||
|
@click.stop="parentTableDelete(scope.row)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<el-card style="margin-top: 8px" shadow="never">
|
||||||
|
<el-table :data="tableData1" style="width: 100%">
|
||||||
|
<el-table-column label="Date" prop="date"/>
|
||||||
|
<el-table-column label="Date" prop="name"/>
|
||||||
|
<el-table-column label="Operations" fixed="right" width="200">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button size="small" @click="handleEdit(scope.$index, scope.row)">
|
||||||
|
查看
|
||||||
|
</el-button>
|
||||||
|
<el-button size="small" @click="handleEdit(scope.$index, scope.row)">
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
type="danger"
|
||||||
|
@click="handleDelete(scope.$index, scope.row)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-card>
|
||||||
|
|
||||||
|
<el-dialog v-model="dialogVisible" :title="dialogTitle" width="100%" fullscreen>
|
||||||
|
<el-card shadow="never">
|
||||||
|
<el-form :model="dialogForm" :inline="true">
|
||||||
|
<el-form-item label="字段1" label-width="120px">
|
||||||
|
<el-input v-model="dialogForm.name" autocomplete="off"/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="字段2" label-width="120px">
|
||||||
|
<el-select v-model="dialogForm.region" placeholder="Please select a zone">
|
||||||
|
<el-option label="Zone No.1" value="shanghai"/>
|
||||||
|
<el-option label="Zone No.2" value="beijing"/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
<el-card style="margin-top: 8px" shadow="never">
|
||||||
|
<el-row :gutter="10" class="mb8">
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="primary" plain icon="Plus" @click="addDialogTableCell">新增</el-button>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-table :data="dialogtable" style="width: 100%">
|
||||||
|
<el-table-column label="字段1" prop="date">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-select
|
||||||
|
v-model="scope.row.date"
|
||||||
|
placeholder="Select"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
label="1"
|
||||||
|
value="1"
|
||||||
|
/>
|
||||||
|
<el-option
|
||||||
|
label="2"
|
||||||
|
value="2"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="字段2" prop="name">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-input v-model="scope.row.name" style="width: 240px" placeholder="Please input" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="Operations" fixed="right" width="200">
|
||||||
|
<template #default="scope">
|
||||||
|
<el-button size="small" @click="handleEdit(scope.$index, scope.row)">
|
||||||
|
查看
|
||||||
|
</el-button>
|
||||||
|
<el-button size="small" @click="handleEdit(scope.$index, scope.row)">
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
type="danger"
|
||||||
|
@click="handleDelete(scope.$index, scope.row)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</el-card>
|
||||||
|
<template #footer>
|
||||||
|
<div class="dialog-footer">
|
||||||
|
<el-button @click="dialogVisible = false">关闭</el-button>
|
||||||
|
<el-button type="primary" @click="dialogSubmit">
|
||||||
|
确定
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup name="Linkage" lang="ts">
|
||||||
|
|
||||||
|
import {reactive} from 'vue'
|
||||||
|
import {ElMessage, ElMessageBox} from 'element-plus'
|
||||||
|
|
||||||
|
interface User {
|
||||||
|
date: string
|
||||||
|
name: string
|
||||||
|
address: string
|
||||||
|
}
|
||||||
|
|
||||||
|
const dialogVisible = ref(false)
|
||||||
|
const dialogTitle = ref('添加')
|
||||||
|
const dialogForm = reactive({})
|
||||||
|
|
||||||
|
const queryForm = reactive({
|
||||||
|
user: '',
|
||||||
|
region: '',
|
||||||
|
date: '',
|
||||||
|
})
|
||||||
|
const parentTableRef = ref()
|
||||||
|
const tableData = ref([
|
||||||
|
{
|
||||||
|
date: '2016-05-03',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
date: '2016-05-02',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
date: '2016-05-04',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
date: '2016-05-01',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles',
|
||||||
|
},
|
||||||
|
])
|
||||||
|
const ids = ref([])
|
||||||
|
const tableData1 = ref([
|
||||||
|
{
|
||||||
|
date: '2016-05-03',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
date: '2016-05-02',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
date: '2016-05-04',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
date: '2016-05-01',
|
||||||
|
name: 'Tom',
|
||||||
|
address: 'No. 189, Grove St, Los Angeles',
|
||||||
|
},
|
||||||
|
])
|
||||||
|
const dialogtable = ref([])
|
||||||
|
|
||||||
|
const onSubmit = () => {
|
||||||
|
console.log('submit!')
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleEdit = (index: number, row: User) => {
|
||||||
|
console.log(index, row)
|
||||||
|
}
|
||||||
|
const handleDelete = (index: number, row: User) => {
|
||||||
|
console.log(index, row)
|
||||||
|
}
|
||||||
|
const query = () => {
|
||||||
|
console.log(queryForm)
|
||||||
|
ids.value = []
|
||||||
|
parentTableRef.value.clearSelection()
|
||||||
|
}
|
||||||
|
|
||||||
|
// 父表格行点击
|
||||||
|
const parentTableCellClick = (e) => {
|
||||||
|
console.log(e.date)
|
||||||
|
tableData1.value = tableData1.value.map(v => {
|
||||||
|
return {
|
||||||
|
...v,
|
||||||
|
date: e.date
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表格多选
|
||||||
|
const selectionChange = (e) => {
|
||||||
|
ids.value = e.map(v => v.name)
|
||||||
|
console.log(ids.value)
|
||||||
|
}
|
||||||
|
// 查看
|
||||||
|
const viewDetails = (e) => {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 父表格新增
|
||||||
|
const parentTableAdd = () => {
|
||||||
|
dialogVisible.value = true
|
||||||
|
}
|
||||||
|
// 父表格修改
|
||||||
|
const parentTableUpdate = (e) => {
|
||||||
|
let id = ref(null)
|
||||||
|
if (e) {
|
||||||
|
id.value = e.name
|
||||||
|
} else {
|
||||||
|
id.value = ids.value?.[0]
|
||||||
|
}
|
||||||
|
if (!id.value) return
|
||||||
|
dialogVisible.value = true
|
||||||
|
}
|
||||||
|
// 父表格删除
|
||||||
|
const parentTableDelete = (e) => {
|
||||||
|
const delList = ref([])
|
||||||
|
if (e) {
|
||||||
|
delList.value = [e.name]
|
||||||
|
} else {
|
||||||
|
delList.value = ids.value
|
||||||
|
}
|
||||||
|
console.log(delList.value)
|
||||||
|
ElMessageBox.confirm(
|
||||||
|
'确定要删除这些数据吗?',
|
||||||
|
'Warning',
|
||||||
|
{
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
cancelButtonText: '取消',
|
||||||
|
type: 'warning',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.then(() => {
|
||||||
|
ElMessage({
|
||||||
|
type: 'success',
|
||||||
|
message: '删除完成',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
ElMessage({
|
||||||
|
type: 'info',
|
||||||
|
message: '取消',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加子表格行
|
||||||
|
const addDialogTableCell = () => {
|
||||||
|
dialogtable.value.push({})
|
||||||
|
}
|
||||||
|
|
||||||
|
// dialog提交
|
||||||
|
const dialogSubmit = () => {
|
||||||
|
console.log(dialogForm)
|
||||||
|
console.log(dialogtable.value)
|
||||||
|
dialogVisible.value = false
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
.demo-form-inline .el-input {
|
||||||
|
--el-input-width: 220px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-form-inline .el-select {
|
||||||
|
--el-select-width: 220px;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue