gaoluyang
2025-03-14 dd05e06f8a116c6f14c3c78cfc3113d7787043fd
管理体系文件bug
已修改2个文件
372 ■■■■ 文件已修改
src/components/UpPdfStamp/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentControl/components/FileChangeRequest.vue 370 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/UpPdfStamp/index.vue
@@ -4,7 +4,7 @@
      v-if="isUpFile">
      <input type="file" @change="handleFileUpload" accept="application/pdf" ref="fileInput" />
    </div>
    <p style="color: red;font-size: 12px;margin: 16px 0;" v-if="canvasNumPages > 0">提示:在文件范围内,单击鼠标盖章,双击鼠标已盖好章处可删除当前章</p>
    <div style="color: red;font-size: 12px;margin: 16px 0;" v-if="canvasNumPages > 0">提示:在文件范围内,单击鼠标盖章,双击鼠标已盖好章处可删除当前章</div>
    <canvas ref="pdfCanvas" @click="e => handleCanvasClick(e, index)" style="border: 1px solid #000;"
      @dblclick="e => removeStamp(e, index)" v-for="(item, index) in canvasNumPages" :key="index"></canvas>
  </div>
src/views/CNAS/systemManagement/documentControl/components/FileChangeRequest.vue
@@ -1,6 +1,6 @@
<template>
  <!-- 文件变更申请 -->
  <div class="file-change-request" style="height: 100%;">
  <div class="file-change-request">
    <div class="search">
      <div class="search_thing">
        <div class="search_label">申请文件编号:</div>
