13404089107
2025-06-27 86b40f86594ecd694a11836f96edb53ad3d931f6
修改bug及谱系图签名问题
13个文件已修改
190 ■■■■■ 已修改文件
culture/src/components/confirm-storage-dialog/index.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/add.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/addProgenitor.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/components/AddSublevelForm.vue 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/components/ParentForm.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/components/PlanForm.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/index.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/progenitorComponents/AddAncestor.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/progenitorComponents/AddSublevelForm.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/pedigree-chart/service.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/strain-library-manage/components/RecordTimeline.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/strain-library-manage/record.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/views/strain-library/strain-library-manage/service.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
culture/src/components/confirm-storage-dialog/index.vue
@@ -1,13 +1,6 @@
<template>
  <el-dialog
    :visible.sync="visible"
    title="签字确认"
    width="520px"
    @open="handleOpen"
    :close-on-click-modal="false"
    custom-class="record-detail-dialog"
    @close="handleClose"
  >
  <el-dialog :visible.sync="visible" title="签字确认" width="520px" @open="handleOpen" :close-on-click-modal="false"
    custom-class="record-detail-dialog" @close="handleClose">
    <div class="dialog-content">
      <div class="confirm-tip">
        {{ text }}
@@ -17,16 +10,11 @@
        <el-form-item required>
          <template #label>
            <span>{{ name }}</span>
            <el-button
              type="primary"
              class="sign-btn"
              @click="showSignature = true"
              >签名</el-button
            >
            <el-button type="primary" class="sign-btn" @click="showSignature = true">签名</el-button>
          </template>
          <div class="signature-area" :class="{ waiting: !form.signature }">
            <template v-if="form.signature">
              <img :src="form.signature" :alt="name" />
              <el-image :src="getFullUrl(form.signature)"  :preview-src-list="[getFullUrl(form.signature)]"  :alt="name" />
            </template>
            <template v-else>
              <span class="waiting-text">等待确认</span>
@@ -36,20 +24,17 @@
      </el-form>
    </div>
    <div class="footer-btns">
      <el-button @click="handleClose" style="margin-right: 16px"
        >取消</el-button
      >
      <el-button @click="handleClose" style="margin-right: 16px">取消</el-button>
      <el-button type="primary" @click="handleConfirm" :disabled="!form.signature">确认</el-button>
    </div>
    <signature-canvas
      :visible.sync="showSignature"
      @confirm="handleSignatureConfirm"
    />
    <signature-canvas :visible.sync="showSignature" @confirm="handleSignatureConfirm" />
  </el-dialog>
