fei
2025-12-09 33845b056d3a9a580eaae1b5d1f7d89a340252ba
src/views/archiveManager/archiveMaterial/index.vue
@@ -15,8 +15,8 @@
    <el-col :span="16">
          <el-form-item label="责任者" prop="creator">
            <div class="title-search-wrapper">
              <el-input
                v-model="form.creator"
              <el-input
                v-model="form.creator"
                placeholder="请输入责任者"
                @input="handleCreatorInput"
                @focus="showCreatorSuggestions = true"
@@ -87,6 +87,7 @@
          <el-select
            v-model="form.fileStyle"
            placeholder="请选择材料类型"
            @change="handleFileStyleChange"
          >
            <el-option
              v-for="item in fileStyleOptions"
@@ -404,13 +405,13 @@
        <el-table-column label="是否涉密及敏感信息" align="center" prop="isSensitive" />
        <el-table-column label="是否注销" align="center" prop="isCanceled" />
        <el-table-column label="格式" align="center" prop="format" />
     <!--   <el-table-column label="格式" align="center" prop="format" />
        <el-table-column label="幅面" align="center" prop="sizeType" />
        <el-table-column label="水平分辨率" align="center" prop="horizontalResolution" />
        <el-table-column label="垂直分辨率" align="center" prop="verticalResolution" />
        <el-table-column label="宽度" align="center" prop="width" />
        <el-table-column label="高度" align="center" prop="height" />
        <el-table-column label="大小" align="center" prop="fileSize" />
        <el-table-column label="大小" align="center" prop="fileSize" /> -->
        <el-table-column label="附件及历史发文号" align="center" prop="attachmentHistoryNumbers" />
@@ -461,9 +462,9 @@
    <el-form-item label="材料类型" prop="fileStyle">
          <el-select
            v-model="forms.fileStyle"
            placeholder="请选择材料类型"
            clearable
            @change="handleFileStyleChange2"
          >
            <el-option
              v-for="item in fileStyleOptions"
@@ -473,7 +474,7 @@
            />
          </el-select>
        </el-form-item>
     <el-form-item label="页号" prop="pageNumber">
     <el-form-item label="页号" prop="pageNumber" v-if="forms.fileStyle !== '其他材料'">
        <el-col :span="8">
          <el-input
            v-model.number="forms.pageNumber"
@@ -616,9 +617,11 @@
      <el-form-item label="文件题名" prop="title">
        <el-input
          v-model="queryParams.title"
          placeholder="请输入文件题目"
          placeholder="请输入文件题名"
          clearable
          @keyup.enter.native="handleQuery"
          :validate-event="false"
          @blur="validateQueryTitle"
        />
      </el-form-item>
      <el-form-item label="日期" prop="date">
@@ -785,7 +788,7 @@
  </template>
  <script>
  import { islegal, listMaterials, enload, getMaterials, delMaterials, addMaterials, updateMaterials } from "@/api/system/materials"
  import {insertFile, getFileCount,islegal, listMaterials, enload, getMaterials, delMaterials, addMaterials, updateMaterials } from "@/api/system/materials"
