董国庆
2025-06-25 6b12fdd4241e9dcd9354e3bfcab25fbde4960674
Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/leshan-laboratory
11个文件已删除
46个文件已修改
3493 ■■■■■ 已修改文件
culture/src/components/SignatureCanvas.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/layouts/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/router/index.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/middleground/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/add.vue 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/addProgenitor.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/components/AddSublevelForm.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/components/AddSublevelPlan.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/components/ParentForm.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/components/PlanForm.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/progenitorComponents/AddAncestor.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/progenitorComponents/AddSublevelForm.vue 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/progenitorComponents/PlanForm.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/feasibilityReport/components/approval/index.vue 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/feasibilityReport/index.vue 157 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/feasibilityStudy/add.vue 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/feasibilityStudy/components/approval/index.vue 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/feasibilityStudy/index.vue 232 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/processDevelopment/components/approval/index.vue 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/processDevelopment/index.vue 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/projectProposalLibrary/components/approval/index.vue 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/projectProposalLibrary/index.vue 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/verificationRelease/components/approval/index.vue 393 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/reportLibrary/verificationRelease/index.vue 148 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/breeding-record/SlantRecordDialog.vue 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/breeding-record/add.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/breeding-record/inoculation-slope-record-dialog.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/breeding-record/preserve-strain-record-dialog.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/main-cell-library/add.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/main-cell-library/index.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/production-cell-library/add.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/production-cell-library/index.vue 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/strain-library-manage/components/RecordTimeline.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/strain-library-manage/components/StrainDetail.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/strain-library-manage/index.vue 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/strain-library-manage/record.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/validation/chief-cell/DetailConditionDialog.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/validation/chief-cell/EditConditionDialog.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/validation/chief-cell/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/validation/chief-cell/primitive-cell-detail-dialog.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/validation/primitive-cell/DetailConditionDialog.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/validation/primitive-cell/EditConditionDialog.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/validation/primitive-cell/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/validation/primitive-cell/primitive-cell-detail-dialog.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strainReportLibrary/reportLibraryOne/add.vue 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strainReportLibrary/reportLibraryOne/components/approval/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strainReportLibrary/reportLibraryOneFour/add.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strainReportLibrary/reportLibraryOneTWO/add.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strainReportLibrary/reportLibraryOneThree/add.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/system/user/components/add-edit.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/system/user/components/disb.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/system/user/components/inherit.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/system/user/components/reset-password.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/system/user/components/view-data.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/system/user/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/system/user/service.js 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/components/SignatureCanvas.vue
@@ -45,7 +45,8 @@
      isDrawing: false,
      context: null,
      lastX: 0,
      lastY: 0
      lastY: 0,
      hasDrawn: false
    }
  },
  computed: {
@@ -125,6 +126,7 @@
      
      this.lastX = x
      this.lastY = y
      this.hasDrawn = true
    },
    handleTouchStart(event) {
@@ -152,6 +154,7 @@
      
      this.lastX = x
      this.lastY = y
      this.hasDrawn = true
    },
    stopDrawing() {
@@ -161,12 +164,18 @@
    clearCanvas() {
      this.context.clearRect(0, 0, this.canvasWidth, this.canvasHeight)
      this.drawDashedBorder()
      this.hasDrawn = false
    },
    confirmSignature() {
      const canvas = this.$refs.signatureCanvas
      const ctx = this.context
      
      // 校验是否签名
      if (this.isCanvasBlank()) {
        this.$message && this.$message.warning('请先确认签名')
        return
      }
      // 保存当前画布内容
      const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height)
      
@@ -187,6 +196,11 @@
      // 导出图片
      const signatureImage = canvas.toDataURL('image/png')
      this.$emit('confirm', 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg')
    },
    // 新增方法:判断画布是否为空白
    isCanvasBlank() {
      return !this.hasDrawn
    }
  },
  beforeDestroy() {
culture/src/layouts/index.vue
@@ -141,7 +141,7 @@
      position: absolute;
      top: 338px;
      left: 0;
      width: 183px;
      width: 178px;
      height: 316px;
      background: #FFFCE5;
      opacity: 0.56;
culture/src/router/index.js
@@ -251,6 +251,15 @@
        component: () => import("../views/pedigree-chart"),
      },
      {
        path: "detail-pedigree",
        name: "DetailPedigree",
        meta: {
          title: "母代菌种传代生产谱系图详情",
          hide: true,
        },
        component: () => import("../views/pedigree-chart/add"),
      },
      {
        path: "add-pedigree",
        name: "AddPedigree",
        meta: {
@@ -268,6 +277,15 @@
        },
        component: () => import("../views/pedigree-chart/addProgenitor"),
      },
      {
        path: "detail-progenitor",
        name: "DetailProgenitor",
        meta: {
          title: "祖代菌种传代生产谱系图详情",
          hide: true,
        },
        component: () => import("../views/pedigree-chart/addProgenitor"),
      },
      // {
      //     path: "strain-flow-chart",
      //     name: "StrainFlowChart",
culture/src/views/middleground/index.vue
@@ -125,12 +125,12 @@
        {
          text: '菌种库',
          icon: require('../../assets/login/img1.png'),
          path: '/strain'
          path: '/strain-library/strain-library-manage'
        },
        {
          text: '菌种报告库',
          icon: require('../../assets/login/img4.png'),
          path: '/deliveryAssessment'
          path: '/strainReportLibrary/reportLibraryOne'
        },
        {
          text: '项目组管理',
@@ -140,7 +140,7 @@
        {
          text: '系统管理',
          icon: require('../../assets/login/img6.png'),
          path: '/system'
          path: '/system/user'
        }
      ]
    }
@@ -815,7 +815,7 @@
            }
            &.ant-fullcalendar-last-month-cell {
              .ant-fullcalendar-value {
                color: #ffffff !important;
                // color: #ffffff !important;
              }
            }
