zxl
5 天以前 29ea0fd5d04dbaac800f211e0ac7701de0a7f3f4
src/views/system/report/index.vue
@@ -15,14 +15,44 @@
          <el-option v-for="dict in dict.type.report_error_type" :value="dict.value" :key="dict.value" :label="dict.label" />
        </el-select>
      </el-form-item>
      <el-form-item label="审核状态">
        <el-select v-model="queryParams.status" @change="handleQuery" placeholder="审核状态" clearable>
      <el-form-item label="报备时间" prop="timeRange" >
        <el-date-picker
          v-model="reportTimeRange"
          type="daterange"
          range-separator="至"
          value-format="yyyy-MM-dd"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          @change="handleQuery"
          clearable
        >
        </el-date-picker>
      </el-form-item>
      <el-form-item label="有效时间" prop="timeRange" >
        <el-date-picker
          v-model="effectiveTimeRange"
          type="daterange"
          range-separator="至"
          value-format="yyyy-MM-dd"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          @change="handleQuery"
          clearable
        >
        </el-date-picker>
      </el-form-item>
      <el-form-item label="">
        <el-select v-model="queryParams.status" @change="handleQuery" placeholder="" clearable>
          <el-option label="全部" value="" />
          <el-option label="审核中" :value="0" />
          <el-option label="审核未通过" :value="2" />
          <el-option label="审核通过" :value="1" />
        </el-select>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" size="small" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="small" @click="resetQuery">重置</el-button>
@@ -60,8 +90,17 @@
            <div class="info-item">
              <div class="info-label">报备材料</div>
              <div class="info-list">
                <div style="margin-bottom: 8px" v-for="file in formatFileList(scope.row.reportMaterials)" :key="file">
                  <el-link type="primary" @click="handleDownload(file)">
                <div style="margin-bottom: 8px" v-for="file in scope.row.reportMaterials!=null ? scope.row.reportMaterials.split(',') : scope.row.reportMaterials" :key="file">
                  <el-image
                    v-if="isImageFile(file)"
                    :src="getPreview(file)"
                    :preview-src-list="[getPreview(file)]"
                    fit="cover"
                    class="material-preview"
                    style="width: 100px; height: 100px; margin: 5px;"
                  >
                  </el-image>
                  <el-link v-else type="primary" @click="handleDownload(file)">
                    {{file.match(/\/([^\/]*)$/)[1]}}
                  </el-link>
                </div>
@@ -181,11 +220,22 @@
                    <div class="content" v-html="getHtmlContent(record.reportContent)"></div>
                  </el-descriptions-item>
                  <el-descriptions-item label="报备材料">
                    <el-link
                    <div
                      v-for="item in record.reportMaterials != null ? record.reportMaterials.split(',') : record.reportMaterials"
                      :underline="false" type="primary" :key="item" @click="handleDownload(item)">
                      {{ item.substring(item.lastIndexOf("/") + 1) }}
                    </el-link>
                      :key="item">
                      <el-image
                        v-if="isImageFile(item)"
                        :src="getPreview(item)"
                        :preview-src-list="[getPreview(item)]"
                        fit="cover"
                        style="width: 100px; height: 100px; margin: 5px;">
                      </el-image>
                      <el-link
                        v-else
                        :underline="false" type="primary" @click="handleDownload(item)">
                        {{ item.substring(item.lastIndexOf("/") + 1) }}
                      </el-link>
                    </div>
                  </el-descriptions-item>
                </el-descriptions>
              </el-card>
@@ -252,10 +302,24 @@
              <span v-html="auditingForm.reportContent"></span>
            </el-form-item>
            <el-form-item label="报备材料">
              <el-link
                <!-- 添加空行 -->
                <div class="material-spacer">{{''}}</div>
              <div
                v-for="item in auditingForm.reportMaterials != null ? auditingForm.reportMaterials.split(',') : auditingForm.reportMaterials"
                :underline="false" type="primary" :key="item" @click="handleDownload(item)">{{ item.substring(item.lastIndexOf("/") + 1)
                }}</el-link>
                :key="item">
                <el-image
                  v-if="isImageFile(item)"
                  :src="getPreview(item)"
                  :preview-src-list="[getPreview(item)]"
                  fit="cover"
                  style="width: 100px; height: 100px; margin: 5px;">
                </el-image>
                <el-link
                  v-else
                  :underline="false" type="primary" @click="handleDownload(item)">
                  {{ item.substring(item.lastIndexOf("/") + 1) }}
                </el-link>
              </div>
            </el-form-item>
          </el-form>
        </div>
@@ -266,7 +330,6 @@
        <el-button type="primary" @click="auditingSubmit">审 核</el-button>
      </div>
    </el-dialog>
  </div>
</template>
@@ -286,7 +349,7 @@
      fileList: [],
      url: process.env.VUE_APP_BASE_API + '/report/import',
      addOrImport: 'add',
      fileType: ["doc", "xls", "xlsx", "ppt", "txt", "pdf", "png", "jpg"],
      fileType: ["doc", "xls", "xlsx", "ppt", "txt", "pdf", "png", "jpg","docx"],
      auditingRecordList: [],
      // 点位list
      pointList: [],
@@ -328,6 +391,8 @@
        auditingResult: false,
        daterangeCreateTime: []
      },
      reportTimeRange:null,//报备时间
      effectiveTimeRange:null,//有效时间
      // 查询参数
      queryParams: {
        pageNum: 1,
@@ -336,7 +401,11 @@
        errorType: null,
        status: '',
        reportType: null,
        errorTypeList: []
        errorTypeList: [],
        reportTimeStart:null,
        reportTimeEnd:null,
        effectTimeStart:null,
        effectTimeEnd:null,
      },
      // 表单参数
      form: {},
@@ -373,6 +442,16 @@
    this.getList();
  },
  methods: {
    getPreview(url) {
      // 使用全局配置的图片前缀
      return this.$img + url;
    },
    isImageFile(url) {
      const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp'];
      return imageExtensions.some(ext =>
        url.toLowerCase().endsWith(ext)
      );
    },
    getHtmlContent(content) {
      if (content) {
        return content
@@ -481,6 +560,22 @@
    },
    /** 搜索按钮操作 */
    handleQuery() {
      if (this.reportTimeRange && this.reportTimeRange.length > 0) {
        this.queryParams.reportTimeStart = this.reportTimeRange[0]
        this.queryParams.reportTimeEnd = this.reportTimeRange[1]
      }else {
        this.queryParams.reportTimeStart = null
        this.queryParams.reportTimeEnd = null
      }
      if (this.effectiveTimeRange && this.effectiveTimeRange.length >0){
        this.queryParams.effectTimeStart = this.effectiveTimeRange[0]
        this.queryParams.effectTimeEnd = this.effectiveTimeRange[1]
      }else {
        this.queryParams.effectTimeStart = null
        this.queryParams.effectTimeEnd = null
      }
      this.queryParams.pageNum = 1;
      this.getList();
    },
@@ -631,6 +726,9 @@
</script>
<style lang="scss" scoped>
.material-spacer {
  height: 50px; /* 可以调整空行的高度 */
}
.content {
  height: 100px;
  max-height: 300px;