@@ -22,198 +22,175 @@
        :height="'calc(100vh - 290px)'" @pagination="pagination"></lims-table>
    </div>
    <el-dialog :title="title" :visible.sync="addDialogVisible" top="0vh" width="950px">
      <el-row>
        <el-col :span="12" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>申请编号:</div>
            <div class="search_input"><el-input v-model="addInfo.code" :disabled="title == '审核'" clearable
                placeholder="请输入" size="small"></el-input></div>
          </div>
        </el-col>
        <el-col :span="12" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">审批人:</div>
            <div class="search_input">
              <el-select v-model="addInfo.checkUser" :disabled="title == '审核'" filterable size="small"
                style="width: 100%;">
                <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
      <div v-loading="diaLoading">
        <el-row>
          <el-col :span="12" style="margin-bottom: 16px;">
            <div class="search_thing">
              <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>申请编号:</div>
              <div class="search_input"><el-input v-model="addInfo.code" :disabled="title == '审核'" clearable
                                                  placeholder="请输入" size="small"></el-input></div>
            </div>
          </div>
        </el-col>
        <el-col :span="12" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">期望变更时间:</div>
            <div class="search_input">
              <el-date-picker v-model="addInfo.expectAlterDate" :disabled="title == '审核'" format="yyyy-MM-dd"
                placeholder="选择日期" size="small" style="width: 100%;" type="date" value-format="yyyy-MM-dd">
              </el-date-picker>
          </el-col>
          <el-col :span="12" style="margin-bottom: 16px;">
            <div class="search_thing">
              <div class="search_label">审批人:</div>
              <div class="search_input">
                <el-select v-model="addInfo.checkUser" :disabled="title == '审核'" filterable size="small"
                           style="width: 100%;">
                  <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
                  </el-option>
                </el-select>
              </div>
            </div>
          </div>
        </el-col>
        <el-col :span="12" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">实际变更时间:</div>
            <div class="search_input">
              <el-date-picker v-model="addInfo.actuallyAlterDate" :disabled="title == '审核'" format="yyyy-MM-dd"
                placeholder="选择日期" size="small" style="width: 100%;" type="date" value-format="yyyy-MM-dd">
              </el-date-picker>
          </el-col>
          <el-col :span="12" style="margin-bottom: 16px;">
            <div class="search_thing">
              <div class="search_label">期望变更时间:</div>
              <div class="search_input">
                <el-date-picker v-model="addInfo.expectAlterDate" :disabled="title == '审核'" format="yyyy-MM-dd"
                                placeholder="选择日期" size="small" style="width: 100%;" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </div>
            </div>
          </div>
        </el-col>
        <el-col :span="24" style="margin-bottom: 16px;">
          <div class="search_thing">
            <div class="search_label">选择文件:</div>
            <div class="search_input">
              <el-select v-model="addInfo.alterBeforeCode" :disabled="title == '审核'" allow-create clearable filterable
                size="small" style="width: 100%;" @change="getCurrentFile">
                <el-option v-for="item in fileList" :key="item.documentCode" :label="item.title"
                  :value="item.documentCode">
                </el-option>
              </el-select>
          </el-col>
          <el-col :span="12" style="margin-bottom: 16px;">
            <div class="search_thing">
              <div class="search_label">实际变更时间:</div>
              <div class="search_input">
                <el-date-picker v-model="addInfo.actuallyAlterDate" :disabled="title == '审核'" format="yyyy-MM-dd"
                                placeholder="选择日期" size="small" style="width: 100%;" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </div>
            </div>
          </div>
        </el-col>
        <el-col :span="24">
          <h4 class="title">当前文件信息</h4>
        </el-col>
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">文件编号:</div>
            <div class="search_input"><el-input v-model="currentFile.documentCode" :disabled="title == '审核'" clearable
                placeholder="请输入" size="small"></el-input></div>
          </div>
        </el-col>
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">文件名称:</div>
            <div class="search_input"><el-input v-model="currentFile.name" :disabled="title == '审核'" clearable
                placeholder="请输入" size="small"></el-input></div>
          </div>
        </el-col>
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">文件版本:</div>
            <div class="search_input"><el-input v-model="currentFile.version" :disabled="title == '审核'" clearable
                placeholder="请输入" size="small"></el-input></div>
          </div>
        </el-col>
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">提交人:</div>
            <div class="search_input"><el-select v-model="currentFile.createUser" disabled filterable size="small"
                style="width: 100%;">
          </el-col>
          <el-col :span="24" style="margin-bottom: 16px;">
            <div class="search_thing">
              <div class="search_label">选择文件:</div>
              <div class="search_input">
                <el-select v-model="addInfo.alterBeforeCode" :disabled="title == '审核'" allow-create clearable filterable
                           size="small" style="width: 100%;" @change="getCurrentFile">
                  <el-option v-for="item in fileList" :key="item.documentCode" :label="item.title"
                             :value="item.documentCode">
                  </el-option>
                </el-select>
              </div>
            </div>
          </el-col>
          <el-col :span="24">
            <h4 class="title">当前文件信息</h4>
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">文件编号:</div>
              <div class="search_input"><el-input v-model="currentFile.documentCode" :disabled="title == '审核'" clearable
                                                  placeholder="请输入" size="small"></el-input></div>
            </div>
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">文件名称:</div>
              <div class="search_input"><el-input v-model="currentFile.name" :disabled="title == '审核'" clearable
                                                  placeholder="请输入" size="small"></el-input></div>
            </div>
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">文件版本:</div>
              <div class="search_input"><el-input v-model="currentFile.version" :disabled="title == '审核'" clearable
                                                  placeholder="请输入" size="small"></el-input></div>
            </div>
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">提交人:</div>
              <div class="search_input"><el-select v-model="currentFile.createUser" disabled filterable size="small"
                                                   style="width: 100%;">
                <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
              </el-select></div>
          </div>
        </el-col>
        <!-- <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">审核人:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="addInfo.version" disabled></el-input></div>
          </div>
        </el-col>
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">作废人:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="addInfo.version" disabled></el-input></div>
          </div>
        </el-col> -->
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">提交时间:</div>
            <div class="search_input"><el-input v-model="currentFile.createTime" clearable disabled placeholder="请输入"
                size="small"></el-input></div>
          </div>
        </el-col>
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">审核时间:</div>
            <div class="search_input"><el-input v-model="currentFile.effectiveDate" clearable disabled placeholder="请输入"
                size="small"></el-input></div>
          </div>
        </el-col>
        <!-- <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">作废时间:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="addInfo.version" disabled></el-input></div>
          </div>
        </el-col> -->
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">文件状态:</div>
            <div class="search_input">
              <el-select v-model="currentFile.state" disabled size="small" style="width: 100%;">
                <el-option v-for="item in fileState" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </div>
          </div>
        </el-col>
        <!-- <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">文件说明:</div>
            <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="addInfo.instructions" type="textarea"
              :rows="2" disabled></el-input></div>
          </div>
        </el-col> -->
        <el-col :span="24">
          <h4 class="title">文件变更申请</h4>
        </el-col>
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">变更后编号:</div>
            <div class="search_input"><el-input v-model="addInfo.alterAfterCode" :disabled="title == '审核'" clearable
                placeholder="请输入" size="small"></el-input></div>
          </div>
        </el-col>
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">变更后名称:</div>
            <div class="search_input"><el-input v-model="addInfo.alterAfterName" :disabled="title == '审核'" clearable
                placeholder="请输入" size="small"></el-input></div>
          </div>
        </el-col>
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">前一版本处理:</div>
            <div class="search_input">
              <el-select v-model="addInfo.method" :disabled="title == '审核'" size="small" style="width: 100%;">
                <el-option label="作废" value="作废"></el-option>
                <el-option label="存档不可用" value="存档不可用">
                </el-option>
              </el-select>
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">提交时间:</div>
              <div class="search_input"><el-input v-model="currentFile.createTime" clearable disabled placeholder="请输入"
                                                  size="small"></el-input></div>
            </div>
          </div>
        </el-col>
        <el-col :span="8" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">变更后版本:</div>
            <div class="search_input"><el-input v-model="addInfo.alterAfterVersion" :disabled="title == '审核'" clearable
                placeholder="请输入" size="small"></el-input></div>
          </div>
        </el-col>
        <el-col :span="16" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">变更说明:</div>
            <div class="search_input"><el-input v-model="addInfo.alterNote" :disabled="title == '审核'" :rows="2"
                clearable placeholder="请输入" size="small" type="textarea"></el-input></div>
          </div>
        </el-col>
        <el-col v-if="title != '审核'" :span="24" style="margin-bottom: 16px;">
          <div class="search_thing" style="width: 100%;">
            <div class="search_label">相关附件:</div>
            <div class="search_input"><el-upload v-if="addDialogVisible" :auto-upload="false" :multiple="false"
                :on-change="handleChangeUpload" accept='.pdf' action="#" style="margin: 8px 0 0px 50px;">
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">审核时间:</div>
              <div class="search_input"><el-input v-model="currentFile.effectiveDate" clearable disabled placeholder="请输入"
                                                  size="small"></el-input></div>
            </div>
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">文件状态:</div>
              <div class="search_input">
                <el-select v-model="currentFile.state" disabled size="small" style="width: 100%;">
                  <el-option v-for="item in fileState" :key="item.value" :label="item.label" :value="item.value">
                  </el-option>
                </el-select>
              </div>
            </div>
          </el-col>
          <el-col :span="24">
            <h4 class="title">文件变更申请</h4>
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">变更后编号:</div>
              <div class="search_input"><el-input v-model="addInfo.alterAfterCode" :disabled="title == '审核'" clearable
                                                  placeholder="请输入" size="small"></el-input></div>
            </div>
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">变更后名称:</div>
              <div class="search_input"><el-input v-model="addInfo.alterAfterName" :disabled="title == '审核'" clearable
                                                  placeholder="请输入" size="small"></el-input></div>
            </div>
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">前一版本处理:</div>
              <div class="search_input">
                <el-select v-model="addInfo.method" :disabled="title == '审核'" size="small" style="width: 100%;">
                  <el-option label="作废" value="作废"></el-option>
                  <el-option label="存档不可用" value="存档不可用">
                  </el-option>
                </el-select>
              </div>
            </div>
          </el-col>
          <el-col :span="8" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">变更后版本:</div>
              <div class="search_input"><el-input v-model="addInfo.alterAfterVersion" :disabled="title == '审核'" clearable
                                                  placeholder="请输入" size="small"></el-input></div>
            </div>
          </el-col>
          <el-col :span="16" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">变更说明:</div>
              <div class="search_input"><el-input v-model="addInfo.alterNote" :disabled="title == '审核'" :rows="2"
                                                  clearable placeholder="请输入" size="small" type="textarea"></el-input></div>
            </div>
          </el-col>
          <el-col v-if="title != '审核'" :span="24" style="margin-bottom: 16px;">
            <div class="search_thing" style="width: 100%;">
              <div class="search_label">相关附件:</div>
              <div class="search_input"><el-upload v-if="addDialogVisible" :auto-upload="false" :multiple="false"
                                                   :on-change="handleChangeUpload" accept='.pdf' action="#" style="margin: 8px 0 0px 50px;">
                <el-button size="small" type="primary">上传附件</el-button>
              </el-upload></div>
          </div>
        </el-col>
        <UpPdfStamp v-if="title == '审核' && addDialogVisible" ref="UpPdfStamp" :isUpFile="false" @uploadPDF="uploadPDF">
        </UpPdfStamp>
      </el-row>
            </div>
          </el-col>
          <UpPdfStamp v-if="title == '审核' && addDialogVisible" ref="UpPdfStamp" :isUpFile="false" @uploadPDF="uploadPDF">
          </UpPdfStamp>
        </el-row>
      </div>
      <span v-if="title != '审核'" slot="footer" class="dialog-footer">
        <el-button @click="addDialogVisible = false">取 消</el-button>
        <el-button :loading="addLoading" type="primary" @click="handleAdd">确 定</el-button>