@@ -823,7 +823,7 @@
              .ant-fullcalendar-date {}
              .ant-fullcalendar-value {
                color: #ffffff !important;
                // color: #ffffff !important;
                &:hover {
                  // background: #FFFFFF;
culture/src/views/pedigree-chart/add.vue
@@ -1,63 +1,36 @@
<template>
  <div>
    <el-form
      :model="form"
      :rules="rules"
      ref="pedigreeForm"
      label-position="top"
      class="strain-form"
    >
    <el-form :model="form" :rules="rules" ref="pedigreeForm" label-position="top" class="strain-form">
      <div class="card">
        <div class="form-items-row">
          <el-form-item label="菌种源" required>
            <div class="flex-row">
              <div class="input-wrapper">
                <el-form-item prop="strainSourceStart" style="margin-bottom: 0">
                  <el-input
                    v-model="form.strainSourceStart"
                    placeholder="请输入"
                    class="fixed-width-input"
                  ></el-input>
                  <el-input v-model="form.strainSourceStart" placeholder="请输入" class="fixed-width-input"></el-input>
                </el-form-item>
              </div>
              <span class="form-text">代—</span>
              <div class="input-wrapper">
                <el-form-item prop="strainSourceEnd" style="margin-bottom: 0">
                  <el-input
                    v-model="form.strainSourceEnd"
                    placeholder="请输入"
                    class="fixed-width-input"
                  ></el-input>
                  <el-input v-model="form.strainSourceEnd" placeholder="请输入" class="fixed-width-input"></el-input>
                </el-form-item>
              </div>
              <span class="form-text">细胞库</span>
            </div>
          </el-form-item>
          <el-form-item label="传代菌种编号" prop="strainCode" required>
            <el-input
              v-model="form.strainCode"
              placeholder="请输入"
              class="fixed-width-input"
            ></el-input>
            <el-input v-model="form.strainCode" placeholder="请输入" class="fixed-width-input"></el-input>
          </el-form-item>
          <el-form-item label="传代菌种名称" prop="strainName" required>
            <el-input
              v-model="form.strainName"
              placeholder="请输入"
              class="fixed-width-input"
            ></el-input>
            <el-input v-model="form.strainName" placeholder="请输入" class="fixed-width-input"></el-input>
          </el-form-item>
        </div>
      </div>
      <div class="card" v-if="roleType != 4" style="margin-top: 30px; display: block">
        <Table
          :height="null"
          :total="total"
          :data="tableData"
          :queryForm="queryForm"
          @handleCurrentChange="handleCurrentChange"
          @handleSizeChange="handleSizeChange"
        >
        <div class="title" style="padding: 25px 0">待确认入库菌种列表</div>
        <Table :height="null" :total="total" :data="tableData" :queryForm="queryForm"
          @handleCurrentChange="handleCurrentChange" @handleSizeChange="handleSizeChange">
          <el-table-column label="菌种实验员" prop="experimenter" />
          <el-table-column label="菌种编号" prop="strainCode" />
          <el-table-column label="菌种名称" prop="strainName" />
@@ -69,9 +42,7 @@
          <el-table-column label="菌种保存/废弃时间" prop="storageTime" />
          <el-table-column v-if="roleType == 3" label="操作">
            <template #default="{ row }">
              <el-button type="text" @click="handleConfirm(row)"
                >确认入库</el-button
              >
              <el-button type="text" @click="handleConfirm(row)">确认入库</el-button>
            </template>
          </el-table-column>
        </Table>
@@ -80,26 +51,21 @@
        <div class="header">
          <div class="title">菌种传代生产谱系图</div>
          <div class="option-btn">
            <el-button type="primary" class="el-icon-plus" @click="addNode">
              新增</el-button
            >
            <el-button type="primary" @click="setGenerationPlan"
              >设置传代计划数</el-button
            >
            <el-button type="primary" v-if="$route.query.type != 1" class="el-icon-plus" @click="addNode">
              新增</el-button>
            <el-button type="primary" v-if="$route.query.type != 1" @click="setGenerationPlan">设置传代计划数</el-button>
            <el-button type="primary" @click="showDetail">详情</el-button>
            <el-button type="primary" @click="handleEdit" v-if="roleType == 1">编辑</el-button>
            <el-button type="primary" @click="handleDelete" v-if="roleType == 1">删除</el-button>
            <el-button type="primary" @click="handleEdit" v-if="roleType == 1 && $route.query.type != 1">编辑</el-button>
            <el-button type="primary" @click="handleDelete" v-if="roleType == 1 && $route.query.type != 1">删除</el-button>
          </div>
        </div>
        <div class="strain-flow-chart">
          <div id="mountNode"></div>
        </div>
          <el-button type="primary" v-if="!$route.query.id" @click="handleSubmit" style="width: 150px"
          >保存</el-button
        >
        <el-button type="primary" v-if="!$route.query.id" @click="handleSubmit" style="width: 150px">保存</el-button>
      </div>
      <div class="end-btn">
        <!-- <el-button @click="handleDraft">存草稿</el-button>
@@ -111,18 +77,11 @@
    <PlanForm ref="planForm" @addNodeSign="addNodeSign" />
    <AddSublevelForm ref="addSublevelForm" @addNodeSign="addNodeSign" />
    <AddSublevelPlan ref="addSublevelPlan" @addNodeSign="addNodeSign" />
    <ConfirmStorageDialog
      name="接种操作人签字"
      :visible.sync="confirmStorageDialogVisible"
      @confirm="handleSignatureConfirm"
    />
    <ConfirmStorageDialog name="接种操作人签字" :visible.sync="confirmStorageDialogVisible"
      @confirm="handleSignatureConfirm" />
    <!-- 菌种工程师 -->
    <ConfirmStorageDialog
      name="菌种保藏人签字"
      text="是否确认该项菌种信息入库"
      :visible.sync="storageVisible"
      @confirm="handleSignatureConfirm1"
    />
    <ConfirmStorageDialog name="菌种保藏人签字" text="是否确认该项菌种信息入库" :visible.sync="storageVisible"
      @confirm="handleSignatureConfirm1" />
  </div>
</template>
@@ -240,7 +199,7 @@
      }
      const nodeModel = this.selectedNode;
      console.log(nodeModel);
      if (nodeModel.label === "母代") {
        this.$refs.parentForm.openInitData({
          strainSourceStart: this.form.strainSourceStart,
@@ -252,7 +211,7 @@
        this.dialogTitle = `${nodeModel.label}详情`;
        this.$refs.addSublevelForm.openInitData({
          strainCode1: this.form.strainCode,
            strainName1: this.form.strainName,
          strainName1: this.form.strainName,
          title: `编辑${nodeModel.label}`,
          form: { ...nodeModel.data },
          formStatus: "edit",
@@ -355,7 +314,7 @@
      this.getList();
      getDetail({ id: this.$route.query.id }).then((res) => {
        console.log(JSON.stringify(res.pedigreeChartParentAllDetailDTO));
        const nodeMap = new Map();
        const calculateLevel = (node) => {
          if (node.parentId === "0") return 0;
@@ -419,7 +378,7 @@
            nodes.forEach(node => {
              const processedNode = processNode(node);
              this.graphData.nodes.push(processedNode);
              // 根据parentId创建边,直接使用原始id
              if (node.parentId !== "0") {
                this.graphData.edges.push({
@@ -454,8 +413,11 @@
      });
    },
    addNodeSign(value, type) {
      console.log('/////8415454545');
      this.nodeData = value;
      this.nodeType = type;
      this.$refs.addAncestor.closeDialog()
      this.$refs.addSublevelForm.closeDialog()
      this.confirmStorageDialogVisible = true;
    },
    handleSubmit() {
@@ -573,19 +535,19 @@
          const titleFill = isDiscarded
            ? "rgba(245, 248, 250, 1)"
            : cfg.selected
            ? "l(0) 0:#0ACBCA 1:#049C9A"
            : "l(0) 0:#0ACBCA 1:#049C9A";
              ? "l(0) 0:#0ACBCA 1:#049C9A"
              : "l(0) 0:#0ACBCA 1:#049C9A";
          const contentFill = isDiscarded
            ? "rgba(245, 248, 250, 1)"
            : cfg.selected
            ? "rgba(4,156,154,0.2)"
            : "rgba(4,156,154,0.1)";
              ? "rgba(4,156,154,0.2)"
              : "rgba(4,156,154,0.1)";
          const textFill = isDiscarded ? "rgba(144, 147, 153, 1)" : "#049C9A";
          const stroke = isDiscarded
            ? "#DCDFE6"
            : cfg.selected
            ? "#049C9A"
            : "transparent";
              ? "#049C9A"
              : "transparent";
          // 创建渐变
          const gradient = group.addShape("rect", {
@@ -627,7 +589,7 @@
                x: 0,
                y: -totalHeight / 2 + titleHeight / 2,
                fill: isDiscarded ? "rgba(144, 147, 153, 1)" : "#fff",
                fontSize: 12,
                fontSize: 14,
                textAlign: "center",
                textBaseline: "middle",
                fontWeight: "bold",
@@ -642,10 +604,17 @@
          if (cfg.label === "传代计划数") {
            content = `${cfg.planCount || 0}`;
          } else if (cfg.number) {
            content =
              cfg.label === "母代"
                ? `代传菌种编号:${cfg.number}`
                : `接种菌种编号:${cfg.number}`;
            // 获取类型名称
            let typeName = "传代菌种";
            if (cfg.data && cfg.data.strainType) {
              const typeMap = {
                "1": "原始祖代菌株SO",
                "2": "分离菌落 CO",
                "3": "祖代菌株 O",
              };
              typeName = typeMap[cfg.data.strainType] || "传代菌种";
            }
            content = `${typeName}编号:${cfg.number}`;
          }
          if (content) {
@@ -655,7 +624,7 @@
                x: 0,
                y: -totalHeight / 2 + titleHeight + gap + contentHeight / 2,
                fill: textFill,
                fontSize: 10,
                fontSize: 12,
                textAlign: "center",
                textBaseline: "middle",
                cursor: "move",
@@ -1013,7 +982,7 @@
          parentId: nodeModel.id,
          title: `新增${nextLevel}`,
          strainName1: this.form.strainName,
            strainCode1: this.form.strainCode,
          strainCode1: this.form.strainCode,
          form: {
            isDiscarded: true,
          },
@@ -1220,8 +1189,8 @@
    },
    handleAddPlan(value) {
      if (value.formStatus == 'edit') {
        console.log(value,'params');
        console.log(value, 'params');
        updateChild(value).then((res) => {
          if (res.code === 200) {
            this.$message.success("操作成功");
@@ -1295,7 +1264,7 @@
        this.dialogTitle = `${nodeModel.label}详情`;
        this.$refs.addSublevelForm.openInitData({
          strainCode1: this.form.strainCode,
            strainName1: this.form.strainName,
          strainName1: this.form.strainName,
          title: `${nodeModel.label}详情`,
          form: { ...nodeModel.data },
        });
@@ -1317,7 +1286,7 @@
          });
        } else {
          console.log(123);
          this.$refs.planForm.openInitData({
            strainSourceStart: this.form.strainSourceStart,
            strainSourceEnd: this.form.strainSourceEnd,
@@ -1345,6 +1314,11 @@
  align-items: center;
}
.title {
  font-size: 18px;
}
.chart {
  padding: 20px 38px;
  background: rgba(255, 255, 255, 0.8);
culture/src/views/pedigree-chart/addProgenitor.vue
@@ -26,6 +26,7 @@
        </div>
      </div>
      <div class="card" style="margin-top: 30px; display: block" v-if="roleType != 4">
        <div class="title" style="padding: 25px 0">菌种传代生产谱系图</div>
        <Table
          :height="null"
          :total="total"
@@ -390,6 +391,8 @@
    addNodeSign(value, type) {
      this.nodeData = value;
      this.nodeType = type;
      this.$refs.addAncestor.closeDialog()
      this.$refs.addSublevelForm.closeDialog()
      this.confirmStorageDialogVisible = true;
    },
    handleSubmit() {
@@ -992,7 +995,7 @@
                x: 0,
                y: -totalHeight / 2 + titleHeight / 2,
                fill: isDiscarded ? "rgba(144, 147, 153, 1)" : "#fff",
                fontSize: 12,
                fontSize: 14,
                textAlign: "center",
                textBaseline: "middle",
                fontWeight: "bold",
@@ -1007,10 +1010,17 @@
          if (cfg.label === "传代计划数") {
            content = `${cfg.planCount || 0}`;
          } else if (cfg.number) {
            content =
              cfg.label === "母代"
                ? `代传菌种编号:${cfg.number}`
                : `接种菌种编号:${cfg.number}`;
            // 获取类型名称
            let typeName = "传代菌种";
            if (cfg.data && cfg.data.strainType) {
              const typeMap = {
                "1": "原始祖代菌株SO",
                "2": "分离菌落 CO",
                "3": "祖代菌株 O",
              };
              typeName = typeMap[cfg.data.strainType] || "传代菌种";
            }
            content = `${typeName}编号:${cfg.number}`;
          }
          if (content) {
@@ -1020,7 +1030,7 @@
                x: 0,
                y: -totalHeight / 2 + titleHeight + gap + contentHeight / 2,
                fill: textFill,
                fontSize: 10,
                fontSize: 11,
                textAlign: "center",
                textBaseline: "middle",
                cursor: "move",
@@ -1404,6 +1414,9 @@
    }
  }
}
.title {
  font-size: 18px;
}
.end-btn {
  margin-top: 20px;
culture/src/views/pedigree-chart/components/AddSublevelForm.vue
@@ -164,6 +164,8 @@
      this.dialogVisible = true;
    },
    closeDialog() {
      console.log(41515151541561541564156);
      this.dialogVisible = false;
      // 重置表单数据
      this.form = {
@@ -227,7 +229,7 @@
  }
  div {
    width: 183px;
    width: 178px;
    height: 32px;
    text-align: center;
    flex-shrink: 0;
culture/src/views/pedigree-chart/components/AddSublevelPlan.vue
@@ -58,7 +58,9 @@
</template>
<script>
import moment from 'moment'
export default {
    name: 'AddSublevelPlan',
    data() {
        return {
            planDialogVisible: false,
@@ -70,6 +72,8 @@
                strainName1: '',
                generationCount: 1,
                isDiscarded: true,
                confirmTime: moment().format('YYYY-MM-DD HH:mm:ss')
,
            },
            planRules: {
                strainCode: [
@@ -94,7 +98,8 @@
        openInitData(value) {
            this.planForm = {
                ...this.planForm,
                ...value
                ...value,
                confirmTime: moment().format('YYYY-MM-DD HH:mm:ss')
            }
            this.openDialog()
        },
@@ -102,6 +107,8 @@
            this.planDialogVisible = true
        },
        closeDialog() {
            console.log('qqweeee/////////////');
            this.planDialogVisible = false
            // 重置表单数据
            this.planForm = {
@@ -171,7 +178,7 @@
    }
    div {
        width: 183px;
        width: 178px;
        height: 32px;
        text-align: center;
        flex-shrink: 0;
culture/src/views/pedigree-chart/components/ParentForm.vue
@@ -203,7 +203,7 @@
  }
  div {
    width: 183px;
    width: 178px;
    height: 32px;
    text-align: center;
    flex-shrink: 0;
culture/src/views/pedigree-chart/components/PlanForm.vue
@@ -29,7 +29,7 @@
                <el-col :span="10">
                    <el-form-item label="传代计划数" prop="generationCount">
                        <el-input-number :disabled="planForm.formStatus === 'detail'" v-model="planForm.generationCount"
                            :controls="false" :min="1" placeholder="请输入" />
                            :controls="false" :min="0" placeholder="请输入" />
                    </el-form-item>
                </el-col>
            </el-row>
@@ -195,7 +195,7 @@
    }
    div {
        width: 183px;
        width: 178px;
        height: 32px;
        text-align: center;
        flex-shrink: 0;
culture/src/views/pedigree-chart/index.vue
@@ -40,8 +40,6 @@
        </div>
      </template>
      <template #table>
        <el-table-column prop="strainCode" label="菌种编号"></el-table-column>
        <el-table-column prop="strainName" label="菌种名称"></el-table-column>
        <el-table-column prop="generationType" label="起传类型">
          <template slot-scope="scope">
            {{ scope.row.generationType === 1 ? '母代' : '祖代' }}
@@ -52,6 +50,8 @@
            {{ scope.row.strainSourceStart }}代—{{ scope.row.strainSourceEnd }}细胞库
          </template>
        </el-table-column>
        <el-table-column prop="strainCode" label="菌种编号"></el-table-column>
        <el-table-column prop="strainName" label="菌种名称"></el-table-column>
        <el-table-column prop="createTime" label="创建时间"></el-table-column>
        <el-table-column prop="createBy" label="创建人"></el-table-column>
        <el-table-column label="操作" width="250">
@@ -200,10 +200,10 @@
    handleDetail(row) {
      if (row.generationType == 1) {
        //母代详情
        this.$router.push('/strain/add-pedigree?id=' + row.id)
        this.$router.push('/strain/detail-pedigree?id=' + row.id + '&type=1')
      } else {
        //祖代详情
        this.$router.push('/strain/add-progenitor?id=' + row.id)
        this.$router.push('/strain/detail-progenitor?id=' + row.id + '&type=1')
      }
    },
culture/src/views/pedigree-chart/progenitorComponents/AddAncestor.vue
@@ -143,7 +143,9 @@
  </el-dialog>
</template>
<script>
import moment from 'moment'
export default {
  name: "AddAncestor",
  data() {
    return {
      planDialogVisible: false,
@@ -155,7 +157,7 @@
        strainType: "1", // 1原始祖代菌株 2分离菌落 3祖代菌株
        status: 1, // 1保存 2废弃
        type: 1, // 固定为1
        confirmTime: "",
        confirmTime: moment().format('YYYY-MM-DD HH:mm:ss'),
        remark: "",
        formStatus: "add",
      },
@@ -178,6 +180,7 @@
  },
  methods: {
    openInitData(value) {
      console.log('45646545645',value)
      // 赋值当前时间
      // const now = new Date();
      // const pad = (n) => n.toString().padStart(2, "0");
@@ -187,6 +190,11 @@
      //   now.getMinutes()
      // )}:${pad(now.getSeconds())}`;
      this.planForm = value;
      if(value.confirmTime){
        this.planForm.confirmTime = moment(value.confirmTime).format('YYYY-MM-DD HH:mm:ss')
      }else{
        this.planForm.confirmTime = moment().format('YYYY-MM-DD HH:mm:ss')
      }
      this.openDialog();
    },
    openDialog() {
@@ -266,7 +274,7 @@
  }
  div {
    width: 183px;
    width: 178px;
    height: 32px;
    text-align: center;
    flex-shrink: 0;
@@ -287,7 +295,7 @@
  color: #049c9a;
  background: #ebfefd;
  border-radius: 10px;
  width: 183px;
  width: 178px;
  line-height: 40px;
  border-radius: 10px;
  text-align: center;
culture/src/views/pedigree-chart/progenitorComponents/AddSublevelForm.vue
@@ -98,6 +98,7 @@
  </el-dialog>
</template>
<script>
import moment from 'moment'
export default {
  data() {
    return {
@@ -148,11 +149,13 @@
          ? value.form.vaccinateTime
          : formatTime,
        type: 1,
        confirmTime:value.confirmTime?moment(value.confirmTime).format('YYYY-MM-DD HH:mm:ss'):moment().format('YYYY-MM-DD HH:mm:ss')
      };
      
      this.dialogVisible = true;
    },
    closeDialog() {
      console.log('78978998789798');
      this.dialogVisible = false;
    },
    handleSubmit() {
@@ -202,7 +205,7 @@
  }
  div {
    width: 183px;
    width: 178px;
    height: 32px;
    text-align: center;
    flex-shrink: 0;
culture/src/views/pedigree-chart/progenitorComponents/PlanForm.vue
@@ -59,7 +59,15 @@
    </el-dialog>
</template>
<script>
import moment from 'moment'
export default {
    name: 'PlanForm',
    props: {
        formStatus: {
            type: String,
            default: 'add'
        }
    },
    data() {
        return {
            planDialogVisible: false,
@@ -74,6 +82,11 @@
    methods: {
        openInitData(value) {
            this.planForm = value
            if(value.confirmTime){
                this.planForm.confirmTime = moment(value.confirmTime).format('YYYY-MM-DD HH:mm:ss')
            }else{
                this.planForm.confirmTime = moment().format('YYYY-MM-DD HH:mm:ss')
            }
            this.openDialog()   
        },
        openDialog() {
@@ -119,7 +132,7 @@
    color: #049C9A;
    background: #EBFEFD;
    border-radius: 10px;
    width: 183px;
    width: 178px;
    line-height: 40px;
    border-radius: 10px;
    text-align: center;
culture/src/views/reportLibrary/feasibilityReport/components/approval/index.vue
File was deleted
culture/src/views/reportLibrary/feasibilityReport/index.vue
File was deleted
culture/src/views/reportLibrary/feasibilityStudy/add.vue
File was deleted
culture/src/views/reportLibrary/feasibilityStudy/components/approval/index.vue
File was deleted
culture/src/views/reportLibrary/feasibilityStudy/index.vue
File was deleted
culture/src/views/reportLibrary/processDevelopment/components/approval/index.vue
File was deleted
culture/src/views/reportLibrary/processDevelopment/index.vue
File was deleted
culture/src/views/reportLibrary/projectProposalLibrary/components/approval/index.vue
File was deleted
culture/src/views/reportLibrary/projectProposalLibrary/index.vue
File was deleted
culture/src/views/reportLibrary/verificationRelease/components/approval/index.vue
File was deleted
culture/src/views/reportLibrary/verificationRelease/index.vue
File was deleted
culture/src/views/strain-library/breeding-record/SlantRecordDialog.vue
@@ -28,11 +28,18 @@
      </el-table-column>
      <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)"
          <el-upload :file-list="row.images" :disabled="roleType!=4 || row.uploading" list-type="picture-card"
            :on-preview="file => handlePreview(row, file)"
            :on-remove="(file, fileList) => handleRemove(row, file, fileList)"
            :on-success="(res, file, fileList) => handleUpload(row, file, fileList)" :before-upload="beforeUpload"
            :on-success="(res, file, fileList) => handleUpload(row, file, fileList)"
            :before-upload="file => beforeUpload(file, row)"
            action="#" :limit="5" class="mini-upload">
            <i class="el-icon-plus"></i>
            <template v-if="row.uploading">
              <i class="el-icon-loading"></i>
            </template>
            <template v-else>
              <i class="el-icon-plus"></i>
            </template>
          </el-upload>
        </template>
      </el-table-column>
@@ -43,7 +50,7 @@
      </el-table-column>
    </el-table>
    <div style="text-align: center;" v-if="roleType==4">
      <el-button type="primary" @click="handleOk">保存</el-button>
      <el-button type="primary" @click="handleOk" :disabled="hasUploading">保存</el-button>
    </div>
  </el-dialog>
</template>
@@ -81,7 +88,8 @@
        index: i + 1,
        desc: '',
        time: '',
        images: []
        images: [],
        uploading: false
      }))
    }
  },
@@ -105,7 +113,8 @@
                  index: this.tableData.length + 1,
                  desc: '',
                  time: '',
                  images: []
                  images: [],
                  uploading: false
                })
              }
            } catch (e) {
@@ -114,7 +123,8 @@
                index: i + 1,
                desc: '',
                time: '',
                images: []
                images: [],
                uploading: false
              }))
            }
          } else {
@@ -122,7 +132,8 @@
              index: i + 1,
              desc: '',
              time: '',
              images: []
              images: [],
              uploading: false
            }))
          }
        } else {
@@ -177,7 +188,8 @@
          index: i + 1,
          desc: '',
          time: '',
          images: []
          images: [],
          uploading: false
        }))
        this.handleClose()
      })
@@ -185,8 +197,8 @@
    handleClose() {
      this.$emit('update:visible', false)
    },
    beforeUpload(file) {
      // 这里只做本地预览
    beforeUpload(file, row) {
      row.uploading = true
      return new Promise(resolve => {
        const reader = new FileReader()
        reader.onload = e => {
@@ -196,11 +208,12 @@
      })
    },
    handleUpload(row, file, fileList) {
      // 这里只做本地预览
      row.images = fileList.map(f => ({ ...f, url: f.url || URL.createObjectURL(f.raw) }))
      row.uploading = false
    },
    handleRemove(row, file, fileList) {
      row.images = fileList
      row.uploading = false
    },
    handlePreview(row, file) {
      this.previewImg = file.url
@@ -213,6 +226,11 @@
        this.$forceUpdate()
      }
    }
  },
  computed: {
    hasUploading() {
      return this.tableData.some(row => row.uploading)
    }
  }
}
</script>
culture/src/views/strain-library/breeding-record/add.vue
@@ -106,7 +106,7 @@
              新增培养皿分离记录</el-button>
          </div>
        </div>
        <Table :data="form.separationOfCultureDishesList" :height="null" :queryForm="queryForm" :total="0">
        <Table :data="form.separationOfCultureDishesList"  :height="300" :queryForm="queryForm" :total="0">
          <el-table-column width="100" type="index" label="培养皿序号" />
          <el-table-column prop="separateBacterialColoniesCode" label="分离菌落编号" />
          <el-table-column prop="handleSignature" label="接种操作人签字">
@@ -136,7 +136,7 @@
              新增观察记录</el-button>
          </div>
        </div>
        <Table :data="form.observationOfPetriDishes" :height="null" :queryForm="queryForm" :total="0">
        <Table :data="form.observationOfPetriDishes" :height="300" :queryForm="queryForm" :total="0">
          <el-table-column prop="separateColonyCode" label="分离菌落编号" />
          <el-table-column prop="strength" label="形状强壮度排名" />
          <el-table-column prop="address" label="操作">
@@ -159,7 +159,7 @@
              新增斜面记录</el-button>
          </div>
        </div>
        <el-table :data="form.vaccinationSlopes" border style="width: 100%; margin-bottom: 16px;"
        <Table :data="form.vaccinationSlopes" border style="width: 100%; margin-bottom: 16px;" :height="300"
          :span-method="inoculationRowSpan">
          <el-table-column prop="separateColonyCode" label="分离菌落编号" />
          <el-table-column prop="vaccinationSlopeCode" label="接种斜面编号" />
@@ -199,7 +199,7 @@
                v-if="!scope.row.preserveSignature && [4].includes(roleType)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
        </Table>
        <div class="header-title" style="margin-top: 20px;">
          <div class="header-title-left">
            <img src="@/assets/public/headercard.png" />
@@ -211,7 +211,7 @@
              新增菌种保藏记录</el-button>
          </div>
        </div>
        <Table :data="form.culturePreservations" :height="null" :queryForm="queryForm" :total="0">
        <Table :data="form.culturePreservations" :height="300" :queryForm="queryForm" :total="0" >
          <el-table-column prop="forPreserveCode" label="用于保藏的菌种编号" />
          <el-table-column prop="verificationConclusion" label="实验验证结论" />
          <el-table-column prop="preserveMethod" label="保藏方法" />
@@ -257,7 +257,7 @@
          @confirm="handleConfirmPreserveSubmit" />
        <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" v-if="[1,4].includes(roleType)" @click="handleSubmit(1)">提交</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>
@@ -658,7 +658,7 @@
  padding: 4px;
  div {
    width: 183px;
    width: 178px;
    height: 32px;
    border-radius: 10px;
    text-align: center;
culture/src/views/strain-library/breeding-record/inoculation-slope-record-dialog.vue
@@ -3,6 +3,7 @@
    :visible.sync="visible"
    title="新增接种斜面记录"
    width="700px"
    :close-on-click-modal="false"
    @close="handleClose"
  >
    <el-form
@@ -174,7 +175,7 @@
        separateColonyCode: "",
        vaccinationSlopeCode: "",
        handleType: "保存",
        preserveTime: '',
        preserveTime: this.getNowTime(),
        handleTime: this.getNowTime(),
        handleSignature: "",
        handleName: JSON.parse(sessionStorage.getItem('userInfo'))?.nickName || '',
culture/src/views/strain-library/breeding-record/preserve-strain-record-dialog.vue
@@ -3,6 +3,7 @@
    :visible.sync="visible"
    title="新增菌种保藏记录"
    width="900px"
    :close-on-click-modal="false"
    @close="handleClose"
  >
    <el-form
culture/src/views/strain-library/main-cell-library/add.vue
@@ -123,7 +123,7 @@
            }
        }
    },
    activated() {
    mounted() {
        if (this.$route.query.id) {
            getDetail({ id: this.$route.query.id }).then(res => {
                this.form = res
culture/src/views/strain-library/main-cell-library/index.vue
@@ -106,7 +106,13 @@
        <el-table-column prop="strainName" label="菌种名称" />
        <el-table-column prop="strainSource" label="菌种来源" />
        <el-table-column prop="appraisalMethod" label="鉴定方法" />
        <el-table-column prop="features" label="特征描述" />
        <el-table-column prop="features" label="特征描述" >
          <template #default="{ row }">
            <el-tooltip :content="row.features" placement="top" effect="dark">
              <div class="ellipsis-text">{{ row.features }}</div>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column prop="saveMethod" label="菌种保存方法" />
        <el-table-column prop="saveLocation" label="保藏位置" />
        <el-table-column prop="stock" label="库存余量" />
@@ -128,7 +134,7 @@
        </el-table-column>
      </template>
    </TableCustom>
    <StrainDetail :visible.sync="detailVisible" :detail="currentDetail" />
    <StrainDetail title="主细胞库" :visible.sync="detailVisible" :detail="currentDetail" />
  </div>
</template>
@@ -158,10 +164,10 @@
      },
      total: 800,
      tableData: [],
      roleType: "",
      roleType: JSON.parse(sessionStorage.getItem("userInfo")).roleType,
    };
  },
  activated() {
  mounted() {
    this.searchData();
    // 角色类型 1=超级管理员 2=审批人 3=工程师 4=实验员
    this.roleType = JSON.parse(sessionStorage.getItem("userInfo")).roleType;
@@ -444,4 +450,13 @@
    }
  }
}
.ellipsis-text {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
  word-break: break-all;
}
</style>
culture/src/views/strain-library/production-cell-library/add.vue
@@ -123,7 +123,7 @@
            }
        }
    },
    activated() {
    mounted() {
        if (this.$route.query.id) {
            getDetail({ id: this.$route.query.id }).then(res => {
                this.form = res
culture/src/views/strain-library/production-cell-library/index.vue
@@ -136,7 +136,13 @@
        <el-table-column prop="strainName" label="菌种名称" />
        <el-table-column prop="strainSource" label="菌种来源" />
        <el-table-column prop="appraisalMethod" label="鉴定方法" />
        <el-table-column prop="features" label="特征描述" />
          <el-table-column prop="features" label="特征描述" >
          <template #default="{ row }">
            <el-tooltip :content="row.features" placement="top" effect="dark">
              <div class="ellipsis-text">{{ row.features }}</div>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column prop="saveMethod" label="菌种保存方法" />
        <el-table-column prop="saveLocation" label="保藏位置" />
        <el-table-column prop="stock" label="库存余量" />
@@ -167,7 +173,7 @@
        </el-table-column>
      </template>
    </TableCustom>
    <StrainDetail :visible.sync="detailVisible" :detail="currentDetail" />
    <StrainDetail title="生产细胞库" :visible.sync="detailVisible" :detail="currentDetail" />
  </div>
</template>
@@ -200,7 +206,7 @@
      roleType: "",
    };
  },
  activated() {
  mounted() {
    this.searchData();
    // 角色类型 1=超级管理员 2=审批人 3=工程师 4=实验员
    this.roleType = JSON.parse(sessionStorage.getItem("userInfo")).roleType;
@@ -481,4 +487,14 @@
    }
  }
}
.ellipsis-text {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
  word-break: break-all;
}
</style>
culture/src/views/strain-library/strain-library-manage/components/RecordTimeline.vue
@@ -14,7 +14,7 @@
          <div :class="[
            'right-block',
            item.confirmTime && item.confirmTime !== '--' ?
              (item.type === '2' ? 'confirmed-in' : 'confirmed-out') :
              (item.type == '2' ? 'confirmed-in' : 'confirmed-out') :
              'unconfirmed'
          ]">
            <div class="info-title">保藏人:{{ item.preserveName || '--' }}</div>
@@ -34,8 +34,13 @@
      type: Array,
      default: () => []
    }
  },
  mounted() {
    console.log('123123123',this.list);
  }
}
</script>
<style lang="less" scoped>
culture/src/views/strain-library/strain-library-manage/components/StrainDetail.vue
@@ -1,7 +1,7 @@
<template>
  <div>
    <el-dialog
      title="原始细胞库详情"
      :title="`${title}详情`"
      :visible.sync="visible"
      width="70%"
      :close-on-click-modal="false"
@@ -63,7 +63,7 @@
      </div>
      <div class="record-table">
        <div class="table-title">原始细胞库出/入库记录</div>
        <div class="table-title">{{title}}出/入库记录</div>
        <el-table :data="detail.records" style="width: 100%">
          <el-table-column label="出库/入库">
            <template #default="{ row }">
@@ -132,6 +132,10 @@
      type: Object,
      default: () => ({}),
    },
    title: {
      type: String,
      default: "原始细胞库",
    },
  },
  data() {
    return {
culture/src/views/strain-library/strain-library-manage/index.vue
@@ -136,7 +136,13 @@
        <el-table-column prop="strainName" label="菌种名称" />
        <el-table-column prop="strainSource" label="菌种来源" />
        <el-table-column prop="appraisalMethod" label="鉴定方法" />
        <el-table-column prop="features" label="特征描述" />
        <el-table-column prop="features" label="特征描述" >
          <template #default="{ row }">
            <el-tooltip :content="row.features" placement="top" effect="dark">
              <div class="ellipsis-text">{{ row.features }}</div>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column prop="saveMethod" label="菌种保存方法" />
        <el-table-column prop="saveLocation" label="保藏位置" />
        <el-table-column prop="stock" label="库存余量" />
@@ -154,11 +160,12 @@
        </el-table-column>
        <el-table-column label="操作" width="200">
          <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 type="text" style="margin-right: 10rpx;" @click="handleDetail(row)">详情</el-button>
            <el-button style="margin-right: 10rpx;" v-if="row.status == 2 || row.status == 4" type="text" @click="handleEdit(row)">编辑</el-button>
            <el-button
              v-if="currentType === 'list'"
              type="text"
              style="margin-right: 10rpx;"
              @click="handleRecord(row)"
              >出入库记录</el-button
            >
@@ -281,10 +288,10 @@
    },
    getStatusType(status) {
      const types = {
        1: "warning",
        2: "warning",
        3: "success",
        4: "success",
        1: "info",
        2: "success",
        3: "info",
        4: "warning",
      };
      return types[status] || "info";
    },
@@ -481,4 +488,14 @@
    }
  }
}
.ellipsis-text {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
  word-break: break-all;
}
</style>
culture/src/views/strain-library/strain-library-manage/record.vue
@@ -91,13 +91,13 @@
          </template>
        </el-table-column>
        <el-table-column prop="boundTime" label="操作时间" />
        <el-table-column prop="handleSignature" label="操作人签字">
        <el-table-column prop="signature" label="操作人签字">
          <template #default="{ row }">
            <el-image
              v-if="row.handleSignature"
              v-if="row.signature"
              style="width: 100px; height: 100px"
              :src="row.handleSignature"
              :preview-src-list="[row.handleSignature]"
              :src="row.signature"
              :preview-src-list="[row.signature]"
            >
            </el-image>
          </template>
@@ -392,7 +392,7 @@
      background: #fafafc;
      border-radius: 8px 8px 0px 0px;
      border: 1px solid #dcdfe6;
      font-weight: 400;
      font-weight: 600;
      font-size: 18px;
      color: #606266;
      margin-left: 16px;
culture/src/views/strain-library/validation/chief-cell/DetailConditionDialog.vue
@@ -1,5 +1,5 @@
<template>
  <el-dialog :visible.sync="visible" width="80%" @open="handleOpen" @close="handleClose">
  <el-dialog :close-on-click-modal="false" :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="6" class="info-col">
culture/src/views/strain-library/validation/chief-cell/EditConditionDialog.vue
@@ -1,5 +1,5 @@
<template>
  <el-dialog :visible.sync="visible"  width="800px" @close="handleClose">
  <el-dialog :close-on-click-modal="false" :visible.sync="visible"  width="800px" @close="handleClose">
    <el-form label-width="120px" label-position="top">
      <el-form-item label="菌种培养工艺条件">
        <el-input v-model="form.conditions" :disabled="isFixed || value.isDetail" placeholder="请输入" />
culture/src/views/strain-library/validation/chief-cell/index.vue
@@ -61,7 +61,7 @@
        </el-table-column>
        <el-table-column label="操作" width="200">
          <template #default="{ row }">
            <el-button type="text" v-if="row.status == 1 && roleType == 3"
            <el-button type="text" v-if="row.status == 1 && roleType == 3&&currentType != 'draft'"
             style="margin-right: 10px;"
              @click="$router.push('/strain/validation/confirm-detail?id=' + row.id)">确认</el-button>
            <el-button type="text"  style="margin-right: 10px;" v-if="roleType == 4" @click="handleDetail(row)">详情</el-button>
culture/src/views/strain-library/validation/chief-cell/primitive-cell-detail-dialog.vue
@@ -3,6 +3,7 @@
    :visible.sync="visible"
    title="原始细胞库资料详情"
    width="650px"
    :close-on-click-modal="false"
    @close="handleClose"
  >
    <el-form label-width="120px" label-position="top" class="detail-form">
culture/src/views/strain-library/validation/primitive-cell/DetailConditionDialog.vue
@@ -1,5 +1,5 @@
<template>
  <el-dialog :visible.sync="visible" width="80%" @open="handleOpen" @close="handleClose">
  <el-dialog :close-on-click-modal="false" :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="6" class="info-col">
@@ -35,7 +35,7 @@
        </el-col>
        <el-col :span="6" class="info-col">
          <div class="info-item">
            <span class="label">签字时间:</span>{{ detail.preserveTime }}
            <span class="label">签字时间:</span>{{ detail.handleTime }}
          </div>
        </el-col>
      </el-row>
@@ -134,7 +134,7 @@
          this.detail = {
            ...res,
            handleSignature: res.handleSignature || '', // 处理签名为空的情况
            purpose: res.purpose.split(',') || [] // 处理 purpose 为空的情况
            purpose:res.purpose && res.purpose.split(',') || [] // 处理 purpose 为空的情况
          }
          this.tableData = res.list || []
        })
