董国庆
2025-05-12 87a55b07360cd3a542a37e77b3ab3c9b8e450a6b
Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory
13个文件已修改
2个文件已添加
534 ■■■■■ 已修改文件
culture/src/layouts/components/HeaderNav.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/router/index.js 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/utils/request.js 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/login/index.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/login/service.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/projectList/index.vue 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/projectList/service.js 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/vue.config.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/confirmation-sheet/components/add-test-item.vue 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/confirmation-sheet/index.vue 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/confirmation-sheet/service.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/sampleManage/components/experimental-scheduling.vue 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/sampleManage/list.vue 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/dataManagement/sampleManage/service.js 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory/src/views/login/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/layouts/components/HeaderNav.vue
@@ -57,7 +57,7 @@
    // 退出登录
    outLogin() {
      sessionStorage.clear()
      this.$router.replace({ path: "/login" });
      this.$router.replace({ path: "/" });
    },
    // 关闭标签
    closeTag(tag) {
@@ -73,7 +73,10 @@
    },
    // 跳转标签
    goTag(tag) {
      this.$router.push(tag.path)
      this.$router.push({
        path: tag.path,
        query: tag.query
      })
    },
    handleWheel(e) {
      if (this.scrollTimer) {
culture/src/router/index.js
@@ -26,7 +26,7 @@
const routes = [
    {
        path: "/",
        redirect: "/projectList/list",
        redirect: "/login",
    },
    {
        path: "/login",
@@ -48,7 +48,7 @@
                path: "list",
                name: "ProjectList",
                meta: {
                    title: "项目组管理",
                    title: "菌种库项目组管理",
                },
                component: () => import("../views/projectList"),
            },
@@ -56,7 +56,7 @@
                path: "addProject",
                name: "AddProject",
                meta: {
                    title: "新增项目组",
                    title: "新增菌种库项目组",
                    hide: true,
                    keepAlive: true,
                },
@@ -345,17 +345,28 @@
    document.title = to.meta.title || '实验室流程';
    // 登录验证
    // 排除登录页的校验
    // if (to.path === "/login") {
    //     sessionStorage.removeItem('userInfo')
    //     next()
    // } else if (!sessionStorage.getItem('userInfo')) {
    //     next('/login')
    // } else {
    //     // 判断是否拥有要跳转菜单权限
    //     let menus = store.state.menus
    //     if (to.meta.hasOwnProperty('privilege') && !menus.includes(to.meta.privilege)) {
    //         return
    //     if (sessionStorage.getItem('token')) {
    //         next('/projectList');  // 已登录状态访问登录页时重定向到系统首页
    //         return;
    //     }
    //     next();
    //     return;
    // }
    // // 登录状态校验
    // const isAuthenticated = sessionStorage.getItem('token');
    // if (!isAuthenticated) {
    //     next('/login');  // 未登录用户重定向到登录页
    //     return;
    // }
    // 判断是否拥有要跳转菜单权限
    let menus = store.state.menus
    if (to.meta.hasOwnProperty('privilege') && !menus.includes(to.meta.privilege)) {
        return
    }
    // 设置标签列表
    if (!to.meta.hide || !to.meta.oneself) {
@@ -367,7 +378,8 @@
            const tagInfo = {
                path: to.path,
                name: to.name,
                meta: to.meta
                meta: to.meta,
                query: to.query,
            }
            tagList.push(tagInfo)
            sessionStorage.setItem('tagList', JSON.stringify(tagList))
@@ -388,7 +400,6 @@
    }
    next()
    // }
});
export default router;
culture/src/utils/request.js
@@ -60,7 +60,8 @@
      if (!res.data) {
        return Promise.resolve({})
      }
      return Promise.resolve(res.data)
      console.log('res', res.data.data || res.data)
      return Promise.resolve(res.data.data || res.data)
    } else {
      if (res.data.code == 103 || res.data.code == 401) {
        Message({
culture/src/views/login/index.vue
@@ -68,11 +68,20 @@
    // 添加窗口大小变化监听器
    window.addEventListener('resize', this.handleResize)
  },
  mounted() {
    document.addEventListener("keydown", this.handleKeyDown);
  },
  destroyed() {
    // 组件销毁时移除监听器
    window.removeEventListener('resize', this.handleResize)
    document.removeEventListener("keydown", this.handleKeyDown);
  },
  methods: {
    handleKeyDown(event) {
      if (event.key === 'Enter') {
        this.login()
      }
    },
    // 添加处理窗口大小变化的方法
    handleResize() {
      this.viewWidth = window.innerWidth
@@ -90,7 +99,7 @@
      loginReq(this.loginForm).then(res => {
        sessionStorage.setItem('token', res.token)
        sessionStorage.setItem('userInfo', JSON.stringify(res.userInfo.user))
        this.$router.push('/')
        this.$router.push('/projectList')
      })
    }
  }
culture/src/views/login/service.js
@@ -2,5 +2,5 @@
// 登录
export const loginReq = (data) => {
    return axios.post('/login', { ...data })
    return axios.post('/api/login', { ...data })
}
culture/src/views/projectList/index.vue
@@ -5,10 +5,10 @@
            <template #search>
                <el-form label-width="140px" inline>
                    <el-form-item label="项目组名称:">
                        <el-input v-model="queryForm.name" placeholder="请输入"></el-input>
                        <el-input v-model="queryForm.teamName" placeholder="请输入"></el-input>
                    </el-form-item>
                    <el-form-item label="项目负责人:">
                        <el-input v-model="queryForm.name" placeholder="请输入"></el-input>
                        <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="至"
@@ -16,32 +16,32 @@
                        </el-date-picker>
                    </el-form-item>
                    <el-form-item class="search-btn-box">
                        <el-button>重置</el-button>
                        <el-button type="primary">查询</el-button>
                        <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="handleAddProject" class="el-icon-plus" type="primary">
                <el-button @click="handleProject('add')" class="el-icon-plus" type="primary">
                    新增菌种库项目组</el-button>
            </template>
            <template #table>
                <el-table-column prop="name" label="菌种库项目组名称" />
                <el-table-column prop="age" label="菌种库项目负责人" />
                <el-table-column prop="age" label="项目组成员" />
                <el-table-column prop="age" label="项目创建时间" />
                <el-table-column prop="age" label="状态">
                <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 prop="age" label="操作">
                <el-table-column label="操作">
                    <template #default="{ row }">
                        <el-button type="text" @click="handleChangeStatus(row, 1)">封存</el-button>
                        <el-button type="text" @click="handleChangeStatus(row, 0)">解封</el-button>
                        <el-button type="text">编辑</el-button>
                        <el-button type="text">详情</el-button>
                        <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>
@@ -54,7 +54,7 @@
</template>
<script>
import { getProjectList } from './service'
import { getProjectList, changeStatus, deleteProject } from './service'
export default {
    name: 'ProjectList',
    data() {
@@ -76,20 +76,43 @@
        this.getList()
    },
    methods: {
        handleAddProject() {
        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
@@ -98,12 +121,14 @@
            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
@@ -114,9 +139,28 @@
            this.getList()
        },
        getList() {
            getProjectList(this.queryForm).then(res => {
                console.log(res);
            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()
        }
    }
}
culture/src/views/projectList/service.js
@@ -2,5 +2,30 @@
// 列表
export const getProjectList = (data) => {
    return axios.post('/api/t-project-team/pageList', { ...data })
    return axios.post('/t_project_team/api/pageList', { ...data })
}
// 新增
export const addProject = (data) => {
    return axios.post('/t_project_team/api/add', { ...data })
}
// 编辑
export const editProject = (data) => {
    return axios.post('/t_project_team/api/update', { ...data })
}
// 详情
export const getProjectDetail = (data) => {
    return axios.get(`/t_project_team/open/getDetailById?id=${data.id}`)
}
// 修改项目组状态
export const changeStatus = (data) => {
    return axios.post('/t_project_team/api/upAndDown', { ...data })
}
// 删除项目组
export const deleteProject = (data) => {
    return axios.delete(`/t_project_team/open/deleteById?id=${data.id}`)
}
culture/vue.config.js
@@ -10,13 +10,21 @@
        disableHostCheck: true, //禁用主机检查 
        proxy: {
            "/api": { // 设置以什么前缀开头的请求用来代理
                target: "http://192.168.110.34:8081", //要访问的跨域的域名
                target: "http://192.168.110.64:8081", //要访问的跨域的域名
                secure: false, // 使用的是http协议则设置为false,https协议则设置为true
                changOrigin: true, //开启代理
                pathRewrite: {
                    "^/api": "/api",
                },
            },
            "/": { // 设置以什么前缀开头的请求用来代理
                target: "http://192.168.110.64:8081", //要访问的跨域的域名
                secure: false, // 使用的是http协议则设置为false,https协议则设置为true
                changOrigin: true, //开启代理
                pathRewrite: {
                    "^/": "/",
                },
            },
        },
    },
    configureWebpack: {
laboratory/src/views/dataManagement/confirmation-sheet/components/add-test-item.vue
@@ -3,33 +3,33 @@
    <el-dialog :visible.sync="dialogVisible" @close="$emit('close')" title="新增检测项" width="50%">
      <el-form ref="form" :model="form" :rules="rules" label-position="top" class="test-item-form">
        <div class="form-row">
          <el-form-item label="检测项编号" prop="testCode" class="form-item">
            <el-input v-model="form.testCode" placeholder="请输入"></el-input>
          <el-form-item label="检测项编号" prop="termCode" class="form-item">
            <el-input v-model="form.termCode" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="检测项名称" prop="testName" class="form-item">
            <el-input v-model="form.testName" placeholder="请输入"></el-input>
          <el-form-item label="检测项名称" prop="termName" class="form-item">
            <el-input v-model="form.termName" placeholder="请输入"></el-input>
          </el-form-item>
        </div>
        <div class="form-row">
          <el-form-item label="定性/定量" prop="testType" class="form-item">
            <el-radio-group v-model="form.testType">
          <el-form-item label="定性/定量" prop="termType" class="form-item">
            <el-radio-group v-model="form.termType">
              <el-radio :label="1">定性</el-radio>
              <el-radio :label="2">定量</el-radio>
            </el-radio-group>
          </el-form-item>
        </div>
        <div class="form-row">
          <el-form-item label="检测方法编号" prop="methodCode" class="form-item">
            <el-input v-model="form.methodCode" placeholder="请输入"></el-input>
          <el-form-item label="检测方法编号" prop="termMethodCode" class="form-item">
            <el-input v-model="form.termMethodCode" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="检测方法" prop="methodName" class="form-item">
            <el-input v-model="form.methodName" placeholder="请输入"></el-input>
          <el-form-item label="检测方法" prop="termMethod" class="form-item">
            <el-input v-model="form.termMethod" placeholder="请输入"></el-input>
          </el-form-item>
        </div>
        <el-form-item label="收样要求" prop="requirements" class="form-item">
        <el-form-item label="收样要求" prop="sampleRequire" class="form-item">
          <el-input
            type="textarea"
            v-model="form.requirements"
            v-model="form.sampleRequire"
            :rows="4"
            placeholder="请输入收样要求..."
          ></el-input>
@@ -54,30 +54,30 @@
  data() {
    return {
      form: {
        testCode: '',
        testName: '',
        testType: 1,
        methodCode: '',
        methodName: '',
        requirements: ''
        termCode: '',
        termName: '',
        termType: 1,
        termMethodCode: '',
        termMethod: '',
        sampleRequire: ''
      },
      rules: {
        testCode: [
        termCode: [
          { required: true, message: '请输入检测项编号', trigger: 'blur' }
        ],
        testName: [
        termName: [
          { required: true, message: '请输入检测项名称', trigger: 'blur' }
        ],
        testType: [
        termType: [
          { required: true, message: '请选择定性/定量', trigger: 'change' }
        ],
        methodCode: [
        termMethodCode: [
          { required: true, message: '请输入检测方法编号', trigger: 'blur' }
        ],
        methodName: [
        termMethod: [
          { required: true, message: '请输入检测方法', trigger: 'blur' }
        ],
        requirements: [
        sampleRequire: [
          { required: true, message: '请输入收样要求', trigger: 'blur' }
        ]
      }
@@ -88,6 +88,7 @@
      this.$refs.form.validate((valid) => {
        if (valid) {
          this.$emit('confirm', this.form)
          this.resetForm()
        }
      })
    },
laboratory/src/views/dataManagement/confirmation-sheet/index.vue
@@ -4,22 +4,27 @@
            <template #search>
                <el-form :model="form" label-width="140px" inline>
                    <el-form-item label="所属项目课题方案:">
                        <el-input v-model="form.planName" placeholder="请输入"></el-input>
                        <el-input v-model="form.projectName" placeholder="请输入"></el-input>
                    </el-form-item>
                    <el-form-item label="实验编号:">
                        <el-input v-model="form.planCode" placeholder="请输入"></el-input>
                        <el-input v-model="form.experimentCode" placeholder="请输入"></el-input>
                    </el-form-item>
                    <el-form-item label="创建人:">
                        <el-input v-model="form.creator" placeholder="请输入"></el-input>
                    <el-form-item label="实验名称:">
                        <el-input v-model="form.experimentName" placeholder="请输入"></el-input>
                    </el-form-item>
                    <el-form-item label="通知时间:">
                        <el-date-picker v-model="form.createTime" type="daterange" range-separator="至"
                            start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd"></el-date-picker>
                        <el-date-picker v-model="dateRange" type="daterange" range-separator="至"
                            start-placeholder="开始日期" end-placeholder="结束日期"
                            value-format="yyyy-MM-dd"
                            @change="handleDateChange"></el-date-picker>
                    </el-form-item>
                    <el-form-item label="状态:">
                        <el-select v-model="form.status" placeholder="请选择">
                            <el-option label="待确认" value="待确认"></el-option>
                            <el-option label="已确认" value="已确认"></el-option>
                    <el-form-item label="状态:" v-if="!isDrafts">
                        <el-select v-model="form.auditStatus" placeholder="请选择">
                            <el-option label="待确认" :value="1"></el-option>
                            <el-option label="已通过" :value="2"></el-option>
                            <el-option label="已驳回" :value="3"></el-option>
                            <el-option label="已撤回" :value="4"></el-option>
                            <el-option label="已封存" :value="5"></el-option>
                        </el-select>
                    </el-form-item>
                    <el-form-item label="" class="search-btn-box">
@@ -30,9 +35,9 @@
            </template>
            <template #setting>
                <div class="tableTitle">
                    <div class="flex a-center">
                        <div class="title pointer">检验方法确认单列表</div>
                        <div class="drafts pointer">草稿箱</div>
                    <div class="flex a-center" style="gap: 16px;">
                        <div class="title pointer" :class="{ active: !isDrafts }" @click="switchToDrafts(false)">检验方法确认单列表</div>
                        <div class="drafts pointer" :class="{ active: isDrafts }" @click="switchToDrafts(true)">草稿箱</div>
                    </div>
                    <el-button @click="handleAddPlan" class="el-icon-plus" type="primary">
                        新增检测方法确认单</el-button>
@@ -68,6 +73,7 @@
<script>
import reviewDialog from './components/review-dialog.vue';
import { getList } from './service'
export default {
    name: "ConfirmationSheet",
    components: {
@@ -76,40 +82,76 @@
    data() {
        return {
            form: {
                planName: "",
                planCode: "",
                creator: "",
                createTime: [],
                approver: "",
                status: "",
                pageNum: 1,
                pageSize: 10,
                projectName: "",
                experimentCode: "",
                experimentName: "",
                startTime: "",
                endTime: "",
                auditStatus: "",
            },
            dateRange: [],
            isDrafts: false,
            showRevoke:false,
            tableData: [],
            total: 0,
            editorContent: '', // 编辑器内容
            reviewDialogVisible: true,
            editorContent: '',
            reviewDialogVisible: false,
            dialogType: 'review',
            currentRow: {},
            sampleData: [],
        };
    },
    mounted() {
        this.getTableData();
    },
    methods: {
        async getTableData() {
            try {
                const params = { ...this.form };
                if (this.isDrafts) {
                    params.auditStatus = -1;
                }
                const res = await getList(params);
                if (res.code === 200) {
                    this.tableData = res.data.list || [];
                    this.total = res.data.total || 0;
                }
            } catch (error) {
                console.error('获取列表数据失败:', error);
            }
        },
        handleDateChange(val) {
            if (val) {
                this.form.startTime = val[0];
                this.form.endTime = val[1];
            } else {
                this.form.startTime = '';
                this.form.endTime = '';
            }
        },
        resetForm() {
            this.form = {
                planName: "",
                planCode: "",
                creator: "",
                createTime: [],
                approver: "",
                status: "",
                pageNum: 1,
                pageSize: 10,
                projectName: "",
                experimentCode: "",
                experimentName: "",
                startTime: "",
                endTime: "",
                auditStatus: "",
            };
            this.dateRange = [];
            this.getTableData();
        },
        handleSearch() {
            // 实现查询逻辑
            console.log("查询条件:", this.form);
            this.form.pageNum = 1;
            this.getTableData();
        },
        switchToDrafts(isDrafts) {
            this.isDrafts = isDrafts;
            this.resetForm();
        },
        getStatusType(status) {
            const statusMap = {
@@ -182,27 +224,29 @@
    padding-bottom: 20px;
    justify-content: space-between;
    align-items: center;
    .title {
    .title, .drafts {
        background: #ffffff;
        border-radius: 8px 8px 0px 0px;
        border: 1px solid #049c9a;
        padding: 16px 29px;
        font-weight: bold;
        font-size: 18px;
        color: #049c9a;
        background: #fafafc;
        border: 1px solid #dcdfe6;
        color: #606266;
        width: unset;
        &.active {
            background: #ffffff;
            border: 1px solid #049c9a !important;
            color: #049c9a;
        }
    }
    .drafts {
        padding: 16px 65px;
        background: #fafafc;
        border-radius: 8px 8px 0px 0px;
        border: 1px solid #dcdfe6;
        font-weight: 400;
        font-size: 18px;
        color: #606266;
        margin-left: 16px;
        &:not(.active) {
        }
    }
}
laboratory/src/views/dataManagement/confirmation-sheet/service.js
New file
@@ -0,0 +1,6 @@
import axios from '@/utils/request';
// 列表
export const getList = (data) => {
  return axios.post('/t-experiment-dispatch/api/t-experiment-dispatch/pageList', { ...data })
}
laboratory/src/views/dataManagement/sampleManage/components/experimental-scheduling.vue
@@ -1,27 +1,31 @@
<template>
    <div>
        <el-dialog title="选择项目组" :visible.sync="show" width="80%">
        <el-dialog title="选择实验调度" :visible.sync="show" width="80%">
            <TableCustom :queryForm="form" :tableData="tableData" :total="total" :height="null">
                <template #search>
                    <el-form :model="form" label-width="140px" inline>
                        <el-form-item label="所属项目课题方案:">
                            <el-input v-model="form.planName" placeholder="请输入"></el-input>
                            <el-input v-model="form.projectName" placeholder="请输入"></el-input>
                        </el-form-item>
                        <el-form-item label="实验编号:">
                            <el-input v-model="form.planCode" placeholder="请输入"></el-input>
                        </el-form-item>
                        <el-form-item label="实验名称:">
                            <el-input v-model="form.creator" placeholder="请输入"></el-input>
                            <el-input v-model="form.experimentCode" placeholder="请输入"></el-input>
                        </el-form-item>
                        <el-form-item label="通知时间:">
                            <el-date-picker v-model="form.createTime" type="daterange" range-separator="至"
                                start-placeholder="开始日期" end-placeholder="结束日期"
                                value-format="yyyy-MM-dd"></el-date-picker>
                            <el-date-picker
                                v-model="form.createTime"
                                type="daterange"
                                range-separator="至"
                                start-placeholder="开始日期"
                                end-placeholder="结束日期"
                                value-format="yyyy-MM-dd">
                            </el-date-picker>
                        </el-form-item>
                        <el-form-item label="状态:">
                            <el-select v-model="form.status" placeholder="请选择">
                                <el-option label="待确认" value="待确认"></el-option>
                                <el-option label="已确认" value="已确认"></el-option>
                                <el-option label="草稿箱" :value="-1"></el-option>
                                <el-option label="待确认" :value="1"></el-option>
                                <el-option label="已确认" :value="2"></el-option>
                                <el-option label="已封存" :value="3"></el-option>
                            </el-select>
                        </el-form-item>
                        <el-form-item label="" class="search-btn-box">
@@ -37,7 +41,7 @@
                    <el-table-column prop="planName" label="实验名称"></el-table-column>
                    <el-table-column prop="stage" label="通知时间"></el-table-column>
                    <el-table-column prop="stage" label="实验开始时间"></el-table-column>
                    <el-table-column prop="stage" label="试验结束时间"></el-table-column>
                    <el-table-column prop="stage" label="实验结束时间"></el-table-column>
                    <el-table-column prop="stage" label="参加人员"></el-table-column>
                    <el-table-column prop="creator" label="状态"></el-table-column>
                </template>
@@ -51,31 +55,65 @@
</template>
<script>
import { getDispatchList } from '../service';
export default {
    props: ['show'],
    data() {
        return {
            form: {},
            form: {
                projectName: "",
                experimentCode: "",
                createTime: [],
                status: null,
                pageNum: 1,
                pageSize: 10
            },
            tableData: [],
            total: 0
        }
        };
    },
    methods: {
        resetForm() {
            this.form = {
                projectName: "",
                experimentCode: "",
                createTime: [],
                status: null,
                pageNum: 1,
                pageSize: 10
            };
            this.handleSearch();
        },
        handleSearch() {
        async handleSearch() {
            const params = {
                projectName: this.form.projectName,
                experimentCode: this.form.experimentCode,
                startTime: this.form.createTime[0] || null,
                endTime: this.form.createTime[1] || null,
                status: this.form.status,
                pageNum: this.form.pageNum,
                pageSize: this.form.pageSize
            };
            try {
                const res = await getDispatchList(params);
                this.tableData = res.records || [];
                this.total = res.total || 0;
            } catch (error) {
                console.error("查询失败:", error);
        }
    }
}
};
</script>
<style lang="less" scoped>
.dialog-footer {
    display: flex
;
    display: flex;
    justify-content: center;
    gap: 10px;
}
::v-deep .el-range-editor--small {
    line-height: 30px !important;
}
</style>
laboratory/src/views/dataManagement/sampleManage/list.vue
@@ -3,14 +3,14 @@
    <TableCustom :queryForm="form" :tableData="tableData" :total="total">
      <template #search>
        <el-form :model="form" labelWidth="auto" inline>
          <el-form-item label="所属项目课题方案:">
            <el-input v-model="form.planName" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="实验编号:">
            <el-input v-model="form.planCode" placeholder="请输入"></el-input>
            <el-input v-model="form.experimentCode" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="创建人:" v-if="isChemist">
            <el-input v-model="form.creator" placeholder="请输入"></el-input>
          <el-form-item label="实验名称:">
            <el-input v-model="form.experimentName" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="所属项目课题方案:">
            <el-input v-model="form.projectName" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="创建时间:">
            <el-date-picker
@@ -22,11 +22,13 @@
              value-format="yyyy-MM-dd"
            ></el-date-picker>
          </el-form-item>
          <el-form-item label="状态:" v-if="!isChemist">
            <el-input v-model="form.approver" placeholder="请输入"></el-input>
          </el-form-item>
          <el-form-item label="实验名称:" v-if="isChemist">
            <el-input v-model="form.experimentName" placeholder="请输入"></el-input>
          <el-form-item label="状态:">
            <el-select v-model="form.status" placeholder="请选择">
              <el-option label="草稿箱" :value="-1"></el-option>
              <el-option label="已发送待提交" :value="1"></el-option>
              <el-option label="已提交" :value="2"></el-option>
              <el-option label="已封存" :value="3"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="">
            <el-button type="default" @click="resetForm">重置</el-button>
@@ -80,6 +82,7 @@
<script>
import ApprovalDialog from './components/approvalDialog.vue'
import { getList } from './service'
export default {
  name: "ProjectList",
@@ -91,15 +94,13 @@
      userRole: 'chemist', // 用户角色
      currentType: 'list', // 当前显示类型:list-列表,draft-草稿箱
      form: {
        planName: "",
        planCode: "",
        creator: "",
        createTime: [],
        approver: "",
        status: "",
        experimentCode: "",
        experimentName: "",
        sampleCount: "",
        receivedStatus: ""
        projectName: "",
        createTime: [],
        status: null,
        pageNum: 1,
        pageSize: 10
      },
      tableData: [],
      total: 0,
@@ -232,20 +233,34 @@
    },
    resetForm() {
      this.form = {
        planName: "",
        planCode: "",
        creator: "",
        createTime: [],
        approver: "",
        status: "",
        experimentCode: "",
        experimentName: "",
        sampleCount: "",
        receivedStatus: ""
        projectName: "",
        createTime: [],
        status: null,
        pageNum: 1,
        pageSize: 10
      };
      this.handleSearch();
    },
    handleSearch() {
      // 实现查询逻辑
      console.log("查询条件:", this.form);
    async handleSearch() {
      const params = {
        experimentCode: this.form.experimentCode,
        experimentName: this.form.experimentName,
        projectName: this.form.projectName,
        startTime: this.form.createTime[0] || null,
        endTime: this.form.createTime[1] || null,
        status: this.form.status,
        pageNum: this.form.pageNum,
        pageSize: this.form.pageSize
      };
      try {
        const res = await getList(params)
        this.tableData = res.records || [];
        this.total = res.total || 0;
      } catch (error) {
        console.error("查询失败:", error);
      }
    },
    getStatusType(status) {
      const statusMap = {
@@ -316,14 +331,7 @@
      this.getTableData();
    },
    getTableData() {
      // 根据currentType请求不同的数据
      if (this.currentType === 'list') {
        this.tableData = this.mockListData;
        this.total = this.mockListData.length;
      } else {
        this.tableData = this.mockDraftData;
        this.total = this.mockDraftData.length;
      }
      this.handleSearch();
    },
  },
};
laboratory/src/views/dataManagement/sampleManage/service.js
New file
@@ -0,0 +1,11 @@
import axios from '@/utils/request';
// 列表
export const getList = (data) => {
  return axios.post('/t-sampling-record/api/t-sampling-record/pageList', { ...data })
}
// 获取实验调度分页列表
export const getDispatchList = (data) => {
  return axios.post('/t-experiment-dispatch/api/t-experiment-dispatch/pageList', { ...data })
}
laboratory/src/views/login/index.vue
@@ -96,7 +96,6 @@
        return
      }
      loginReq(this.loginForm).then(res => {
        console.log('111111', res)
        sessionStorage.setItem('token', res.token)
        sessionStorage.setItem('userInfo', JSON.stringify(res.userInfo.user))
        this.$router.push('/system')