董国庆
2025-06-16 c67b37d706daedbc7c4efc74ddadc8f591524b46
culture/src/views/projectList/index.vue
@@ -1,173 +1,222 @@
<template>
    <div class="list">
        <TableCustom :queryForm="queryForm" :tableData="tableData" :total="total" @currentChange="handleCurrentChange"
            @sizeChange="handleSizeChange">
            <template #search>
                <el-form label-width="140px" inline>
                    <el-form-item label="项目组名称:">
                        <el-input v-model="queryForm.teamName" placeholder="请输入"></el-input>
                    </el-form-item>
                    <el-form-item label="项目负责人:">
                        <el-input v-model="queryForm.personCharge" placeholder="请输入"></el-input>
                    </el-form-item>
                    <el-form-item label="创建日期:">
                        <el-date-picker v-model="queryForm.createdDate" type="daterange" range-separator="至"
                            start-placeholder="开始日期" end-placeholder="结束日期">
                        </el-date-picker>
                    </el-form-item>
                    <el-form-item class="search-btn-box">
                        <el-button @click="reset">重置</el-button>
                        <el-button type="primary" @click="search">查询</el-button>
                    </el-form-item>
                </el-form>
            </template>
            <template #setting>
                <el-button @click="handleProject('add')" class="el-icon-plus" type="primary">
                    新增菌种库项目组</el-button>
            </template>
            <template #table>
                <el-table-column prop="teamName" label="菌种库项目组名称" />
                <el-table-column prop="personCharge" label="菌种库项目负责人" />
                <el-table-column prop="staffName" label="项目组成员" />
                <el-table-column prop="createTime" label="项目创建时间" />
                <el-table-column prop="status" label="状态">
                    <template #default="{ row }">
                        <el-tag v-if="row.status == 1" type="success">正常运作</el-tag>
                        <el-tag v-else type="danger">已封存</el-tag>
                    </template>
                </el-table-column>
                <el-table-column label="操作">
                    <template #default="{ row }">
                        <el-button v-if="row.status == 1" type="text" @click="handleChangeStatus(row, 2)">封存</el-button>
                        <el-button v-if="row.status == 2" type="text" @click="handleChangeStatus(row, 1)">解封</el-button>
                        <el-button type="text" @click="handleProject('edit', row.id)">编辑</el-button>
                        <el-button type="text" @click="handleProject('detail', row.id)">详情</el-button>
                        <el-button type="text" @click="handleDel(row)">删除</el-button>
                    </template>
                </el-table-column>
            </template>
        </TableCustom>
        <ShowDelConfirm :show="showDelConfirm" @close="showDelConfirm = false" @confirm="handleDelConfirm" />
        <ShowDelConfirm :title="changeStatusTitle" :tip="changeStatusTip" :show="changeStatus"
            @close="changeStatus = false" @confirm="handleChangeStatusConfirm" />
    </div>
  <div class="list">
    <TableCustom
      :queryForm="queryForm"
      :tableData="tableData"
      :total="total"
      @currentChange="handleCurrentChange"
      @sizeChange="handleSizeChange"
    >
      <template #search>
        <el-form label-width="140px" inline>
          <el-form-item label="项目组名称:">
            <el-input
              v-model="queryForm.teamName"
              placeholder="请输入"
            ></el-input>
          </el-form-item>
          <el-form-item label="项目负责人:">
            <el-input
              v-model="queryForm.personCharge"
              placeholder="请输入"
            ></el-input>
          </el-form-item>
          <el-form-item label="创建日期:">
            <el-date-picker
              v-model="queryForm.createdDate"
              type="daterange"
              range-separator="至"
              start-placeholder="开始日期"
              end-placeholder="结束日期"
            >
            </el-date-picker>
          </el-form-item>
          <el-form-item class="search-btn-box">
            <el-button @click="reset">重置</el-button>
            <el-button type="primary" @click="search">查询</el-button>
          </el-form-item>
        </el-form>
      </template>
      <template #setting>
        <el-button
          @click="handleProject('add')"
          class="el-icon-plus"
          type="primary"
        >
          新增菌种库项目组</el-button
        >
      </template>
      <template #table>
        <el-table-column prop="teamName" label="菌种库项目组名称" />
        <el-table-column prop="personCharge" label="菌种库项目负责人" />
        <el-table-column prop="staffName" label="项目组成员" />
        <el-table-column prop="createTime" label="项目创建时间" />
        <el-table-column prop="status" label="状态">
          <template #default="{ row }">
            <el-tag v-if="row.status == 1" type="success">正常运作</el-tag>
            <el-tag v-else type="danger">已封存</el-tag>
          </template>
        </el-table-column>
        <el-table-column label="操作">
          <template #default="{ row }">
            <el-button
              v-if="row.status == 1"
              type="text"
              @click="handleChangeStatus(row, 2)"
              >封存</el-button
            >
            <el-button
              v-if="row.status == 2"
              type="text"
              @click="handleChangeStatus(row, 1)"
              >解封</el-button
            >
            <el-button type="text" @click="handleProject('edit', row.id)"
              >编辑</el-button
            >
            <el-button type="text" @click="handleProject('detail', row.id)"
              >详情</el-button
            >
            <el-button type="text" @click="handleDel(row)">删除</el-button>
          </template>
        </el-table-column>
      </template>
    </TableCustom>
    <ShowDelConfirm
      :show="showDelConfirm"
      @close="showDelConfirm = false"
      @confirm="handleDelConfirm"
    />
    <ShowDelConfirm
      :title="changeStatusTitle"
      :tip="changeStatusTip"
      :show="changeStatus"
      @close="changeStatus = false"
      @confirm="handleChangeStatusConfirm"
    />
  </div>