culture/src/views/strain-library/validation/primitive-cell/EditConditionDialog.vue
@@ -1,5 +1,5 @@
<template>
  <el-dialog :visible.sync="visible"  width="800px" @close="handleClose">
  <el-dialog :close-on-click-modal="false" :visible.sync="visible"  width="800px" @close="handleClose">
    <el-form label-width="120px" label-position="top">
      <el-form-item label="菌种培养工艺条件">
        <el-input v-model="form.conditions" :disabled="isFixed || value.isDetail" placeholder="请输入" />
culture/src/views/strain-library/validation/primitive-cell/index.vue
@@ -61,7 +61,7 @@
        </el-table-column>
        <el-table-column label="操作" width="200">
          <template #default="{ row }">
            <el-button type="text" v-if="row.status == 1 && roleType == 3"
            <el-button type="text" v-if="row.status == 1 && roleType == 3&&currentType != 'draft'"
              @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>
@@ -86,6 +86,7 @@
import EditConditionDialog from "./EditConditionDialog.vue";
import { getList, delTwo } from "./service";
import moment from "moment";
export default {
  name: "PrimitiveCell",
  components: {
@@ -124,6 +125,7 @@
  },
  methods: {
    handleDetail(row) {
      row.experimentTime = moment(row.experimentTime).format('YYYY-MM-DD')
      this.currentDetail = row;
      this.detailVisible = true;
    },
culture/src/views/strain-library/validation/primitive-cell/primitive-cell-detail-dialog.vue
@@ -3,6 +3,7 @@
    :visible.sync="visible"
    title="原始细胞库资料详情"
    width="650px"
    :close-on-click-modal="false"
    @close="handleClose"
  >
    <el-form label-width="120px" label-position="top" class="detail-form">
culture/src/views/strainReportLibrary/reportLibraryOne/add.vue
@@ -246,6 +246,8 @@
        if (this.$route.query.id) {
            getDetail(this.$route.query.id).then(res => {
                const data = res.data || res;
                console.log('qweqweqweq',data);
                this.form = {
                    ...this.form,
                    ...data,
@@ -259,9 +261,17 @@
                    return item
                })
                this.tableData = data.projectTeam ?
                this.selectedMember = [{
                    nickName:data.experimentName,
                    userId:data.experimentId
                }]
                this.projectData = data.projectTeam ?
                    [{ ...data.projectTeam, staffName: data.projectTeam.staff || '' }] :
                    [];
                    console.log('qwe45645664',this.tableData);
            }).catch(err => {
@@ -332,7 +342,6 @@
                    return item.selectedScore
                })
                try {
                    const params = {
                        isDraft: 1,
                        projectId: this.projectData[0].id,
@@ -350,9 +359,6 @@
                            this.$router.push('/strainReportLibrary/reportLibraryOne');
                        }
                    })
                } catch (e) {
                    this.$message.error('保存失败');
                }
            });
        }, getProjectData(data) {
            this.projectData = [data]; // 将选中的项目组数据存储到数组中
culture/src/views/strainReportLibrary/reportLibraryOne/components/approval/index.vue
@@ -1,5 +1,5 @@
<template>
    <el-dialog :title="dialogTitle" :visible.sync="visible" width="80%" @open="open" po :close-on-click-modal="false"
    <el-dialog  :title="dialogTitle" :visible.sync="visible" width="80%" @open="open" po :close-on-click-modal="false"
        @close="handleClose">
        <div class="approval-dialog" :style="{ height: obj?.isDetail ? '50vh' : '40vh' }">
            <!-- 左侧审批内容 -->
culture/src/views/strainReportLibrary/reportLibraryOneFour/add.vue
@@ -259,7 +259,7 @@
                    return item
                })
                this.tableData = data.projectTeam ?
                this.projectData = data.projectTeam ?
                    [{ ...data.projectTeam, staffName: data.projectTeam.staff || '' }] :
                    [];
