fei
2025-12-26 d4034a42b997716517eae3a845925de04bfbbe66
src/views/archiveManager/index.vue
@@ -17,6 +17,64 @@
          @keyup.enter.native="handleQuery"
        />
      </el-form-item>
      <el-form-item label="类别号" prop="categoryNumber">
        <el-row :gutter="8">
          <el-col :span="6">
            <el-select
              v-model="queryParams.categoryType"
              placeholder="选择类别类型"
              clearable
              @change="handleQuery"
            >
              <el-option
                v-for="item in recordTypeOptions"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
            </el-select>
          </el-col>
          <el-col :span="6">
            <el-select
              v-model="queryParams.categoryZone"
              placeholder="选择地区"
              clearable
              @change="handleQuery"
            >
              <el-option
                v-for="item in zoneTypeOptions"
                :key="item.value"
                :label="item.label"
                :value="item.value"
              />
            </el-select>
          </el-col>
          <el-col :span="4">
            <el-input
              v-model="queryParams.categoryYear"
              placeholder="年份"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-col>
          <el-col :span="4">
            <el-input
              v-model="queryParams.categorySeq"
              placeholder="开始序号"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-col>
          <el-col :span="4">
            <el-input
              v-model="queryParams.categorySeqEnd"
              placeholder="结束序号"
              clearable
              @keyup.enter.native="handleQuery"
            />
          </el-col>
        </el-row>
      </el-form-item>
      <el-form-item label="案卷题名" prop="caseTitle">
        <el-input
          v-model="queryParams.caseTitle"
@@ -150,12 +208,19 @@
        />
      </el-form-item>
      <el-form-item label="扫描加工公司" prop="scanningCompany">
        <el-input
        <el-select
          v-model="queryParams.scanningCompany"
          placeholder="请输入扫描加工公司"
          placeholder="请选择扫描加工公司"
          clearable
          @keyup.enter.native="handleQuery"
        />
          @change="handleQuery"
        >
          <el-option
            v-for="item in projectCompanyOptions"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          />
        </el-select>
      </el-form-item>
      <el-form-item label="档案管(室)号" prop="archiveRoomNumber">
        <el-input
@@ -300,8 +365,46 @@
                  icon="el-icon-edit"
                  @click="handleInfo(scope.row)"
                  v-hasPermi="['system:records:edit']"
                >案卷详细信息</el-button>
                >编辑卷内目录</el-button>
          <el-button
                v-if="userId===1"
                  size="mini"
                  type="text"
                  icon="el-icon-edit"
                  @click="CheckInfo(scope.row)"
                  v-hasPermi="['system:records:edit']"
                >查看卷内目录</el-button>
                <el-button
                      v-if="userId===1"
                        size="mini"
                        type="text"
                        icon="el-icon-edit"
                        @click="backInfo(scope.row)"
                        v-hasPermi="['system:records:edit']"
                      >导出备考表</el-button>
                <el-button
                      v-if="userId===1"
                        size="mini"
                        type="text"
                        icon="el-icon-edit"
                        @click="JuanInfo(scope.row)"
                        v-hasPermi="['system:records:edit']"
                      >导出卷内目录</el-button>
                      <el-button
                            v-if="userId===1"
                              size="mini"
                              type="text"
                              icon="el-icon-edit"
                              @click="pageInfo(scope.row)"
                              v-hasPermi="['system:records:edit']"
                            >导出案卷封面</el-button>
                <el-button
                  size="mini"
                  type="text"
@@ -324,6 +427,7 @@
                  @click="handleSubmit(scope.row)"
                  v-hasPermi="['system:records:edit']"
                >提交案卷</el-button>
                <el-button
                v-if="scope.row.ownData||userId===1"
@@ -411,7 +515,7 @@
            <div class="option-group">
              <label class="option-label">
                <input type="checkbox" v-model="excelOptions.includeQrCode">
                <span>包含二维码</span>
                <span>包含条形码</span>
              </label>
            </div>
