董国庆
2025-06-21 caaace44a0f0049b6a645d6e0a511af6adf7c1e0
laboratory/src/views/dataManagement/dispatching/addDispatch.vue
@@ -64,134 +64,137 @@
          </el-form-item>
        </div>
        <div class="header-title" style="margin-bottom: 38px">
          <div class="header-title-left">
            <img src="@/assets/public/headercard.png" />
            <span>二 、实验信息</span>
          </div>
      <div class="header-title" style="margin-bottom: 38px">
        <div class="header-title-left">
          <img src="@/assets/public/headercard.png" />
          <span>二 、实验信息</span>
        </div>
        <div style="padding-left: 25px">
          <el-form-item prop="experimentDate" label="试验日期">
            <el-date-picker
              name="data-test"
              v-model="form.experimentDate"
              type="date"
              placeholder="选择日期"
              @change="handleDateChange"
            ></el-date-picker>
          </el-form-item>
          <el-form-item prop="experimentName" label="实验名称">
            <el-input v-model="form.experimentName" placeholder="请输入" />
          </el-form-item>
          <el-form-item prop="experimentCode" label="实验编号">
            <el-input v-model="form.experimentCode" placeholder="请输入" disabled/>
          </el-form-item>
        </div>
      </div>
      <div style="padding-left: 25px">
        <el-form-item prop="experimentDate" label="试验日期">
          <el-date-picker
            name="data-test"
            v-model="form.experimentDate"
            type="date"
            placeholder="选择日期"
            @change="handleDateChange"
          ></el-date-picker>
        </el-form-item>
        <el-form-item prop="experimentName" label="实验名称">
          <el-input v-model="form.experimentName" placeholder="请输入" />
        </el-form-item>
        <el-form-item prop="experimentCode" label="实验编号">
          <el-input v-model="form.experimentCode" placeholder="请输入" disabled/>
        </el-form-item>
      </div>
        <div class="add-group">
          <span>实验分组</span>
          <el-button type="primary" class="el-icon-plus" @click="handleAddGroup">添加组别</el-button>
        </div>
        <Table
          :data="groupTableData"
          :total="0"
          :height="null"
          class="groupTable"
        >
          <el-table-column type="index" label="序号" width="80"></el-table-column>
          <el-table-column prop="groupName" label="组别"></el-table-column>
          <el-table-column prop="remark" label="备注"></el-table-column>
          <el-table-column label="操作" width="200">
            <template slot-scope="scope">
              <el-button type="text" @click="handleEditGroup(scope.row)">编辑</el-button>
              <el-button type="text" @click="handleDeleteGroup(scope.row)">移除</el-button>
            </template>
          </el-table-column>
        </Table>
      <div class="add-group">
        <span>实验分组</span>
        <el-button type="primary" class="el-icon-plus" @click="handleAddGroup">添加组别</el-button>
      </div>
      <Table
        :data="groupTableData"
        :total="0"
        :height="null"
        class="groupTable"
      >
        <el-table-column type="index" label="序号" width="80"></el-table-column>
        <el-table-column prop="groupName" label="组别"></el-table-column>
        <el-table-column prop="remark" label="备注"></el-table-column>
        <el-table-column label="操作" width="200">
          <template slot-scope="scope">
            <el-button type="text" @click="handleEditGroup(scope.row)">编辑</el-button>
            <el-button type="text" @click="handleDeleteGroup(scope.row)">移除</el-button>
          </template>
        </el-table-column>
      </Table>
        <div class="header-title" style="margin-bottom: 38px">
          <div class="header-title-left">
            <img src="@/assets/public/headercard.png" />
            <span>三 、计划时间及人员</span>
          </div>
      <div class="header-title" style="margin-bottom: 38px">
        <div class="header-title-left">
          <img src="@/assets/public/headercard.png" />
          <span>三 、计划时间及人员</span>
        </div>
        <div style="padding-left: 25px">
          <el-form-item prop="experimentTime" label="试验时间">
            <el-date-picker
              style="width: 100%"
              v-model="form.experimentTime"
              type="datetimerange"
              range-separator="至"
              start-placeholder="开始时间"
              end-placeholder="结束时间"
              value-format="yyyy-MM-dd HH:mm:ss"
              :default-time="['00:00:00', '23:59:59']"
              @change="handleTimeRangeChange"
            ></el-date-picker>
          </el-form-item>
        </div>
        <div class="add-group">
          <div>*</div>
          <span>参加人员</span>
          <el-button type="primary" class="el-icon-plus" @click="addMember">选择参加人员</el-button>
        </div>
        <div class="member-list">
          <div v-for="item in [3,4,5]" :key="item" class="member-list-card">
            <div class="member-item">
              <div class="member-title">
                {{ ["工艺工程师",  "化验师","实验员"][item - 3] }}
              </div>
      </div>
      <div style="padding-left: 25px">
        <el-form-item prop="experimentTime" label="试验时间">
          <el-date-picker
            style="width: 100%"
            v-model="form.experimentTime"
            type="datetimerange"
            range-separator="至"
            start-placeholder="开始时间"
            end-placeholder="结束时间"
            value-format="yyyy-MM-dd HH:mm:ss"
            :default-time="['00:00:00', '23:59:59']"
            @change="handleTimeRangeChange"
          ></el-date-picker>
        </el-form-item>
      </div>
      <div class="add-group">
        <div>*</div>
        <span>参加人员</span>
        <el-button type="primary" class="el-icon-plus" @click="addMember">选择参加人员</el-button>
      </div>
      <div class="member-list">
        <div v-for="item in [3,4,5]" :key="item" class="member-list-card">
          <div class="member-item">
            <div class="member-title">
              {{ ["工艺工程师",  "化验师","实验员"][item - 3] }}
            </div>
            <div
              :class="item == 3 ? 'member-name-box' : 'flex1'"
            >
              <div
                :class="item == 3 ? 'member-name-box' : 'flex1'"
                :class="
                  item == 3
                    ? 'member-name-box'
                    : 'member-name-box-2'
                "
              >
                <div
                  :class="
                    item == 3
                      ? 'member-name-box'
                      : 'member-name-box-2'
                  "
                  v-for="i in memberList(item)"
                  :key="i.userId"
                  class="member-name"
                >
                  <div
                    v-for="i in memberList(item)"
                    :key="i.userId"
                    class="member-name"
                  >
                    {{ i.nickName }}
                  </div>
                  {{ i.nickName }}
                </div>
              </div>
              <div class="member-change">
                <div class="member-change-btn" @click="editUserList(item)" v-if="item == 4 || item == 5">修改</div>
              </div>
            </div>
            <div class="member-change">
              <div class="member-change-btn" @click="editUserList(item)" v-if="item == 4 || item == 5">修改</div>
            </div>
          </div>
        </div>
      </div>
        <div class="header-title" style="margin-bottom: 38px">
          <div class="header-title-left">
            <img src="@/assets/public/headercard.png" />
            <span>四 、任务分解</span>
          </div>
          <el-button type="primary" class="el-icon-plus" @click="handleAddTask">新增任务</el-button>
      <div class="header-title" style="margin-bottom: 38px">
        <div class="header-title-left">
          <img src="@/assets/public/headercard.png" />
          <span>四 、任务分解</span>
        </div>
        <el-button type="primary" class="el-icon-plus" @click="handleAddTask">新增任务</el-button>
      </div>
        <Table
          :data="taskTableData"
          :total="0"
          :height="null"
          class="rwuTable"
        >
          <el-table-column type="index" label="序号" width="80"></el-table-column>
          <el-table-column prop="taskName" label="任务名称"></el-table-column>
          <el-table-column prop="personCharge" label="负责人"></el-table-column>
          <el-table-column prop="startTime" label="开始时间"></el-table-column>
          <el-table-column label="操作" width="200">
            <template slot-scope="scope">
              <el-button type="text" @click="handleEditTask(scope.row)">编辑</el-button>
              <el-button type="text" @click="handleDeleteTask(scope.row)">移除</el-button>
            </template>
          </el-table-column>
        </Table>
      <Table
        :data="taskTableData"
        :total="allTaskTableData.length"
        :height="null"
        :queryForm="{ pageNum: taskPageNum, pageSize: taskPageSize }"
        :disAblePagination="true"
        @handleCurrentChange="handleCurrentChange"
        class="rwuTable"
      >
        <el-table-column type="index" label="序号" width="80"></el-table-column>
        <el-table-column prop="taskName" label="任务名称"></el-table-column>
        <el-table-column prop="personCharge" label="负责人"></el-table-column>
        <el-table-column prop="startTime" label="开始时间"></el-table-column>
        <el-table-column label="操作" width="200">
          <template slot-scope="scope">
            <el-button type="text" @click="handleEditTask(scope.row)">编辑</el-button>
            <el-button type="text" @click="handleDeleteTask(scope.row)">移除</el-button>
          </template>
        </el-table-column>
      </Table>
        <div class="header-title">
          <div class="header-title-left">
