mirror of
https://github.com/pure-admin/vue-pure-admin.git
synced 2025-06-08 01:17:23 +08:00
feat: 新增 @pureadmin/table
编辑单元格示例
This commit is contained in:
parent
ab44405b52
commit
b5215b33bf
@ -79,10 +79,21 @@ const tableDataDrag = clone(tableData, true).map((item, index) => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const tableDataEdit = clone(tableData, true).map((item, index) => {
|
||||||
|
return Object.assign(
|
||||||
|
{
|
||||||
|
id: index + 1,
|
||||||
|
date: `${dayjs(new Date()).format("YYYY-MM")}-${index + 1}`
|
||||||
|
},
|
||||||
|
item
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
export {
|
export {
|
||||||
tableData,
|
tableData,
|
||||||
tableDataDrag,
|
tableDataDrag,
|
||||||
tableDataMore,
|
tableDataMore,
|
||||||
|
tableDataEdit,
|
||||||
tableDataImage,
|
tableDataImage,
|
||||||
tableDataSortable
|
tableDataSortable
|
||||||
};
|
};
|
||||||
|
94
src/views/pure-table/high/edit/columns.tsx
Normal file
94
src/views/pure-table/high/edit/columns.tsx
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
import { ref, computed } from "vue";
|
||||||
|
import { tableDataEdit } from "../data";
|
||||||
|
import { message } from "@pureadmin/components";
|
||||||
|
import { clone, delay } from "@pureadmin/utils";
|
||||||
|
|
||||||
|
// 温馨提示:编辑整行方法雷同,将cellRenderer后面渲染的组件抽出来做对应处理即可
|
||||||
|
export function useColumns() {
|
||||||
|
const inputValMap = ref({});
|
||||||
|
const activeIndex = ref(-1);
|
||||||
|
const dataList = ref(clone(tableDataEdit, true));
|
||||||
|
|
||||||
|
const comVal = computed(() => {
|
||||||
|
return index => {
|
||||||
|
return inputValMap.value[index]?.value;
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
const columns: TableColumnList = [
|
||||||
|
{
|
||||||
|
label: "ID",
|
||||||
|
prop: "id",
|
||||||
|
// class="flex-bc" flex-bc 代表 flex justify-between items-center 具体看 src/style/tailwind.css 文件
|
||||||
|
cellRenderer: ({ row, index }) => (
|
||||||
|
<div
|
||||||
|
class="flex-bc"
|
||||||
|
onMouseenter={() => (activeIndex.value = index)}
|
||||||
|
onMouseleave={() => onMouseleave(index)}
|
||||||
|
>
|
||||||
|
<p v-show={!comVal.value(index)}>{row.id}</p>
|
||||||
|
<el-input
|
||||||
|
v-show={comVal.value(index)}
|
||||||
|
modelValue={comVal.value(index)}
|
||||||
|
onInput={value => onChange(value, index)}
|
||||||
|
/>
|
||||||
|
<iconify-icon-offline
|
||||||
|
v-show={comVal.value(index)}
|
||||||
|
icon="check"
|
||||||
|
class="cursor-pointer ml-2 transition delay-100 hover:scale-150 hover:text-red-500"
|
||||||
|
onClick={() => onSure(index)}
|
||||||
|
/>
|
||||||
|
<iconify-icon-offline
|
||||||
|
v-show={activeIndex.value === index && !comVal.value(index)}
|
||||||
|
icon="edits"
|
||||||
|
class="cursor-pointer ml-2 transition delay-100 hover:scale-110 hover:text-red-500"
|
||||||
|
onClick={() => onEdit(row, index)}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "日期",
|
||||||
|
prop: "date"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "姓名",
|
||||||
|
prop: "name"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "地址",
|
||||||
|
prop: "address"
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
function onEdit({ id }, index) {
|
||||||
|
inputValMap.value[index] = Object.assign({}, inputValMap.value[index], {
|
||||||
|
value: id
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function onMouseleave(index) {
|
||||||
|
inputValMap.value[index]?.value
|
||||||
|
? (activeIndex.value = index)
|
||||||
|
: (activeIndex.value = -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onChange(value, index) {
|
||||||
|
inputValMap.value[index].value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onSure(index) {
|
||||||
|
dataList.value[index].id = inputValMap.value[index].value;
|
||||||
|
message.success(
|
||||||
|
`您编辑了第 ${index + 1} 行,编辑后数据为:${JSON.stringify(
|
||||||
|
dataList.value[index]
|
||||||
|
)}`
|
||||||
|
);
|
||||||
|
delay().then(() => (inputValMap.value[index].value = null));
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
columns,
|
||||||
|
dataList
|
||||||
|
};
|
||||||
|
}
|
9
src/views/pure-table/high/edit/index.vue
Normal file
9
src/views/pure-table/high/edit/index.vue
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { useColumns } from "./columns";
|
||||||
|
|
||||||
|
const { columns, dataList } = useColumns();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<pure-table row-key="id" border :data="dataList" :columns="columns" />
|
||||||
|
</template>
|
@ -2,6 +2,7 @@ import RowDrag from "./drag/row/index.vue";
|
|||||||
import ColumnDrag from "./drag/column/index.vue";
|
import ColumnDrag from "./drag/column/index.vue";
|
||||||
import Contextmenu from "./contextmenu/index.vue";
|
import Contextmenu from "./contextmenu/index.vue";
|
||||||
import Execl from "./execl/index.vue";
|
import Execl from "./execl/index.vue";
|
||||||
|
import Edit from "./edit/index.vue";
|
||||||
|
|
||||||
const rendContent = (val: string) =>
|
const rendContent = (val: string) =>
|
||||||
`代码位置:src/views/pure-table/high/${val}/index.vue`;
|
`代码位置:src/views/pure-table/high/${val}/index.vue`;
|
||||||
@ -30,5 +31,11 @@ export const list = [
|
|||||||
content: rendContent("execl"),
|
content: rendContent("execl"),
|
||||||
title: "导出execl",
|
title: "导出execl",
|
||||||
component: Execl
|
component: Execl
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: "edit",
|
||||||
|
content: rendContent("edit"),
|
||||||
|
title: "单元格编辑",
|
||||||
|
component: Edit
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user