culture/src/views/strainReportLibrary/reportLibraryOneTWO/add.vue
@@ -259,7 +259,7 @@
                    return item
                })
                this.tableData = data.projectTeam ?
                this.projectData = data.projectTeam ?
                    [{ ...data.projectTeam, staffName: data.projectTeam.staff || '' }] :
                    [];
culture/src/views/strainReportLibrary/reportLibraryOneThree/add.vue
@@ -259,7 +259,7 @@
                    return item
                })
                this.tableData = data.projectTeam ?
                this.projectData = data.projectTeam ?
                    [{ ...data.projectTeam, staffName: data.projectTeam.staff || '' }] :
                    [];
culture/src/views/system/user/components/add-edit.vue
@@ -1,6 +1,6 @@
<template>
  <div>
    <el-dialog :visible.sync="dialogVisible" @close="$emit('close')" :title="row.userId ? '编辑人员' : '添加人员'" width="30%">
    <el-dialog :close-on-click-modal="false" :visible.sync="dialogVisible" @close="$emit('close')" :title="row.userId ? '编辑人员' : '添加人员'" width="30%">
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="姓名" prop="nickName">
          <el-input v-model="form.nickName" placeholder="请输入" style="width: 50%"></el-input>
culture/src/views/system/user/components/disb.vue
@@ -1,6 +1,6 @@
<template>
  <div>
    <el-dialog :visible.sync="dialogVisible" @close="$emit('close')" title="禁用人员" width="30%">
    <el-dialog :close-on-click-modal="false" :visible.sync="dialogVisible" @close="$emit('close')" title="禁用人员" width="30%">
      <el-form ref="form" :model="form" label-width="80px">
        <el-form-item label="姓名" prop="nickName">
          {{ form.nickName }}
