pyt
2025-03-20 f75de810f3d85e4408f4d5be871daf1c3d1d9325
Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/chongzhouResettle
1个文件已删除
8个文件已修改
1个文件已添加
751 ■■■■■ 已修改文件
src/api/application-batch.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/compensation-standard.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/placement-details.js 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/index.js 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/request.js 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/applicationBatchList/components/UploadDialog.vue 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/applicationBatchList/detail.vue 439 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/applicationBatchList/list.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/applicationBatchList/service.js 补丁 | 查看 | 原始文档 | blame | 历史
src/views/placement-batch/index.vue 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/application-batch.js
@@ -10,12 +10,15 @@
}
//安置新增审批批次
export function importBatch(data) {
  console.log('data',data)
  return request({
    url: '/placement-apply/imports',
    method: 'post',
    data
  })
}
//安置详情列表
export function geDetailTabletList(data) {
  return request({
src/api/compensation-standard.js
@@ -8,12 +8,11 @@
  })
}
// 补偿标准修改(批量修改)
export function edit(data) {
// 下载安置批次模版
export function downloadTemplate(type) {
  return request({
    url: '/compensate/edit',
    url: `/api/placement-batch/download-template/${type}`,
    method: 'post',
    data
  })
}
src/api/placement-details.js
New file
@@ -0,0 +1,20 @@
import request from '@/utils/request'
// 安置批次列表
export function getPlacementBatchList(data) {
  return request({
    url: '/placement-batch/page',
    method: 'post',
    data
  })
}
// 补偿标准修改(批量修改)
export function edit(data) {
  return request({
    url: '/compensate/edit',
    method: 'post',
    data
  })
}
src/utils/index.js
@@ -1,4 +1,5 @@
import { parseTime } from './ruoyi'
import { getToken } from '@/utils/auth'
/**
 * 表格时间格式化
@@ -388,3 +389,59 @@
  return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str)
}
export const exportExcell = (name, params, url) => {
  fetch(BASE_URL + url, {
    method: 'POST',
    body: JSON.stringify({
      ...params,
    }),
    headers: {
      Authorization:'Bearer ' +  localStorage.getItem('token'),
      'ConTent-Type': 'application/json;charset=UTF-8',
      timestamp: new Date().getTime(),
      client: localStorage.getItem('client')
    },
    responseType: 'blob',
  })
    .then((res) => res.blob())
    .then((res) => {
      const link = document.createElement('a');
      link.style.display = 'none';
      link.href = URL.createObjectURL(res);
      link.download = name;
      document.body.appendChild(link);
      link.click();
      // 释放的 URL 对象以及移除 a 标签
      URL.revokeObjectURL(link.href);
      document.body.removeChild(link);
    });
};
//下载导入末班
export const downLoad = (url, name) => {
  fetch(process.env.VUE_APP_BASE_API + url, {
    method: 'post',
    responseType: 'blob',
    headers: {
      Authorization:'Bearer ' + getToken(),
      'ConTent-Type': 'application/json;charset=UTF-8',
      timestamp: new Date().getTime(),
      client: localStorage.getItem('client')
    },
  })
    .then((res) => res.blob())
    .then((res) => {
      const link = document.createElement('a');
      link.style.display = 'none';
      link.href = URL.createObjectURL(res);
      link.download = name;
      document.body.appendChild(link);
      link.click();
      // 释放的 URL 对象以及移除 a 标签
      URL.revokeObjectURL(link.href);
      document.body.removeChild(link);
    });
};
src/utils/request.js
@@ -29,6 +29,13 @@
  if (getToken() && !isToken) {
    config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
  }
  // 处理 FormData 数据
  if (config.data instanceof FormData) {
    // 删除默认的 Content-Type,让浏览器自动设置
    delete config.headers['Content-Type']
    // 如果需要,可以在这里添加其他自定义请求头
    // config.headers['Custom-Header'] = 'custom-value'
  }
  // get请求映射params参数
  if (config.method === 'get' && config.params) {
    let url = config.url + '?' + tansParams(config.params);
src/views/applicationBatchList/components/UploadDialog.vue
@@ -17,11 +17,12 @@
          :auto-upload="false"
          :on-change="handleFileChange"
          :limit="1"
          :accept="'.xlsx,.xls'"
        >
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
          <div class="el-upload__tip" slot="tip">
            支持扩展名:.doc .docx .xlsx .xls
            支持扩展名:.xlsx .xls
          </div>
        </el-upload>
      </el-form-item>
@@ -51,12 +52,8 @@
        file: null
      },
      rules: {
        batchNumber: [
          { required: true, message: '请输入批次号', trigger: 'blur' }
        ],
        file: [
          { required: true, message: '请选择上传文件', trigger: 'change' }
        ]
        batchNumber: [{ required: true, message: '请输入批次号', trigger: 'blur' }],
        file: [ { required: true, message: '请选择上传文件', trigger: 'change' }]
      }
    }
  },
@@ -73,10 +70,17 @@
      this.form.batchNumber = '';
      this.form.file = null;
      this.$refs.uploadForm && this.$refs.uploadForm.resetFields();
      this.dialogVisible = false;
    },
    handleFileChange(file) {
      const isExcel = file.raw.type === 'application/vnd.ms-excel' ||
                      file.raw.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
      if (!isExcel) {
        this.$message.error('只能上传Excel文件!');
        this.form.file = null;
        return;
      }
      this.form.file = file.raw;
      // 手动触发文件字段验证
      this.$refs.uploadForm.validateField('file');
    },
    submitUpload() {
@@ -85,15 +89,19 @@
          return;
        }
        
        // 这里添加实际的上传逻辑
        const formData = new FormData();
        formData.append('file', this.form.file);
        // 模拟上传
        this.$message.info('正在上传,请稍候...');
        setTimeout(() => {
        formData.append('batchNumber',this.form.batchNumber);
        // console.log('22222222222222222',formData)
        importBatch(formData)
          .then(res => {
            this.$message.success('导入成功');
          this.$emit('success');
          this.handleClose();
        }, 1000);
          })
          .catch(error => {
            this.$message.error(error.message || '导入失败');
          });
      });
    }
  }
src/views/applicationBatchList/detail.vue
@@ -5,13 +5,7 @@
      <div class="header">
        <div class="batch-title">批次号:{{ batchInfo.batchNumber }}</div>
        <div class="back-btn">
          <el-button
            type="primary"
            size="small"
            icon="el-icon-back"
            @click="goBack"
            >返回</el-button
          >
          <el-button type="primary" size="small" icon="el-icon-back" @click="goBack">返回</el-button>
        </div>
      </div>
      <div class="info-cards">
@@ -33,517 +27,247 @@
    <!-- 搜索表单 -->
    <el-form :inline="true" :model="queryParams" class="search-form">
      <el-form-item label="镇街">
        <el-input
          v-model="queryParams.street"
          placeholder="请输入"
          clearable
          size="small"
        />
        <el-input v-model="queryParams.street" placeholder="请输入" clearable size="small" />
      </el-form-item>
      <el-form-item label="拆迁项目">
        <el-input
          v-model="queryParams.projectName"
          placeholder="请输入"
          clearable
          size="small"
        />
        <el-input v-model="queryParams.projectName" placeholder="请输入" clearable size="small" />
      </el-form-item>
      <el-form-item label="所在村(社区)">
        <el-input
          v-model="queryParams.community"
          placeholder="请输入"
          clearable
          size="small"
        />
        <el-input v-model="queryParams.community" placeholder="请输入" clearable size="small" />
      </el-form-item>
      <el-form-item label="户主姓名/身份证号">
        <el-input
          v-model="queryParams.headOrIdCard"
          placeholder="请输入"
          clearable
          size="small"
        />
        <el-input v-model="queryParams.headOrIdCard" placeholder="请输入" clearable size="small" />
      </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
        >
        <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>
      </el-form-item>
    </el-form>
    <!-- 操作按钮区域 -->
    <el-row :gutter="10" class="mb8" v-if="batchInfo.status == '0'">
      <el-col :span="1.5">
        <el-button type="primary" size="small" @click="handleAddHousehold"
          >新增安置户信息</el-button
        >
        <el-button type="primary" size="small" @click="handleAddHousehold">新增安置户信息</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="success" size="small" @click="handleDownloadTemplate"
          >下载导入模板</el-button
        >
        <el-button type="success" size="small" @click="handleDownloadTemplate">下载导入模板</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="warning" size="small" @click="handleBatchImport"
          >批量导入</el-button
        >
        <el-button type="warning" size="small" @click="handleBatchImport">批量导入</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="danger" size="small" @click="handleExportIssueData"
          >问题数据导出</el-button
        >
        <el-button type="danger" size="small" @click="handleExportIssueData">问题数据导出</el-button>
      </el-col>
    </el-row>
    <el-row :gutter="10" class="mb8" v-else>
      <el-col :span="1.5">
        <el-button type="primary" size="small" @click="handleExportAll"
          >全部导出为Excel</el-button
        >
        <el-button type="primary" size="small" @click="handleExportAll">全部导出为Excel</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button type="danger" size="small" @click="handleExportIssueData"
          >问题数据导出</el-button
        >
        <el-button type="danger" size="small" @click="handleExportIssueData">问题数据导出</el-button>
      </el-col>
    </el-row>
    <!-- 表格区域 -->
    <el-table
      :data="tableData"
      border
      style="width: 100%"
      :row-class-name="tableRowClassName"
    >
    <el-table :data="tableData" border style="width: 100%" :row-class-name="tableRowClassName">
      <el-table-column type="index" label="序号" width="50" align="center" />
      <el-table-column
        prop="street"
        label="镇(街道)"
        align="center"
        width="80"
      >
      <el-table-column prop="street" label="镇(街道)" align="center" width="80">
        <template slot-scope="scope">
          {{ scope.row.street }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.street"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.street" placement="top">
            <div slot="content">{{ scope.row.errors.street }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column
        prop="projectName"
        label="拆迁项目名称"
        align="center"
        width="150"
      >
      <el-table-column prop="projectName" label="拆迁项目名称" align="center" width="150">
        <template slot-scope="scope">
          {{ scope.row.projectName }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.projectName"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.projectName" placement="top">
            <div slot="content">{{ scope.row.errors.projectName }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column
        prop="community"
        label="所在村(社区)"
        align="center"
        width="100"
      >
      <el-table-column prop="community" label="所在村(社区)" align="center" width="100">
        <template slot-scope="scope">
          {{ scope.row.community }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.community"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.community" placement="top">
            <div slot="content">{{ scope.row.errors.community }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column prop="time" label="拆迁时间" align="center" width="100">
        <template slot-scope="scope">
          {{ scope.row.time }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.time"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.time" placement="top">
            <div slot="content">{{ scope.row.errors.time }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column
        prop="headOrIdCard"
        label="产主姓名"
        align="center"
        width="80"
      >
      <el-table-column prop="headOrIdCard" label="产主姓名" align="center" width="80">
        <template slot-scope="scope">
          {{ scope.row.headOrIdCard }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.headOrIdCard"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.headOrIdCard" placement="top">
            <div slot="content">{{ scope.row.errors.headOrIdCard }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column
        prop="idCard"
        label="身份证号"
        align="center"
        width="180"
      >
      <el-table-column prop="idCard" label="身份证号" align="center" width="180">
        <template slot-scope="scope">
          {{ scope.row.idCard }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.idCard"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.idCard" placement="top">
            <div slot="content">{{ scope.row.errors.idCard }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column
        prop="contact"
        label="联系电话"
        align="center"
        width="120"
      >
      <el-table-column prop="contact" label="联系电话" align="center" width="120">
        <template slot-scope="scope">
          {{ scope.row.contact }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.contact"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.contact" placement="top">
            <div slot="content">{{ scope.row.errors.contact }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column label="家庭安置人数(人)" align="center">
        <el-table-column
          prop="resettlementPeople"
          label="集体经济组织成员"
          align="center"
          width="120"
        >
        <el-table-column prop="resettlementPeople" label="集体经济组织成员" align="center" width="120">
          <template slot-scope="scope">
            {{ scope.row.resettlementPeople }}
            <el-tooltip
              v-if="scope.row.errors && scope.row.errors.resettlementPeople"
              placement="top"
            >
            <el-tooltip v-if="scope.row.errors && scope.row.errors.resettlementPeople" placement="top">
              <div slot="content">
                {{ scope.row.errors.resettlementPeople }}
              </div>
              <i
                class="el-icon-warning"
                style="color: #e6a23c; margin-left: 5px"
              ></i>
              <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column
          prop="additionalPeople"
          label="非集体经济组织成员"
          align="center"
          width="120"
        >
        <el-table-column prop="additionalPeople" label="非集体经济组织成员" align="center" width="120">
          <template slot-scope="scope">
            {{ scope.row.additionalPeople }}
            <el-tooltip
              v-if="scope.row.errors && scope.row.errors.additionalPeople"
              placement="top"
            >
            <el-tooltip v-if="scope.row.errors && scope.row.errors.additionalPeople" placement="top">
              <div slot="content">
                {{ scope.row.errors.additionalPeople }}
              </div>
              <i
                class="el-icon-warning"
                style="color: #e6a23c; margin-left: 5px"
              ></i>
              <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column
          prop="totalPeople"
          label="合计"
          align="center"
          width="60"
        >
        <el-table-column prop="totalPeople" label="合计" align="center" width="60">
          <template slot-scope="scope">
            {{ scope.row.totalPeople }}
            <el-tooltip
              v-if="scope.row.errors && scope.row.errors.totalPeople"
              placement="top"
            >
            <el-tooltip v-if="scope.row.errors && scope.row.errors.totalPeople" placement="top">
              <div slot="content">{{ scope.row.errors.totalPeople }}</div>
              <i
                class="el-icon-warning"
                style="color: #e6a23c; margin-left: 5px"
              ></i>
              <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
            </el-tooltip>
          </template>
        </el-table-column>
      </el-table-column>
      <el-table-column
        prop="houseName"
        label="待安置家庭成员姓名"
        align="center"
        width="120"
      >
      <el-table-column prop="houseName" label="待安置家庭成员姓名" align="center" width="120">
        <template slot-scope="scope">
          {{ scope.row.houseName }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.houseName"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.houseName" placement="top">
            <div slot="content">{{ scope.row.errors.houseName }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column
        prop="area"
        label="待安置人员应安置面积合计(㎡)"
        align="center"
        width="120"
      >
      <el-table-column prop="area" label="待安置人员应安置面积合计(㎡)" align="center" width="120">
        <template slot-scope="scope">
          {{ scope.row.area }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.area"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.area" placement="top">
            <div slot="content">{{ scope.row.errors.area }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column label="补偿金额(万元)" align="center">
        <el-table-column
          prop="firstPayment"
          label="新建商品住房、商业用房、停车位"
          align="center"
          width="100"
        >
        <el-table-column prop="firstPayment" label="新建商品住房、商业用房、停车位" align="center" width="100">
          <template slot-scope="scope">
            {{ scope.row.firstPayment }}
            <el-tooltip
              v-if="scope.row.errors && scope.row.errors.firstPayment"
              placement="top"
            >
            <el-tooltip v-if="scope.row.errors && scope.row.errors.firstPayment" placement="top">
              <div slot="content">{{ scope.row.errors.firstPayment }}</div>
              <i
                class="el-icon-warning"
                style="color: #e6a23c; margin-left: 5px"
              ></i>
              <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column
          prop="secondPayment"
          label="二手住房"
          align="center"
          width="80"
        >
        <el-table-column prop="secondPayment" label="二手住房" align="center" width="80">
          <template slot-scope="scope">
            {{ scope.row.secondPayment }}
            <el-tooltip
              v-if="scope.row.errors && scope.row.errors.secondPayment"
              placement="top"
            >
            <el-tooltip v-if="scope.row.errors && scope.row.errors.secondPayment" placement="top">
              <div slot="content">{{ scope.row.errors.secondPayment }}</div>
              <i
                class="el-icon-warning"
                style="color: #e6a23c; margin-left: 5px"
              ></i>
              <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
            </el-tooltip>
          </template>
        </el-table-column>
        <el-table-column
          prop="totalPayment"
          label="合计"
          align="center"
          width="60"
        >
        <el-table-column prop="totalPayment" label="合计" align="center" width="60">
          <template slot-scope="scope">
            {{ scope.row.totalPayment }}
            <el-tooltip
              v-if="scope.row.errors && scope.row.errors.totalPayment"
              placement="top"
            >
            <el-tooltip v-if="scope.row.errors && scope.row.errors.totalPayment" placement="top">
              <div slot="content">{{ scope.row.errors.totalPayment }}</div>
              <i
                class="el-icon-warning"
                style="color: #e6a23c; margin-left: 5px"
              ></i>
              <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
            </el-tooltip>
          </template>
        </el-table-column>
      </el-table-column>
      <el-table-column
        prop="monthlyPayment"
        label="25%首付款(万元)"
        align="center"
        width="130"
      >
      <el-table-column prop="monthlyPayment" label="25%首付款(万元)" align="center" width="130">
        <template slot-scope="scope">
          {{ scope.row.monthlyPayment }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.monthlyPayment"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.monthlyPayment" placement="top">
            <div slot="content">{{ scope.row.errors.monthlyPayment }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column
        prop="remainingPayment"
        label="每季度需支付款项(万元)"
        align="center"
        width="120"
      >
      <el-table-column prop="remainingPayment" label="每季度需支付款项(万元)" align="center" width="120">
        <template slot-scope="scope">
          {{ scope.row.remainingPayment }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.remainingPayment"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.remainingPayment" placement="top">
            <div slot="content">
              {{ scope.row.errors.remainingPayment }}
            </div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column
        prop="totalPaid"
        label="过渡补贴(万元)"
        align="center"
        width="60"
      >
      <el-table-column prop="totalPaid" label="过渡补贴(万元)" align="center" width="60">
        <template slot-scope="scope">
          {{ scope.row.totalPaid }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.totalPaid"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.totalPaid" placement="top">
            <div slot="content">{{ scope.row.errors.totalPaid }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column prop="remark" label="备注" align="center" width="60">
        <template slot-scope="scope">
          {{ scope.row.remark }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.remark"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.remark" placement="top">
            <div slot="content">{{ scope.row.errors.remark }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column
        prop="difference"
        label="购房差异情况"
        align="center"
        width="60"
      >
      <el-table-column prop="difference" label="购房差异情况" align="center" width="60">
        <template slot-scope="scope">
          {{ scope.row.difference }}
          <el-tooltip
            v-if="scope.row.errors && scope.row.errors.difference"
            placement="top"
          >
          <el-tooltip v-if="scope.row.errors && scope.row.errors.difference" placement="top">
            <div slot="content">{{ scope.row.errors.difference }}</div>
            <i
              class="el-icon-warning"
              style="color: #e6a23c; margin-left: 5px"
            ></i>
            <i class="el-icon-warning" style="color: #e6a23c; margin-left: 5px"></i>
          </el-tooltip>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" width="150" fixed="right">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            @click="handleHouseholdDetail(scope.row)"
            >详情</el-button
          >
          <el-button size="mini" type="text" @click="handleHouseholdDetail(scope.row)">详情</el-button>
          <template v-if="status === '待审核'">
            <el-button
              size="mini"
              type="text"
              @click="handleHouseholdEdit(scope.row)"
              >编辑</el-button
            >
            <el-button
              size="mini"
              type="text"
              @click="handleHouseholdDelete(scope.row)"
              >删除</el-button
            >
            <el-button size="mini" type="text" @click="handleHouseholdEdit(scope.row)">编辑</el-button>
            <el-button size="mini" type="text" @click="handleHouseholdDelete(scope.row)">删除</el-button>
          </template>
        </template>
      </el-table-column>
@@ -551,16 +275,9 @@
    <!-- 分页 -->
    <div class="pagination-container">
      <el-pagination
        background
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="queryParams.pageNum"
        :page-sizes="[10, 20, 30, 50]"
        :page-size="queryParams.pageSize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total"
      />
      <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
        :current-page="queryParams.pageNum" :page-sizes="[10, 20, 30, 50]" :page-size="queryParams.pageSize"
        layout="total, sizes, prev, pager, next, jumper" :total="total" />
    </div>
  </div>
</template>
src/views/applicationBatchList/list.vue
@@ -174,6 +174,7 @@
import UploadDialog from "./components/UploadDialog";
import ApprovalDialog from "./components/ApprovalDialog";
import { geTabletList } from "@/api/application-batch";
import { downLoad } from "@/utils";
export default {
  name: "ApplicationBatchList",
@@ -248,6 +249,14 @@
      };
      this.handleQuery();
    },
    handleSizeChange(size){
      this.queryParams.pageSize = size;
      this.getList();
    },
    handleCurrentChange(page){
      this.queryParams.pageNum = page;
      this.getList();
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.uploadDialogVisible = true;
@@ -255,6 +264,7 @@
    /** 导入模板下载操作 */
    handleImport() {
      // 实现下载逻辑
      downLoad('/placement-apply/download-template','安置申请表.xlsx')
    },
    /** 统一的查看/详情按钮操作 */
    handleView(row, type) {
src/views/applicationBatchList/service.js
src/views/placement-batch/index.vue
@@ -4,10 +4,14 @@
    <div class="filter-container">
      <el-form :inline="true" :model="queryParams" class="demo-form-inline">
        <el-form-item label="批次号">
          <el-input v-model="queryParams.batchNo" size="small" placeholder="请输入" clearable></el-input>
          <el-input v-model="queryParams.batchNumber" size="small" placeholder="请输入" clearable></el-input>
        </el-form-item>
        <el-form-item label="状态">
          <el-input v-model="queryParams.status" size="small" placeholder="请输入" clearable></el-input>
          <el-select v-model="queryParams.status" placeholder="请选择" clearable>
            <el-option label="待审核" value="0"></el-option>
            <el-option label="已通过" value="1"></el-option>
            <el-option label="已驳回" value="2"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" size="small" @click="handleQuery">查询</el-button>
@@ -24,119 +28,58 @@
    </div>
    <!-- 表格区域 -->
    <el-table
      v-loading="loading"
      :data="tableData"
      border
      style="width: 100%"
    >
      <el-table-column
        type="index"
        label="序号"
        width="50"
        align="center"
      />
      <el-table-column
        prop="batchNo"
        label="批次号"
        align="center"
      />
      <el-table-column
        prop="totalCount"
        label="申请总户数"
        align="center"
      />
      <el-table-column
        prop="approvedCount"
        label="申请总人数"
        align="center"
      />
      <el-table-column
        prop="compensationAmount"
        width="120"
        label="补偿资金总额(万元)"
        align="center"
      />
      <el-table-column
        prop="compensationArea"
        label="25%建筑面积"
        align="center"
      />
      <el-table-column
        prop="temporaryAmount"
        label="临时安置补助金额"
        align="center"
      />
      <el-table-column
        prop="temporaryPeriod"
        label="过渡期限"
        align="center"
      />
      <el-table-column
        prop="totalArea"
        label="总建筑面积"
        align="center"
      />
      <el-table-column
        prop="secondArea"
        label="二手房面积"
        align="center"
      />
      <el-table-column
        prop="newArea"
        label="新建住房面积"
        align="center"
      />
      <el-table-column
        prop="status"
        label="状态"
        align="center"
      />
      <el-table-column
        label="操作"
        align="center"
        width="200"
      >
    <el-table v-loading="loading" :data="tableData" border style="width: 100%">
      <el-table-column type="index" label="序号" width="50" align="center" />
      <el-table-column prop="batchNumber" label="批次号" align="center" />
      <el-table-column prop="householdsNum" label="申请总户数" align="center" />
      <el-table-column prop="personNum" label="申请总人数" align="center" />
      <el-table-column prop="totalAmount" width="120" label="补偿资金总额(万元)" align="center" />
      <el-table-column prop="downPaymentAmount" label="25%首付款(万元)" align="center" />
      <el-table-column prop="quarterPayAmount" label="每季度需支付款项(万元)" align="center" />
      <el-table-column prop="subsidyAmount" label="过渡补贴(万元)" align="center" />
      <el-table-column prop="businessArea" label="新建商品房(㎡)" align="center" />
      <el-table-column prop="oldArea" label="二手住房(㎡)" align="center" />
      <el-table-column prop="newArea" label="新建商业用房(㎡)" align="center" />
      <el-table-column prop="parkingArea" label="新建停车位(个)" align="center" />
      <el-table-column prop="status" label="状态" align="center">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            @click="handleView(scope.row)"
          >申请详情</el-button>
          <el-button
            size="mini"
            type="text"
            @click="handleEdit(scope.row)"
          >编辑</el-button>
          <el-button
            size="mini"
            type="text"
            @click="handleDelete(scope.row)"
          >删除</el-button>
          <el-tag v-if="scope.row.status == '0'" type="warning">待审核</el-tag>
          <el-tag v-if="scope.row.status == '1'" type="success">已通过</el-tag>
          <el-tag v-if="scope.row.status == '2'" type="danger">已驳回</el-tag>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" width="200">
        <template slot-scope="scope">
          <el-button size="mini" type="text" @click="handleView(scope.row)">详情</el-button>
          <el-button size="mini" type="text" @click="handleView(scope.row)">查看</el-button>
          <el-button size="mini" type="text" @click="handleApproval(scope.row)">审核</el-button>
          <el-button size="mini" type="text" @click="handleDelete(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页区域 -->
    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
      @pagination="getList" />
    <export-money-applay :visible.sync="dialogVisible" />
    <approval-dialog :visible.sync="approvalDialogVisible" />
  </div>
</template>
<script>
import ExportMoneyApplay from './components/exportMoneyApplay.vue'
import ApprovalDialog from './components/ApprovalDialog.vue'
import {
  getPlacementBatchList,
  downloadTemplate
} from '@/api/placement-details'
export default {
  name: 'PlacementBatch',
  components: {
    ExportMoneyApplay
    ExportMoneyApplay,
    ApprovalDialog
  },
  data() {
    return {
@@ -165,26 +108,12 @@
    /** 查询列表 */
    getList() {
      this.loading = true
      // TODO: 调用接口获取数据
      setTimeout(() => {
        this.tableData = [
          {
            batchNo: '第202501批次',
            totalCount: '222',
            approvedCount: '222',
            compensationAmount: '',
            compensationArea: '',
            temporaryAmount: '',
            temporaryPeriod: '',
            totalArea: '828',
            secondArea: '',
            newArea: '',
            status: '申请详情'
          }
        ]
        this.total = 4
      getPlacementBatchList(this.queryParams).then(res => {
        this.tableData = res.data.records || []
        this.total = res.data.total
        this.loading = false
      }, 1000)
      })
    },
    /** 搜索按钮操作 */
    handleQuery() {
@@ -203,6 +132,11 @@
    /** 下载模板 */
    handleExportTemplate() {
      // TODO: 实现下载模板逻辑
      downloadTemplate(3).then(res => {
        window.open(res.data)
      })
    },
    /** 下载临时安置模板 */
    handleImportTemplate() {
@@ -212,8 +146,8 @@
    handleView(row) {
      // TODO: 实现查看详情逻辑
    },
    /** 编辑按钮操作 */
    handleEdit(row) {
    /** 审核按钮操作 */
    handleApproval(row) {
      // TODO: 实现编辑逻辑
    },
    /** 删除按钮操作 */
@@ -228,9 +162,11 @@
.app-container {
  padding: 20px;
}
.filter-container {
  margin-bottom: 20px;
}
.button-container {
  margin-bottom: 20px;
}