|
@@ -1,133 +0,0 @@
|
|
|
-import { tableDataEdit } from "../data";
|
|
|
-import { message } from "@/utils/message";
|
|
|
-import { ref, computed, Transition } from "vue";
|
|
|
-import { clone, delay } from "@pureadmin/utils";
|
|
|
-import EditPen from "@iconify-icons/ep/edit-pen";
|
|
|
-import Check from "@iconify-icons/ep/check";
|
|
|
-
|
|
|
-// 温馨提示:修改整行方法雷同,将cellRenderer后面渲染的组件抽出来做对应处理即可
|
|
|
-export function useColumns() {
|
|
|
- // 修改值(可多个)
|
|
|
- const inputValMap = ref({});
|
|
|
- // 是否正处于修改状态(可多个)
|
|
|
- const editStatus = ref({});
|
|
|
- // 当前激活的单元格(唯一)
|
|
|
- const activeIndex = ref(-1);
|
|
|
- const dataList = ref(clone(tableDataEdit, true));
|
|
|
-
|
|
|
- const comVal = computed(() => {
|
|
|
- return index => {
|
|
|
- return inputValMap.value[index]?.value;
|
|
|
- };
|
|
|
- });
|
|
|
-
|
|
|
- const editing = computed(() => {
|
|
|
- return index => {
|
|
|
- return editStatus.value[index]?.editing;
|
|
|
- };
|
|
|
- });
|
|
|
-
|
|
|
- const iconClass = computed(() => {
|
|
|
- return (index, other = false) => {
|
|
|
- return [
|
|
|
- "cursor-pointer",
|
|
|
- "ml-2",
|
|
|
- "transition",
|
|
|
- "delay-100",
|
|
|
- other
|
|
|
- ? ["hover:scale-110", "hover:text-red-500"]
|
|
|
- : editing.value(index) && ["scale-150", "text-red-500"]
|
|
|
- ];
|
|
|
- };
|
|
|
- });
|
|
|
-
|
|
|
- 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 w-full h-[32px]"
|
|
|
- onMouseenter={() => (activeIndex.value = index)}
|
|
|
- onMouseleave={() => onMouseleave(index)}
|
|
|
- >
|
|
|
- <p v-show={!editing.value(index)}>{row.id}</p>
|
|
|
- <Transition enter-active-class="animate__animated animate__fadeInUp animate__faster">
|
|
|
- <el-input
|
|
|
- v-show={editing.value(index)}
|
|
|
- modelValue={comVal.value(index)}
|
|
|
- onInput={value => onChange(value, index)}
|
|
|
- />
|
|
|
- </Transition>
|
|
|
- <iconify-icon-offline
|
|
|
- v-show={editing.value(index)}
|
|
|
- icon={Check}
|
|
|
- class={iconClass.value(index)}
|
|
|
- onClick={() => onSure(index)}
|
|
|
- />
|
|
|
- <iconify-icon-offline
|
|
|
- v-show={activeIndex.value === index && !editing.value(index)}
|
|
|
- icon={EditPen}
|
|
|
- class={iconClass.value(index, true)}
|
|
|
- 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
|
|
|
- });
|
|
|
- // 处于修改状态
|
|
|
- editStatus.value[index] = Object.assign({}, editStatus.value[index], {
|
|
|
- editing: true
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- 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(
|
|
|
- `您修改了第 ${index + 1} 行,修改后数据为:${JSON.stringify(
|
|
|
- dataList.value[index]
|
|
|
- )}`,
|
|
|
- {
|
|
|
- type: "success"
|
|
|
- }
|
|
|
- );
|
|
|
- // 修改状态关闭
|
|
|
- editStatus.value[index] = Object.assign({}, editStatus.value[index], {
|
|
|
- editing: false
|
|
|
- });
|
|
|
- delay().then(() => (inputValMap.value[index].value = null));
|
|
|
- }
|
|
|
-
|
|
|
- return {
|
|
|
- columns,
|
|
|
- dataList
|
|
|
- };
|
|
|
-}
|