|  | @@ -5,7 +5,11 @@ import { clone, delay } from "@pureadmin/utils";
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // 温馨提示:编辑整行方法雷同,将cellRenderer后面渲染的组件抽出来做对应处理即可
 | 
	
		
			
				|  |  |  export function useColumns() {
 | 
	
		
			
				|  |  | +  // 编辑值(可多个)
 | 
	
		
			
				|  |  |    const inputValMap = ref({});
 | 
	
		
			
				|  |  | +  // 是否正处于编辑状态(可多个)
 | 
	
		
			
				|  |  | +  const editStatus = ref({});
 | 
	
		
			
				|  |  | +  // 当前激活的单元格(唯一)
 | 
	
		
			
				|  |  |    const activeIndex = ref(-1);
 | 
	
		
			
				|  |  |    const dataList = ref(clone(tableDataEdit, true));
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -15,6 +19,26 @@ export function useColumns() {
 | 
	
		
			
				|  |  |      };
 | 
	
		
			
				|  |  |    });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +  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(可编辑)",
 | 
	
	
		
			
				|  | @@ -22,26 +46,26 @@ export function useColumns() {
 | 
	
		
			
				|  |  |        // class="flex-bc" flex-bc 代表 flex justify-between items-center 具体看 src/style/tailwind.css 文件
 | 
	
		
			
				|  |  |        cellRenderer: ({ row, index }) => (
 | 
	
		
			
				|  |  |          <div
 | 
	
		
			
				|  |  | -          class="flex-bc"
 | 
	
		
			
				|  |  | +          class="flex-bc h-[32px]"
 | 
	
		
			
				|  |  |            onMouseenter={() => (activeIndex.value = index)}
 | 
	
		
			
				|  |  |            onMouseleave={() => onMouseleave(index)}
 | 
	
		
			
				|  |  |          >
 | 
	
		
			
				|  |  | -          <p v-show={!comVal.value(index)}>{row.id}</p>
 | 
	
		
			
				|  |  | +          <p v-show={!editing.value(index)}>{row.id}</p>
 | 
	
		
			
				|  |  |            <el-input
 | 
	
		
			
				|  |  | -            v-show={comVal.value(index)}
 | 
	
		
			
				|  |  | +            v-show={editing.value(index)}
 | 
	
		
			
				|  |  |              modelValue={comVal.value(index)}
 | 
	
		
			
				|  |  |              onInput={value => onChange(value, index)}
 | 
	
		
			
				|  |  |            />
 | 
	
		
			
				|  |  |            <iconify-icon-offline
 | 
	
		
			
				|  |  | -            v-show={comVal.value(index)}
 | 
	
		
			
				|  |  | +            v-show={editing.value(index)}
 | 
	
		
			
				|  |  |              icon="check"
 | 
	
		
			
				|  |  | -            class="cursor-pointer ml-2 transition delay-100 hover:scale-150 hover:text-red-500"
 | 
	
		
			
				|  |  | +            class={iconClass.value(index)}
 | 
	
		
			
				|  |  |              onClick={() => onSure(index)}
 | 
	
		
			
				|  |  |            />
 | 
	
		
			
				|  |  |            <iconify-icon-offline
 | 
	
		
			
				|  |  | -            v-show={activeIndex.value === index && !comVal.value(index)}
 | 
	
		
			
				|  |  | +            v-show={activeIndex.value === index && !editing.value(index)}
 | 
	
		
			
				|  |  |              icon="edits"
 | 
	
		
			
				|  |  | -            class="cursor-pointer ml-2 transition delay-100 hover:scale-110 hover:text-red-500"
 | 
	
		
			
				|  |  | +            class={iconClass.value(index, true)}
 | 
	
		
			
				|  |  |              onClick={() => onEdit(row, index)}
 | 
	
		
			
				|  |  |            />
 | 
	
		
			
				|  |  |          </div>
 | 
	
	
		
			
				|  | @@ -65,6 +89,10 @@ export function useColumns() {
 | 
	
		
			
				|  |  |      inputValMap.value[index] = Object.assign({}, inputValMap.value[index], {
 | 
	
		
			
				|  |  |        value: id
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  | +    // 处于编辑状态
 | 
	
		
			
				|  |  | +    editStatus.value[index] = Object.assign({}, editStatus.value[index], {
 | 
	
		
			
				|  |  | +      editing: true
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    function onMouseleave(index) {
 | 
	
	
		
			
				|  | @@ -84,6 +112,10 @@ export function useColumns() {
 | 
	
		
			
				|  |  |          dataList.value[index]
 | 
	
		
			
				|  |  |        )}`
 | 
	
		
			
				|  |  |      );
 | 
	
		
			
				|  |  | +    // 编辑状态关闭
 | 
	
		
			
				|  |  | +    editStatus.value[index] = Object.assign({}, editStatus.value[index], {
 | 
	
		
			
				|  |  | +      editing: false
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  |      delay().then(() => (inputValMap.value[index].value = null));
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  
 |