Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory
| | |
| | | <el-dialog @open="openDialog" class="select-member" :z-index="1000" :visible.sync="visible" width="53.33%" |
| | | :close-on-click-modal="false" :show-close="false"> |
| | | <template #title> |
| | | <div>选择参与人员</div> |
| | | <div>{{title}}</div> |
| | | </template> |
| | | <div class="select-member-content"> |
| | | <el-row :gutter="16"> |
| | |
| | | singleSelect: { |
| | | type: Boolean, |
| | | default: false |
| | | } |
| | | }, |
| | | title:{ |
| | | type:String, |
| | | default:'选择参与人员' |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | } else { |
| | | roles = res.filter(item => item.roleId !== 1); // 排除 roleId 为 1 的角色 |
| | | } |
| | | |
| | | if(this.title=='选择菌种实验员'){ |
| | | roles = res.filter(item => item.roleId == 5) |
| | | } |
| | | this.roleList = roles; |
| | | this.filterRoleList(); // 获取后先进行一次过滤 |
| | | }); |
| | |
| | | <el-form-item label="项目组名称:"> |
| | | <el-input v-model="form.teamName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="项目负责人:"> |
| | | <el-form-item label="菌种项目负责人:"> |
| | | <el-input v-model="form.personCharge" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="创建日期:"> |
| | |
| | | highlight-current-row @current-change="handleCurrentChange"> |
| | | <!-- <el-table-column type="selection" width="55" /> --> |
| | | <el-table-column prop="teamName" label="项目组名称"></el-table-column> |
| | | <el-table-column prop="personCharge" label="项目负责人"></el-table-column> |
| | | <el-table-column prop="staffName" label="项目组成员"></el-table-column> |
| | | <el-table-column prop="personCharge" label="菌种项目负责人:"></el-table-column> |
| | | <el-table-column prop="staffName" label="菌种实验员"></el-table-column> |
| | | <el-table-column prop="createTime" label="创建时间"></el-table-column> |
| | | </Table> |
| | | |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import moment from 'moment'; |
| | | import { getDataList } from './servce' |
| | | export default { |
| | | props: { |
| | |
| | | startTime: '', |
| | | endTime: '', |
| | | teamName: '', |
| | | daterange:'', |
| | | } |
| | | this.handleSearch() |
| | | }, |
| | | handleSearch() { |
| | | console.log('shuju',this.form); |
| | | if(this.form.daterange&&this.form.daterange.length>0){ |
| | | this.form.startTime = moment(this.form.daterange[0]).format('YYYY-MM-DD 00:00:00') |
| | | this.form.endTime = moment(this.form.daterange[1]).format('YYYY-MM-DD 23:59:59') |
| | | } |
| | | |
| | | this.open() |
| | | }, |
| | |
| | | } |
| | | } |
| | | |
| | | console.log('rewdsada',res); |
| | | |
| | | |
| | | if (res.data.code == 200) { |
| | | if (!res.data) { |
| | | return Promise.resolve({}) |
| | | } |
| | | |
| | | if (res.data.data.code == 200) { |
| | | if (res.data&&res.data.data&&res.data.data.code == 200) { |
| | | return Promise.resolve(res.data.data || res.data) |
| | | } else if (res.data.data.code == 103 || res.data.data.code == 401) { |
| | | } else if ((res.data&&res.data.data&&(res.data.data.code == 103 || res.data.data.code == 401))) { |
| | | Message({ |
| | | message: res.data.data.msg || '登录已过期,请重新登录', |
| | | type: 'warning', |
| | | duration: 2000 |
| | | }) |
| | | } else if (res.data.data.code == 500) { |
| | | } else if ((res.data&&res.data.data&&(res.data.data.code == 500))) { |
| | | Message({ |
| | | message: res.data.data.msg || '服务器错误', |
| | | type: 'error', |
| | |
| | | <template> |
| | | <div class="list"> |
| | | <TableCustom :queryForm="form" :tableData="tableData" :total="total" @handleSizeChange="handleSizeChange" @handleCurrentChange="handleCurrentChange"> |
| | | <TableCustom :queryForm="form" :tableData="tableData" :total="total" @handleSizeChange="handleSizeChange" |
| | | @handleCurrentChange="handleCurrentChange"> |
| | | <template #search> |
| | | <el-form :model="form" labelWidth="auto" inline> |
| | | <el-form-item label="菌种编号:"> |
| | |
| | | <el-form-item label="菌种名称:"> |
| | | <el-input v-model="form.strainName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item v-if="roleType != 1" label="起传类型"> |
| | | <!-- <el-form-item v-if="roleType != 1" label="起传类型"> |
| | | <el-select v-model="form.generationType" placeholder="请选择"> |
| | | <el-option label="母代" :value="1"></el-option> |
| | | <el-option label="祖代" :value="2"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form-item> --> |
| | | <el-form-item label=""> |
| | | <el-button type="default" @click="resetForm">重置</el-button> |
| | | <el-button style="margin-left: 10px;" type="primary" @click="handleSearch">查询</el-button> |
| | |
| | | <el-table-column label="操作" width="250"> |
| | | <template slot-scope="scope"> |
| | | <el-button type="text" @click="handleDetail(scope.row)">详情</el-button> |
| | | <el-button type="text" v-if="Number(roleType) == 1" @click="handleDetail(scope.row)">编辑</el-button> |
| | | <!-- 菌种超级管理员 --> |
| | | <el-button type="text" @click="handleDelete(scope.row)">删除</el-button> |
| | | <el-button type="text" v-if="Number(roleType) == 1" @click="handleDelete(scope.row)">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | |
| | | return |
| | | } |
| | | } |
| | | this.selectMemberData = data; |
| | | // 合并去重:保留原有成员,新增新成员,重复的不添加 |
| | | const oldList = this.selectMemberData || []; |
| | | const newList = [...oldList]; |
| | | data.forEach(newMember => { |
| | | if (!oldList.some(oldMember => oldMember.userId === newMember.userId)) { |
| | | newList.push(newMember); |
| | | } |
| | | }); |
| | | this.selectMemberData = newList; |
| | | this.$refs.selectMember.close(); |
| | | }, |
| | | editUserList() { |
| | |
| | | @blur="handleDescBlur(row)" /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="images" label="拍照上传" width="120"> |
| | | <el-table-column prop="images" label="拍照上传" width="180"> |
| | | <template #default="{ row }"> |
| | | <el-upload :file-list="row.images" :disabled="roleType!=4" list-type="picture-card" :on-preview="file => handlePreview(row, file)" |
| | | :on-remove="(file, fileList) => handleRemove(row, file, fileList)" |
| | |
| | | width: 100% !important; |
| | | } |
| | | |
| | | ::v-deep(.mini-upload){ |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | } |
| | | |
| | | ::v-deep(.el-upload--picture-card) { |
| | | width: 40px !important; |
| | | height: 40px !important; |
| | |
| | | </div> |
| | | <div class="flex" style="margin-bottom: 20px"> |
| | | <div class="tabs"> |
| | | <div :class="{ active: activeTab === 'strain' }" @click="activeTab = 'strain'"> |
| | | <div :class="{ active: activeTab === 'strain' }" @click="ChangeTab('strain')"> |
| | | 来源菌株 |
| | | </div> |
| | | <div :class="{ active: activeTab === 'material' }" @click="activeTab = 'material'"> |
| | | <div :class="{ active: activeTab === 'material' }" @click="ChangeTab('material')"> |
| | | 来源物资 |
| | | </div> |
| | | </div> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createTime" label="操作时间" /> |
| | | <el-table-column prop="address" label="操作" v-if="!$route.query.isDetail"> |
| | | <el-table-column prop="address" label="操作"> |
| | | <template slot-scope="scope" v-if="[1, 4].includes(roleType)"> |
| | | <el-button type="text" @click="handleEditSeparation(scope.row, scope.$index)" |
| | | v-if="!$route.query.isDetail">编辑</el-button> |
| | |
| | | <el-button type="text" @click="handleConfirmStorageClick(scope.row, scope.$index)" |
| | | v-if="$route.query.isDetail && [3].includes(roleType) && !scope.row.preserveSignature">确认入库</el-button> |
| | | <el-button type="text" @click="handleDeleteInoculation(scope.$index)" |
| | | v-if="!$route.query.isDetail && !scope.row.preserveSignature && [1, 4].includes(roleType)">删除</el-button> |
| | | v-if="!scope.row.preserveSignature && [4].includes(roleType)">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | <el-button type="text" @click="handleConfirmPreserve(scope.row, scope.$index)" |
| | | v-if="$route.query.isDetail && [3].includes(roleType) && !scope.row.preserveSignature">确认入库</el-button> |
| | | <el-button type="text" @click="handleDeletePreserve(scope.$index)" |
| | | v-if="!$route.query.isDetail && !scope.row.preserveSignature && [1, 4].includes(roleType)">删除</el-button> |
| | | v-if="!scope.row.preserveSignature && [4].includes(roleType)">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </Table> |
| | |
| | | @confirm="handleConfirmStorage" /> |
| | | <ConfirmPreserveDialog :visible.sync="showConfirmPreserveDialog" :editData="editPreserveData" |
| | | @confirm="handleConfirmPreserveSubmit" /> |
| | | <div class="end-btn" style="margin-top: 20px;" v-if="!$route.query.isDetail && [3, 4].includes(roleType)"> |
| | | <div class="end-btn" style="margin-top: 20px;" |
| | | v-if="($route.query.isDetail && [3].includes(roleType)) || !$route.query.isDetail && [3, 4].includes(roleType)"> |
| | | <el-button type="primary" @click="handleSubmit(1)">提交</el-button> |
| | | <el-button type="primary" @click="handleSubmit(3)">同步给保藏人</el-button> |
| | | <el-button type="default" @click="handleSubmit(2)">存草稿</el-button> |
| | | <el-button v-if="!$route.query.isDetail" type="primary" @click="handleSubmit(3)">同步给保藏人</el-button> |
| | | <el-button v-if="!$route.query.isDetail" type="default" @click="handleSubmit(2)">存草稿</el-button> |
| | | </div> |
| | | </el-form> |
| | | </Card> |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | ChangeTab(tab) { |
| | | if (!this.$route.query.id) { |
| | | this.activeTab = tab |
| | | } |
| | | }, |
| | | async getDetail() { |
| | | const res = await detail({ id: this.$route.query.id }) |
| | | if (res.preserveSource == 1) { |
| | |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <!-- <el-col :span="12"> |
| | | <el-form-item label="接种操作人" prop="handleName"> |
| | | <el-input v-model="form.handleName" disabled placeholder="自动填入" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-col> --> |
| | | </el-row> |
| | | </el-form> |
| | | <div style="text-align: center; margin-top: 20px"> |
| | |
| | | separateColonyCode: "", |
| | | vaccinationSlopeCode: "", |
| | | handleType: "保存", |
| | | preserveTime: this.getNowTime(), |
| | | preserveTime: '', |
| | | handleTime: this.getNowTime(), |
| | | handleSignature: "", |
| | | handleName: JSON.parse(sessionStorage.getItem('userInfo'))?.nickName || '', |
| | |
| | | handleSave() { |
| | | console.log(this.form) |
| | | this.$refs.form.validate((valid) => { |
| | | if(!this.form.handleSignature){ |
| | | this.$message.error('请接种操作人签字') |
| | | return |
| | | } |
| | | if (valid) { |
| | | this.$emit("save", { ...this.form }); |
| | | |
| | |
| | | separateColonyCode: "", |
| | | vaccinationSlopeCode: "", |
| | | handleType: "保存", |
| | | preserveTime: this.getNowTime(), |
| | | preserveTime: '', |
| | | handleTime: this.getNowTime(), |
| | | handleSignature: "", |
| | | handleName: JSON.parse(sessionStorage.getItem('userInfo'))?.nickName || '', |
| | |
| | | <div class="box-title"> |
| | | <img src="@/assets/public/notice.png" class="header-icon" /> |
| | | <span>菌种源保藏出/入细胞库登记表说明</span> |
| | | <el-button type="text" class="view-more" @click="handleViewMore" |
| | | >查看全部 >></el-button |
| | | > |
| | | <el-button type="text" class="view-more" @click="handleViewMore">查看全部 >></el-button> |
| | | </div> |
| | | <div class="header-content" :class="{ collapsed: true }"> |
| | | <p> |
| | | 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3 |
| | | 条路径。1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。1.2 |
| | | 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)1.3 |
| | | 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。 |
| | | 2. |
| | | 菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。2.1 |
| | | 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、2.3 |
| | | 生产细胞库(子代-S)、(孙代-G)3. 细胞库编码规则3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在 |
| | | 24 年 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01 |
| | | 传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2 |
| | | 编码规则实现了编码唯一,编码可溯源,编码直观、方便。3.2 |
| | | 细胞库说明:3.2.1 |
| | | 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。3.2.2 |
| | | 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。3.2.3 |
| | | 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。4. |
| | | 菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 a-01、a-02 |
| | | 等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。4.2 |
| | | 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。 |
| | | </p> |
| | | <p> 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3条路径。</p> |
| | | <p> 1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。</p> |
| | | <p> 1.2 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)</p> |
| | | <p> 1.3 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。</p> |
| | | <p> 2.菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。</p> |
| | | <p> 2.1 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、 </p> |
| | | <p> 2.3 生产细胞库(子代-S)、(孙代-G)</p> |
| | | <p> 3. 细胞库编码规则 </p> |
| | | <p>3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在24 年 |
| | | 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号</p> |
| | | <p>3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2编码规则实现了编码唯一,编码可溯源,编码直观、方便。</p> |
| | | <p> 3.2 细胞库说明:</p> |
| | | <p> 3.2.1 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。</p> |
| | | <p> 3.2.2 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。</p> |
| | | <p> 3.2.3 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。</p> |
| | | <p> 4.菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 a-01、a-02等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。</p> |
| | | <p> 4.2 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。</p> |
| | | </div> |
| | | |
| | | <!-- 查看全部弹窗 --> |
| | | <el-dialog |
| | | title="菌种源保藏出/入细胞库登记表说明" |
| | | :visible.sync="dialogVisible" |
| | | width="50%" |
| | | class="view-all-dialog" |
| | | > |
| | | <el-dialog title="菌种源保藏出/入细胞库登记表说明" :visible.sync="dialogVisible" width="50%" class="view-all-dialog"> |
| | | <div class="dialog-content"> |
| | | <p> |
| | | 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3 |
| | | 条路径。1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。1.2 |
| | | 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)1.3 |
| | | 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。2. |
| | | 菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。2.1 |
| | | 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、2.3 |
| | | 生产细胞库(子代-S)、(孙代-G)3. 细胞库编码规则3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在 |
| | | 24 年 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01 |
| | | 传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2 |
| | | 编码规则实现了编码唯一,编码可溯源,编码直观、方便。3.2 |
| | | 细胞库说明:3.2.1 |
| | | 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。3.2.2 |
| | | 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。3.2.3 |
| | | 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。4. |
| | | 菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 |
| | | a-01、a-02 等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。4.2 |
| | | 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。 |
| | | </p> |
| | | <p> 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3条路径。</p> |
| | | <p> 1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。</p> |
| | | <p> 1.2 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)</p> |
| | | <p> 1.3 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。</p> |
| | | <p> 2.菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。</p> |
| | | <p> 2.1 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、 </p> |
| | | <p> 2.3 生产细胞库(子代-S)、(孙代-G)</p> |
| | | <p> 3. 细胞库编码规则 </p> |
| | | <p>3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在24 年 |
| | | 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号</p> |
| | | <p>3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2编码规则实现了编码唯一,编码可溯源,编码直观、方便。</p> |
| | | <p> 3.2 细胞库说明:</p> |
| | | <p> 3.2.1 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。</p> |
| | | <p> 3.2.2 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。</p> |
| | | <p> 3.2.3 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。</p> |
| | | <p> 4.菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 a-01、a-02等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。</p> |
| | | <p> 4.2 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。</p> |
| | | </div> |
| | | </el-dialog> |
| | | </el-card> |
| | | |
| | | <!-- Table --> |
| | | <TableCustom |
| | | :queryForm="queryForm" |
| | | :tableData="tableData" |
| | | :total="total" |
| | | @currentChange="handleCurrentChange" |
| | | @sizeChange="handleSizeChange" |
| | | > |
| | | <TableCustom :queryForm="queryForm" :tableData="tableData" :total="total" @handleCurrentChange="handleCurrentChange" |
| | | @handleSizeChange="handleSizeChange"> |
| | | <template #search> |
| | | <el-form :model="form" label-width="auto" inline> |
| | | <el-form-item label="菌种编号:"> |
| | |
| | | <template #setting> |
| | | <div class="tableTitle"> |
| | | <div class="flex a-center"> |
| | | <div |
| | | class="title" |
| | | :class="{ active: currentType === 'list' }" |
| | | @click="handleTypeChange('list')" |
| | | > |
| | | <div class="title" :class="{ active: currentType === 'list' }" @click="handleTypeChange('list')"> |
| | | 主细胞列表 |
| | | </div> |
| | | <div |
| | | class="drafts" |
| | | :class="{ active: currentType === 'draft' }" |
| | | @click="handleTypeChange('draft')" |
| | | > |
| | | <div class="drafts" :class="{ active: currentType === 'draft' }" @click="handleTypeChange('draft')"> |
| | | 草稿箱 |
| | | </div> |
| | | </div> |
| | | <div v-if="roleType == 4" class="flex a-center"> |
| | | <el-button |
| | | @click="handleNewStrain" |
| | | class="el-icon-plus" |
| | | type="primary" |
| | | style="margin-right: 12px" |
| | | >新增主细胞</el-button |
| | | > |
| | | <el-button |
| | | @click="handleNewStrain" |
| | | class="el-icon-plus" |
| | | type="primary" |
| | | >批量新增</el-button |
| | | > |
| | | <el-button @click="handleNewStrain" class="el-icon-plus" type="primary" |
| | | style="margin-right: 12px">新增主细胞</el-button> |
| | | <el-button @click="handleNewStrain" class="el-icon-plus" type="primary">批量新增</el-button> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | <el-table-column prop="saveLocation" label="保藏位置" /> |
| | | <el-table-column prop="stock" label="库存余量" /> |
| | | <el-table-column prop="remark" label="备注" /> |
| | | <el-table-column |
| | | v-if="currentType === 'list'" |
| | | prop="status" |
| | | label="当前状态" |
| | | > |
| | | <el-table-column v-if="currentType === 'list'" prop="status" label="当前状态"> |
| | | <template #default="{ row }"> |
| | | <el-tag :type="getStatusType(row.status)">{{ |
| | | getStatusText(row.status) |
| | |
| | | <template #default="{ row }"> |
| | | <el-button type="text" @click="handleDetail(row)">详情</el-button> |
| | | <el-button v-if="row.status == 2 || row.status == 4" type="text" @click="handleEdit(row)">编辑</el-button> |
| | | <el-button |
| | | v-if="currentType === 'list'" |
| | | type="text" |
| | | @click="handleRecord(row)" |
| | | >出入库记录</el-button |
| | | > |
| | | <el-button v-if="currentType === 'list'" type="text" @click="handleRecord(row)">出入库记录</el-button> |
| | | <el-button v-if="roleType == 1" type="text" @click="handleDelete(row)">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | }, |
| | | handleRecord(row) { |
| | | this.$router.push({ |
| | | path: `/strain-library/strain-library-manage/record?id=${row.id}`, |
| | | path: `/strain-library/strain-library-manage/record?id=${row.id}&type=2`, |
| | | }); |
| | | }, |
| | | handleNewStrain() { |
| | |
| | | > |
| | | </div> |
| | | <div class="header-content" :class="{ collapsed: true }"> |
| | | <p> |
| | | 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3 |
| | | 条路径。1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。1.2 |
| | | 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)1.3 |
| | | 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。 |
| | | 2. |
| | | 菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。2.1 |
| | | 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、2.3 |
| | | 生产细胞库(子代-S)、(孙代-G)3. 细胞库编码规则3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在 |
| | | 24 年 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01 |
| | | 传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2 |
| | | 编码规则实现了编码唯一,编码可溯源,编码直观、方便。3.2 |
| | | 细胞库说明:3.2.1 |
| | | 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。3.2.2 |
| | | 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。3.2.3 |
| | | 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。4. |
| | | 菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 a-01、a-02 |
| | | 等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。4.2 |
| | | 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。 |
| | | </p> |
| | | <p> 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3条路径。</p> |
| | | <p> 1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。</p> |
| | | <p> 1.2 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)</p> |
| | | <p> 1.3 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。</p> |
| | | <p> 2.菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。</p> |
| | | <p> 2.1 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、 </p> |
| | | <p> 2.3 生产细胞库(子代-S)、(孙代-G)</p> |
| | | <p> 3. 细胞库编码规则 </p> |
| | | <p>3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在24 年 |
| | | 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号</p> |
| | | <p>3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2编码规则实现了编码唯一,编码可溯源,编码直观、方便。</p> |
| | | <p> 3.2 细胞库说明:</p> |
| | | <p> 3.2.1 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。</p> |
| | | <p> 3.2.2 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。</p> |
| | | <p> 3.2.3 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。</p> |
| | | <p> 4.菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 a-01、a-02等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。</p> |
| | | <p> 4.2 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。</p> |
| | | </div> |
| | | |
| | | <!-- 查看全部弹窗 --> |
| | |
| | | class="view-all-dialog" |
| | | > |
| | | <div class="dialog-content"> |
| | | <p> |
| | | 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3 |
| | | 条路径。1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。1.2 |
| | | 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)1.3 |
| | | 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。2. |
| | | 菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。2.1 |
| | | 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、2.3 |
| | | 生产细胞库(子代-S)、(孙代-G)3. 细胞库编码规则3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在 |
| | | 24 年 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01 |
| | | 传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2 |
| | | 编码规则实现了编码唯一,编码可溯源,编码直观、方便。3.2 |
| | | 细胞库说明:3.2.1 |
| | | 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。3.2.2 |
| | | 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。3.2.3 |
| | | 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。4. |
| | | 菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 |
| | | a-01、a-02 等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。4.2 |
| | | 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。 |
| | | </p> |
| | | <p> 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3条路径。</p> |
| | | <p> 1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。</p> |
| | | <p> 1.2 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)</p> |
| | | <p> 1.3 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。</p> |
| | | <p> 2.菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。</p> |
| | | <p> 2.1 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、 </p> |
| | | <p> 2.3 生产细胞库(子代-S)、(孙代-G)</p> |
| | | <p> 3. 细胞库编码规则 </p> |
| | | <p>3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在24 年 |
| | | 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号</p> |
| | | <p>3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2编码规则实现了编码唯一,编码可溯源,编码直观、方便。</p> |
| | | <p> 3.2 细胞库说明:</p> |
| | | <p> 3.2.1 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。</p> |
| | | <p> 3.2.2 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。</p> |
| | | <p> 3.2.3 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。</p> |
| | | <p> 4.菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 a-01、a-02等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。</p> |
| | | <p> 4.2 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。</p> |
| | | </div> |
| | | </el-dialog> |
| | | </el-card> |
| | |
| | | :queryForm="queryForm" |
| | | :tableData="tableData" |
| | | :total="total" |
| | | @currentChange="handleCurrentChange" |
| | | @sizeChange="handleSizeChange" |
| | | @handleCurrentChange="handleCurrentChange" |
| | | @handleSizeChange="handleSizeChange" |
| | | > |
| | | <template #search> |
| | | <el-form :model="form" label-width="auto" inline> |
| | |
| | | }, |
| | | handleRecord(row) { |
| | | this.$router.push({ |
| | | path: `/strain-library/strain-library-manage/record?id=${row.id}`, |
| | | path: `/strain-library/strain-library-manage/record?id=${row.id}&type=3`, |
| | | }); |
| | | }, |
| | | handleNewStrain() { |
| | |
| | | </el-table-column> |
| | | <el-table-column prop="boundTime" label="操作时间" /> |
| | | <el-table-column prop="handleName" label="操作人姓名" /> |
| | | <el-table-column prop="preserveName" label="菌种保藏人签字" /> |
| | | <el-table-column prop="preserveSignature" label="菌种保藏人签字" > |
| | | <template #default="{row}"> |
| | | <img :src="row.preserveSignature" alt="签字图片" style="max-width: 100px; max-height: 50px;"> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="状态"> |
| | | <template #default="{ row }"> |
| | | <el-tag :type="row.confirmTime ? 'success' : 'warning'"> |
| | |
| | | this.roleType = JSON.parse(sessionStorage.getItem("userInfo")).roleType; |
| | | this.query.id = this.detail.id; |
| | | getDetailById(this.query).then((res) => { |
| | | console.log('qweqweqwe',res); |
| | | |
| | | this.detail.records = res.warehousingList?.records || []; |
| | | this.total = res.warehousingList?.total || 0; |
| | | this.currentPage = res.warehousingList?.current || 1; |
| | |
| | | > |
| | | </div> |
| | | <div class="header-content" :class="{ collapsed: true }"> |
| | | <p> |
| | | 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3 |
| | | 条路径。1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。1.2 |
| | | 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)1.3 |
| | | 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。 |
| | | 2. |
| | | 菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。2.1 |
| | | 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、2.3 |
| | | 生产细胞库(子代-S)、(孙代-G)3. 细胞库编码规则3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在 |
| | | 24 年 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01 |
| | | 传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2 |
| | | 编码规则实现了编码唯一,编码可溯源,编码直观、方便。3.2 |
| | | 细胞库说明:3.2.1 |
| | | 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。3.2.2 |
| | | 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。3.2.3 |
| | | 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。4. |
| | | 菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 a-01、a-02 |
| | | 等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。4.2 |
| | | 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。 |
| | | </p> |
| | | <p> 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3条路径。</p> |
| | | <p> 1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。</p> |
| | | <p> 1.2 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)</p> |
| | | <p> 1.3 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。</p> |
| | | <p> 2.菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。</p> |
| | | <p> 2.1 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、 </p> |
| | | <p> 2.3 生产细胞库(子代-S)、(孙代-G)</p> |
| | | <p> 3. 细胞库编码规则 </p> |
| | | <p>3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在24 年 |
| | | 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号</p> |
| | | <p>3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2编码规则实现了编码唯一,编码可溯源,编码直观、方便。</p> |
| | | <p> 3.2 细胞库说明:</p> |
| | | <p> 3.2.1 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。</p> |
| | | <p> 3.2.2 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。</p> |
| | | <p> 3.2.3 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。</p> |
| | | <p> 4.菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 a-01、a-02等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。</p> |
| | | <p> 4.2 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。</p> |
| | | </div> |
| | | |
| | | <!-- 查看全部弹窗 --> |
| | |
| | | class="view-all-dialog" |
| | | > |
| | | <div class="dialog-content"> |
| | | <p> |
| | | 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3 |
| | | 条路径。1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。1.2 |
| | | 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)1.3 |
| | | 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。2. |
| | | 菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。2.1 |
| | | 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、2.3 |
| | | 生产细胞库(子代-S)、(孙代-G)3. 细胞库编码规则3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在 |
| | | 24 年 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01 |
| | | 传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2 |
| | | 编码规则实现了编码唯一,编码可溯源,编码直观、方便。3.2 |
| | | 细胞库说明:3.2.1 |
| | | 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。3.2.2 |
| | | 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。3.2.3 |
| | | 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。4. |
| | | 菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 |
| | | a-01、a-02 等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。4.2 |
| | | 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。 |
| | | </p> |
| | | <p> 1. 菌种全部集中登记在【菌种源保藏出/入细胞库登记表】,菌种来源有 3条路径。</p> |
| | | <p> 1.1 是沙土管或甘油管的源头菌种;入原始细胞库(祖代-O)。</p> |
| | | <p> 1.2 是斜面的源头菌种;接种入主细胞库(祖代-O)。经过育种、验证后,菌种保藏为甘油管或沙土管的,入原始细胞库(祖代-0)</p> |
| | | <p> 1.3 是含菌物质自己分离后获得的斜面源头菌种,接种入主细胞库;经生产验证后,保藏为沙土管或甘油管,入原始细胞库(祖代-O)。</p> |
| | | <p> 2.菌种细胞库,分类入三库,进行传代运行管理。三类库存空间进行区分,保藏菌种。</p> |
| | | <p> 2.1 原始细胞库(祖代-O)、2.2 主细胞库(母代-M)、 </p> |
| | | <p> 2.3 生产细胞库(子代-S)、(孙代-G)</p> |
| | | <p> 3. 细胞库编码规则 </p> |
| | | <p>3.1 |
| | | 细胞库编码规则:DD-M-240919-01-(O-0109-01)DD:代表项目组。M:“O”代表祖代原始细胞库,”M“代表母代主细胞库,”S“代表子代生产细胞库,“G”代表孙代生产细胞库。240919:代表在24 年 |
| | | 9 月 19 |
| | | 接种批次的菌种;或收到外来菌种时间的入库批次。01:代表两位序列号。(O-0109-01):代表传代菌种的编号</p> |
| | | <p>3.1.1 |
| | | 传代编码方式演例:祖代:DD-O-240919-01传母代:DD-M-241017-01-(O-091901)DD-M-241017-02-(O-091901)DD-M-241017-03-(O-091901)子代:DD-S-241019-01-(M-1017-02)版权归奥利元生物所有,禁止外传。DD-S-241019-02-(M-1017-03)孙代:DD-G-241109-01-(S-1019-02)3.1.2编码规则实现了编码唯一,编码可溯源,编码直观、方便。</p> |
| | | <p> 3.2 细胞库说明:</p> |
| | | <p> 3.2.1 直接购买、自行从(土壤、相关物料、商品)等分离出来菌株进入原始细胞库。</p> |
| | | <p> 3.2.2 从原始细胞库中选取出来再次纯化、改造、提高性能的菌株进入主细胞库。</p> |
| | | <p> 3.2.3 主细胞库中选取出稳定,生产性能良好的菌株扩培后保种进入生产细胞库。</p> |
| | | <p> 4.菌种选育-保藏过程编号说明4.1 菌种选育时,培养皿的编号可使用 a-01、a-02等用于清晰形态观察记录;菌落编号使用序号 1/2/3等。</p> |
| | | <p> 4.2 接种斜面菌种编码(-O)使用原始细胞库编码;斜面转菌种保藏使用与斜面一致的编码(-O);斜面传代入主细胞库的传代菌种,按编码器规则编码(-M)。</p> |
| | | </div> |
| | | </el-dialog> |
| | | </el-card> |
| | |
| | | :queryForm="queryForm" |
| | | :tableData="tableData" |
| | | :total="total" |
| | | @currentChange="handleCurrentChange" |
| | | @sizeChange="handleSizeChange" |
| | | @handleCurrentChange="handleCurrentChange" |
| | | @handleSizeChange="handleSizeChange" |
| | | > |
| | | <template #search> |
| | | <el-form :model="form" label-width="auto" inline> |
| | |
| | | }, |
| | | handleRecord(row) { |
| | | this.$router.push({ |
| | | path: `/strain-library/strain-library-manage/record?id=${row.id}`, |
| | | path: `/strain-library/strain-library-manage/record?id=${row.id}&type=1`, |
| | | }); |
| | | }, |
| | | handleNewStrain() { |
| | |
| | | :class="{ active: currentType === 'table' }" |
| | | @click="handleTypeChange('table')" |
| | | > |
| | | 原始细胞保藏出/入库登记表 |
| | | {{type==1?'原始细胞保藏出/入库登记表':type==2?'主细胞保藏出/入库登记表':'生产细胞保藏出/入库登记表'}} |
| | | </div> |
| | | <div |
| | | class="drafts" |
| | | :class="{ active: currentType === 'timeline' }" |
| | | @click="handleTypeChange('timeline')" |
| | | > |
| | | 原始细胞保藏出/入库时间轴 |
| | | {{type==1?'原始细胞保藏出/入库时间轴':type==2?'主细胞保藏出/入库时间轴':'生产细胞保藏出/入库时间轴'}} |
| | | </div> |
| | | </div> |
| | | <div class="flex a-center"> |
| | |
| | | addDialogVisible: false, |
| | | dialogType: "detail", |
| | | roleType: "", |
| | | type: 1, |
| | | }; |
| | | }, |
| | | created() { |
| | | this.roleType = JSON.parse(sessionStorage.getItem("userInfo")).roleType; |
| | | |
| | | this.type = this.$route.query.type; |
| | | // 获取路由参数中的菌种信息 |
| | | const strainId = this.$route.query.id; |
| | | this.queryForm.id = strainId; |
| | |
| | | <el-dialog :visible.sync="visible" width="80%" @open="handleOpen" @close="handleClose"> |
| | | <el-card class="top-card"> |
| | | <el-row :gutter="24" class="top-info-row"> |
| | | <el-col :span="8" class="info-col"> |
| | | <el-col :span="6" class="info-col"> |
| | | <div class="info-item"> |
| | | <span class="label">菌种来源:</span>{{ detail.strainSource }} |
| | | </div> |
| | |
| | | <span class="label">鉴别菌株名称:</span>{{ detail.identifyingStrainName }} |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" class="info-col"> |
| | | <el-col :span="6" class="info-col"> |
| | | <div class="info-item"> |
| | | <span class="label">验证实验编号:</span>{{ detail.validationExperimentCode }} |
| | | </div> |
| | |
| | | </div> |
| | | <div class="info-item"></div> |
| | | </el-col> |
| | | <el-col :span="8" class="info-col"> |
| | | <el-col :span="6" class="info-col"> |
| | | <div class="info-item sign-label"> |
| | | <span class="label">菌种实验员签字</span> |
| | | </div> |
| | |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="6" class="info-col"> |
| | | <div class="info-item"> |
| | | <span class="label">签字时间:</span>{{ detail.preserveTime }} |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </el-card> |
| | | <div class="section-card" style="margin-top: 24px"> |
| | |
| | | |
| | | <!-- 签字确认组件 --> |
| | | <ConfirmStorageDialog :visible.sync="signatureVisible" :handleSignature="form.handleSignature" |
| | | @confirm="handleSignatureConfirm" name="操作人签字" text="是否确认提交该项原始细胞库资料信息?" /> |
| | | @confirm="handleSignatureConfirm" name="操作人签字" text="是否确认提交该项主细胞库资料信息?" /> |
| | | </Card> |
| | | </template> |
| | | |
| | |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <el-button type="primary" @click="handleSave" class="el-icon-plus"> 新增</el-button> |
| | | <el-button type="primary" @click="handleAdd" class="el-icon-plus"> 新增</el-button> |
| | | <EditConditionDialog |
| | | :visible.sync="dialogVisible" |
| | | :isEdit="dialogIsEdit" |
| | |
| | | } |
| | | }) |
| | | }, |
| | | handleAdd() { |
| | | this.dialogVisible = true |
| | | this.dialogIsEdit = false |
| | | this.dialogIsFixed = false |
| | | this.dialogValue = {} |
| | | this.dialogIndex = null |
| | | }, |
| | | handleEdit(row) { |
| | | const idx = this.tableData.indexOf(row) |
| | | this.dialogVisible = true |
| | |
| | | <div class="tableTitle"> |
| | | <div class="flex a-center"> |
| | | <div class="title" :class="{ active: currentType === 'list' }" @click="handleTypeChange('list')"> |
| | | 主细胞资料列表 |
| | | 主细胞库验证资料 |
| | | </div> |
| | | <div class="drafts" v-if="roleType == 4" :class="{ active: currentType === 'draft' }" |
| | | <div class="drafts" v-if="roleType == 4|| roleType==3" :class="{ active: currentType === 'draft' }" |
| | | @click="handleTypeChange('draft')"> |
| | | 草稿箱 |
| | | </div> |
| | | </div> |
| | | <div class="flex a-center" v-if="roleType == 4"> |
| | | <div class="flex a-center" v-if="roleType == 4|| roleType==3"> |
| | | <el-button @click="handleNewStrain" class="el-icon-plus" type="primary" |
| | | style="margin-right: 12px">新增主细胞</el-button> |
| | | </div> |
| | |
| | | <template #table> |
| | | <el-table-column prop="strainSource" label="菌种来源" /> |
| | | <el-table-column prop="identifyingStrainCode" label="鉴别菌株编号" /> |
| | | <el-table-column prop="identifyingStrainName" label="鉴别菌株名称" /> |
| | | <el-table-column prop="identifyingStrainName" label="鉴别菌株名称"> |
| | | <template #default="{ row }"> |
| | | <el-tooltip :content="row.identifyingStrainName" placement="top" effect="dark"> |
| | | <div class="ellipsis-text">{{ row.identifyingStrainName }}</div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="validationExperimentCode" label="验证实验编号" /> |
| | | <el-table-column prop="createBy" label="创建人" /> |
| | | <el-table-column prop="createTime" label="创建时间" /> |
| | |
| | | <el-table-column label="操作" width="200"> |
| | | <template #default="{ row }"> |
| | | <el-button type="text" v-if="row.status == 1 && roleType == 3" |
| | | style="margin-right: 10px;" |
| | | @click="$router.push('/strain/validation/confirm-detail?id=' + row.id)">确认</el-button> |
| | | <el-button type="text" v-if="roleType == 4" @click="handleDetail(row)">详情</el-button> |
| | | <el-button type="text" v-if="roleType != 4" @click="handleDetail2(row)">详情</el-button> |
| | | <el-button type="text" v-if="roleType == 4 && currentType == 'draft'" @click="handleEdit(row)">编辑</el-button> |
| | | <el-button type="text" style="margin-right: 10px;" v-if="roleType == 4" @click="handleDetail(row)">详情</el-button> |
| | | <el-button type="text" style="margin-right: 10px;" v-if="roleType != 4" @click="handleDetail2(row)">详情</el-button> |
| | | <el-button type="text" style="margin-right: 10px;" v-if="roleType == 4 && currentType == 'draft'" @click="handleEdit(row)">编辑</el-button> |
| | | <el-button type="text" v-if="roleType == 4 && currentType == 'draft'" @click="handleDelete(row)">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | .ellipsis-text { |
| | | display: -webkit-box; |
| | | -webkit-line-clamp: 3; |
| | | -webkit-box-orient: vertical; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | word-break: break-all; |
| | | } |
| | | </style> |
| | |
| | | <el-dialog :visible.sync="visible" width="80%" @open="handleOpen" @close="handleClose"> |
| | | <el-card class="top-card"> |
| | | <el-row :gutter="24" class="top-info-row"> |
| | | <el-col :span="8" class="info-col"> |
| | | <el-col :span="6" class="info-col"> |
| | | <div class="info-item"> |
| | | <span class="label">菌种来源:</span>{{ detail.strainSource }} |
| | | </div> |
| | |
| | | <span class="label">鉴别菌株名称:</span>{{ detail.identifyingStrainName }} |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" class="info-col"> |
| | | <el-col :span="6" class="info-col"> |
| | | <div class="info-item"> |
| | | <span class="label">验证实验编号:</span>{{ detail.validationExperimentCode }} |
| | | </div> |
| | |
| | | </div> |
| | | <div class="info-item"></div> |
| | | </el-col> |
| | | <el-col :span="8" class="info-col"> |
| | | <el-col :span="6" class="info-col"> |
| | | <div class="info-item sign-label"> |
| | | <span class="label">菌种实验员签字</span> |
| | | </div> |
| | |
| | | <img v-if="detail.handleSignature" :src="detail.handleSignature" alt="签字" /> |
| | | <span v-else class="waiting-text">暂无签名</span> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="6" class="info-col"> |
| | | <div class="info-item"> |
| | | <span class="label">签字时间:</span>{{ detail.preserveTime }} |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | |
| | | |
| | | .top-card { |
| | | margin-bottom: 0; |
| | | min-height: 160px; |
| | | overflow-y: auto; |
| | | background: rgba(239, 239, 239, 1); |
| | | border-radius: 16px; |
| | | } |
| | |
| | | .label { |
| | | color: #666; |
| | | font-weight: 500; |
| | | flex-shrink: 0; |
| | | } |
| | | |
| | | .sign-col { |
| | |
| | | </el-col> |
| | | <el-col :span="8" class="info-col"> |
| | | <div class="info-item"><span class="label">验证实验编号:</span>{{ detail.validationExperimentCode }}</div> |
| | | <div class="info-item"><span class="label">实验时间:</span>{{ detail.experimentTime }}</div> |
| | | <div class="info-item"><span class="label">实验时间:</span>{{ detail.experimentTime | formatDate }}</div> |
| | | <div class="info-item"></div> |
| | | </el-col> |
| | | <el-col :span="8" class="info-col "> |
| | |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <el-button type="primary" @click="handleSave" class="el-icon-plus"> 新增</el-button> |
| | | <el-button type="primary" @click="handleAdd" class="el-icon-plus"> 新增</el-button> |
| | | <EditConditionDialog |
| | | :visible.sync="dialogVisible" |
| | | :isEdit="dialogIsEdit" |
| | |
| | | import EditConditionDialog from './EditConditionDialog.vue' |
| | | import DetailConditionDialog from './DetailConditionDialog.vue' |
| | | import { detail,confirm } from './service' |
| | | import moment from 'moment' |
| | | export default { |
| | | name: 'ConfirmDetail', |
| | | components: { EditConditionDialog, DetailConditionDialog }, |
| | |
| | | dialogIndex: null, |
| | | detailDialogVisible: false, |
| | | detailDialogValue: {} |
| | | } |
| | | }, |
| | | filters: { |
| | | formatDate(date) { |
| | | if (date) { |
| | | return moment(date).format('YYYY-MM-DD') |
| | | } |
| | | return '' |
| | | } |
| | | }, |
| | | mounted() { |
| | |
| | | handleDraft() { |
| | | // 存稿逻辑 |
| | | }, |
| | | handleAdd() { |
| | | this.dialogVisible = true |
| | | this.dialogIsEdit = false |
| | | this.dialogIsFixed = false |
| | | this.dialogValue = {} |
| | | this.dialogIndex = null |
| | | }, |
| | | handleDialogOk(val) { |
| | | if (this.dialogIsEdit && this.dialogIndex !== null) { |
| | | this.$set(this.tableData, this.dialogIndex, val) |
| | |
| | | <template> |
| | | <div class="list"> |
| | | <!-- Table --> |
| | | <TableCustom :queryForm="queryForm" :height="null" :tableData="tableData" :total="total" @handleCurrentChange="handleCurrentChange" |
| | | @handleSizeChange="handleSizeChange"> |
| | | <TableCustom :queryForm="queryForm" :height="null" :tableData="tableData" :total="total" |
| | | @handleCurrentChange="handleCurrentChange" @handleSizeChange="handleSizeChange"> |
| | | <template #search> |
| | | <el-form :model="form" label-width="auto" inline> |
| | | <el-form-item label="鉴别菌株编号:"> |
| | |
| | | <div class="title" :class="{ active: currentType === 'list' }" @click="handleTypeChange('list')"> |
| | | 原始细胞库验证资料 |
| | | </div> |
| | | <div class="drafts" v-if="roleType==4" :class="{ active: currentType === 'draft' }" @click="handleTypeChange('draft')"> |
| | | <div class="drafts" v-if="roleType == 4 || roleType == 3" :class="{ active: currentType === 'draft' }" |
| | | @click="handleTypeChange('draft')"> |
| | | 草稿箱 |
| | | </div> |
| | | </div> |
| | | <div class="flex a-center" v-if="roleType == 4"> |
| | | <div class="flex a-center" v-if="roleType == 4 || roleType == 3"> |
| | | <el-button @click="handleNewStrain" class="el-icon-plus" type="primary" |
| | | style="margin-right: 12px">新增原始细胞库资料</el-button> |
| | | </div> |
| | |
| | | <template #table> |
| | | <el-table-column prop="strainSource" label="菌种来源" /> |
| | | <el-table-column prop="identifyingStrainCode" label="鉴别菌株编号" /> |
| | | <el-table-column prop="identifyingStrainName" label="鉴别菌株名称" /> |
| | | <el-table-column prop="identifyingStrainName" label="鉴别菌株名称" > |
| | | <template #default="{ row }"> |
| | | <el-tooltip :content="row.identifyingStrainName" placement="top" effect="dark"> |
| | | <div class="ellipsis-text">{{ row.identifyingStrainName }}</div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="validationExperimentCode" label="验证实验编号" /> |
| | | <el-table-column prop="createBy" label="创建人" /> |
| | | <el-table-column prop="createTime" label="创建时间" /> |
| | |
| | | @click="$router.push('/strain/validation/confirm-detail?id=' + row.id)">确认</el-button> |
| | | <el-button type="text" v-if="roleType == 4" @click="handleDetail(row)">详情</el-button> |
| | | <el-button type="text" v-if="roleType != 4" @click="handleDetail2(row)">详情</el-button> |
| | | <el-button type="text" v-if="(roleType == 1)||(roleType == 4 && currentType == 'draft')" @click="handleEdit(row)">编辑</el-button> |
| | | <el-button type="text" v-if="(roleType == 1)||(roleType == 4 && currentType == 'draft')" @click="handleDelete(row)">删除</el-button> |
| | | <el-button type="text" v-if="(roleType == 1) || (roleType == 4 && currentType == 'draft')" |
| | | @click="handleEdit(row)">编辑</el-button> |
| | | <el-button type="text" v-if="(roleType == 1) || (roleType == 4 && currentType == 'draft')" |
| | | @click="handleDelete(row)">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </template> |
| | |
| | | } |
| | | } |
| | | } |
| | | .ellipsis-text { |
| | | display: -webkit-box; |
| | | -webkit-line-clamp: 3; |
| | | -webkit-box-orient: vertical; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | word-break: break-all; |
| | | } |
| | | </style> |
| | |
| | | <div class="approval-content"> |
| | | <template> |
| | | <el-form ref="form" :model="form" :rules="rules" inline label-position="top"> |
| | | <div style="display: flex;"> |
| | | <div style="display: flex;" v-if="type=='approve'"> |
| | | <div> |
| | | <div class="header-title" style="width: 100%;"> |
| | | <div class="header-title-left"> |
| | |
| | | }, |
| | | computed: { |
| | | dialogTitle() { |
| | | return this.type === "approve" ? "菌种工程师操作评定" : "菌种工程师操作评定详情"; |
| | | return this.type === "approve" ? "菌种实验员操作评定" : "菌种实验员操作评定详情"; |
| | | }, |
| | | totalScore() { |
| | | return this.assessmentTable.reduce((sum, item) => sum + (item.selectedScore || 0), 0); |
| | |
| | | <template> |
| | | <div class="list"> |
| | | <el-card class="header-box"> |
| | | <!-- <el-card class="header-box"> |
| | | <div class="box-title"> |
| | | <img src="@/assets/public/notice.png" class="header-icon"> <span>设立课题规则</span> |
| | | </div> |
| | |
| | | </p> |
| | | <p>2、在可行研究阶段,工艺开发升级,重新规划工艺研究路线,则以新规划的工艺路线方案来设定课题。</p> |
| | | </div> |
| | | </el-card> |
| | | </el-card> --> |
| | | <TableCustom :tableData="tableData" :queryForm="queryForm" :height="null" :total="total" |
| | | @currentChange="handleCurrentChange" @sizeChange="handleSizeChange"> |
| | | @handleCurrentChange="handleCurrentChange" @handleSizeChange="handleSizeChange"> |
| | | <template #search> |
| | | <el-form :model="form" label-width="auto" inline> |
| | | <el-form-item label="所属项目组:"> |
| | | <el-input v-model="form.teamName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="报告名称:"> |
| | | <el-input v-model="form.reportName" placeholder="请输入"></el-input> |
| | | <el-form-item label="评定人:"> |
| | | <el-input v-model="form.evaluateName" placeholder="请输入"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="评定时间"> |
| | | <el-date-picker v-model="form.time" type="daterange" range-separator="至" |
| | |
| | | </div> |
| | | </div> |
| | | <el-form-item prop="reportCode" style="margin-top: 38px"> |
| | | <el-input v-model="form.reportCode" style="width: 100%;" placeholder="请输入报告编号" /> |
| | | <el-input :disabled="true" v-model="form.reportCode" style="width: 100%;" placeholder="报告编号自动生成" /> |
| | | </el-form-item> |
| | | |
| | | <div class="header-title" style="width: 100%;"> |
| | |
| | | <div class="header-title" style="width: 100%;"> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>附件</div> |
| | | <span>附件</span> |
| | | </div> |
| | | </div> |
| | | <el-form-item prop="name" style="margin-top: 38px"> |
| | |
| | | </el-form> |
| | | </Card> |
| | | <chooseProject @submit="getProjectData" :show="showChoose" @close="showChoose = false"></chooseProject> |
| | | <SelectMember ref="selectMember" @submit="selectUser" :singleSelect="true" /> |
| | | <SelectMember title="选择菌种实验员" ref="selectMember" @submit="selectUser" :singleSelect="true" /> |
| | | |
| | | |
| | | </div> |
| | | |
| | |
| | | import AiEditor from '@/components/AiEditor' |
| | | import ChooseProject from '@/components/chooseProject/index.vue' |
| | | import SelectMember from '@/components/SelectMember' |
| | | import { add,getDetail } from './service' |
| | | import { add,getDetail,update } from './service' |
| | | |
| | | export default { |
| | | components: { AiEditor, ChooseProject, SelectMember }, |
| | |
| | | showChoose: false, |
| | | radio1: 1, |
| | | rules: { |
| | | reportCode: [ |
| | | { required: true, message: '请输入报告编号', trigger: 'blur' } |
| | | ], |
| | | |
| | | reportName: [ |
| | | { required: true, message: '请输入报告名称', trigger: 'blur' } |
| | | ] |
| | |
| | | } |
| | | }, |
| | | mounted() { |
| | | // 滚动到页面顶部 |
| | | this.$nextTick(() => { |
| | | window.scrollTo(0, 0); |
| | | }); |
| | | |
| | | if (this.$route.query.id) { |
| | | getDetail(this.$route.query.id).then(res => { |
| | | const data = res.data || res; |
| | |
| | | isDraft: 0, |
| | | projectId: this.projectData[0].id, |
| | | experimentId: this.selectedMember[0].userId, |
| | | reportCode: this.form.reportCode, |
| | | // reportCode: this.form.reportCode, |
| | | reportContent: this.$refs.materialEditor.getContent(), |
| | | reportName: this.form.reportName, |
| | | evaluateTotal: this.totalScore, |
| | |
| | | reportType: 1 |
| | | }; |
| | | console.log('params', params); |
| | | |
| | | if (this.$route.query.id) { |
| | | params.id = this.$route.query.id |
| | | update(params).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('编辑成功'); |
| | | this.$router.back() |
| | | } |
| | | }) |
| | | return |
| | | } |
| | | |
| | | add(params).then(res => { |
| | | if (res.code == 200) { |
| | |
| | | isDraft: 1, |
| | | projectId: this.projectData[0].id, |
| | | experimentId: this.selectedMember[0].userId, |
| | | reportCode: this.form.reportCode, |
| | | // reportCode: this.form.reportCode, |
| | | reportContent: this.$refs.materialEditor.getContent(), |
| | | reportName: this.form.reportName, |
| | | evaluateTotal: this.totalScore, |
| | |
| | | { |
| | | category: '1.该分题的菌种专业知识', |
| | | selectedScore: 0, |
| | | criteria: '1.1 能讲生物学基础,掌握各类微生物形态特性、生化特性及鉴定方法。1.2 菌种选育技术,了解掌握自然选育、诱变选育、基因工程育种。', |
| | | criteria: '1.1 微生物基础,掌握各类微生物形态特性、生化特性及鉴定方法。1.2 菌种选育技术,了解掌握自然选育、诱变选育、基因工程育种。', |
| | | desc: '', |
| | | rule: '' |
| | | }, |
| | |
| | | type: "primary", |
| | | mode: "list", |
| | | fields: [ |
| | | { label: "提交人:", value: data.updateBy || "" }, |
| | | { label: "提交人:", value: data.createBy || "" }, |
| | | { label: "提交时间:", value: data.createTime || "" }, |
| | | ] |
| | | }); |
| | |
| | | type: "primary", |
| | | mode: "list", |
| | | fields: [ |
| | | { label: "已评定" }, |
| | | { label: "评定状态:已评定" }, |
| | | { label: "评定人:", value: data.evaluateName || "" }, |
| | | { label: "评定时间:", value: data.evaluateTime || "" }, |
| | | { label: '查看评定详情', type: 'view' } |
| | |
| | | { |
| | | category: '1.该分题的菌种专业知识', |
| | | selectedScore: 0, |
| | | criteria: '1.1 能讲生物学基础,掌握各类微生物形态特性、生化特性及鉴定方法。1.2 菌种选育技术,了解掌握自然选育、诱变选育、基因工程育种。', |
| | | criteria: '1.1 微生物基础,掌握各类微生物形态特性、生化特性及鉴定方法。1.2 菌种选育技术,了解掌握自然选育、诱变选育、基因工程育种。', |
| | | desc: '', |
| | | rule: '' |
| | | }, |
| | |
| | | }, |
| | | computed: { |
| | | dialogTitle() { |
| | | return this.type === "approve" ? "菌种工程师操作评定" : "菌种工程师操作评定详情"; |
| | | return this.type === "approve" ? "菌种实验员操作评定" : "菌种实验员操作评定详情"; |
| | | }, |
| | | totalScore() { |
| | | return this.assessmentTable.reduce((sum, item) => sum + (item.selectedScore || 0), 0); |
| | |
| | | <el-button type="text" v-if="roleType == 3 && (row.status == 4 || isDraft)" |
| | | @click="handleDetail(row)">编辑</el-button> |
| | | <el-button type="text" v-if="roleType == 3 && isDraft" @click="handleDelete(row)">删除</el-button> |
| | | <el-button type="text" v-if="row.status == 1 && roleType == 3" |
| | | <el-button type="text" v-if="row.status == 1 && roleType == 3&&!isDraft" |
| | | @click="handleRevoke(row)">撤销审批</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | this.$message.success('审核成功') |
| | | this.showApproval = false |
| | | this.getLists() |
| | | if(params.statuss=='2'){ |
| | | this.showEvaluate = true |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | handleEvaluateRow(params) { |
| | |
| | | return axios.post('/api/t-strain-report/add', { ...data }) |
| | | } |
| | | |
| | | export const update = (data) => { |
| | | return axios.post('/api/t-strain-report/update', { ...data }) |
| | | } |
| | | |
| | | export const getDetail = (data) => { |
| | | return axios.get('/open/t-strain-report/detail', {params: {id: data}}) |
| | | } |
| | |
| | | </div> |
| | | </div> |
| | | <el-form-item prop="reportCode" style="margin-top: 38px"> |
| | | <el-input v-model="form.reportCode" style="width: 100%;" placeholder="请输入报告编号" /> |
| | | <el-input :disabled="true" v-model="form.reportCode" style="width: 100%;" placeholder="报告编号自动生成" /> |
| | | </el-form-item> |
| | | |
| | | <div class="header-title" style="width: 100%;"> |
| | |
| | | <div class="header-title" style="width: 100%;"> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>附件</div> |
| | | <span>附件</span> |
| | | </div> |
| | | </div> |
| | | <el-form-item prop="name" style="margin-top: 38px"> |
| | |
| | | </el-form> |
| | | </Card> |
| | | <chooseProject @submit="getProjectData" :show="showChoose" @close="showChoose = false"></chooseProject> |
| | | <SelectMember ref="selectMember" @submit="selectUser" :singleSelect="true" /> |
| | | <SelectMember title="选择菌种实验员" ref="selectMember" @submit="selectUser" :singleSelect="true" /> |
| | | |
| | | </div> |
| | | |
| | |
| | | import AiEditor from '@/components/AiEditor' |
| | | import ChooseProject from '@/components/chooseProject/index.vue' |
| | | import SelectMember from '@/components/SelectMember' |
| | | import { add,getDetail } from './service' |
| | | import { add,getDetail,update } from './service' |
| | | |
| | | export default { |
| | | components: { AiEditor, ChooseProject, SelectMember }, |
| | |
| | | showChoose: false, |
| | | radio1: 1, |
| | | rules: { |
| | | reportCode: [ |
| | | { required: true, message: '请输入报告编号', trigger: 'blur' } |
| | | ], |
| | | // reportCode: [ |
| | | // { required: true, message: '请输入报告编号', trigger: 'blur' } |
| | | // ], |
| | | reportName: [ |
| | | { required: true, message: '请输入报告名称', trigger: 'blur' } |
| | | ] |
| | |
| | | } |
| | | }, |
| | | mounted() { |
| | | // 滚动到页面顶部 |
| | | this.$nextTick(() => { |
| | | window.scrollTo(0, 0); |
| | | }); |
| | | if (this.$route.query.id) { |
| | | getDetail(this.$route.query.id).then(res => { |
| | | const data = res.data || res; |
| | |
| | | isDraft: 0, |
| | | projectId: this.projectData[0].id, |
| | | experimentId: this.selectedMember[0].userId, |
| | | reportCode: this.form.reportCode, |
| | | // reportCode: this.form.reportCode, |
| | | reportContent: this.$refs.materialEditor.getContent(), |
| | | reportName: this.form.reportName, |
| | | evaluateTotal: this.totalScore, |
| | |
| | | reportType: 4 |
| | | }; |
| | | console.log('params', params); |
| | | |
| | | if (this.$route.query.id) { |
| | | |
| | | params.id = this.$route.query.id |
| | | update(params).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('编辑成功'); |
| | | this.$router.back() |
| | | } |
| | | }) |
| | | return |
| | | } |
| | | |
| | | add(params).then(res => { |
| | | if (res.code == 200) { |
| | |
| | | isDraft: 1, |
| | | projectId: this.projectData[0].id, |
| | | experimentId: this.selectedMember[0].userId, |
| | | reportCode: this.form.reportCode, |
| | | // reportCode: this.form.reportCode, |
| | | reportContent: this.$refs.materialEditor.getContent(), |
| | | reportName: this.form.reportName, |
| | | evaluateTotal: this.totalScore, |
| | |
| | | add(params).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('保存成功'); |
| | | this.$router.push('/strainReportLibrary/reportLibraryOne'); |
| | | this.$router.push('/strainReportLibrary/reportLibraryOneFour'); |
| | | } |
| | | }) |
| | | } catch (e) { |
| | |
| | | type: "primary", |
| | | mode: "list", |
| | | fields: [ |
| | | { label: "已评定" }, |
| | | { label: "评定状态:已评定" }, |
| | | { label: "评定人:", value: data.evaluateName || "" }, |
| | | { label: "评定时间:", value: data.evaluateTime || "" }, |
| | | { label: '查看评定详情', type: 'view' } |
| | |
| | | @close="handleClose"> |
| | | <div class="evaluate-dialog-layout"> |
| | | <!-- 左侧评分规则说明 --> |
| | | <div class="evaluate-rule-panel"> |
| | | <!-- <div class="evaluate-rule-panel"> |
| | | <div class="rule-title">设立课题规则</div> |
| | | <div class="rule-content"> |
| | | <ol> |
| | |
| | | <li>在可行研究阶段,工艺开发升级,重新规划工艺研究路线,则以新规划的工艺路线方案来设定课题。</li> |
| | | </ol> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <!-- 右侧评定表及表单 --> |
| | | <div class="evaluate-main-panel"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-position="top" class="evaluate-form"> |
| | |
| | | }, |
| | | computed: { |
| | | currentAssessmentTable() { |
| | | return this.type == 1 || this.type == '1' ? this.assessmentTable1 : this.assessmentTable2; |
| | | return this.type == 1 || this.type == '1' ? this.assessmentTable2 : this.assessmentTable1; |
| | | }, |
| | | fullScore() { |
| | | return this.type == 1 || this.type == '1' |
| | |
| | | return this.currentAssessmentTable.reduce((sum, item) => sum + (item.selectedScore || 0), 0); |
| | | }, |
| | | dialogTitle() { |
| | | return this.type === "approve" ? "检测项评定" : "检测项评定详情"; |
| | | return this.type === "1" ? "创新型课题评定" : "规程型课题评定标准"; |
| | | } |
| | | }, |
| | | methods: { |
| | |
| | | <el-button type="text" v-if="roleType == 3 && row.status == 4 || isDraft" |
| | | @click="handleDetail(row)">编辑</el-button> |
| | | <el-button type="text" v-if="roleType == 3 && isDraft" @click="handleDelete(row)">删除</el-button> |
| | | <el-button type="text" v-if="row.status == 1 && roleType == 3" |
| | | <el-button type="text" v-if="row.status == 1 && roleType == 3&&!isDraft" |
| | | @click="handleRevoke(row)">撤销审批</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | this.$message.success('审核成功') |
| | | this.showApproval = false |
| | | this.getLists() |
| | | // this.showEvaluate = true |
| | | if(params.statuss==2){ |
| | | this.showChoiceMethod = true |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | handleEvaluateRow(params) { |
| | |
| | | return axios.post('/api/t-strain-report/add', { ...data }) |
| | | } |
| | | |
| | | export const update = (data) => { |
| | | return axios.post('/api/t-strain-report/update', { ...data }) |
| | | } |
| | | |
| | | export const getDetail = (data) => { |
| | | return axios.get('/open/t-strain-report/detail', {params: {id: data}}) |
| | | } |
| | |
| | | </div> |
| | | </div> |
| | | <el-form-item prop="reportCode" style="margin-top: 38px"> |
| | | <el-input v-model="form.reportCode" style="width: 100%;" placeholder="请输入报告编号" /> |
| | | <el-input :disabled="true" v-model="form.reportCode" style="width: 100%;" placeholder="报告编号自动生成" /> |
| | | </el-form-item> |
| | | |
| | | <div class="header-title" style="width: 100%;"> |
| | |
| | | <div class="header-title" style="width: 100%;"> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>附件</div> |
| | | <span>附件</span> |
| | | </div> |
| | | </div> |
| | | <el-form-item prop="name" style="margin-top: 38px"> |
| | |
| | | </el-form> |
| | | </Card> |
| | | <chooseProject @submit="getProjectData" :show="showChoose" @close="showChoose = false"></chooseProject> |
| | | <SelectMember ref="selectMember" @submit="selectUser" :singleSelect="true" /> |
| | | <SelectMember title="选择菌种实验员" ref="selectMember" @submit="selectUser" :singleSelect="true" /> |
| | | |
| | | </div> |
| | | |
| | |
| | | import AiEditor from '@/components/AiEditor' |
| | | import ChooseProject from '@/components/chooseProject/index.vue' |
| | | import SelectMember from '@/components/SelectMember' |
| | | import { add, getDetail } from './service' |
| | | import { add, getDetail,update } from './service' |
| | | |
| | | export default { |
| | | components: { AiEditor, ChooseProject, SelectMember }, |
| | |
| | | showChoose: false, |
| | | radio1: 1, |
| | | rules: { |
| | | reportCode: [ |
| | | { required: true, message: '请输入报告编号', trigger: 'blur' } |
| | | ], |
| | | // reportCode: [ |
| | | // { required: true, message: '请输入报告编号', trigger: 'blur' } |
| | | // ], |
| | | reportName: [ |
| | | { required: true, message: '请输入报告名称', trigger: 'blur' } |
| | | ] |
| | |
| | | } |
| | | }, |
| | | mounted() { |
| | | // 滚动到页面顶部 |
| | | this.$nextTick(() => { |
| | | window.scrollTo(0, 0); |
| | | }); |
| | | if (this.$route.query.id) { |
| | | getDetail(this.$route.query.id).then(res => { |
| | | const data = res.data || res; |
| | |
| | | isDraft: 0, |
| | | projectId: this.projectData[0].id, |
| | | experimentId: this.selectedMember[0].userId, |
| | | reportCode: this.form.reportCode, |
| | | // reportCode: this.form.reportCode, |
| | | reportContent: this.$refs.materialEditor.getContent(), |
| | | reportName: this.form.reportName, |
| | | evaluateTotal: this.totalScore, |
| | | evaluate: str.join(','), |
| | | reportType: 2 |
| | | }; |
| | | |
| | | if (this.$route.query.id) { |
| | | params.id = this.$route.query.id |
| | | update(params).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('编辑成功'); |
| | | this.$router.back() |
| | | } |
| | | }) |
| | | return |
| | | } |
| | | |
| | | add(params).then(res => { |
| | | if (res.code == 200) { |
| | |
| | | isDraft: 1, |
| | | projectId: this.projectData[0].id, |
| | | experimentId: this.selectedMember[0].userId, |
| | | reportCode: this.form.reportCode, |
| | | // reportCode: this.form.reportCode, |
| | | reportContent: this.$refs.materialEditor.getContent(), |
| | | reportName: this.form.reportName, |
| | | evaluateTotal: this.totalScore, |
| | |
| | | type: "primary", |
| | | mode: "list", |
| | | fields: [ |
| | | { label: "已评定" }, |
| | | { label: "评定状态:已评定" }, |
| | | { label: "评定人:", value: data.evaluateName || "" }, |
| | | { label: "评定时间:", value: data.evaluateTime || "" }, |
| | | { label: '查看评定详情', type: 'view' } |
| | |
| | | @close="handleClose"> |
| | | <div class="evaluate-dialog-layout"> |
| | | <!-- 左侧评分规则说明 --> |
| | | <div class="evaluate-rule-panel"> |
| | | <!-- <div class="evaluate-rule-panel"> |
| | | <div class="rule-title">设立课题规则</div> |
| | | <div class="rule-content"> |
| | | <ol> |
| | |
| | | <li>在可行研究阶段,工艺开发升级,重新规划工艺研究路线,则以新规划的工艺路线方案来设定课题。</li> |
| | | </ol> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <!-- 右侧评定表及表单 --> |
| | | <div class="evaluate-main-panel"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-position="top" class="evaluate-form"> |
| | |
| | | }, |
| | | computed: { |
| | | currentAssessmentTable() { |
| | | return this.type == 1 || this.type == '1' ? this.assessmentTable1 : this.assessmentTable2; |
| | | return this.type == 1 || this.type == '1' ? this.assessmentTable2 : this.assessmentTable1; |
| | | }, |
| | | fullScore() { |
| | | return this.type == 1 || this.type == '1' |
| | |
| | | return this.currentAssessmentTable.reduce((sum, item) => sum + (item.selectedScore || 0), 0); |
| | | }, |
| | | dialogTitle() { |
| | | return this.type === "approve" ? "检测项评定" : "检测项评定详情"; |
| | | return this.type === "1" ? "创新型课题评定" : "规程型课题评定标准"; |
| | | } |
| | | }, |
| | | methods: { |
| | |
| | | <el-button type="text" v-if="roleType == 3 && row.status == 4 || isDraft" |
| | | @click="handleDetail(row)">编辑</el-button> |
| | | <el-button type="text" v-if="roleType == 3 && isDraft" @click="handleDelete(row)">删除</el-button> |
| | | <el-button type="text" v-if="row.status == 1 && roleType == 3" |
| | | <el-button type="text" v-if="row.status == 1 && roleType == 3&&!isDraft" |
| | | @click="handleRevoke(row)">撤销审批</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | this.$message.success('审核成功') |
| | | this.showApproval = false |
| | | this.getLists() |
| | | // this.showEvaluate = true |
| | | if(params.statuss=='2'){ |
| | | this.showChoiceMethod = true |
| | | } |
| | | |
| | | } |
| | | }) |
| | | }, |
| | | handleEvaluateRow(params) { |
| | |
| | | return axios.post('/api/t-strain-report/add', { ...data }) |
| | | } |
| | | |
| | | export const update = (data) => { |
| | | console.log('qweqwe',data); |
| | | return axios.post('/api/t-strain-report/update', { ...data }) |
| | | } |
| | | |
| | | export const getDetail = (data) => { |
| | | return axios.get('/open/t-strain-report/detail', {params: {id: data}}) |
| | | } |
| | |
| | | </div> |
| | | </div> |
| | | <el-form-item prop="reportCode" style="margin-top: 38px"> |
| | | <el-input v-model="form.reportCode" style="width: 100%;" placeholder="请输入报告编号" /> |
| | | <el-input :disabled="true" v-model="form.reportCode" style="width: 100%;" placeholder="报告编号自动生成" /> |
| | | </el-form-item> |
| | | |
| | | <div class="header-title" style="width: 100%;"> |
| | |
| | | <div class="header-title" style="width: 100%;"> |
| | | <div class="header-title-left"> |
| | | <img src="@/assets/public/headercard.png" /> |
| | | <div>附件</div> |
| | | <span>附件</span> |
| | | </div> |
| | | </div> |
| | | <el-form-item prop="name" style="margin-top: 38px"> |
| | |
| | | </el-form> |
| | | </Card> |
| | | <chooseProject @submit="getProjectData" :show="showChoose" @close="showChoose = false"></chooseProject> |
| | | <SelectMember ref="selectMember" @submit="selectUser" :singleSelect="true" /> |
| | | <SelectMember title="选择菌种实验员" ref="selectMember" @submit="selectUser" :singleSelect="true" /> |
| | | |
| | | </div> |
| | | |
| | |
| | | import AiEditor from '@/components/AiEditor' |
| | | import ChooseProject from '@/components/chooseProject/index.vue' |
| | | import SelectMember from '@/components/SelectMember' |
| | | import { add,getDetail } from './service' |
| | | import { add,getDetail,update } from './service' |
| | | |
| | | export default { |
| | | components: { AiEditor, ChooseProject, SelectMember }, |
| | |
| | | showChoose: false, |
| | | radio1: 1, |
| | | rules: { |
| | | reportCode: [ |
| | | { required: true, message: '请输入报告编号', trigger: 'blur' } |
| | | ], |
| | | // reportCode: [ |
| | | // { required: true, message: '请输入报告编号', trigger: 'blur' } |
| | | // ], |
| | | reportName: [ |
| | | { required: true, message: '请输入报告名称', trigger: 'blur' } |
| | | ] |
| | |
| | | } |
| | | }, |
| | | mounted() { |
| | | // 滚动到页面顶部 |
| | | this.$nextTick(() => { |
| | | window.scrollTo(0, 0); |
| | | }); |
| | | if (this.$route.query.id) { |
| | | getDetail(this.$route.query.id).then(res => { |
| | | const data = res.data || res; |
| | |
| | | isDraft: 0, |
| | | projectId: this.projectData[0].id, |
| | | experimentId: this.selectedMember[0].userId, |
| | | reportCode: this.form.reportCode, |
| | | // reportCode: this.form.reportCode, |
| | | reportContent: this.$refs.materialEditor.getContent(), |
| | | reportName: this.form.reportName, |
| | | evaluateTotal: this.totalScore, |
| | |
| | | }; |
| | | console.log('params', params); |
| | | |
| | | if (this.$route.query.id) { |
| | | |
| | | params.id = this.$route.query.id |
| | | update(params).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('编辑成功'); |
| | | this.$router.back() |
| | | } |
| | | }) |
| | | return |
| | | } |
| | | |
| | | add(params).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('发送成功'); |
| | | this.$router.push('/strainReportLibrary/reportLibraryOne'); |
| | | this.$router.push('/strainReportLibrary/reportLibraryOneThree'); |
| | | } |
| | | }) |
| | | }); |
| | |
| | | isDraft: 1, |
| | | projectId: this.projectData[0].id, |
| | | experimentId: this.selectedMember[0].userId, |
| | | reportCode: this.form.reportCode, |
| | | // reportCode: this.form.reportCode, |
| | | reportContent: this.$refs.materialEditor.getContent(), |
| | | reportName: this.form.reportName, |
| | | evaluateTotal: this.totalScore, |
| | |
| | | type: "primary", |
| | | mode: "list", |
| | | fields: [ |
| | | { label: "已评定" }, |
| | | { label: "评定状态:已评定" }, |
| | | { label: "评定人:", value: data.evaluateName || "" }, |
| | | { label: "评定时间:", value: data.evaluateTime || "" }, |
| | | { label: '查看评定详情', type: 'view' } |
| | |
| | | @close="handleClose"> |
| | | <div class="evaluate-dialog-layout"> |
| | | <!-- 左侧评分规则说明 --> |
| | | <div class="evaluate-rule-panel"> |
| | | <!-- <div class="evaluate-rule-panel"> |
| | | <div class="rule-title">设立课题规则</div> |
| | | <div class="rule-content"> |
| | | <ol> |
| | |
| | | <li>在可行研究阶段,工艺开发升级,重新规划工艺研究路线,则以新规划的工艺路线方案来设定课题。</li> |
| | | </ol> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | <!-- 右侧评定表及表单 --> |
| | | <div class="evaluate-main-panel"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-position="top" class="evaluate-form"> |
| | |
| | | }, |
| | | computed: { |
| | | currentAssessmentTable() { |
| | | return this.type == 1 || this.type == '1' ? this.assessmentTable1 : this.assessmentTable2; |
| | | return this.type == 1 || this.type == '1' ? this.assessmentTable2 : this.assessmentTable1; |
| | | }, |
| | | fullScore() { |
| | | return this.type == 1 || this.type == '1' |
| | |
| | | return this.currentAssessmentTable.reduce((sum, item) => sum + (item.selectedScore || 0), 0); |
| | | }, |
| | | dialogTitle() { |
| | | return this.type === "approve" ? "检测项评定" : "检测项评定详情"; |
| | | return this.type === "1" ? "创新型课题评定" : "规程型课题评定标准"; |
| | | } |
| | | }, |
| | | methods: { |
| | |
| | | <el-button type="text" v-if="roleType == 3 && row.status == 4 || isDraft" |
| | | @click="handleDetail(row)">编辑</el-button> |
| | | <el-button type="text" v-if="roleType == 3 && isDraft" @click="handleDelete(row)">删除</el-button> |
| | | <el-button type="text" v-if="row.status == 1 && roleType == 3" |
| | | <el-button type="text" v-if="row.status == 1 && roleType == 3&&!isDraft" |
| | | @click="handleRevoke(row)">撤销审批</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | this.showApproval = false |
| | | this.getLists() |
| | | // this.showEvaluate = true |
| | | if(params.statuss==2){ |
| | | this.showChoiceMethod = true |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | handleEvaluateRow(params) { |
| | |
| | | return axios.post('/api/t-strain-report/add', { ...data }) |
| | | } |
| | | |
| | | export const update = (data) => { |
| | | return axios.post('/api/t-strain-report/update', { ...data }) |
| | | } |
| | | |
| | | export const getDetail = (data) => { |
| | | return axios.get('/open/t-strain-report/detail', {params: {id: data}}) |
| | | } |