Crunchy
2025-04-29 e5454b769d44a34af423bf87ac8a740bf8c20341
src/views/CNAS/systemManagement/documentControl/components/FileChangeRequest.vue
@@ -1,19 +1,21 @@
<template>
  <!-- 文件变更申请 -->
  <div class="file-change-request" style="height: 100%;">
    <div class="search">
      <div class="search_thing">
        <div class="search_label">申请文件编号:</div>
        <div class="search_input"><el-input v-model="queryParams.code" clearable placeholder="请输入" size="small"
            @keyup.enter.native="refreshTable()"></el-input></div>
  <div>
    <div style="display: flex;justify-content: space-between">
      <div style="display: flex;">
        <div style="margin-bottom: 18px;margin-right: 10px;display: flex;align-items: center;line-height: 32px;">
          <span style="width: 128px;font-size: 14px;font-weight: 700;color: #606266;">申请文件编号</span>
          <el-input v-model="queryParams.code" clearable placeholder="请输入" size="small"
                    @keyup.enter.native="refreshTable()"></el-input>
        </div>
        <div style="line-height: 30px;">
          <el-button type="primary" size="mini" @click="refreshTable">查询</el-button>
          <el-button size="mini" @click="refresh">重置</el-button>
        </div>
      </div>
      <div class="search_thing" style="padding-left: 30px;">
        <el-button size="small" @click="refresh()">重 置</el-button>
        <el-button size="small" type="primary" @click="refreshTable()">查 询</el-button>
      </div>
      <div class="btns">
        <el-button size="small" type="primary"
          @click="addDialogVisible = true, addInfo = {}, currentFile = {}, title = '文件变更申请'">文件变更申请</el-button>
      <div style="line-height: 30px;">
        <el-button size="small" type="primary" icon="el-icon-plus"
                   @click="addDialogVisible = true, addInfo = {}, currentFile = {}, title = '文件变更申请', file = null">文件变更申请</el-button>
        <el-button :loading="outLoading" size="small" type="primary" @click="handleOut">导出</el-button>
      </div>
    </div>
@@ -22,198 +24,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 +242,7 @@
      noCheckLoading: false,
      checkLoading: false,
      addDialogVisible: false,
      diaLoading: false,
      addInfo: {},
      addPower: false,
      outPower: false,
@@ -369,35 +349,6 @@
    this.selectEnumByCategory()
  },
  methods: {
    getPower() {
      let power = JSON.parse(sessionStorage.getItem('power'))
      let up = false
      let del = false
      let add = false
      let out = false
      for (var i = 0; i < power.length; i++) {
        if (power[i].menuMethod == 'addManageDocumentAlter') {
          up = true
        }
        if (power[i].menuMethod == 'addManageDocumentAlter') {
          add = true
        }
        if (power[i].menuMethod == 'delManageDocumentAlter') {
          del = true
        }
        if (power[i].menuMethod == 'exportManageDocumentAlter') {
          out = true
        }
      }
      if (!del) {
        this.componentData.do.splice(1, 1)
      }
      if (!up) {
        this.componentData.do.splice(0, 1)
      }
      this.addPower = add
      this.outPower = out
    },
    getList() {
      this.tableLoading = true;
      let param = { ...this.queryParams, ...this.page };
@@ -557,6 +508,7 @@
      this.addInfo = this.HaveJson(row)
      let alterBeforeCode = this.addInfo.alterBeforeCode
      this.getCurrentFile(alterBeforeCode)
      this.file = null
      this.addDialogVisible = true
    },
    // 预览
@@ -567,8 +519,7 @@
    // 下载附件
    handleDown(row) {
      if (!row.alterAfterUrl) return this.$message.warning('文件未上传')
      let url = this.javaApi + '/word/' + row.alterAfterUrl
      this.$download.saveAs(url, row.alterAfterUrl)
      this.$download.saveAs(row.alterAfterUrl, row.alterAfterUrl)
    },
    // 打开审核弹框
    handleCheck(row) {
@@ -579,35 +530,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) {
@@ -628,7 +583,6 @@
      })
        .then(() => {
          delManageDocumentAlter({ id: row.id }).then((res) => {
            if (res.code == 201) return;
            this.$message.success("删除成功");
            this.refresh();
          });
@@ -643,14 +597,6 @@
.title {
  height: 60px;
  line-height: 60px;
}
.search {
  background-color: #fff;
  height: 40px;
  display: flex;
  align-items: center;
  position: relative;
}
.search_thing {
@@ -669,16 +615,10 @@
  width: calc(100% - 110px);
}
.table {
  background-color: #fff;
  height: calc(100% - 60px - 80px);
  padding: 20px;
}
.btns {
  position: absolute;
  right: 20px;
  top: 5px;
.search {
  height: 46px;
  display: flex;
  justify-content: space-between;
}
h4.title {