zouyu
2026-01-16 30dc46174a37613366081bd1abab8eb71c171f7f
src/views/productionManagement/operationScheduling/index.vue
@@ -1,53 +1,42 @@
<template>
   <div class="app-container">
      <div class="search_form">
         <el-form :model="searchForm" :inline="true">
            <el-form-item label="客户名称:">
               <el-input v-model="searchForm.customerName" placeholder="请输入" clearable prefix-icon="Search"
                              style="width: 200px;"
                              @change="handleQuery" />
            </el-form-item>
            <el-form-item label="项目名称:">
               <el-input v-model="searchForm.projectName" placeholder="请输入" clearable prefix-icon="Search"
                              style="width: 200px;"
                              @change="handleQuery" />
            </el-form-item>
            <el-form-item label="派工日期:">
               <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
                                       placeholder="请选择" clearable @change="changeDaterange" />
            </el-form-item>
            <el-form-item label="状态:">
               <el-select v-model="searchForm.status" placeholder="请选择状态" @change="handleQuery" style="width: 140px" clearable>
                  <el-option label="待排产" :value="1"></el-option>
                  <el-option label="已排产" :value="3"></el-option>
                  <el-option label="排产中" :value="2"></el-option>
               </el-select>
            </el-form-item>
            <el-form-item>
               <el-button type="primary" @click="handleQuery">搜索</el-button>
            </el-form-item>
         </el-form>
      </div>
      <div class="table_list">
         <div style="text-align: right" class="mb10">
            <el-button type="primary" @click="openForm">工序排产</el-button>
            <el-button type="danger" @click="handleDelete" plain>取消排产</el-button>
            <el-button @click="handleOut">导出</el-button>
         </div>
         <PIMTable
            rowKey="id"
            :column="tableColumn"
            :tableData="tableData"
            :page="page"
            :isSelection="true"
            @selection-change="handleSelectionChange"
            :tableLoading="tableLoading"
            @pagination="pagination"
            :total="page.total"
         ></PIMTable>
      </div>
      <form-dia ref="formDia" @close="handleQuery"></form-dia>
   </div>
  <div class="app-container">
    <div class="search_form">
      <el-form :model="searchForm" :inline="true">
        <el-form-item label="派工日期:">
          <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
                          placeholder="请选择" clearable @change="changeDaterange" />
        </el-form-item>
        <el-form-item label="状态:">
          <el-select v-model="searchForm.status" placeholder="请选择状态" @change="handleQuery" style="width: 140px" clearable>
            <el-option label="待排产" :value="1"></el-option>
            <el-option label="已排产" :value="3"></el-option>
            <el-option label="排产中" :value="2"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="handleQuery">搜索</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div class="table_list">
      <div style="text-align: right" class="mb10">
        <el-button type="primary" @click="openForm">工序排产</el-button>
        <el-button type="danger" @click="handleDelete" plain>取消排产</el-button>
      </div>
      <PIMTable
          rowKey="id"
          :column="tableColumn"
          :tableData="tableData"
          :page="page"
          :isSelection="true"
          @selection-change="handleSelectionChange"
          :tableLoading="tableLoading"
          @pagination="pagination"
          :total="page.total"
      ></PIMTable>
    </div>
    <form-dia ref="formDia" @close="handleQuery"></form-dia>
  </div>