@@ -263,6 +240,7 @@
      noCheckLoading: false,
      checkLoading: false,
      addDialogVisible: false,
      diaLoading: false,
      addInfo: {},
      addPower: false,
      outPower: false,
@@ -550,35 +528,39 @@
      let alterBeforeCode = this.addInfo.alterBeforeCode
      this.getCurrentFile(alterBeforeCode)
      this.addDialogVisible = true
      this.diaLoading = true
      checkManageDocumentAlterPdf({ id: row.id }).then(res => {
        //
        this.diaLoading = false
        const blob = new Blob([res]);
        const file = new File([blob], row.name, { type: 'application/pdf' })
        this.$refs.UpPdfStamp.lookFile(file)
        this.currentInfo = row
      }).catch(err => {
        this.diaLoading = false
        console.log(err)
      })
    },
    // 审核保存
    async uploadPDF(pdfBlob) {
    uploadPDF(pdfBlob) {
      const file = new File([pdfBlob], this.fileName, { type: 'application/pdf' })
      console.log('file---', file)
      const formData = new FormData();
      formData.append('file', pdfBlob, this.fileName + '.pdf'); // 文件字段
      formData.append('file', file, this.fileName + '.pdf'); // 文件字段
      formData.append('id', this.currentInfo.id); // 文件名字段
      formData.append('state', this.type); // 文件名字段
      let res = await checkManageDocumentAlter(formData)
      this.checkLoading = false
      this.noCheckLoading = false
      if (res.code == 200) {
      checkManageDocumentAlter(formData).then(res => {
        this.$message({ message: '操作成功', type: 'success' });
        this.addDialogVisible = false;
        this.checkLoading = false
        this.noCheckLoading = false
        this.refreshTable()
        return true
      } else {
        this.$message({ message: '操作失败', type: 'error' });
      }).catch(err => {
        this.checkLoading = false
        this.noCheckLoading = false
        return false
      }
      })
    },
    // 提交审核
    handleCheckSub(type) {
@@ -610,6 +592,10 @@
</script>
<style scoped>
>>> .el-dialog__body {
  max-height: 75vh;
  overflow-y: auto;
}
.title {
  height: 60px;
  line-height: 60px;