</template>
<script>
import { getProjectList, changeStatus, deleteProject } from './service'
import { getProjectList, changeStatus, deleteProject } from "./service";
export default {
    name: 'ProjectList',
    data() {
        return {
            showDelConfirm: false,
            rowId: '',
            changeStatus: false,
            changeStatusTitle: '',
            changeStatusTip: '',
            tableData: [],
            queryForm: {
                pageSize: 10,
                pageNum: 1
            },
            total: 0
        }
  name: "ProjectList",
  data() {
    return {
      showDelConfirm: false,
      rowId: "",
      changeStatus: false,
      changeStatusTitle: "",
      changeStatusTip: "",
      tableData: [],
      queryForm: {
        pageSize: 10,
        pageNum: 1,
      },
      total: 0,
    };
  },
  created() {
    this.getList();
  },
  methods: {
    handleProject(type, id) {
      if (type == "add") {
        this.$router.push({
          path: "/projectList/addProject",
        });
        return;
      }
      if (type == "edit") {
        this.$router.push({
          path: "/projectList/editProject",
          query: {
            id,
          },
        });
        return;
      }
      if (type == "detail") {
        this.$router.push({
          path: "/projectList/detailProject",
          query: {
            id,
          },
        });
        return;
      }
    },
    created() {
        this.getList()
    handleDel(row) {
      this.rowId = row.id;
      this.showDelConfirm = true;
    },
    methods: {
        handleProject(type, id) {
            if (type == 'add') {
                this.$router.push({
                    path: '/projectList/addProject'
                })
                return
            }
            if (type == 'edit') {
                this.$router.push({
                    path: '/projectList/editProject',
                    query: {
                        id
                    }
                })
                return
            }
            if (type == 'detail') {
                this.$router.push({
                    path: '/projectList/detailProject',
                    query: {
                        id
                    }
                })
                return
            }
        },
        handleDel(row) {
            this.rowId = row.id
            this.showDelConfirm = true
        },
        handleDelConfirm() {
            deleteProject({ id: this.rowId }).then(res => {
                this.showDelConfirm = false
                this.msgsuccess('删除成功')
                this.rowId = ''
                this.getList()
            })
        },
        handleChangeStatus(row, status) {
            this.rowId = row.id
            this.changeStatusTitle = status == 1 ? '确认要封存这个项目组吗?' : '确认要解封该项目组吗?'
            this.changeStatusTip = status == 1 ? '封存后项目组内人员看不到数据,审批人仍然可见数据。' : '解封后项目组内人员数据恢复。'
            this.changeStatus = true
        },
        handleChangeStatusConfirm() {
            changeStatus({ id: this.rowId, status: this.status }).then(res => {
                this.changeStatus = false
                this.msgsuccess('操作成功')
                this.rowId = ''
                this.changeStatusTitle = ''
                this.changeStatusTip = ''
                this.getList()
            })
        },
        handleCurrentChange(page) {
            this.queryForm.pageNum = page
            this.getList()
        },
        handleSizeChange(size) {
            this.queryForm.pageSize = size
            this.getList()
        },
        getList() {
            let obj = {
                ...this.queryForm
            }
            if (obj.createdDate) {
                obj.startTime = moment(obj.createdDate[0]).format('YYYY-MM-DD')
                obj.endTime = moment(obj.createdDate[1]).format('YYYY-MM-DD')
                delete obj.createdDate
            }
            getProjectList(obj).then(res => {
                this.tableData = res.data.records
                this.total = res.data.total
            })
        },
        reset() {
            this.queryForm = {
                pageSize: 10,
                pageNum: 1
            }
            this.getList()
        },
        search() {
            this.getList()
        }
    }
}
    handleDelConfirm() {
      deleteProject({ id: this.rowId }).then((res) => {
        this.showDelConfirm = false;
        this.$message.success("删除成功");
        this.rowId = "";
        this.getList();
      });
    },
    handleChangeStatus(row, status) {
      this.rowId = row.id;
      this.changeStatusTitle =
        status == 2 ? "确认要封存这个项目组吗?" : "确认要解封该项目组吗?";
      this.changeStatusTip =
        status == 2
          ? "封存后项目组内人员看不到数据,审批人仍然可见数据。"
          : "解封后项目组内人员数据恢复。";
      this.changeStatus = true;
    },
    handleChangeStatusConfirm() {
      changeStatus({ id: this.rowId, status: this.status }).then((res) => {
        this.changeStatus = false;
        this.$message.success("操作成功");
        this.rowId = "";
        this.changeStatusTitle = "";
        this.changeStatusTip = "";
        this.getList();
      });
    },
    handleCurrentChange(page) {
      this.queryForm.pageNum = page;
      this.getList();
    },
    handleSizeChange(size) {
      this.queryForm.pageSize = size;
      this.getList();
    },
    getList() {
      let obj = {
        ...this.queryForm,
      };
      if (obj.createdDate) {
        obj.startTime = moment(obj.createdDate[0]).format("YYYY-MM-DD");
        obj.endTime = moment(obj.createdDate[1]).format("YYYY-MM-DD");
        delete obj.createdDate;
      }
      getProjectList(obj).then((res) => {
        this.tableData = res.data.records;
        this.total = res.data.total;
      });
    },
    reset() {
      this.queryForm = {
        pageSize: 10,
        pageNum: 1,
      };
      this.getList();
    },
    search() {
      this.getList();
    },
  },
};
</script>
<style scoped lang="less">
.list {
    height: 100%;
  height: 100%;
}
</style>
</style>