import { getToken } from '@/utils/auth'
import store from '@/store'
import { updateStatusById } from "@/api/system/records"
@@ -795,6 +798,7 @@
    name: "Materials",
    data() {
      return {
        totalPageCount: 0,
        // 记录元素初始位置和状态
  originalOffsetLeft: 0,
        originalWidth: 0,
@@ -920,22 +924,48 @@
        // 表单校验
        rules: {
          creator: [
           // { required: true, message: "创建者不能为空", trigger: "blur" }
           // { required: true, message: "创建者不能为空", trigger: "blur" },
            { max: 85, message: "最大长度为85个字符", trigger: "blur" }
          ],
          title: [
            { required: true, message: "案卷题名不能为空", trigger: "blur" }
            { required: true, message: "案卷题名不能为空", trigger: "blur" },
             { pattern: /^[^\\/:*?"<>丨]+$/, message: "文件名不能包含 \\\:*?<>丨 等特殊字符", trigger: "blur" },
            { max: 85, message: "最大长度为85个字符", trigger: "blur" }
          ],
          date: [
          //  { required: true, message: "日期不能为空", trigger: "blur" },
            { pattern: /^\d{4}-\d{2}-\d{2}$/, message: "日期格式必须为yyyy-mm-dd", trigger: "blur" }
            { pattern: /^\d{4}-\d{2}-\d{2}$/, message: "日期格式必须为yyyy-mm-dd", trigger: "blur" },
            { max: 85, message: "最大长度为85个字符", trigger: "blur" }
          ],
          pageNumber: [
            { required: true, message: "页号不能为空", trigger: "blur" },
            { type: 'number', message: '页号必须为数字类型', trigger: ['blur', 'change'] },
            { pattern: /^\d+$/, message: '请输入正整数', trigger: 'blur' }
            { pattern: /^[1-9]\d*$/, message: '请输入大于0的正整数', trigger: 'blur' },
            // { max: 85, message: "最大长度为85个字符", trigger: "blur" }
          ],
          stage: [
            { required: true, message: "所处阶段不能为空", trigger: "change" }
            { required: true, message: "所处阶段不能为空", trigger: "change" },
            { max: 85, message: "最大长度为85个字符", trigger: "blur" }
          ],
          fileStyle: [
            { required: true, message: "材料类型不能为空", trigger: "change" },
            { max: 85, message: "最大长度为85个字符", trigger: "blur" }
          ],
          isAttachment: [
            { required: true, message: "是否为附件不能为空", trigger: "change" },
            { max: 85, message: "最大长度为85个字符", trigger: "blur" }
          ],
          retentionPeriod: [
            { required: true, message: "保管期限不能为空", trigger: "change" },
            { max: 85, message: "最大长度为85个字符", trigger: "blur" }
          ],
          isSensitive: [
            { required: true, message: "是否敏感不能为空", trigger: "change" },
            { max: 85, message: "最大长度为85个字符", trigger: "blur" }
          ],
          isCanceled: [
            { required: true, message: "是否注销不能为空", trigger: "change" },
            { max: 85, message: "最大长度为85个字符", trigger: "blur" }
          ]
        }
      }
@@ -963,6 +993,9 @@
    created() {
      //const roleId = this.$route.params && this.$route.params.roleId
      const recordId = this.$route.params && this.$route.params.recordId
      this.totalPageCount = this.$route.params && this.$route.params.pageCount
      //alert(this.totalPageCount)
      //alert(recordId)
      this.recordId = recordId;
      this.uploadUrl = process.env.VUE_APP_BASE_API +'/system/materials/upload/'+this.recordId
@@ -1007,6 +1040,11 @@
    },
       // 打开导入对话框
    handleImport() {
      //生成新的记录
      insertFile(this.recordId, this.totalPageCount).then(response => {
        console.log(response)
      //  alert(3245)
        })
      this.importDialogVisible = true
    },
    // 文件移除
@@ -1029,26 +1067,31 @@
        this.$modal.msgWarning('请先选择文件再上传')
        return
      }
      if(fileCount!==this.total)
      {
        this.$modal.msgWarning('请选择与记录数一致的文件')
        return
      }
     // alert(this.recordId)
      //判断页号与上传上传的文件的页号是不是一一对应的
     islegal(this.recordId).then(response => {
       console.log(response.data)
       var res = response.data
       if(res)
     // islegal(this.recordId).then(response => {
     //   console.log(response.data)
     //   var res = response.data.res
     //  console.log(res)
       //alert(response.data.total)
       if(fileCount!=this.totalPageCount)
       {
         this.$modal.msgWarning('请选择与记录数一致的文件')
         return
       }
       else
       {
         // 执行上传
           this.$refs.upload.submit()
           this.getList()
       }
       else
       {
         this.$modal.msgError("页号不连续,请修改为连续正确的页号!")
       }
     })
       // else
       // {
       //   this.$modal.msgError("页号不连续,请修改为连续正确的页号!")
       // }
     //})
    },
    clearFileList() {
@@ -1080,9 +1123,25 @@
      /** 查询【请填写功能名称】列表 */
      getList() {
        this.loading = true
        listMaterials(this.queryParams).then(response => {
        // 处理档案号搜索逻辑,包括范围搜索
        const queryParams = { ...this.queryParams }
        // 检查是否包含范围搜索符号
        if (queryParams.fileNumber && queryParams.fileNumber.includes('~')) {
          const rangeParts = queryParams.fileNumber.split('~')
          if (rangeParts.length === 2) {
            // 解析范围搜索参数
            // 保留原始fileNumber用于其他处理
            queryParams.fileNumberStart = rangeParts[0].trim()
            queryParams.fileNumberEnd = rangeParts[1].trim()
          }
        }
        listMaterials(queryParams).then(response => {
          console.log(response)
          this.materialsList = response.data.data
          // 过滤掉visible为0的记录
          this.materialsList = response.data.data.filter(item => item.visible !== 0)
          this.total = response.data.total
          this.loading = false
        })
@@ -1177,7 +1236,7 @@
        this.form.title = title;
        this.showTitleSuggestions = false;
      },
      // 处理责任人输入事件
      handleCreatorInput() {
        // 清除之前的定时器(防抖)
@@ -1231,6 +1290,21 @@
        this.showCreatorSuggestions = false;
      },
      // 处理材料类型变化(新增表单)
      handleFileStyleChange(value) {
        // 当选择'其他材料'时,将页号设置为0
        if (value === '其他材料') {
          this.form.pageNumber = null;
        }
      },
      // 处理材料类型变化(修改表单)
      handleFileStyleChange2(value) {
        // 当选择'其他材料'时,将页号设置为0
        if (value === '其他材料') {
          this.forms.pageNumber = null;
        }
      },
      // 表单重置
      reset() {
        this.form = {
@@ -1263,8 +1337,24 @@
        }
        this.resetForm("form")
      },
      // 验证查询表单中的文件题名
      validateQueryTitle() {
        const illegalCharsPattern = /[\\/:*?<>丨]/;
        if (this.queryParams.title && illegalCharsPattern.test(this.queryParams.title)) {
          this.$message.error("文件名不能包含 \\:/:*?<>丨 等特殊字符");
          this.queryParams.title = this.queryParams.title.replace(illegalCharsPattern, '');
        }
      },
      /** 搜索按钮操作 */
      handleQuery() {
        // 搜索前校验文件题名
        const illegalCharsPattern = /[\\/:*?<>丨]/;
        if (this.queryParams.title && illegalCharsPattern.test(this.queryParams.title)) {
          this.$message.error("文件名不能包含 \\:/:*?<>丨 等特殊字符");
          this.queryParams.title = this.queryParams.title.replace(illegalCharsPattern, '');
          return; // 阻止搜索,直到用户修正输入
        }
        this.queryParams.pageNum = 1
        this.getList()
      },
@@ -1291,6 +1381,10 @@
        const materialId = row.materialId || this.ids
        getMaterials(materialId).then(response => {
          this.forms = response.data
          // 如果材料类型是"其他材料",将页号设置为0
          if (this.forms.fileStyle === '其他材料') {
            this.forms.pageNumber = null;
          }
          this.open = true
          this.title = "修改案卷详细信息"
        })
@@ -1446,7 +1540,7 @@
  // }
  const formData = new FormData();
  formData.append('file', file);
 // formData.append('recordId', this.recordId)
  formData.append('recordId', this.recordId)
  // alert(this.recordId)
  console.log(file)
@@ -1508,8 +1602,13 @@
      const rect = fixedRow.getBoundingClientRect();
      const parentRect = fixedRow.parentNode.getBoundingClientRect();
      // 检查元素是否应该进入悬浮状态
      if (rect.top <= 0) {
      // 记录元素的原始位置(相对于文档顶部的位置)
      if (!this.originalTop) {
        this.originalTop = rect.top + window.pageYOffset;
      }
      // 检查元素是否应该进入悬浮状态(当滚动位置超过元素原始位置时)
      if (window.pageYOffset >= this.originalTop) {
        // 只在不在floating状态时添加,避免重复操作
        if (!fixedRow.classList.contains('floating')) {
          // 记录元素原始的左偏移量(相对于父容器)
@@ -1533,7 +1632,7 @@
          }
        }
      } else {
        // 当元素回到视口顶部以上时,移除悬浮状态,恢复到文档流中
        // 当滚动位置回到元素原始位置以上时,移除悬浮状态,恢复到文档流中
        if (fixedRow.classList.contains('floating')) {
          // 移除floating类
          fixedRow.classList.remove('floating');