zhang_12370
5 天以前 c22c95ad32584dbc16a3628cbc4b6ae41de2f61e
采购优化删除
已修改1个文件
已添加1个文件
152 ■■■■ 文件已修改
src/hooks/useDelete.js 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procureMent/index.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/hooks/useDelete.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
/**
 * é€šç”¨åˆ é™¤åŠŸèƒ½ç»„åˆå¼å‡½æ•°
 * æä¾›ç»Ÿä¸€çš„删除确认、API调用、数据更新逻辑
 */
import { ElMessage, ElMessageBox } from "element-plus";
/**
 * åˆ›å»ºåˆ é™¤åŠŸèƒ½
 * @param {Object} options é…ç½®é€‰é¡¹
 * @param {Function} options.deleteApi åˆ é™¤API函数
 * @param {Function} options.getList é‡æ–°èŽ·å–åˆ—è¡¨æ•°æ®çš„å‡½æ•°
 * @param {Ref} options.selectedRows é€‰ä¸­è¡Œçš„响应式引用
 * @param {Ref} options.tableData è¡¨æ ¼æ•°æ®çš„响应式引用
 * @param {Ref} options.total æ€»æ•°çš„响应式引用
 * @param {String} options.confirmText ç¡®è®¤åˆ é™¤çš„æç¤ºæ–‡æœ¬
 * @param {String} options.successText åˆ é™¤æˆåŠŸçš„æç¤ºæ–‡æœ¬
 * @param {Boolean} options.useLocalUpdate æ˜¯å¦ä½¿ç”¨æœ¬åœ°æ›´æ–°ï¼ˆä¸é‡æ–°è¯·æ±‚接口)
 * @returns {Object} è¿”回删除相关的方法
 */
export function useDelete(options = {}) {
  const {
    deleteApi,
    getList,
    selectedRows,
    tableData,
    total,
    confirmText = "确定删除选中的数据吗?",
    successText = "删除成功",
    useLocalUpdate = false
  } = options;
  /**
   * æ‰¹é‡åˆ é™¤æ–¹æ³•
   * @param {Array} customIds è‡ªå®šä¹‰è¦åˆ é™¤çš„ID数组,如果不传则使用selectedRows
   */
  const handleDelete = async (customIds = null) => {
    // ç¡®å®šè¦åˆ é™¤çš„行
    const rowsToDelete = customIds ?
      tableData.value.filter(item => customIds.includes(item.id)) :
      selectedRows.value;
    // æ£€æŸ¥æ˜¯å¦æœ‰é€‰ä¸­æ•°æ®
    if (rowsToDelete.length === 0) {
      ElMessage.warning("请选择要删除的数据");
      return false;
    }
    try {
      // ç¡®è®¤åˆ é™¤
      await ElMessageBox.confirm(confirmText, "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      });
      // æå–ID
      const ids = rowsToDelete.map(item => item.id);
      // è°ƒç”¨åˆ é™¤API
      const res = await deleteApi(ids);
      if (res.code === 200) {
        // æ ¹æ®é…ç½®é€‰æ‹©æ›´æ–°æ–¹å¼
        if (useLocalUpdate) {
          // æœ¬åœ°æ›´æ–°ï¼šä»Žè¡¨æ ¼æ•°æ®ä¸­ç§»é™¤å·²åˆ é™¤çš„项
          tableData.value = tableData.value.filter(item => !ids.includes(item.id));
          if (total && total.value !== undefined) {
            total.value = tableData.value.length;
          }
        } else {
          // é‡æ–°èŽ·å–æ•°æ®
          if (getList) {
            await getList();
          }
        }
        // æ¸…空选中状态
        if (selectedRows && selectedRows.value) {
          selectedRows.value = [];
        }
        ElMessage.success(successText);
        return true;
      } else {
        ElMessage.error("删除失败:" + (res.msg || "未知错误"));
        return false;
      }
    } catch (error) {
      if (error !== "cancel") {
        console.error("删除操作失败:", error);
        ElMessage.error("删除失败:" + (error.message || "请稍后重试"));
      } else {
        ElMessage.info("已取消删除");
      }
      return false;
    }
  };
  /**
   * åˆ é™¤å•个项目
   * @param {Object} row è¦åˆ é™¤çš„行数据
   */
  const handleDeleteSingle = async (row) => {
    return await handleDelete([row.id]);
  };
  /**
   * åˆ é™¤å¤šä¸ªé¡¹ç›®ï¼ˆæ‰¹é‡åˆ é™¤ï¼‰
   */
  const handleDeleteBatch = async () => {
    return await handleDelete();
  };
  return {
    handleDelete,
    handleDeleteSingle,
    handleDeleteBatch
  };
}
src/views/procureMent/index.vue
@@ -73,7 +73,9 @@
  purchaseRegistration,
  getSupplyList,
  getCoalInfoList,
  delPR
} from "@/api/procureMent";
import { useDelete } from "@/hooks/useDelete";
import useUserStore from "@/store/modules/user";
// å¼•入字典数据
@@ -238,28 +240,15 @@
  addOrEdit.value = "viewRow";
  handleAddEdit();
};
const handleDelete = () => {
  if (selectedRows.value.length === 0) {
    ElMessage.warning("请选择要删除的数据");
    return;
  }
  ElMessageBox.confirm(`确定删除选中的数据吗?`, "提示", {
    confirmButtonText: "确定",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      // æ¨¡æ‹Ÿåˆ é™¤æ“ä½œ
      tableData.value = tableData.value.filter(
        (item) => !selectedRows.value.includes(item)
      );
      total.value = tableData.value.length;
      ElMessage.success("删除成功");
    })
    .catch(() => {
      ElMessage.info("已取消删除");
    });
};
// ä½¿ç”¨åˆ é™¤ç»„合式函数 - ç®€åŒ–版本
const { handleDeleteBatch: handleDelete } = useDelete({
  deleteApi: delPR,
  selectedRows,
  tableData,
  total,
  confirmText: "确定删除选中的采购记录吗?",
  useLocalUpdate: true
});
const handleDeleteSuccess = (row) => {
  ElMessage.success("删除成功:" + row.supplierName);
};