@@ -446,9 +550,8 @@
          </div>
        </div>
    <!-- 优化的Excel预览组件 -->
     <el-dialog class="excel-preview-wrapper" :visible.sync="showExcelPreview" :modal="false" width="80%">
    <div  >
     <el-dialog class="excel-preview-wrapper" :visible.sync="showExcelPreview" :modal="false" width="80%" :show-close="true" @click="closeExcelPreviewDialog">
    <div  @click.stop>
      <!-- 主要预览组件 -->
      <vue-office-excel
        v-if="currentExcelUrl"
@@ -767,7 +870,14 @@
          <el-input v-model="form.projectNumber" placeholder="请输入项目编号" />
        </el-form-item>
        <el-form-item label="扫描加工公司" prop="scanningCompany">
          <el-input v-model="form.scanningCompany" placeholder="请输入扫描加工公司" />
          <el-select v-model="form.scanningCompany" placeholder="请选择扫描加工公司">
            <el-option
              v-for="item in projectCompanyOptions"
              :key="item.value"
              :label="item.label"
              :value="item.value"
            />
          </el-select>
        </el-form-item>
        <el-form-item label="档案管(室)号" prop="archiveRoomNumber">
          <el-input v-model="form.archiveRoomNumber" placeholder="请输入档案管(室)号" />