culture/src/views/system/user/components/inherit.vue
@@ -1,6 +1,6 @@
<template>
    <div>
        <el-dialog :visible.sync="dialogVisible" :z-index="1000" @close="$emit('close')" title="账号继承" :show-close="false">
        <el-dialog :close-on-click-modal="false" :visible.sync="dialogVisible" :z-index="1000" @close="$emit('close')" title="账号继承" :show-close="false">
            <div class="inherit-title">当前账号</div>
            <div class="inherit-content">
                <div>姓名:{{row.nickName}}</div>
@@ -25,7 +25,7 @@
                <el-button type="primary" @click="submit">保存</el-button>
            </div>
        </el-dialog>
        <SelectMember ref="selectMember" />
        <SelectMember ref="selectMember" @submit="selectUser" />
    </div>
</template>
@@ -57,6 +57,13 @@
        selectMember() {
            this.$refs.selectMember.open()
        },
        selectUser(e){
            this.$refs.selectMember.close()
            this.$emit('confirm',{
                userId:e[0].userId,
                currentUserId:this.row.userId
            })
        },
        submit() {
        }
    },
culture/src/views/system/user/components/reset-password.vue
@@ -1,6 +1,6 @@
<template>
  <div>
    <el-dialog :visible.sync="dialogVisible" @close="$emit('close')" title="重置密码" width="30%">
    <el-dialog :close-on-click-modal="false" :visible.sync="dialogVisible" @close="$emit('close')" title="重置密码" width="30%">
      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
        <el-form-item label="姓名" prop="nickName">
          <el-input :disabled="true" v-model="form.nickName" placeholder="请输入" style="width: 95%;"></el-input>