@@ -221,11 +224,11 @@
</template>
<script>
import SelectMember from '@/components/SelectMember'
import SelectMember from '@/components/SelectMember/index.vue'
import AddGroupDialog from './components/AddGroupDialog'
import AddTaskDialog from './components/AddTaskDialog'
import AIEditor from '@/components/AiEditor'
import { getProposalList, addDispatch, updateDispatch } from './service'
import { getProposalList, addDispatch, updateDispatch,getDetailById } from './service'
export default {
  name: "AddProject",
@@ -270,7 +273,10 @@
        ],
      },
      groupTableData: [],
      taskTableData: [],
      taskTableData: [], // 当前页展示的数据
      allTaskTableData: [], // 全部任务数据
      taskPageNum: 1,
      taskPageSize: 15,
      members: {
        processEngineer: [], // 工艺工程师
        experimenter: [], // 实验员
@@ -484,7 +490,8 @@
      }).catch(() => {})
    },
    handleGroupSubmit(form) {
      const index = this.groupTableData.findIndex(item => item.groupName === form.groupName)
      console.log('11111111',form ,'2222222',this.groupTableData)
      const index = this.groupTableData.findIndex(item => item.id === form.id)
      if (index > -1) {
        this.groupTableData.splice(index, 1, form)
      } else {
@@ -517,31 +524,38 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        const index = this.taskTableData.findIndex(item => item === row)
        const index = this.allTaskTableData.findIndex(item => item === row)
        if (index > -1) {
          this.taskTableData.splice(index, 1)
          this.allTaskTableData.splice(index, 1)
          // 删除后判断是否需要跳页
          const maxPage = Math.ceil(this.allTaskTableData.length / this.taskPageSize) || 1;
          if (this.taskPageNum > maxPage) {
            this.taskPageNum = maxPage;
          }
          this.updateTaskTableData();
          this.$message.success('删除成功')
        }
      }).catch(() => {})
    },
    handleTaskSubmit(form) {
      const index = this.taskTableData.findIndex(item => item.taskName === form.taskName);
      const index = this.allTaskTableData.findIndex(item => item.taskName === form.taskName);
      const taskData = {
        id: form.id || '', // 编辑时使用原id,新增时为空
        id: form.id || '',
        taskName: form.taskName,
        personCharge: form.leader, // 负责人名称
        personCharge: form.leader,
        startTime: form.startTime,
        dispatchId: this.id || '', // 实验调度id
        selectedUsers: form.selectedUsers // 保存选中的用户ID数组
        dispatchId: this.id || '',
        selectedUsers: form.selectedUsers
      };
      if (index > -1) {
        this.taskTableData.splice(index, 1, taskData);
        this.allTaskTableData.splice(index, 1, taskData);
      } else {
        this.taskTableData.push(taskData);
        this.allTaskTableData.push(taskData);
        this.taskPageNum = 1; // 新增后回到第一页
      }
      this.updateTaskTableData();
      // 更新表单数据
      this.form.experimentDispatchTasks = this.taskTableData;
      this.form.experimentDispatchTasks = this.allTaskTableData;
    },
    // 获取所有编辑器的内容
    getAllEditorContent() {
@@ -742,8 +756,8 @@
    getDetail() {
      if (this.id) {
        getDetailById({ id: this.id }).then(res => {
          if (res.code === 200 && res.data) {
            const data = res.data
          if (res) {
            const data = res
            // 设置表单数据
            this.form = {
              projectName: data.projectName,
@@ -761,7 +775,22 @@
            }
            // 设置表格数据
            this.groupTableData = data.experimentDispatchGroups || []
            this.taskTableData = data.experimentDispatchTasks || []
            this.allTaskTableData = data.experimentDispatchTasks || []
            this.updateTaskTableData();
            // 处理参与人员数据
            this.members = {
              processEngineer: data.experimentDispatchParticipants.filter(p => p.roleType === 3) || [],
              experimenter: data.experimentDispatchParticipants.filter(p => p.roleType === 5) || [],
              analyst: data.experimentDispatchParticipants.filter(p => p.roleType === 4) || []
            };
            // 更新selectMemberData
            this.selectMemberData = [
              ...this.members.processEngineer,
              ...this.members.experimenter,
              ...this.members.analyst
            ];
          }
        }).catch(err => {
          console.error('获取详情失败:', err)
@@ -796,7 +825,17 @@
      } finally {
        this.projectLoading = false;
      }
    }
    },
    updateTaskTableData() {
      const start = (this.taskPageNum - 1) * this.taskPageSize;
      const end = this.taskPageNum * this.taskPageSize;
      this.taskTableData = this.allTaskTableData.slice(start, end);
    },
    handleCurrentChange(page) {
      this.taskPageNum = page;
      this.updateTaskTableData();
    },
  },
  created() {
    // 从路由参数中获取id
@@ -820,6 +859,7 @@
      // 同时更新selectMemberData
      this.selectMemberData = [...this.members.processEngineer];
    }
    this.updateTaskTableData(); // 初始化时同步一次
  }
};
</script>