</template>
<script>
import SignatureCanvas from "@/components/SignatureCanvas.vue";
import { getFullUrl } from '@/utils/utils'
import { queryDetail } from '../service'
export default {
  name: "ConfirmStorageDialog",
  components: { SignatureCanvas },
@@ -68,7 +53,7 @@
    },
    handleSignature: {
      type: String,
      default:"",
      default: "",
    }
  },
  data() {
@@ -83,8 +68,22 @@
    };
  },
  methods: {
    getFullUrl(url) {
      if (url) {
        return getFullUrl(url);
      }
    },
    handleOpen() {
       this.form.signature = this.handleSignature;
      if (!this.handleSignature) {
        queryDetail().then(res => {
          console.log('///////////////////////');
          this.form.signature = res.signPicture
        })
      } else {
        this.form.signature = this.handleSignature;
      }
    },
    handleClose() {
      this.$emit("update:visible", false);
@@ -109,10 +108,12 @@
  color: #f5222d;
  font-size: 16px;
  margin-bottom: 24px;
  .danger {
    margin-left: 12px;
  }
}
.signature-area {
  height: 120px;
  width: 100%;
@@ -125,20 +126,24 @@
  overflow: hidden;
  padding: 0;
}
.signature-area.waiting {
  border-style: dashed;
  background: #fafafa;
}
.signature-area img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.waiting-text {
  color: #909399;
  font-size: 14px;
}
.sign-btn {
  height: 32px;
  border-radius: 4px;
@@ -147,11 +152,13 @@
  font-weight: 400;
  margin-left: 12px;
}
.footer-btns {
  display: flex;
  justify-content: center;
  padding: 24px;
  padding-top: 0;
  .el-button {
    width: 150px;
  }
culture/src/views/pedigree-chart/add.vue
@@ -198,7 +198,6 @@
        return;
      }
      const nodeModel = this.selectedNode;
      console.log(nodeModel);
      if (nodeModel.label === "母代") {
        this.$refs.parentForm.openInitData({
@@ -313,7 +312,6 @@
    reloadData() {
      this.getList();
      getDetail({ id: this.$route.query.id }).then((res) => {
        console.log(JSON.stringify(res.pedigreeChartParentAllDetailDTO));
        const nodeMap = new Map();
        const calculateLevel = (node) => {
@@ -413,7 +411,6 @@
      });
    },
    addNodeSign(value, type) {
      console.log('/////8415454545',value);
      this.nodeData = value;
      this.nodeType = type;
      // this.$refs.addAncestor.closeDialog()
@@ -475,7 +472,6 @@
            },
            one: buildTree(this.graphData.nodes, this.graphData.edges),
          };
          console.log("提交的数据:", baseData, this.graphData);
          add(baseData).then((res) => {
            if (res.code == 200) {
              this.$message.success("保存成功");
@@ -487,7 +483,6 @@
    },
    handleDraft() {
      // 实现存草稿逻辑
      console.log("save draft", this.form);
    },
    handleCancel() {
      this.$router.back();
@@ -881,8 +876,6 @@
          },
        })),
      };
      console.log('//////////////',processedData);
      
      // 更新图表数据
@@ -1193,7 +1186,6 @@
    handleAddPlan(value) {
      if (value.formStatus == 'edit') {
        console.log(value, 'params');
        updateChild(value).then((res) => {
          if (res.code === 200) {
            this.$message.success("操作成功");
@@ -1277,7 +1269,6 @@
          (n) => n.nodeId === nodeModel.nodeId
        );
        if (this.graphData.nodes[nodeIndex - 1].label === "子代") {
          console.log(123);
          this.$refs.addSublevelPlan.openInitData({
            strainSourceStart: this.form.strainSourceStart,
@@ -1288,7 +1279,6 @@
            status: "detail",
          });
        } else {
          console.log(123);
          this.$refs.planForm.openInitData({
            strainSourceStart: this.form.strainSourceStart,
culture/src/views/pedigree-chart/addProgenitor.vue
@@ -26,7 +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>
        <div class="title" style="padding: 25px 0">待确认入库菌种列表</div>
        <Table
          :height="null"
          :total="total"
@@ -58,10 +58,10 @@
        <div class="header">
          <div class="title">菌种传代生产谱系图</div>
          <div class="option-btn">
            <el-button type="primary" class="el-icon-plus" @click="addNode">
            <el-button type="primary" class="el-icon-plus" @click="addNode" v-if="$route.query.type != 1" >
              新增</el-button
            >
            <el-button type="primary" @click="setGenerationPlan"
            <el-button type="primary" v-if="$route.query.type != 1" @click="setGenerationPlan"
              >设置传代计划数</el-button
            >
            <el-button type="primary" @click="showDetail">详情</el-button>
@@ -427,7 +427,6 @@
    },
    handleDraft() {
      // 实现存草稿逻辑
      console.log("save draft", this.form);
    },
    handleCancel() {
      this.$router.back();
@@ -789,10 +788,6 @@
        this.$message.warning("该节点已经存在传代计划数节点");
        return;
      }
      console.log({
        ...nodeModel.data,
        label: nodeModel.label,
      });
      this.$refs.planForm.openInitData({
        ...nodeModel.data,
culture/src/views/pedigree-chart/components/AddSublevelForm.vue
@@ -1,11 +1,6 @@
<template>
  <el-dialog
    :title="dialogTitle"
    :visible.sync="dialogVisible"
    width="40%"
    @close="closeDialog"
    :close-on-click-modal="false"
  >
  <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="40%" @close="closeDialog"
    :close-on-click-modal="false">
    <el-form :model="form" :rules="rules" ref="form" label-position="top">
      <el-row :gutter="20">
        <el-col :span="10">
@@ -30,20 +25,12 @@
        </el-col>
        <el-col :span="10">
          <el-form-item label="接种菌种编号" prop="strainCode">
            <el-input
              :disabled="dialogTitle.includes('详情')"
              v-model="form.strainCode"
              placeholder="请输入"
            ></el-input>
            <el-input :disabled="dialogTitle.includes('详情')" v-model="form.strainCode" placeholder="请输入"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="10">
          <el-form-item label="接种菌种名称" prop="strainName">
            <el-input
              :disabled="dialogTitle.includes('详情')"
              v-model="form.strainName"
              placeholder="请输入"
            ></el-input>
            <el-input :disabled="dialogTitle.includes('详情')" v-model="form.strainName" placeholder="请输入"></el-input>
          </el-form-item>
        </el-col>
      </el-row>
@@ -60,17 +47,13 @@
      <el-row :gutter="20">
        <el-col :span="10">
          <el-form-item v-if="form.status === 2" label="废弃原因说明" required>
            <el-input
              :disabled="dialogTitle.includes('详情')"
              v-model="form.discardReason"
              placeholder="请输入"
            ></el-input>
            <el-input :disabled="dialogTitle.includes('详情')" v-model="form.discardReason" placeholder="请输入"></el-input>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row :gutter="20">
        <el-col :span="10">
          <el-form-item label="菌种入库时间" prop="confirmTime" >
          <el-form-item label="菌种入库时间" prop="confirmTime">
            <el-input disabled v-model="form.confirmTime"></el-input>
          </el-form-item>
        </el-col>
@@ -78,12 +61,14 @@
      <el-row v-if="!dialogTitle.includes('新增')" :gutter="20">
        <el-col v-if="form.vaccinateSignature" :span="10">
          <el-form-item label="接种操作人签字">
            <el-image :src="form.vaccinateSignature" />
            <el-image :src="getFullUrl(form.vaccinateSignature)"
              :preview-src-list="[getFullUrl(form.vaccinateSignature)]" />
          </el-form-item>
        </el-col>
        <el-col v-if="form.preserveSignature" :span="10">
          <el-form-item label="菌种保藏人签字">
            <el-image :src="form.preserveSignature" />
            <el-image :src="getFullUrl(form.preserveSignature)"
              :preview-src-list="[getFullUrl(form.preserveSignature)]" />
          </el-form-item>
        </el-col>
      </el-row>
@@ -95,6 +80,7 @@
</template>
<script>
import { getFullUrl } from '@/utils/utils';
import moment from 'moment';
export default {
  data() {
@@ -135,7 +121,14 @@
    };
  },
  methods: {
    getFullUrl(url) {
      if (url) {
        return getFullUrl(url);
      }
    },
    openInitData(value) {
      this.dialogTitle = value.title;
      // 获取用户信息
      const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}");
@@ -148,8 +141,7 @@
      ).padStart(2, "0")}:${String(now.getMinutes()).padStart(2, "0")}:${String(
        now.getSeconds()
      ).padStart(2, "0")}`;
      console.log(value);
      this.form = {
        parentId: value.parentId,
        ...this.form,
@@ -157,15 +149,15 @@
        formStatus: value.formStatus,
        strainCode1: value.strainCode1,
        strainName1: value.strainName1,
        thisName: userInfo.nickName || "",
        thisName: value.createBy ? value.createBy : userInfo.nickName,
        thisTime: value.form.vaccinateTime
          ? value.form.vaccinateTime
          : formatTime,
          confirmTime: value.confirmTime ? moment(value.confirmTime).format('YYYY-MM-DD HH:mm:ss') : moment().format('YYYY-MM-DD HH:mm:ss')
        confirmTime: value.confirmTime ? moment(value.confirmTime).format('YYYY-MM-DD HH:mm:ss') : moment().format('YYYY-MM-DD HH:mm:ss')
      };
      this.dialogVisible = true;
    },
    close(){
    close() {
      this.dialogVisible = false;
    },
    closeDialog() {
culture/src/views/pedigree-chart/components/ParentForm.vue
@@ -47,14 +47,14 @@
        </el-col>
        <el-col v-if="planForm.vaccinateSignature && planForm.formStatus == 'detail'" :span="10">
            <el-form-item label="接种操作人签字">
              <el-image :src="planForm.vaccinateSignature" />
              <el-image :src="getFullUrl(planForm.vaccinateSignature)" :preview-src-list="[getFullUrl(planForm.vaccinateSignature)]" />
            </el-form-item>
          </el-col>
          <el-col v-if="planForm.preserveSignature && planForm.formStatus == 'detail'" :span="10">
            <el-form-item label="菌种保藏人签字">
              <el-image :src="planForm.preserveSignature" />
              <el-image :src="getFullUrl(planForm.preserveSignature)" :preview-src-list="[getFullUrl(planForm.preserveSignature)]" />
            </el-form-item>
          </el-col>
          </el-col>
      </el-row>
    </el-form>
    <div v-if="planForm.formStatus == 'add'" class="dialog-footer">
@@ -63,6 +63,7 @@
  </el-dialog>
</template>
<script>
import {getFullUrl} from '@/utils/utils'
export default {
  data() {
    return {
@@ -91,7 +92,13 @@
    };
  },
  methods: {
    getFullUrl(url) {
      if (url) {
        return getFullUrl(url);
      }
    },
    openInitData(value) {
      this.planForm = {
        ...this.planForm,
        ...value,
@@ -117,7 +124,6 @@
    handleSubmit() {
      this.$refs.planForm.validate((valid) => {
        if (valid) {
          console.log(this.planForm, "22");
          this.$emit("addNodeSign", this.planForm, 1);
        }
culture/src/views/pedigree-chart/components/PlanForm.vue
@@ -69,7 +69,6 @@
    },
    methods: {
        openInitData(value) {
            console.log(value);
            
            this.planForm = {
                ...this.planForm,
culture/src/views/pedigree-chart/index.vue
@@ -162,25 +162,21 @@
    },
    handleApproveSubmit(data) {
      // 处理审批通过
      console.log("审批通过:", data);
      this.approvalDialogVisible = false;
      this.$message.success("审批通过成功");
      this.getTableData();
    },
    handleRejectSubmit(data) {
      // 处理审批驳回
      console.log("审批驳回:", data);
      this.approvalDialogVisible = false;
      this.$message.success("审批驳回成功");
      this.getTableData();
    },
    handleRevokeApprove(row) {
      // 实现撤销审批逻辑
      console.log("撤销审批数据:", row);
    },
    handleEdit(row) {
      // 实现编辑逻辑
      console.log("编辑数据:", row);
    },
    handleDelete(row) {
      // 实现删除逻辑
culture/src/views/pedigree-chart/progenitorComponents/AddAncestor.vue
@@ -127,12 +127,13 @@
      <el-row v-if="planForm.formStatus == 'detail'" :gutter="20">
        <el-col v-if="planForm.vaccinateSignature" :span="10">
          <el-form-item label="接种操作人签字">
            <el-image :src="planForm.vaccinateSignature" />
            <el-image :src="getFullUrl(planForm.vaccinateSignature)" :preview-src-list="[getFullUrl(planForm.vaccinateSignature)]" />
          </el-form-item>
        </el-col>
        <el-col v-if="planForm.preserveSignature" :span="10">
          <el-form-item label="菌种保藏人签字">
            <el-image :src="planForm.preserveSignature" />
            <el-image :src="getFullUrl(planForm.preserveSignature)" :preview-src-list="[getFullUrl(planForm.preserveSignature)]" />
          </el-form-item>
        </el-col>
      </el-row>
@@ -144,6 +145,7 @@
</template>
<script>
import moment from 'moment'
import { getFullUrl } from "@/utils/utils";
export default {
  name: "AddAncestor",
  data() {
@@ -179,8 +181,12 @@
    };
  },
  methods: {
    getFullUrl(url){
      if(url){
        return getFullUrl(url);
      }
    },
    openInitData(value) {
      console.log('45646545645',value)
      // 赋值当前时间
      const now = new Date();
      const pad = (n) => n.toString().padStart(2, "0");
culture/src/views/pedigree-chart/progenitorComponents/AddSublevelForm.vue
@@ -61,12 +61,12 @@
      <el-row v-if="!dialogTitle.includes('新增')" :gutter="20">
        <el-col v-if="form.vaccinateSignature" :span="10">
          <el-form-item label="接种操作人签字">
            <el-image :src="form.vaccinateSignature" />
            <el-image :src="getFullUrl(form.vaccinateSignature)"  :preview-src-list="[getFullUrl(form.vaccinateSignature)]" />
          </el-form-item>
        </el-col>
        <el-col v-if="form.preserveSignature" :span="10">
          <el-form-item label="菌种保藏人签字">
            <el-image :src="form.preserveSignature" />
            <el-image :src="getFullUrl(form.preserveSignature)"  :preview-src-list="[getFullUrl(form.vaccinateSignature)]" />
          </el-form-item>
        </el-col>
      </el-row>
@@ -78,6 +78,7 @@
</template>
<script>
import moment from 'moment'
import { getFullUrl } from "@/utils/utils";
export default {
  data() {
    return {
@@ -114,11 +115,14 @@
    };
  },
  methods: {
    getFullUrl(url) {
      if (url) {
        return getFullUrl(url);
      }
    },
    openInitData(value) {
      console.log(value);
      this.dialogTitle = value.title;
      // 获取用户信息
      console.log('qweqwwqr4qw4rqw854',sessionStorage.getItem("userInfo"));
      const userInfo = JSON.parse(sessionStorage.getItem("userInfo") || "{}");
    
      
@@ -131,25 +135,22 @@
      ).padStart(2, "0")}:${String(now.getMinutes()).padStart(2, "0")}:${String(
        now.getSeconds()
      ).padStart(2, "0")}`;
      console.log('qweqweqwe///////', value)
      this.form = {
        ...this.form,
        ...value.form,
        formStatus: value.formStatus || '',
        thisName: userInfo.nickName || "",
        thisName: value.form.createBy ? value.form.createBy : userInfo.nickName,
        thisTime: value.form && value.form.vaccinateTime
          ? value.form && 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')
      };
      console.log('485484848', this.form);
      this.$forceUpdate()
      this.dialogVisible = true;
    },
    closeDialog() {
      console.log('78978998789798');
      this.dialogVisible = false;
    },
    handleSubmit() {
culture/src/views/pedigree-chart/service.js
@@ -53,3 +53,9 @@
export const deleteProgenitor = (params) => {
  return axios.delete('/open/t-pedigree-chart/deleteProgenitor', { params })
}
// 获取用户详情
export const queryDetail = (data) => {
  return axios.get('/system/user/queryDetail',)
}
culture/src/views/strain-library/strain-library-manage/components/RecordTimeline.vue
@@ -36,7 +36,7 @@
    }
  },
  mounted() {
    console.log('123123123',this.list);
    
  }
}
culture/src/views/strain-library/strain-library-manage/record.vue
@@ -232,7 +232,7 @@
        id: this.currentRecord.id,
        preserveSignature: data.preserveSignature,
      }).then((res) => {
        console.log(res);
        if (res.code == 200) {
          this.$message.success("操作成功");
          this.dialogVisible = false;
culture/src/views/strain-library/strain-library-manage/service.js
@@ -12,7 +12,7 @@
// 编辑
export const edit = (data) => {
  console.log('qweqweqweqw',data);
  return axios.post('/api/t-train-library/update', { ...data })
}