@@ -801,6 +911,7 @@
import { listAllCategory } from "@/api/system/category"
import { listAllProjectName } from "@/api/system/projectName"
import { listPlaceName, listAllPlaceName } from "@/api/system/placeName"
import { judge } from "@/api/system/materials"
export default {
     components: {
        VueOfficeExcel
@@ -808,6 +919,7 @@
  name: "Records",
  data() {
    return {
      showExcelPreview: false,
                  excel: 'http://localhost:8080/profile/upload/12.xls', //设置文档网络地址,可以是相对地址
      open_check: false,
@@ -818,6 +930,8 @@
      maxId: 0,
      // 项目名称选项
      projectOptions: [],
      // 项目管理公司选项
      projectCompanyOptions: [],
      // 档案类型选项
      recordTypeOptions: [],
      //地区类型
@@ -861,6 +975,11 @@
        pageSize: 10,
        recordId: null,
        inquiryNumber: null,
        categoryType: null, // 类别类型
        categoryZone: null, // 类别地区
        categoryYear: null, // 类别年份
        categorySeq: null, // 开始序号
        categorySeqEnd: null, // 结束序号
        everyProjectName: null,
        caseTitle: null,
        publicAttribute: null,
@@ -925,6 +1044,9 @@
        ],
        projectName: [
          { required: true, message: "建设项目名称不能为空", trigger: "blur" }
        ],
        pageCount: [
          { required: true, message: "案卷页数不能为空", trigger: "blur" }
        ]
      }
    }
@@ -939,6 +1061,7 @@
    this.getRecordTypes()
    this.getZoneOptions()
    this.fetchProjectOptions()
    this.fetchProjectCompanyOptions()
this.getList()
  },
  watch: {
@@ -1053,6 +1176,23 @@
        console.error('获取项目名称列表失败:', error)
      }
    },
    async fetchProjectCompanyOptions() {
      try {
        const response = await listAllProjectName()
        console.log("项目管理公司数据:", response)
        // 从项目数据中提取管理公司信息
        const companies = [...new Set(response.data.data.map(item => item.companyName).filter(Boolean))]
               console.log("项目管理公司数据:", companies)
        this.projectCompanyOptions = companies.map(company => ({
          value: company,
          label: company
        }))
      } catch (error) {
        console.error('获取项目管理公司列表失败:', error)
      }
    },
       /** 获取档案类型列表 */
       getRecordTypes() {
        return new Promise((resolve) => {
@@ -1090,7 +1230,41 @@
      this.loading = true
      console.log(this.queryParams)
      console.log("--------------")
      listRecords(this.queryParams).then(response => {
      // 创建queryParams的副本,避免直接修改原对象
      const queryParams = { ...this.queryParams }
      // 处理类别号搜索
      if ((queryParams.categoryType || queryParams.categoryZone || queryParams.categoryYear) && (queryParams.categorySeq || queryParams.categorySeqEnd)) {
        // 构建基础部分(前三个字段保持一致)
        const baseParts = []
        if (queryParams.categoryType) baseParts.push(queryParams.categoryType)
        if (queryParams.categoryZone) baseParts.push(queryParams.categoryZone)
        if (queryParams.categoryYear) baseParts.push(queryParams.categoryYear)
        const baseCategory = baseParts.join('-')
        // 构建开始类别号
        if (queryParams.categorySeq) {
          queryParams.categoryNumberStart = baseCategory + '-' + queryParams.categorySeq
        }
        // 构建结束类别号
        if (queryParams.categorySeqEnd) {
          queryParams.categoryNumberEnd = baseCategory + '-' + queryParams.categorySeqEnd
        } else if (queryParams.categorySeq) {
          // 如果没有结束序号,则结束类别号与开始类别号相同
          queryParams.categoryNumberEnd = queryParams.categoryNumberStart
        }
        console.log(queryParams)
        console.log("9999999999999999999")
        // 删除单独的字段,避免重复搜索
        delete queryParams.categoryType
        delete queryParams.categoryZone
        delete queryParams.categoryYear
        delete queryParams.categorySeq
        delete queryParams.categorySeqEnd
      }
      listRecords(queryParams).then(response => {
        console.log(response)
        this.recordsList = response.data.data
@@ -1139,6 +1313,12 @@
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm")
      // 确保类别号相关字段被完全重置
      this.queryParams.categoryType = null
      this.queryParams.categoryZone = null
      this.queryParams.categoryYear = null
      this.queryParams.categorySeq = null
      this.queryParams.categorySeqEnd = null
      this.handleQuery()
    },
    // 多选框选中数据
@@ -1155,26 +1335,97 @@
      this.vis = false;
      this.title = "添加档案记录"
    },
    /*查看详情*/
    CheckInfo(row)
    {
      var mid = row.id
      const roleId = 2
   //   alert(mid)
      var recordId = mid
      var pageCount = row.pageCount
      var sho = false
    //  this.$router.push("/archiveManager/infoManagerAu/user/" + roleId+"/"+recordId)
      this.$router.push("/archiveManager/infoManagerAu/archiveMaterialManager/" + recordId+"/"+pageCount+"/"+sho)
    },
    /*导出备考表*/
    backInfo(row)
     {
       var id = row.id
             id = Number(id)
       var recordId = row.recordId
   this.download('/system/materials/exportBack/'+id+'/'+recordId, {
   }, `备考表_${new Date().getTime()}.pdf`)
     },
     /*导出卷内目录*/
     JuanInfo(row)
     {
       var id = row.id
                 id = Number(id)
           var recordId = row.recordId
       this.download('/system/materials/exportJuan/'+id, {
       }, `卷内目录_${new Date().getTime()}.xls`)
     },
     /*导出案卷封面*/
     pageInfo(row)
     {
       var id = row.id
                 id = Number(id)
           var recordId = row.recordId
       this.download('/system/materials/exportPageInfo/'+id+'/'+recordId, {
       }, `案卷封面_${new Date().getTime()}.xls`)
     },
    handleInfo(row)
    {
      var mid = row.id
      const roleId = 2
   //   alert(mid)
      var recordId = mid
      var pageCount = row.pageCount
      var sho = true
    //  this.$router.push("/archiveManager/infoManagerAu/user/" + roleId+"/"+recordId)
      this.$router.push("/archiveManager/infoManagerAu/archiveMaterialManager/" + recordId)
      this.$router.push("/archiveManager/infoManagerAu/archiveMaterialManager/" + recordId+"/"+pageCount+"/"+sho)
    },
    //
    handleSubmit(row)
    {
   //   alert(row.id)
     //alert(row.id)
      var id = row.id
      updateStatusById(id).then(response=>{
        this.$modal.msgSuccess("提交成功")
        this.getList()
      // 在提交之前,调用后端接口检查是否已经上传附件
      judge(id).then(response => {
        // console.log(response)
        // alert(response.data)
        if (response.data===undefined||response.data === false) {
          // 如果文件数量为0,提示用户先上传附件
          this.$modal.msgWarning('请先上传附件,再进行提交操作')
        } else {
          // 如果已经上传了附件,继续提交操作
          var status = '录入完成'
          updateStatusById(status, id).then(response=>{
            this.$modal.msgSuccess("提交成功")
            this.getList()
          })
        }
      }).catch(error => {
        console.error('检查附件数量失败:', error)
        this.$modal.msgError('检查附件数量失败,请稍后重试')
      })
    },
    /** 修改按钮操作 */
@@ -1314,8 +1565,7 @@
    /** 分配用户操作 */
    handleAuthUser: function(row) {
      const roleId = 2
      var archiveRecordsId = row.recordId
      var archiveRecordsId = row.id
      this.$router.push("/archiveManager/infoManagerAu/user/" + roleId+"/"+archiveRecordsId)
    },
    /** 删除按钮操作 */
@@ -1337,12 +1587,12 @@
        // 只导出选中的记录
        this.download('system/records/export', {
          ids: this.ids.join(',') // 将选中的ID数组转换为逗号分隔的字符串
        }, `records_${new Date().getTime()}.xlsx`)
        }, `records_${new Date().getTime()}.xls`)
      } else {
        // 没有选中记录时,导出符合查询条件的所有记录
        this.download('system/records/export', {
          ...this.queryParams
        }, `records_${new Date().getTime()}.xlsx`)
        }, `records_${new Date().getTime()}.xls`)
      }
    },
@@ -1379,6 +1629,7 @@
    /** 关闭Excel弹窗并清理资源 */
    closeExcelDialog() {
      this.excelDialogVisible = false;
    //  alert(this.excelDialogVisible)
      if (this.excelPreviewTimeout) {
        clearTimeout(this.excelPreviewTimeout);
        this.excelPreviewTimeout = null;
@@ -1389,14 +1640,18 @@
      }
      this.currentExcelBlob = null;
    },
closeExcelPreviewDialog()
{
  this.showExcelPreview = false;
},
    /** 处理预览按钮点击 */
    handlePreviewClick() {
      this.showExcelPreview = true;
      this.excelRenderError = '';
      var id = this.recordId ;
      this.$modal.loading('正在获取Excel文件,请稍候...');
      alert(id)
      // 从后端获取Excel文件
      this.getExcelFile(id).then(blob => {
        this.$modal.closeLoading();
@@ -1580,10 +1835,10 @@
        // 构建文件名,包含选项信息
        let filename = `record_${this.currentExcelId}`;
        if (includeQrCode) filename += '_qr';
        if (selectedAnnotations.length > 0) {
          filename += `_anno${selectedAnnotations.join('')}`;
        }
        filename += `_${new Date().getTime()}.xlsx`;
        // if (selectedAnnotations.length > 0) {
        //   filename += `_anno${selectedAnnotations.join('')}`;
        // }
        filename += `_${new Date().getTime()}.xls`;
        link.download = filename;
@@ -1618,7 +1873,7 @@
      });
    },
    /** 清理Excel预览相关资源 */
    /** 清理Excel预览相关资源并关闭对话框 */
    cleanupExcelPreview(iframe, url) {
      setTimeout(() => {
        if (iframe && iframe.parentNode) {
@@ -1628,6 +1883,7 @@
          URL.revokeObjectURL(url);
        }
        this.excelRenderError = '';
        this.showExcelPreview = false; // 关闭预览对话框
      }, 1000);
    },
@@ -1862,7 +2118,7 @@
        // 直接下载
        const link = document.createElement('a');
        link.href = url;
        link.download = `${prefix}_${new Date().getTime()}.xlsx`;
        link.download = `${prefix}_${new Date().getTime()}.xls`;
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
@@ -1881,7 +2137,7 @@
            const url = URL.createObjectURL(blob);
            const link = document.createElement('a');
            link.href = url;
            link.download = `record_${id}_${new Date().getTime()}.xlsx`;
            link.download = `record_${id}_${new Date().getTime()}.xls`;
            document.body.appendChild(link);
            link.click();
            document.body.removeChild(link);
@@ -1900,13 +2156,13 @@
    {
      this.download('/system/records/model', {
      }, `records_${new Date().getTime()}.xlsx`)
      }, `records_${new Date().getTime()}.xls`)
    },
    handleExportTemplateOther()
    {
          this.download('/system/records/modelOther', {
      }, `records_${new Date().getTime()}.xlsx`)
      }, `records_${new Date().getTime()}.xls`)
    },
  /** 导入操作*/
    async handleImportData({file}){