</template>
<script setup>
@@ -58,104 +47,87 @@
import {listPageProcess, productionDispatchDelete} from "@/api/productionManagement/operationScheduling.js";
const data = reactive({
   searchForm: {
      staffName: "",
      status: 1,
      entryDate: null, // 录入日期
      entryDateStart: undefined,
      entryDateEnd: undefined,
   },
  searchForm: {
    staffName: "",
    status: 1,
    entryDate: [
      dayjs().format("YYYY-MM-DD"),
      dayjs().add(1, "day").format("YYYY-MM-DD"),
    ], // 录入日期
    entryDateStart: dayjs().format("YYYY-MM-DD"),
    entryDateEnd: dayjs().add(1, "day").format("YYYY-MM-DD"),
  },
});
const { searchForm } = toRefs(data);
const tableColumn = ref([
   {
      label: "状态",
      prop: "status",
      dataType: "tag",
      formatData: (params) => {
         if (params == 3) {
            return "已排产";
         } else if (params == 1) {
            return "待排产";
         } else {
            return '排产中';
         }
      },
      formatType: (params) => {
         if (params == 3) {
            return "success";
         } else if (params == 1) {
            return "primary";
         } else {
            return 'warning';
         }
      },
   },
   {
      label: "派工日期",
      prop: "schedulingDate",
      width: 120,
   },
   {
      label: "派工人",
      prop: "schedulingUserName",
   },
   {
      label: "合同号",
      prop: "salesContractNo",
      width: 200,
   },
   {
      label: "客户合同号",
      prop: "customerContractNo",
      width: 200,
   },
   {
      label: "客户名称",
      prop: "customerName",
      width: 200,
   },
   {
      label: "项目名称",
      prop: "projectName",
      width:300
   },
   {
      label: "产品大类",
      prop: "productCategory",
      width: 150,
   },
   {
      label: "规格型号",
      prop: "specificationModel",
      width: 150,
   },
   {
      label: "单位",
      prop: "unit",
   },
   {
      label: "排产总数",
      prop: "schedulingNum",
   },
   {
      label: "已排产数量",
      prop: "successNum",
      width: 100,
   },
   {
      label: "待排产数量",
      prop: "pendingNum",
      width: 100,
   },
  {
    label: "状态",
    prop: "status",
    dataType: "tag",
    formatData: (params) => {
      if (params == 3) {
        return "已排产";
      } else if (params == 1) {
        return "待排产";
      } else {
        return '排产中';
      }
    },
    formatType: (params) => {
      if (params == 3) {
        return "success";
      } else if (params == 1) {
        return "primary";
      } else {
        return 'warning';
      }
    },
  },
  {
    label: "派工日期",
    prop: "schedulingDate",
    width: 120,
  },
  {
    label: "派工人",
    prop: "schedulingUserName",
  },
  {
    label: "产品大类",
    prop: "productCategory",
    width: 150,
  },
  {
    label: "规格型号",
    prop: "specificationModel",
    width: 150,
  },
  {
    label: "单位",
    prop: "unit",
  },
  {
    label: "排产总数",
    prop: "schedulingNum",
  },
  {
    label: "已排产数量",
    prop: "successNum",
    width: 100,
  },
  {
    label: "待排产数量",
    prop: "pendingNum",
    width: 100,
  },
]);
const tableData = ref([]);
const selectedRows = ref([]);
const tableLoading = ref(false);
const page = reactive({
   current: 1,
   size: 100,
   total: 0,
  current: 1,
  size: 100,
  total: 0,
});
const formDia = ref()
const { proxy } = getCurrentInstance()
@@ -163,109 +135,93 @@
// 查询列表
/** 搜索按钮操作 */
const handleQuery = () => {
   page.current = 1;
   getList();
  page.current = 1;
  getList();
};
const changeDaterange = (value) => {
   if (value) {
      searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
      searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
   } else {
      searchForm.value.entryDateStart = undefined;
      searchForm.value.entryDateEnd = undefined;
   }
   handleQuery();
  if (value) {
    searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
    searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
  } else {
    searchForm.value.entryDateStart = undefined;
    searchForm.value.entryDateEnd = undefined;
  }
  handleQuery();
};
const pagination = (obj) => {
   page.current = obj.page;
   page.size = obj.limit;
   getList();
  page.current = obj.page;
  page.size = obj.limit;
  getList();
};
const getList = () => {
   tableLoading.value = true;
   const params = { ...searchForm.value, ...page };
   params.entryDate = undefined
   listPageProcess(params).then(res => {
      tableLoading.value = false;
      tableData.value = res.data.records.map(item => ({
         ...item,
         pendingNum: (Number(item.schedulingNum) || 0) - (Number(item.successNum) || 0)
      }));
      page.total = res.data.total;
   }).catch(err => {
      tableLoading.value = false;
   })
  tableLoading.value = true;
  const params = { ...searchForm.value, ...page };
  params.entryDate = undefined
  listPageProcess(params).then(res => {
    tableLoading.value = false;
    tableData.value = res.data.records.map(item => ({
      ...item,
      pendingNum: (Number(item.schedulingNum) || 0) - (Number(item.successNum) || 0)
    }));
    page.total = res.data.total;
  }).catch(err => {
    tableLoading.value = false;
  })
};
// 表格选择数据
const handleSelectionChange = (selection) => {
   selectedRows.value = selection;
  selectedRows.value = selection;
};
// 打开弹框
const openForm = (type, row) => {
   if (selectedRows.value.length !== 1) {
      proxy.$message.error("请选择一条数据");
      return;
   }
   if (selectedRows.value[0].pendingNum == 0) {
      proxy.$message.warning("无需再排产");
      return;
   }
   nextTick(() => {
      formDia.value?.openDialog(type, selectedRows.value[0])
   })
  if (selectedRows.value.length !== 1) {
    proxy.$message.error("请选择一条数据");
    return;
  }
  if (selectedRows.value[0].pendingNum == 0) {
    proxy.$message.warning("无需再排产");
    return;
  }
  nextTick(() => {
    formDia.value?.openDialog(type, selectedRows.value[0])
  })
};
// 删除
const handleDelete = () => {
   let ids = [];
   if (selectedRows.value.length > 0) {
      // 新增:判断是否有已排产的数据
      const hasScheduled = selectedRows.value.some(item => item.status == 3);
      if (hasScheduled) {
         proxy.$modal.msgWarning("已排产数据不能取消排产");
         return;
      }
      ids = selectedRows.value.map((item) => item.id);
   } else {
      proxy.$modal.msgWarning("请选择数据");
      return;
   }
   ElMessageBox.confirm("是否确认取消排产?", "删除提示", {
      confirmButtonText: "确认",
      cancelButtonText: "取消",
      type: "warning",
   })
      .then(() => {
         tableLoading.value = true;
         productionDispatchDelete(ids)
            .then((res) => {
               proxy.$modal.msgSuccess("取消排产成功");
               getList();
            })
      })
      .catch(() => {
         proxy.$modal.msg("已取消");
      });
  let ids = [];
  if (selectedRows.value.length > 0) {
    // 新增:判断是否有已排产的数据
    const hasScheduled = selectedRows.value.some(item => item.status == 3);
    if (hasScheduled) {
      proxy.$modal.msgWarning("已排产数据不能取消排产");
      return;
    }
    ids = selectedRows.value.map((item) => item.id);
  } else {
    proxy.$modal.msgWarning("请选择数据");
    return;
  }
  ElMessageBox.confirm("是否确认取消排产?", "删除提示", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
      .then(() => {
        tableLoading.value = true;
        productionDispatchDelete(ids)
            .then((res) => {
              proxy.$modal.msgSuccess("取消排产成功");
              getList();
            })
      })
      .catch(() => {
        proxy.$modal.msg("已取消");
      });
};
// 导出
const handleOut = () => {
   ElMessageBox.confirm("选中的内容将被导出,是否确认导出?", "导出", {
      confirmButtonText: "确认",
      cancelButtonText: "取消",
      type: "warning",
   })
      .then(() => {
         proxy.download("/salesLedger/scheduling/exportTwo", {}, "工序排产.xlsx");
      })
      .catch(() => {
         proxy.$modal.msg("已取消");
      });
};
onMounted(() => {
   getList();
  getList();
});
</script>