Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory
| | |
| | | // 退出登录 |
| | | outLogin() { |
| | | sessionStorage.clear() |
| | | this.$router.replace({ path: "/login" }); |
| | | this.$router.replace({ path: "/" }); |
| | | }, |
| | | // 关闭标签 |
| | | closeTag(tag) { |
| | |
| | | }, |
| | | // 跳转标签 |
| | | goTag(tag) { |
| | | this.$router.push(tag.path) |
| | | this.$router.push({ |
| | | path: tag.path, |
| | | query: tag.query |
| | | }) |
| | | }, |
| | | handleWheel(e) { |
| | | if (this.scrollTimer) { |
| | | this.scrollAmount += e.deltaY; |
| | | return; |
| | | } |
| | | |
| | | |
| | | const container = e.currentTarget; |
| | | this.scrollAmount = e.deltaY; |
| | | |
| | | |
| | | const scroll = () => { |
| | | container.scrollLeft += this.scrollAmount * 1.2; // 增加滚动速度 |
| | | this.scrollAmount = 0; |
| | | this.scrollTimer = null; |
| | | }; |
| | | |
| | | |
| | | this.scrollTimer = setTimeout(scroll, 8); // 减少延迟时间 |
| | | } |
| | | }, |
| | |
| | | const routes = [ |
| | | { |
| | | path: "/", |
| | | redirect: "/projectList/list", |
| | | redirect: "/login", |
| | | }, |
| | | { |
| | | path: "/login", |
| | |
| | | path: "list", |
| | | name: "ProjectList", |
| | | meta: { |
| | | title: "项目组管理", |
| | | title: "菌种库项目组管理", |
| | | }, |
| | | component: () => import("../views/projectList"), |
| | | }, |
| | |
| | | path: "addProject", |
| | | name: "AddProject", |
| | | meta: { |
| | | title: "新增项目组", |
| | | title: "新增菌种库项目组", |
| | | hide: true, |
| | | keepAlive: true, |
| | | }, |
| | |
| | | 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) { |
| | |
| | | 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)) |
| | |
| | | } |
| | | |
| | | next() |
| | | // } |
| | | }); |
| | | |
| | | export default router; |
| | |
| | | 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({ |
| | |
| | | // 添加窗口大小变化监听器 |
| | | 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 |
| | |
| | | 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') |
| | | }) |
| | | } |
| | | } |
| | |
| | | |
| | | // 登录 |
| | | export const loginReq = (data) => { |
| | | return axios.post('/login', { ...data }) |
| | | return axios.post('/api/login', { ...data }) |
| | | } |
| | |
| | | <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="至" |
| | |
| | | </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> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { getProjectList } from './service' |
| | | import { getProjectList, changeStatus, deleteProject } from './service' |
| | | export default { |
| | | name: 'ProjectList', |
| | | data() { |
| | |
| | | this.getList() |
| | | }, |
| | | methods: { |
| | | handleAddProject() { |
| | | this.$router.push({ |
| | | path: '/projectList/addProject' |
| | | }) |
| | | 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() { |
| | | this.showDelConfirm = false |
| | | this.msgsuccess('删除成功') |
| | | this.rowId = '' |
| | | this.getList() |
| | | deleteProject({ id: this.rowId }).then(res => { |
| | | this.showDelConfirm = false |
| | | this.msgsuccess('删除成功') |
| | | this.rowId = '' |
| | | this.getList() |
| | | }) |
| | | }, |
| | | handleChangeStatus(row, status) { |
| | | this.rowId = row.id |
| | |
| | | this.changeStatus = true |
| | | }, |
| | | handleChangeStatusConfirm() { |
| | | this.changeStatus = false |
| | | this.msgsuccess('操作成功') |
| | | this.rowId = '' |
| | | this.changeStatusTitle = '' |
| | | this.changeStatusTip = '' |
| | | this.getList() |
| | | 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() |
| | | }, |
| | | 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() |
| | | } |
| | | } |
| | | } |
| | |
| | | |
| | | // 列表 |
| | | 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}`) |
| | | } |
| | |
| | | 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: { |
| | |
| | | <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> |
| | |
| | | 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' } |
| | | ] |
| | | } |
| | |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid) { |
| | | this.$emit('confirm', this.form) |
| | | this.resetForm() |
| | | } |
| | | }) |
| | | }, |
| | |
| | | <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"> |
| | |
| | | </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> |
| | |
| | | |
| | | <script> |
| | | import reviewDialog from './components/review-dialog.vue'; |
| | | import { getList } from './service' |
| | | export default { |
| | | name: "ConfirmationSheet", |
| | | components: { |
| | |
| | | data() { |
| | | return { |
| | | form: { |
| | | planName: "", |
| | | planCode: "", |
| | | creator: "", |
| | | createTime: [], |
| | | approver: "", |
| | | status: "", |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | projectName: "", |
| | | experimentCode: "", |
| | | experimentName: "", |
| | | startTime: "", |
| | | endTime: "", |
| | | auditStatus: "", |
| | | }, |
| | | showRevoke:false, |
| | | 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 = { |
| | |
| | | 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) { |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
New file |
| | |
| | | import axios from '@/utils/request'; |
| | | |
| | | // 列表 |
| | | export const getList = (data) => { |
| | | return axios.post('/t-experiment-dispatch/api/t-experiment-dispatch/pageList', { ...data }) |
| | | } |
| | |
| | | <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"> |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | <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 |
| | |
| | | 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> |
| | |
| | | |
| | | <script> |
| | | import ApprovalDialog from './components/approvalDialog.vue' |
| | | import { getList } from './service' |
| | | |
| | | export default { |
| | | name: "ProjectList", |
| | |
| | | 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, |
| | |
| | | }, |
| | | 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 = { |
| | |
| | | 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(); |
| | | }, |
| | | }, |
| | | }; |
New file |
| | |
| | | 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 }) |
| | | } |
| | |
| | | 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') |