|  | @@ -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
 | 
	
		
			
				|  |  | -  };
 | 
	
		
			
				|  |  | -}
 |