culture/src/views/system/user/components/view-data.vue
@@ -1,6 +1,6 @@
<template>
  <div>
    <el-dialog :visible.sync="dialogVisible" @close="$emit('close')" title="禁用信息" width="30%">
    <el-dialog :close-on-click-modal="false" :visible.sync="dialogVisible" @close="$emit('close')" title="禁用信息" width="30%">
      <el-form ref="form" label-width="80px">
        <el-form-item label="禁用原因" prop="disableRemark">
          {{ form.disableRemark }}
culture/src/views/system/user/index.vue
@@ -82,7 +82,7 @@
</template>
<script>
import { getList, add, edit, delDept, roleList, updatePwd, changeStatus, typeList } from './service'
import { getList, add, edit, delDept, roleList, updatePwd, changeStatus, accountInherit } from './service'
import AddEdit from './components/add-edit.vue'
import Disb from './components/disb.vue'
import ResetPassword from './components/reset-password.vue'
@@ -207,7 +207,13 @@
        this.disbDialogVisible = true
      }
    },
    inheritConfirm() {
    inheritConfirm(e) {
      accountInherit({...e}).then(res=>{
        this.inheritDialogVisible = false
        this.inheritRow = {}
        this.$message.success('账号继承成功')
        this.getListData()
      })
    },
    del(row) {
      this.delShow = true
culture/src/views/system/user/service.js
@@ -32,6 +32,16 @@
export const updatePwd = (data) => {
  return axios.post(`/api/system/user/resetPwd`, { ...data })
}
//账号继承
export const accountInherit = (data) => {
  console.log('qwqweqwrt3123',data);
  return axios.post(`/api/system/user/inherit`, { ...data })
}
// export const typeList = () => {
//   return axios.get(`/t-business-dept/list/type?type=1`,)
// }