丁烨烨 10 сар өмнө
parent
commit
1f72b4c8f9

+ 38 - 38
src/router/route.ts

@@ -38,10 +38,10 @@ export const routeList:RouterType[] = [
     addr: 'qygl/qyjbxx/index'
   },
   {
-    path: 'qygl/qylxrgl',
-    name: '企业联系人管理',
+    path: 'qygl/qybmgl',
+    name: '企业部门管理',
     icon: 'Avatar',
-    addr: 'qygl/qylxrgl/index'
+    addr: 'qygl/qybmgl/index'
   },
   {
     path: 'qygl/qyzzgl',
@@ -75,41 +75,41 @@ export const routeList:RouterType[] = [
   },
 
 
-  {
-    path: 'yggl',
-    name: '员工管理',
-    icon: 'User'
-  },
-  {
-    path: 'yggl/ygdagl',
-    name: '员工档案管理',
-    icon: 'MessageBox',
-    addr: 'yggl/ygdagl/index'
-  },
-  {
-    path: 'yggl/ygflgl',
-    name: '员工福利管理',
-    icon: 'Ticket',
-    addr: 'yggl/ygflgl/index'
-  },
-  {
-    path: 'yggl/yghtgl',
-    name: '员工合同管理',
-    icon: 'Memo',
-    addr: 'yggl/yghtgl/index'
-  },
-  {
-    path: 'yggl/ygjbxx',
-    name: '员工基本信息',
-    icon: 'DocumentCopy',
-    addr: 'yggl/ygjbxx/index'
-  },
-  {
-    path: 'yggl/ygxzgl',
-    name: '员工薪资管理',
-    icon: 'Money',
-    addr: 'yggl/ygxzgl/index'
-  },
+  // {
+  //   path: 'yggl',
+  //   name: '员工管理',
+  //   icon: 'User'
+  // },
+  // {
+  //   path: 'yggl/ygdagl',
+  //   name: '员工档案管理',
+  //   icon: 'MessageBox',
+  //   addr: 'yggl/ygdagl/index'
+  // },
+  // {
+  //   path: 'yggl/ygflgl',
+  //   name: '员工福利管理',
+  //   icon: 'Ticket',
+  //   addr: 'yggl/ygflgl/index'
+  // },
+  // {
+  //   path: 'yggl/yghtgl',
+  //   name: '员工合同管理',
+  //   icon: 'Memo',
+  //   addr: 'yggl/yghtgl/index'
+  // },
+  // {
+  //   path: 'yggl/ygjbxx',
+  //   name: '员工基本信息',
+  //   icon: 'DocumentCopy',
+  //   addr: 'yggl/ygjbxx/index'
+  // },
+  // {
+  //   path: 'yggl/ygxzgl',
+  //   name: '员工薪资管理',
+  //   icon: 'Money',
+  //   addr: 'yggl/ygxzgl/index'
+  // },
 ]
 export const useDynamicRoutes: () => RouterType[] = () => {
   routeList.forEach(item => {

+ 452 - 305
src/views/ggsyfgl/dfgl/index.vue

@@ -1,11 +1,336 @@
+<template>
+  <div class="p-4">
+    <div class="mb-6 p-4 bg-white rounded-lg shadow-sm flex flex-wrap items-center gap-4">
+      <el-form :inline="true" :model="searchForm" class="flex-grow flex flex-wrap">
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">企业名称:</span>
+          <el-input
+            v-model="searchForm.enterpriseName"
+            style="width: 240px"
+            size="default"
+            placeholder="请输入企业名称"
+            @clear="handleSearch"
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">信用代码:</span>
+          <el-input
+            v-model="searchForm.unifiedSocialCreditCode"
+            style="width: 240px"
+            size="default"
+            placeholder="输入统一社会信用代码"
+            clearable
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">户号信息:</span>
+          <el-input
+            v-model="searchForm.accountNumber"
+            style="width: 240px"
+            size="default"
+            placeholder="输入户号信息"
+            clearable
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">年度:</span>
+          <el-select v-model="searchForm.year"
+                     style="width: 240px"
+                     size="default" placeholder="请选择年度">
+            <el-option
+              v-for="item in annualOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" :icon="Search" @click="handleSearch" size="search">查询
+          </el-button>
+          <el-button :icon="Refresh" @click="handleResetSearch" size="search">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <div class="flex gap-1" style="justify-content:flex-end">
+        <el-button type="primary" :icon="Plus" @click="handleAdd" size="search">新增</el-button>
+        <el-button
+          type="danger"
+          :icon="Delete"
+          @click="handleBatchDelete"
+          :disabled="selectedIds.length === 0"
+          size="search"
+        >批量删除
+        </el-button
+        >
+        <el-button type="success" :icon="Download" @click="exportExcel" size="search">导出</el-button>
+        <el-upload
+          class="inline-block ml-2"
+          action="/api/eenterpriseElectricityAnnualStatistics/importData"
+          :show-file-list="false"
+          :on-success="handleUploadSuccess"
+          :on-error="handleUploadError"
+          :before-upload="handleBeforeUpload"
+          :http-request="(options) => importExcel(options.file)"
+        >
+          <el-button type="info" :icon="Upload" size="search">导入</el-button>
+        </el-upload>
+      </div>
+    </div>
+
+    <!-- Table -->
+    <div class="bg-white rounded-lg shadow-sm p-4 overflow-x-auto">
+      <el-table
+        :data="tableData"
+        style="width: 100%"
+        border
+        @selection-change="handleSelectionChange"
+        :cell-style="{ fontSize: '14px' }"
+        :header-cell-style="{ fontSize: '14px' }"
+        :row-style="{ fontSize: '14px' }"
+      >
+        <el-table-column type="selection" width="55" fixed="left"/>
+        <el-table-column prop="enterpriseName" label="企业名称" align="center"/>
+        <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" align="center"/>
+        <el-table-column prop="accountNumber" label="户号信息" align="center"/>
+        <el-table-column prop="year" label="年度" align="center"/>
+        <el-table-column prop="openingDate" label="开户日期" align="center"/>
+
+        <el-table-column label="第一季度" align="center">
+          <el-table-column prop="q1Degree" label="用电量(度)" align="center"/>
+          <el-table-column prop="q1Cost" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="第二季度" align="center">
+          <el-table-column prop="q2Degree" label="用电量(度)" align="center"/>
+          <el-table-column prop="q2Degree" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="第三季度" align="center">
+          <el-table-column prop="q3Degree" label="用电量(度)" align="center"/>
+          <el-table-column prop="q3Degree" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="第四季度" align="center">
+          <el-table-column prop="q4Degree" label="用电量(度)" align="center"/>
+          <el-table-column prop="q4Degree" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="年度总量" align="center">
+          <el-table-column prop="annualTotalDegree" label="用电量(度)" align="center"/>
+          <el-table-column prop="annualTotalCost" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="操作" fixed="right" align="center">
+          <template #default="{ row }">
+            <el-button :icon="Edit" size="small" @click="handleEdit(row)">编辑</el-button>
+            <el-button type="danger" :icon="Delete" size="small" @click="handleDelete(row.id)"
+            >删除
+            </el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- Pagination -->
+      <div class="mt-4 flex justify-end">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="pageNum"
+          :page-sizes="[10, 20, 50, 100]"
+          :page-size="pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total"
+        />
+      </div>
+    </div>
+
+    <!-- Add/Edit Dialog -->
+    <el-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      width="800px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+    >
+      <el-form
+        :model="formData"
+        ref="formRef"
+        label-width="120px"
+        class="grid grid-cols-1 md:grid-cols-2 gap-4"
+      >
+        <el-form-item
+          label="企业名称"
+          prop="enterpriseName"
+          :rules="[{ required: true, message: '请输入企业名称', trigger: 'blur' }]"
+        >
+          <el-input v-model="formData.enterpriseName" placeholder="请输入企业名称"/>
+        </el-form-item>
+        <el-form-item
+          label="信用代码"
+          prop="unifiedSocialCreditCode"
+          :rules="[{ required: true, message: '请输入统一社会信用代码', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.unifiedSocialCreditCode"
+            placeholder="请输入统一社会信用代码"
+          />
+        </el-form-item>
+        <el-form-item
+          label="户号信息"
+          prop="accountNumber"
+          :rules="[{ required: true, message: '请输入户号信息', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.accountNumber"
+            placeholder="请输入户号信息"
+          />
+        </el-form-item>
+        <el-form-item
+          label="开户日期"
+          prop="openingDate"
+          :rules="[{ required: true, message: '请选择开户日期', trigger: 'change' }]"
+        >
+          <el-date-picker v-model="formData.openingDate" type="date" format="YYYY/MM/DD" value-format="YYYY-MM-DD"/>
+        </el-form-item>
+        <el-form-item
+          label="年度"
+          prop="year"
+          :rules="[{ required: true, message: '请选择年度', trigger: 'change' }]"
+        >
+          <el-select v-model="formData.year" placeholder="请选择年度" style="width: 100%">
+            <el-option
+              v-for="item in annualOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item
+          label="第一季度费用"
+          prop="q1Cost"
+          :rules="[
+            { required: true, message: '请输入第一季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q1Cost" placeholder="请输入第一季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第一季度度数"
+          prop="q1Degree"
+          :rules="[
+            { required: true, message: '请输入第一季度度数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q1Degree" placeholder="请输入第一季度度数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="第二季度费用"
+          prop="q2Cost"
+          :rules="[
+            { required: true, message: '请输入第二季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q2Cost" placeholder="请输入第二季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第二季度度数"
+          prop="q2Degree"
+          :rules="[
+            { required: true, message: '请输入第二季度度数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q2Degree" placeholder="请输入第二季度度数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="第三季度费用"
+          prop="q3Cost"
+          :rules="[
+            { required: true, message: '请输入第三季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q3Cost" placeholder="请输入第三季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第三季度度数"
+          prop="q3Degree"
+          :rules="[
+            { required: true, message: '请输入第三季度度数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q3Degree" placeholder="请输入第三季度度数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="第四季度费用"
+          prop="q4Cost"
+          :rules="[
+            { required: true, message: '请输入第四季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q4Cost" placeholder="请输入第四季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第四季度度数"
+          prop="q4Degree"
+          :rules="[
+            { required: true, message: '请输入第四季度度数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q4Degree" placeholder="请输入第四季度度数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="年度总费用"
+          prop="annualTotalCost"
+          :rules="[
+            { required: true, message: '请输入年度总费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.annualTotalCost" placeholder="请输入年度总费用"/>
+        </el-form-item>
+        <el-form-item
+          label="年度总度数"
+          prop="annualTotalTon"
+          :rules="[
+            { required: true, message: '请输入年度总度数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.annualTotalTon" placeholder="请输入年度总度数"/>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogVisible = false">取消</el-button>
+          <el-button type="primary" @click="handleConfirm">确定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
 <script setup lang="ts">
-import { onMounted, reactive, ref } from 'vue'
-import { clientDownloadExcel, clientGet, clientPost } from '@/utils/request.ts'
-import type { FormInstance, UploadProps } from 'element-plus'
-import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
-import { Delete, Download, Edit, Plus, Refresh, Search, Upload } from '@element-plus/icons-vue'
+import {onMounted, reactive, ref} from 'vue'
+import {clientDownloadExcel, clientGet, clientPost} from '@/utils/request.ts'
+import type {FormInstance, UploadProps} from 'element-plus'
+import {ElForm, ElLoading, ElMessage, ElMessageBox} from 'element-plus'
+import {Delete, Download, Edit, Plus, Refresh, Search, Upload} from '@element-plus/icons-vue'
 
-// 基础类型定义
+// 假设 BaseResponse 和 PageType 在全局或 request.ts 中已定义
 interface BaseResponse {
   code: number
   msg: string
@@ -19,23 +344,28 @@ interface PageType<T> {
   pages: number
 }
 
-// 电费信息相关接口定义
 interface Property {
   id: string // 主键ID
-  enterpriseName: string // 企业名称
+
+  enterpriseName: string // 单位名称
   unifiedSocialCreditCode: string // 统一社会信用代码
-  gridAccountNumber?: string // 电网户号(可选)
   year?: string // 年度(可选)
-  firstQuarterConsumption?: string // 第一季度
-  secondQuarterConsumption?: string // 第二季度
-  thirdQuarterConsumption?: string // 第三季度
-  fourthQuarterConsumption?: string // 第四季度
-  arrearExists?: string // 当前是否欠缴电费
-  annualTotalConsumption?: string // 年度总
-  createTime?: string // 创建时间 (改为string用于显示)
+  accountNumber?: string // 户号信息
+  q1Cost?: string // 第一季度费用
+  q1Degree?: string // 	第一季度度数
+  q2Cost?: string // 第二季度费用
+  q2Degree?: string // 第二季度度数
+  q3Cost?: string // 第三季度费用
+  q3Degree?: string // 	第三季度度数
+  q4Cost?: string // 	第四季度费用
+  q4Degree?: string // 	第四季度度数
+  annualTotalCost?: string // 	年度总费用
+  annualTotalTon?: string // 	年度总度数
+  openingDate?: string // 	开户日期
+
+  updateTime?: string // 更新时间
+  createTime?: string // 创建时间
   createBy?: string // 创建人
-  updateTime?: string // 修改时间 (改为string用于显示)
-  updateBy?: string // 修改人
 }
 
 interface PropertyOneResponse extends BaseResponse {
@@ -47,30 +377,40 @@ interface PropertyListResponse extends BaseResponse {
 }
 
 interface AddProperty {
-  enterpriseName: string // 企业名称
+  enterpriseName: string // 单位名称
   unifiedSocialCreditCode: string // 统一社会信用代码
-  gridAccountNumber?: string // 电网户号(可选)
   year?: string // 年度(可选)
-  firstQuarterConsumption?: string // 第一季度
-  secondQuarterConsumption?: string // 第二季度
-  thirdQuarterConsumption?: string // 第三季度
-  fourthQuarterConsumption?: string // 第四季度
-  arrearExists?: string // 当前是否欠缴电费
-  annualTotalConsumption?: string // 年度总
+  accountNumber?: string // 户号信息
+  q1Cost?: string // 第一季度费用
+  q1Degree?: string // 	第一季度度数
+  q2Cost?: string // 第二季度费用
+  q2Degree?: string // 第二季度度数
+  q3Cost?: string // 第三季度费用
+  q3Degree?: string // 	第三季度度数
+  q4Cost?: string // 	第四季度费用
+  q4Degree?: string // 	第四季度度数
+  annualTotalCost?: string // 	年度总费用
+  annualTotalTon?: string // 	年度总度数
+  openingDate?: string // 	开户日期
 }
 
 interface UpdateProperty {
   id?: string
-  enterpriseName: string // 企业名称
+  enterpriseName: string // 单位名称
   unifiedSocialCreditCode: string // 统一社会信用代码
-  gridAccountNumber?: string // 电网户号(可选)
   year?: string // 年度(可选)
-  firstQuarterConsumption?: string // 第一季度
-  secondQuarterConsumption?: string // 第二季度
-  thirdQuarterConsumption?: string // 第三季度
-  fourthQuarterConsumption?: string // 第四季度
-  arrearExists?: string // 当前是否欠缴电费
-  annualTotalConsumption?: string // 年度总
+  accountNumber?: string // 户号信息
+  q1Cost?: string // 第一季度费用
+  q1Degree?: string // 	第一季度度数
+  q2Cost?: string // 第二季度费用
+  q2Degree?: string // 第二季度度数
+  q3Cost?: string // 第三季度费用
+  q3Degree?: string // 	第三季度度数
+  q4Cost?: string // 	第四季度费用
+  q4Degree?: string // 	第四季度度数
+  annualTotalCost?: string // 	年度总费用
+  annualTotalTon?: string // 	年度总度数
+  openingDate?: string // 	开户日期
 }
 
 // 响应式状态变量
@@ -80,11 +420,10 @@ const pageSize = ref(10)
 const pageNum = ref(1)
 
 const searchForm = reactive({
-  year: '',
-  unifiedSocialCreditCode: '',
-  gridAccountNumber: '',
+  accountNumber: '',
   enterpriseName: '',
-  arrearExists: '',
+  unifiedSocialCreditCode: '',
+  year: '',
 })
 
 const dialogVisible = ref(false)
@@ -95,19 +434,21 @@ const formRef = ref<FormInstance>()
 const selectedIds = ref<string[]>([])
 
 // 欠缴状态选项
-const arrearOptions = [
-  { label: '是', value: '是' },
-  { label: '否', value: '否' },
+const arrearsOptions = [
+  {label: '是', value: '是'},
+  {label: '否', value: '否'},
 ]
 
-// 获取欠缴状态标签
-const getArrearLabel = (value: string | undefined) => {
-  return arrearOptions.find((option) => option.value === value)?.label || '-'
-}
+// 年度选项(动态生成最近5年)
+const currentYear = new Date().getFullYear()
 
-// 接口调用函数
+const annualOptions = Array.from({length: 10}, (_, i) => ({
+  label: `${currentYear - i}年`,
+  value: `${currentYear - i}`,
+}))
+// 新增
 const add = async (data: AddProperty) => {
-  const res = await clientPost<AddProperty, BaseResponse>('/equarterlyElectricityBill/save', {
+  const res = await clientPost<AddProperty, BaseResponse>('/eenterpriseElectricityAnnualStatistics/save', {
     ...data,
   })
 
@@ -120,8 +461,9 @@ const add = async (data: AddProperty) => {
   return true
 }
 
+// 根据id获取数据
 const getById = async (id: string) => {
-  const res = await clientGet<null, PropertyOneResponse>('/equarterlyElectricityBill/getById/' + id)
+  const res = await clientGet<null, PropertyOneResponse>('/eenterpriseElectricityAnnualStatistics/getById/' + id)
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return null
@@ -129,50 +471,41 @@ const getById = async (id: string) => {
   return res.data
 }
 
+// 分页获取数据
 const getList = async () => {
-  const loading = ElLoading.service({ text: '加载中...' })
-  try {
-    const res = await clientGet<
-      {
-        pageNum: number
-        pageSize: number
-        year?: string
-        unifiedSocialCreditCode?: string
-        gridAccountNumber?: string
-        enterpriseName?: string
-        arrearExists?: string
-      },
-      PropertyListResponse
-    >('/equarterlyElectricityBill/findByPage', {
-      params: {
-        pageNum: pageNum.value,
-        pageSize: pageSize.value,
-        year: searchForm.year || undefined,
-        unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode || undefined,
-        gridAccountNumber: searchForm.gridAccountNumber || undefined,
-        enterpriseName: searchForm.enterpriseName || undefined,
-        arrearExists: searchForm.arrearExists || undefined,
-      },
-    })
+  // 构建参数对象,只包含有值的搜索条件
+  const params = {
+    pageNum: pageNum.value,
+    pageSize: pageSize.value,
+    ...(searchForm.accountNumber ? {accountNumber: searchForm.accountNumber} : {}),
+    ...(searchForm.unifiedSocialCreditCode ? {unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode} : {}),
+    ...(searchForm.enterpriseName ? {enterpriseName: searchForm.enterpriseName} : {}),
+    ...(searchForm.year ? {year: searchForm.year} : {}),
+  }
 
-    if (res.code !== 200) {
-      ElMessage.error(res.msg)
-      return
-    }
-    tableData.value = res.data.records
-    total.value = res.data.total
-  } catch (error) {
-    ElMessage.error('获取数据失败')
-  } finally {
-    loading.close()
+  const res = await clientGet<{
+    pageNum: number
+    pageSize: number
+    accountNumber?: string
+    unifiedSocialCreditCode?: string
+    enterpriseName?: string
+    year?: string
+  },
+    PropertyListResponse>('/eenterpriseElectricityAnnualStatistics/findByPage', {
+    params,
+  })
+
+  if (res.code !== 200) {
+    ElMessage.error(res.msg)
+    return
   }
+  tableData.value = res.data.records
+  total.value = res.data.total
 }
 
+// 批量删除
 const delBatch = async (ids: string[]) => {
-  const res = await clientPost<string, BaseResponse>(
-    '/equarterlyElectricityBill/deleteBatch',
-    JSON.stringify(ids),
-  )
+  const res = await clientPost<string[], BaseResponse>('/eenterpriseElectricityAnnualStatistics/deleteBatch', ids)
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return false
@@ -181,8 +514,9 @@ const delBatch = async (ids: string[]) => {
   return true
 }
 
+// 修改
 const update = async (data: UpdateProperty) => {
-  const res = await clientPost<UpdateProperty, BaseResponse>('/equarterlyElectricityBill/update', {
+  const res = await clientPost<UpdateProperty, BaseResponse>('/eenterpriseElectricityAnnualStatistics/update', {
     ...data,
   })
   if (res.code !== 200) {
@@ -193,6 +527,7 @@ const update = async (data: UpdateProperty) => {
   return true
 }
 
+// 导出为excel
 const exportExcel = async () => {
   const loading = ElLoading.service({
     lock: true,
@@ -202,14 +537,16 @@ const exportExcel = async () => {
   })
 
   try {
-    await clientDownloadExcel('/equarterlyElectricityBill/exportData', {
-      params: {
-        year: searchForm.year || undefined,
-        unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode || undefined,
-        gridAccountNumber: searchForm.gridAccountNumber || undefined,
-        enterpriseName: searchForm.enterpriseName || undefined,
-        arrearExists: searchForm.arrearExists || undefined,
-      },
+    // 构建参数对象,只包含有值的搜索条件
+    const params = {
+      ...(searchForm.accountNumber ? {accountNumber: searchForm.accountNumber} : {}),
+      ...(searchForm.unifiedSocialCreditCode ? {unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode} : {}),
+      ...(searchForm.enterpriseName ? {enterpriseName: searchForm.enterpriseName} : {}),
+      ...(searchForm.year ? {year: searchForm.year} : {}),
+    }
+
+    await clientDownloadExcel('/eenterpriseElectricityAnnualStatistics/exportData', {
+      params,
     })
     ElMessage.success('导出成功')
   } catch (error) {
@@ -220,11 +557,13 @@ const exportExcel = async () => {
   }
 }
 
+// excel导入
 const importExcel = async (file: File) => {
   const formData = new FormData()
   formData.append('file', file)
+
   const res = await clientPost<FormData, BaseResponse>(
-    '/equarterlyElectricityBill/importData',
+    '/eenterpriseElectricityAnnualStatistics/importData',
     formData,
     {
       headers: {
@@ -232,26 +571,31 @@ const importExcel = async (file: File) => {
       },
     },
   )
+
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return false
   }
   ElMessage.success(res.msg)
+  getList()
   return true
 }
 
-// 事件处理函数
+// --- CRUD 操作和处理函数 ---
+
 const handleAdd = () => {
   isEdit.value = false
-  dialogTitle.value = '新增电费信息'
+  dialogTitle.value = '新增用水信息'
   // 重置表单数据
   Object.keys(formData).forEach((key) => delete formData[key as keyof Property])
+  // 设置默认值为当前年度
+  formData.openingDate = `${currentYear}`
   dialogVisible.value = true
 }
 
 const handleEdit = async (row: Property) => {
   isEdit.value = true
-  dialogTitle.value = '编辑电费信息'
+  dialogTitle.value = '编辑用水信息'
   const data = await getById(row.id)
   if (data) {
     Object.assign(formData, data)
@@ -298,14 +642,15 @@ const handleBatchDelete = () => {
 }
 
 const handleSearch = () => {
-  pageNum.value = 1
+  pageNum.value = 1 // 搜索时重置到第一页
   getList()
 }
 
 const handleResetSearch = () => {
-  Object.keys(searchForm).forEach((key) => {
-    searchForm[key as keyof typeof searchForm] = ''
-  })
+  searchForm.accountNumber = ''
+  searchForm.unifiedSocialCreditCode = ''
+  searchForm.enterpriseName = ''
+  searchForm.year = ''
   pageNum.value = 1
   getList()
 }
@@ -315,7 +660,7 @@ const handleConfirm = async () => {
   await formRef.value.validate(async (valid) => {
     if (valid) {
       let success = false
-      const dataToSend = { ...formData }
+      const dataToSend = {...formData}
 
       if (isEdit.value) {
         success = await update(dataToSend)
@@ -339,7 +684,7 @@ const handleCurrentChange = (val: number) => {
 
 const handleSizeChange = (val: number) => {
   pageSize.value = val
-  pageNum.value = 1
+  pageNum.value = 1 // 页大小改变时重置到第一页
   getList()
 }
 
@@ -347,7 +692,7 @@ const handleSelectionChange = (selection: Property[]) => {
   selectedIds.value = selection.map((item) => item.id)
 }
 
-const handleUploadSuccess: UploadProps['onSuccess'] = async (response) => {
+const handleUploadSuccess: UploadProps['onSuccess'] = async (response, uploadFile) => {
   if (response && response.code === 200) {
     ElMessage.success('文件导入成功')
     getList()
@@ -371,7 +716,6 @@ const handleBeforeUpload: UploadProps['beforeUpload'] = (rawFile) => {
   return true
 }
 
-// 初始化
 const init = () => {
   getList()
 }
@@ -380,203 +724,6 @@ onMounted(() => {
   init()
 })
 </script>
-
-<template>
-  <div class="p-4">
-    <h1 class="text-2xl font-bold mb-6">电费信息管理</h1>
-
-    <!-- 搜索和操作栏 -->
-    <div class="mb-6 p-4 bg-white rounded-lg shadow-sm flex flex-wrap items-center gap-4">
-      <el-form :inline="true" :model="searchForm" class="flex-grow flex flex-wrap gap-x-4">
-        <el-form-item label="企业名称">
-          <el-input v-model="searchForm.enterpriseName" placeholder="输入企业名称" clearable />
-        </el-form-item>
-        <el-form-item label="统一社会信用代码">
-          <el-input
-            v-model="searchForm.unifiedSocialCreditCode"
-            placeholder="输入信用代码"
-            clearable
-          />
-        </el-form-item>
-        <el-form-item label="电网户号">
-          <el-input v-model="searchForm.gridAccountNumber" placeholder="输入电网户号" clearable />
-        </el-form-item>
-        <el-form-item label="是否欠缴" style="width: 180px">
-          <el-select v-model="searchForm.arrearExists" placeholder="选择是否欠缴" clearable>
-            <el-option
-              v-for="item in arrearOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" :icon="Search" @click="handleSearch">查询</el-button>
-          <el-button :icon="Refresh" @click="handleResetSearch">重置</el-button>
-        </el-form-item>
-      </el-form>
-
-      <div class="flex gap-2">
-        <el-button type="primary" :icon="Plus" @click="handleAdd">新增</el-button>
-        <el-button
-          type="danger"
-          :icon="Delete"
-          @click="handleBatchDelete"
-          :disabled="selectedIds.length === 0"
-          >批量删除</el-button
-        >
-        <el-button type="success" :icon="Download" @click="exportExcel">导出</el-button>
-        <el-upload
-          class="inline-block"
-          action="/api/equarterlyElectricityBill/importData"
-          :show-file-list="false"
-          :on-success="handleUploadSuccess"
-          :on-error="handleUploadError"
-          :before-upload="handleBeforeUpload"
-          :http-request="(options) => importExcel(options.file)"
-        >
-          <el-button type="info" :icon="Upload">导入</el-button>
-        </el-upload>
-      </div>
-    </div>
-
-    <!-- 表格 -->
-    <div class="bg-white rounded-lg shadow-sm p-4 overflow-x-auto">
-      <el-table
-        :data="tableData"
-        style="width: 100%"
-        border
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" fixed="left" />
-        <el-table-column prop="enterpriseName" label="企业名称" width="200" />
-        <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" width="200" />
-        <el-table-column prop="gridAccountNumber" label="电网户号" width="150" />
-        <el-table-column prop="year" label="年度" width="100" />
-        <el-table-column prop="arrearExists" label="是否欠缴" width="120">
-          <template #default="{ row }">
-            <el-tag
-              :type="row.arrearExists === '是' ? 'danger' : 'success'"
-              v-if="row.arrearExists"
-            >
-              {{ row.arrearExists }}
-            </el-tag>
-            <el-tag type="info" v-else>未知</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column prop="firstQuarterConsumption" label="第一季度用电量" width="150" />
-        <el-table-column prop="secondQuarterConsumption" label="第二季度用电量" width="150" />
-        <el-table-column prop="thirdQuarterConsumption" label="第三季度用电量" width="150" />
-        <el-table-column prop="fourthQuarterConsumption" label="第四季度用电量" width="150" />
-        <el-table-column prop="annualTotalConsumption" label="年度总用电量" width="150" />
-        <el-table-column label="操作" width="180" fixed="right">
-          <template #default="{ row }">
-            <el-button :icon="Edit" size="small" @click="handleEdit(row)">编辑</el-button>
-            <el-button type="danger" :icon="Delete" size="small" @click="handleDelete(row.id)"
-              >删除</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <!-- 分页 -->
-      <div class="mt-4 flex justify-end">
-        <el-pagination
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-          :current-page="pageNum"
-          :page-sizes="[10, 20, 50, 100]"
-          :page-size="pageSize"
-          layout="total, sizes, prev, pager, next, jumper"
-          :total="total"
-        />
-      </div>
-    </div>
-
-    <!-- 新增/编辑对话框 -->
-    <el-dialog
-      v-model="dialogVisible"
-      :title="dialogTitle"
-      width="800px"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-    >
-      <el-form
-        :model="formData"
-        ref="formRef"
-        label-width="120px"
-        class="grid grid-cols-1 md:grid-cols-2 gap-4"
-      >
-        <el-form-item
-          label="企业名称"
-          prop="enterpriseName"
-          :rules="[{ required: true, message: '请输入企业名称', trigger: 'blur' }]"
-        >
-          <el-input v-model="formData.enterpriseName" placeholder="请输入企业名称" />
-        </el-form-item>
-        <el-form-item
-          label="统一社会信用代码"
-          prop="unifiedSocialCreditCode"
-          :rules="[{ required: true, message: '请输入统一社会信用代码', trigger: 'blur' }]"
-        >
-          <el-input
-            v-model="formData.unifiedSocialCreditCode"
-            placeholder="请输入统一社会信用代码"
-          />
-        </el-form-item>
-        <el-form-item label="电网户号" prop="gridAccountNumber">
-          <el-input v-model="formData.gridAccountNumber" placeholder="请输入电网户号" />
-        </el-form-item>
-        <el-form-item label="年度" prop="year">
-          <el-input v-model="formData.year" placeholder="请输入年度" />
-        </el-form-item>
-        <el-form-item label="第一季度用电量" prop="firstQuarterConsumption">
-          <el-input v-model="formData.firstQuarterConsumption" placeholder="请输入第一季度用电量" />
-        </el-form-item>
-        <el-form-item label="第二季度用电量" prop="secondQuarterConsumption">
-          <el-input
-            v-model="formData.secondQuarterConsumption"
-            placeholder="请输入第二季度用电量"
-          />
-        </el-form-item>
-        <el-form-item label="第三季度用电量" prop="thirdQuarterConsumption">
-          <el-input v-model="formData.thirdQuarterConsumption" placeholder="请输入第三季度用电量" />
-        </el-form-item>
-        <el-form-item label="第四季度用电量" prop="fourthQuarterConsumption">
-          <el-input
-            v-model="formData.fourthQuarterConsumption"
-            placeholder="请输入第四季度用电量"
-          />
-        </el-form-item>
-        <el-form-item label="年度总用电量" prop="annualTotalConsumption">
-          <el-input v-model="formData.annualTotalConsumption" placeholder="请输入年度总用电量" />
-        </el-form-item>
-        <el-form-item label="是否欠缴" prop="arrearExists">
-          <el-select
-            v-model="formData.arrearExists"
-            placeholder="请选择是否欠缴"
-            style="width: 100%"
-          >
-            <el-option
-              v-for="item in arrearOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
-          </el-select>
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button @click="dialogVisible = false">取消</el-button>
-          <el-button type="primary" @click="handleConfirm">确定</el-button>
-        </span>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
 <style scoped>
-/* 如有特定样式需求,可在此添加,否则UnoCSS会处理大部分样式 */
+/* Add any specific styles here if needed, otherwise UnoCSS handles most */
 </style>

+ 470 - 353
src/views/ggsyfgl/rqgl/index.vue

@@ -1,11 +1,336 @@
+<template>
+  <div class="p-4">
+    <div class="mb-6 p-4 bg-white rounded-lg shadow-sm flex flex-wrap items-center gap-4">
+      <el-form :inline="true" :model="searchForm" class="flex-grow flex flex-wrap">
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">企业名称:</span>
+          <el-input
+            v-model="searchForm.enterpriseName"
+            style="width: 240px"
+            size="default"
+            placeholder="请输入企业名称"
+            @clear="handleSearch"
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">信用代码:</span>
+          <el-input
+            v-model="searchForm.unifiedSocialCreditCode"
+            style="width: 240px"
+            size="default"
+            placeholder="输入统一社会信用代码"
+            clearable
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">户号信息:</span>
+          <el-input
+            v-model="searchForm.accountNumber"
+            style="width: 240px"
+            size="default"
+            placeholder="输入户号信息"
+            clearable
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">年度:</span>
+          <el-select v-model="searchForm.year"
+                     style="width: 240px"
+                     size="default" placeholder="请选择年度">
+            <el-option
+              v-for="item in annualOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" :icon="Search" @click="handleSearch" size="search">查询
+          </el-button>
+          <el-button :icon="Refresh" @click="handleResetSearch" size="search">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <div class="flex gap-1" style="justify-content:flex-end">
+        <el-button type="primary" :icon="Plus" @click="handleAdd" size="search">新增</el-button>
+        <el-button
+          type="danger"
+          :icon="Delete"
+          @click="handleBatchDelete"
+          :disabled="selectedIds.length === 0"
+          size="search"
+        >批量删除
+        </el-button
+        >
+        <el-button type="success" :icon="Download" @click="exportExcel" size="search">导出</el-button>
+        <el-upload
+          class="inline-block ml-2"
+          action="/api/eenterpriseGasAnnualStatistics/importData"
+          :show-file-list="false"
+          :on-success="handleUploadSuccess"
+          :on-error="handleUploadError"
+          :before-upload="handleBeforeUpload"
+          :http-request="(options) => importExcel(options.file)"
+        >
+          <el-button type="info" :icon="Upload" size="search">导入</el-button>
+        </el-upload>
+      </div>
+    </div>
+
+    <!-- Table -->
+    <div class="bg-white rounded-lg shadow-sm p-4 overflow-x-auto">
+      <el-table
+        :data="tableData"
+        style="width: 100%"
+        border
+        @selection-change="handleSelectionChange"
+        :cell-style="{ fontSize: '14px' }"
+        :header-cell-style="{ fontSize: '14px' }"
+        :row-style="{ fontSize: '14px' }"
+      >
+        <el-table-column type="selection" width="55" fixed="left"/>
+        <el-table-column prop="enterpriseName" label="企业名称" align="center"/>
+        <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" align="center"/>
+        <el-table-column prop="accountNumber" label="户号信息" align="center"/>
+        <el-table-column prop="year" label="年度" align="center"/>
+        <el-table-column prop="openingDate" label="开户日期" align="center"/>
+
+        <el-table-column label="第一季度" align="center">
+          <el-table-column prop="q1CubicMeter" label="用气量(m³)" align="center"/>
+          <el-table-column prop="q1Cost" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="第二季度" align="center">
+          <el-table-column prop="q2CubicMeter" label="用气量(m³)" align="center"/>
+          <el-table-column prop="q2CubicMeter" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="第三季度" align="center">
+          <el-table-column prop="q3CubicMeter" label="用气量(m³)" align="center"/>
+          <el-table-column prop="q3CubicMeter" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="第四季度" align="center">
+          <el-table-column prop="q4CubicMeter" label="用气量(m³)" align="center"/>
+          <el-table-column prop="q4CubicMeter" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="年度总量" align="center">
+          <el-table-column prop="annualTotalCubicMeter" label="用气量(m³)" align="center"/>
+          <el-table-column prop="annualTotalCost" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="操作" fixed="right" align="center">
+          <template #default="{ row }">
+            <el-button :icon="Edit" size="small" @click="handleEdit(row)">编辑</el-button>
+            <el-button type="danger" :icon="Delete" size="small" @click="handleDelete(row.id)"
+            >删除
+            </el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- Pagination -->
+      <div class="mt-4 flex justify-end">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="pageNum"
+          :page-sizes="[10, 20, 50, 100]"
+          :page-size="pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total"
+        />
+      </div>
+    </div>
+
+    <!-- Add/Edit Dialog -->
+    <el-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      width="800px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+    >
+      <el-form
+        :model="formData"
+        ref="formRef"
+        label-width="120px"
+        class="grid grid-cols-1 md:grid-cols-2 gap-4"
+      >
+        <el-form-item
+          label="企业名称"
+          prop="enterpriseName"
+          :rules="[{ required: true, message: '请输入企业名称', trigger: 'blur' }]"
+        >
+          <el-input v-model="formData.enterpriseName" placeholder="请输入企业名称"/>
+        </el-form-item>
+        <el-form-item
+          label="信用代码"
+          prop="unifiedSocialCreditCode"
+          :rules="[{ required: true, message: '请输入统一社会信用代码', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.unifiedSocialCreditCode"
+            placeholder="请输入统一社会信用代码"
+          />
+        </el-form-item>
+        <el-form-item
+          label="户号信息"
+          prop="accountNumber"
+          :rules="[{ required: true, message: '请输入户号信息', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.accountNumber"
+            placeholder="请输入户号信息"
+          />
+        </el-form-item>
+        <el-form-item
+          label="开户日期"
+          prop="openingDate"
+          :rules="[{ required: true, message: '请选择开户日期', trigger: 'change' }]"
+        >
+          <el-date-picker v-model="formData.openingDate" type="date" format="YYYY/MM/DD" value-format="YYYY-MM-DD"/>
+        </el-form-item>
+        <el-form-item
+          label="年度"
+          prop="year"
+          :rules="[{ required: true, message: '请选择年度', trigger: 'change' }]"部门
+        >
+          <el-select v-model="formData.year" placeholder="请选择年度" style="width: 100%">
+            <el-option
+              v-for="item in annualOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item
+          label="第一季度费用"
+          prop="q1Cost"
+          :rules="[
+            { required: true, message: '请输入第一季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q1Cost" placeholder="请输入第一季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第一季度用气数"
+          prop="q1CubicMeter"
+          :rules="[
+            { required: true, message: '请输入第一季度用气数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q1CubicMeter" placeholder="请输入第一季度用气数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="第二季度费用"
+          prop="q2Cost"
+          :rules="[
+            { required: true, message: '请输入第二季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q2Cost" placeholder="请输入第二季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第二季度用气数"
+          prop="q2CubicMeter"
+          :rules="[
+            { required: true, message: '请输入第二季度用气数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q2CubicMeter" placeholder="请输入第二季度用气数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="第三季度费用"
+          prop="q3Cost"
+          :rules="[
+            { required: true, message: '请输入第三季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q3Cost" placeholder="请输入第三季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第三季度用气数"
+          prop="q3CubicMeter"
+          :rules="[
+            { required: true, message: '请输入第三季度用气数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q3CubicMeter" placeholder="请输入第三季度用气数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="第四季度费用"
+          prop="q4Cost"
+          :rules="[
+            { required: true, message: '请输入第四季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q4Cost" placeholder="请输入第四季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第四季度用气数"
+          prop="q4CubicMeter"
+          :rules="[
+            { required: true, message: '请输入第四季度用气数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q4CubicMeter" placeholder="请输入第四季度用气数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="年度总费用"
+          prop="annualTotalCost"
+          :rules="[
+            { required: true, message: '请输入年度总费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.annualTotalCost" placeholder="请输入年度总费用"/>
+        </el-form-item>
+        <el-form-item
+          label="年度总度数"
+          prop="annualTotalCubicMeter"
+          :rules="[
+            { required: true, message: '请输入年度总度数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.annualTotalCubicMeter" placeholder="请输入年度总度数"/>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogVisible = false">取消</el-button>
+          <el-button type="primary" @click="handleConfirm">确定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
 <script setup lang="ts">
-import { onMounted, reactive, ref } from 'vue'
-import { clientDownloadExcel, clientGet, clientPost } from '@/utils/request.ts'
-import type { FormInstance, UploadProps } from 'element-plus'
-import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
-import { Delete, Download, Edit, Plus, Refresh, Search, Upload } from '@element-plus/icons-vue'
+import {onMounted, reactive, ref} from 'vue'
+import {clientDownloadExcel, clientGet, clientPost} from '@/utils/request.ts'
+import type {FormInstance, UploadProps} from 'element-plus'
+import {ElForm, ElLoading, ElMessage, ElMessageBox} from 'element-plus'
+import {Delete, Download, Edit, Plus, Refresh, Search, Upload} from '@element-plus/icons-vue'
 
-// 基础类型定义
+// 假设 BaseResponse 和 PageType 在全局或 request.ts 中已定义
 interface BaseResponse {
   code: number
   msg: string
@@ -19,31 +344,28 @@ interface PageType<T> {
   pages: number
 }
 
-// 燃气信息相关接口定义
 interface Property {
-  id: string // 主键id
-  company?: string // 企业名称
-  uniCode?: string // 统一社会信用代码
-  tableName?: string // 事项名称
-  tableCode?: string // 事项编码
-  userInfo?: string // 燃气用户信息(户名户号)
-  paymentDetail?: string // 缴纳燃气费明细
-  monthlyConsumption3?: number // 近3个月月均燃气用量
-  monthlyConsumption6?: number // 近6个月月均燃气用量
-  isInArrears?: string // 当前是否欠费
-  entityZtlb?: string // 类别
-  openDate?: string // 开户日期 (改为string用于显示)
-  userAddress?: string // 用户地址
-  advanceAmount?: string // 预交金额
-  arrearageAmount?: string // 欠费金额
-  onehouseOnemeter?: string // 是否一户一表
-  paymentPeriod?: string // 缴费所属期
-  statisticalDate?: string // 统计日期
-  remark?: string // 备注
-  createTime?: string // 创建时间 (改为string用于显示)
-  createBy?: string // 创建用户
-  updateTime?: string // 更新时间 (改为string用于显示)
-  updateBy?: string // 更新用户
+  id: string // 主键ID
+
+  enterpriseName: string // 单位名称
+  unifiedSocialCreditCode: string // 统一社会信用代码
+  year?: string // 年度(可选)
+  accountNumber?: string // 户号信息
+  q1Cost?: string // 第一季度费用
+  q1CubicMeter?: string // 	第一季度用气数
+  q2Cost?: string // 第二季度费用
+  q2CubicMeter?: string // 第二季度用气数
+  q3Cost?: string // 第三季度费用
+  q3CubicMeter?: string // 	第三季度用气数
+  q4Cost?: string // 	第四季度费用
+  q4CubicMeter?: string // 	第四季度用气数
+  annualTotalCost?: string // 	年度总费用
+  annualTotalCubicMeter?: string // 	年度总度数
+  openingDate?: string // 	开户日期
+
+  updateTime?: string // 更新时间
+  createTime?: string // 创建时间
+  createBy?: string // 创建人
 }
 
 interface PropertyOneResponse extends BaseResponse {
@@ -55,46 +377,40 @@ interface PropertyListResponse extends BaseResponse {
 }
 
 interface AddProperty {
-  company?: string // 企业名称
-  uniCode?: string // 统一社会信用代码
-  tableName?: string // 事项名称
-  tableCode?: string // 事项编码
-  userInfo?: string // 燃气用户信息(户名户号)
-  paymentDetail?: string // 缴纳燃气费明细
-  monthlyConsumption3?: number // 近3个月月均燃气用量
-  monthlyConsumption6?: number // 近6个月月均燃气用量
-  isInArrears?: string // 当前是否欠费
-  entityZtlb?: string // 类别
-  openDate?: string // 开户日期
-  userAddress?: string // 用户地址
-  advanceAmount?: string // 预交金额
-  arrearageAmount?: string // 欠费金额
-  onehouseOnemeter?: string // 是否一户一表
-  paymentPeriod?: string // 缴费所属期
-  statisticalDate?: string // 统计日期
-  remark?: string // 备注
+  enterpriseName: string // 单位名称
+  unifiedSocialCreditCode: string // 统一社会信用代码
+  year?: string // 年度(可选)
+  accountNumber?: string // 户号信息
+  q1Cost?: string // 第一季度费用
+  q1CubicMeter?: string // 	第一季度用气数
+  q2Cost?: string // 第二季度费用
+  q2CubicMeter?: string // 第二季度用气数
+  q3Cost?: string // 第三季度费用
+  q3CubicMeter?: string // 	第三季度用气数
+  q4Cost?: string // 	第四季度费用
+  q4CubicMeter?: string // 	第四季度用气数
+  annualTotalCost?: string // 	年度总费用
+  annualTotalCubicMeter?: string // 	年度总度数
+  openingDate?: string // 	开户日期
 }
 
 interface UpdateProperty {
   id?: string
-  company?: string // 企业名称
-  uniCode?: string // 统一社会信用代码
-  tableName?: string // 事项名称
-  tableCode?: string // 事项编码
-  userInfo?: string // 燃气用户信息(户名户号)
-  paymentDetail?: string // 缴纳燃气费明细
-  monthlyConsumption3?: number // 近3个月月均燃气用量
-  monthlyConsumption6?: number // 近6个月月均燃气用量
-  isInArrears?: string // 当前是否欠费
-  entityZtlb?: string // 类别
-  openDate?: string // 开户日期
-  userAddress?: string // 用户地址
-  advanceAmount?: string // 预交金额
-  arrearageAmount?: string // 欠费金额
-  onehouseOnemeter?: string // 是否一户一表
-  paymentPeriod?: string // 缴费所属期
-  statisticalDate?: string // 统计日期
-  remark?: string // 备注
+  enterpriseName: string // 单位名称
+  unifiedSocialCreditCode: string // 统一社会信用代码
+  year?: string // 年度(可选)
+  accountNumber?: string // 户号信息
+  q1Cost?: string // 第一季度费用
+  q1CubicMeter?: string // 	第一季度用气数
+  q2Cost?: string // 第二季度费用
+  q2CubicMeter?: string // 第二季度用气数
+  q3Cost?: string // 第三季度费用
+  q3CubicMeter?: string // 	第三季度用气数
+  q4Cost?: string // 	第四季度费用
+  q4CubicMeter?: string // 	第四季度用气数
+  annualTotalCost?: string // 	年度总费用
+  annualTotalCubicMeter?: string // 	年度总度数
+  openingDate?: string // 	开户日期
 }
 
 // 响应式状态变量
@@ -104,8 +420,10 @@ const pageSize = ref(10)
 const pageNum = ref(1)
 
 const searchForm = reactive({
-  userInfo: '',
-  company: '',
+  accountNumber: '',
+  enterpriseName: '',
+  unifiedSocialCreditCode: '',
+  year: '',
 })
 
 const dialogVisible = ref(false)
@@ -115,31 +433,22 @@ const formData = reactive<Property>({})
 const formRef = ref<FormInstance>()
 const selectedIds = ref<string[]>([])
 
-// 欠费状态选项
-const arrearOptions = [
-  { label: '是', value: '是' },
-  { label: '否', value: '否' },
-]
-
-// 一户一表选项
-const onehouseOptions = [
-  { label: '是', value: '是' },
-  { label: '否', value: '否' },
+// 欠缴状态选项
+const arrearsOptions = [
+  {label: '是', value: '是'},
+  {label: '否', value: '否'},
 ]
 
-// 获取欠费状态标签
-const getArrearLabel = (value: string | undefined) => {
-  return arrearOptions.find((option) => option.value === value)?.label || '-'
-}
+// 年度选项(动态生成最近5年)
+const currentYear = new Date().getFullYear()
 
-// 获取一户一表标签
-const getOnehouseLabel = (value: string | undefined) => {
-  return onehouseOptions.find((option) => option.value === value)?.label || '-'
-}
-
-// 接口调用函数
+const annualOptions = Array.from({length: 10}, (_, i) => ({
+  label: `${currentYear - i}年`,
+  value: `${currentYear - i}`,
+}))
+// 新增
 const add = async (data: AddProperty) => {
-  const res = await clientPost<AddProperty, BaseResponse>('/egas/save', {
+  const res = await clientPost<AddProperty, BaseResponse>('/eenterpriseGasAnnualStatistics/save', {
     ...data,
   })
 
@@ -152,8 +461,9 @@ const add = async (data: AddProperty) => {
   return true
 }
 
+// 根据id获取数据
 const getById = async (id: string) => {
-  const res = await clientGet<null, PropertyOneResponse>('/egas/getById/' + id)
+  const res = await clientGet<null, PropertyOneResponse>('/eenterpriseGasAnnualStatistics/getById/' + id)
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return null
@@ -161,41 +471,41 @@ const getById = async (id: string) => {
   return res.data
 }
 
+// 分页获取数据
 const getList = async () => {
-  const loading = ElLoading.service({ text: '加载中...' })
-  try {
-    const res = await clientGet<
-      {
-        pageNum: number
-        pageSize: number
-        userInfo?: string
-        company?: string
-      },
-      PropertyListResponse
-    >('/egas/findByPage', {
-      params: {
-        pageNum: pageNum.value,
-        pageSize: pageSize.value,
-        userInfo: searchForm.userInfo || undefined,
-        company: searchForm.company || undefined,
-      },
-    })
+  // 构建参数对象,只包含有值的搜索条件
+  const params = {
+    pageNum: pageNum.value,
+    pageSize: pageSize.value,
+    ...(searchForm.accountNumber ? {accountNumber: searchForm.accountNumber} : {}),
+    ...(searchForm.unifiedSocialCreditCode ? {unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode} : {}),
+    ...(searchForm.enterpriseName ? {enterpriseName: searchForm.enterpriseName} : {}),
+    ...(searchForm.year ? {year: searchForm.year} : {}),
+  }
 
-    if (res.code !== 200) {
-      ElMessage.error(res.msg)
-      return
-    }
-    tableData.value = res.data.records
-    total.value = res.data.total
-  } catch (error) {
-    ElMessage.error('获取数据失败')
-  } finally {
-    loading.close()
+  const res = await clientGet<{
+    pageNum: number
+    pageSize: number
+    accountNumber?: string
+    unifiedSocialCreditCode?: string
+    enterpriseName?: string
+    year?: string
+  },
+    PropertyListResponse>('/eenterpriseGasAnnualStatistics/findByPage', {
+    params,
+  })
+
+  if (res.code !== 200) {
+    ElMessage.error(res.msg)
+    return
   }
+  tableData.value = res.data.records
+  total.value = res.data.total
 }
 
+// 批量删除
 const delBatch = async (ids: string[]) => {
-  const res = await clientPost<string, BaseResponse>('/egas/deleteBatch', JSON.stringify(ids))
+  const res = await clientPost<string[], BaseResponse>('/eenterpriseGasAnnualStatistics/deleteBatch', ids)
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return false
@@ -204,8 +514,9 @@ const delBatch = async (ids: string[]) => {
   return true
 }
 
+// 修改
 const update = async (data: UpdateProperty) => {
-  const res = await clientPost<UpdateProperty, BaseResponse>('/egas/update', {
+  const res = await clientPost<UpdateProperty, BaseResponse>('/eenterpriseGasAnnualStatistics/update', {
     ...data,
   })
   if (res.code !== 200) {
@@ -216,6 +527,7 @@ const update = async (data: UpdateProperty) => {
   return true
 }
 
+// 导出为excel
 const exportExcel = async () => {
   const loading = ElLoading.service({
     lock: true,
@@ -225,11 +537,16 @@ const exportExcel = async () => {
   })
 
   try {
-    await clientDownloadExcel('/egas/exportData', {
-      params: {
-        userInfo: searchForm.userInfo || undefined,
-        company: searchForm.company || undefined,
-      },
+    // 构建参数对象,只包含有值的搜索条件
+    const params = {
+      ...(searchForm.accountNumber ? {accountNumber: searchForm.accountNumber} : {}),
+      ...(searchForm.unifiedSocialCreditCode ? {unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode} : {}),
+      ...(searchForm.enterpriseName ? {enterpriseName: searchForm.enterpriseName} : {}),
+      ...(searchForm.year ? {year: searchForm.year} : {}),
+    }
+
+    await clientDownloadExcel('/eenterpriseGasAnnualStatistics/exportData', {
+      params,
     })
     ElMessage.success('导出成功')
   } catch (error) {
@@ -240,34 +557,45 @@ const exportExcel = async () => {
   }
 }
 
+// excel导入
 const importExcel = async (file: File) => {
   const formData = new FormData()
   formData.append('file', file)
-  const res = await clientPost<FormData, BaseResponse>('/egas/importData', formData, {
-    headers: {
-      'Content-Type': 'multipart/form-data',
+
+  const res = await clientPost<FormData, BaseResponse>(
+    '/eenterpriseGasAnnualStatistics/importData',
+    formData,
+    {
+      headers: {
+        'Content-Type': 'multipart/form-data',
+      },
     },
-  })
+  )
+
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return false
   }
   ElMessage.success(res.msg)
+  getList()
   return true
 }
 
-// 事件处理函数
+// --- CRUD 操作和处理函数 ---
+
 const handleAdd = () => {
   isEdit.value = false
-  dialogTitle.value = '新增燃气信息'
+  dialogTitle.value = '新增用水信息'
   // 重置表单数据
   Object.keys(formData).forEach((key) => delete formData[key as keyof Property])
+  // 设置默认值为当前年度
+  formData.openingDate = `${currentYear}`
   dialogVisible.value = true
 }
 
 const handleEdit = async (row: Property) => {
   isEdit.value = true
-  dialogTitle.value = '编辑燃气信息'
+  dialogTitle.value = '编辑用水信息'
   const data = await getById(row.id)
   if (data) {
     Object.assign(formData, data)
@@ -314,13 +642,15 @@ const handleBatchDelete = () => {
 }
 
 const handleSearch = () => {
-  pageNum.value = 1
+  pageNum.value = 1 // 搜索时重置到第一页
   getList()
 }
 
 const handleResetSearch = () => {
-  searchForm.userInfo = ''
-  searchForm.company = ''
+  searchForm.accountNumber = ''
+  searchForm.unifiedSocialCreditCode = ''
+  searchForm.enterpriseName = ''
+  searchForm.year = ''
   pageNum.value = 1
   getList()
 }
@@ -330,7 +660,7 @@ const handleConfirm = async () => {
   await formRef.value.validate(async (valid) => {
     if (valid) {
       let success = false
-      const dataToSend = { ...formData }
+      const dataToSend = {...formData}
 
       if (isEdit.value) {
         success = await update(dataToSend)
@@ -354,7 +684,7 @@ const handleCurrentChange = (val: number) => {
 
 const handleSizeChange = (val: number) => {
   pageSize.value = val
-  pageNum.value = 1
+  pageNum.value = 1 // 页大小改变时重置到第一页
   getList()
 }
 
@@ -362,7 +692,7 @@ const handleSelectionChange = (selection: Property[]) => {
   selectedIds.value = selection.map((item) => item.id)
 }
 
-const handleUploadSuccess: UploadProps['onSuccess'] = async (response) => {
+const handleUploadSuccess: UploadProps['onSuccess'] = async (response, uploadFile) => {
   if (response && response.code === 200) {
     ElMessage.success('文件导入成功')
     getList()
@@ -386,227 +716,14 @@ const handleBeforeUpload: UploadProps['beforeUpload'] = (rawFile) => {
   return true
 }
 
-// 初始化
 const init = () => {
   getList()
-}
+};
 
 onMounted(() => {
   init()
 })
 </script>
-
-<template>
-  <div class="p-4">
-    <h1 class="text-2xl font-bold mb-6">燃气信息管理</h1>
-
-    <!-- 搜索和操作栏 -->
-    <div class="mb-6 p-4 bg-white rounded-lg shadow-sm flex flex-wrap items-center gap-4">
-      <el-form :inline="true" :model="searchForm" class="flex-grow flex flex-wrap gap-x-4">
-        <el-form-item label="燃气用户信息">
-          <el-input v-model="searchForm.userInfo" placeholder="输入户名或户号" clearable />
-        </el-form-item>
-        <el-form-item label="企业名称">
-          <el-input v-model="searchForm.company" placeholder="输入企业名称" clearable />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" :icon="Search" @click="handleSearch">查询</el-button>
-          <el-button :icon="Refresh" @click="handleResetSearch">重置</el-button>
-        </el-form-item>
-      </el-form>
-
-      <div class="flex gap-2">
-        <el-button type="primary" :icon="Plus" @click="handleAdd">新增</el-button>
-        <el-button
-          type="danger"
-          :icon="Delete"
-          @click="handleBatchDelete"
-          :disabled="selectedIds.length === 0"
-          >批量删除</el-button
-        >
-        <el-button type="success" :icon="Download" @click="exportExcel">导出</el-button>
-        <el-upload
-          class="inline-block"
-          action="/api/egas/importData"
-          :show-file-list="false"
-          :on-success="handleUploadSuccess"
-          :on-error="handleUploadError"
-          :before-upload="handleBeforeUpload"
-          :http-request="(options) => importExcel(options.file)"
-        >
-          <el-button type="info" :icon="Upload">导入</el-button>
-        </el-upload>
-      </div>
-    </div>
-
-    <!-- 表格 -->
-    <div class="bg-white rounded-lg shadow-sm p-4 overflow-x-auto">
-      <el-table
-        :data="tableData"
-        style="width: 100%"
-        border
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" fixed="left" />
-        <el-table-column prop="company" label="企业名称" width="180" />
-        <el-table-column prop="uniCode" label="统一社会信用代码" width="200" />
-        <el-table-column prop="userInfo" label="燃气用户信息" width="180" />
-        <el-table-column prop="isInArrears" label="是否欠费" width="100">
-          <template #default="{ row }">
-            <el-tag :type="row.isInArrears === '是' ? 'danger' : 'success'" v-if="row.isInArrears">
-              {{ row.isInArrears }}
-            </el-tag>
-            <el-tag type="info" v-else>未知</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column prop="arrearageAmount" label="欠费金额" width="120" />
-        <el-table-column prop="monthlyConsumption3" label="近3个月月均用量" width="150" />
-        <el-table-column prop="monthlyConsumption6" label="近6个月月均用量" width="150" />
-        <el-table-column prop="onehouseOnemeter" label="是否一户一表" width="120">
-          <template #default="{ row }">
-            <el-tag
-              :type="row.onehouseOnemeter === '是' ? 'success' : 'info'"
-              v-if="row.onehouseOnemeter"
-            >
-              {{ row.onehouseOnemeter }}
-            </el-tag>
-            <el-tag type="info" v-else>未知</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column prop="openDate" label="开户日期" width="150" />
-        <el-table-column prop="userAddress" label="用户地址" width="200" />
-        <el-table-column label="操作" width="180" fixed="right">
-          <template #default="{ row }">
-            <el-button :icon="Edit" size="small" @click="handleEdit(row)">编辑</el-button>
-            <el-button type="danger" :icon="Delete" size="small" @click="handleDelete(row.id)"
-              >删除</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <!-- 分页 -->
-      <div class="mt-4 flex justify-end">
-        <el-pagination
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-          :current-page="pageNum"
-          :page-sizes="[10, 20, 50, 100]"
-          :page-size="pageSize"
-          layout="total, sizes, prev, pager, next, jumper"
-          :total="total"
-        />
-      </div>
-    </div>
-
-    <!-- 新增/编辑对话框 -->
-    <el-dialog
-      v-model="dialogVisible"
-      :title="dialogTitle"
-      width="800px"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-    >
-      <el-form
-        :model="formData"
-        ref="formRef"
-        label-width="120px"
-        class="grid grid-cols-1 md:grid-cols-2 gap-4"
-      >
-        <el-form-item
-          label="企业名称"
-          prop="company"
-          :rules="[{ required: true, message: '请输入企业名称', trigger: 'blur' }]"
-        >
-          <el-input v-model="formData.company" placeholder="请输入企业名称" />
-        </el-form-item>
-        <el-form-item label="统一社会信用代码" prop="uniCode">
-          <el-input v-model="formData.uniCode" placeholder="请输入统一社会信用代码" />
-        </el-form-item>
-        <el-form-item label="事项名称" prop="tableName">
-          <el-input v-model="formData.tableName" placeholder="请输入事项名称" />
-        </el-form-item>
-        <el-form-item label="事项编码" prop="tableCode">
-          <el-input v-model="formData.tableCode" placeholder="请输入事项编码" />
-        </el-form-item>
-        <el-form-item
-          label="燃气用户信息"
-          prop="userInfo"
-          :rules="[{ required: true, message: '请输入燃气用户信息', trigger: 'blur' }]"
-        >
-          <el-input v-model="formData.userInfo" placeholder="请输入户名户号" />
-        </el-form-item>
-        <el-form-item label="缴纳燃气费明细" prop="paymentDetail">
-          <el-input v-model="formData.paymentDetail" placeholder="请输入缴纳燃气费明细" />
-        </el-form-item>
-        <el-form-item label="近3个月月均用量" prop="monthlyConsumption3">
-          <el-input
-            v-model.number="formData.monthlyConsumption3"
-            placeholder="请输入近3个月月均用量"
-          />
-        </el-form-item>
-        <el-form-item label="近6个月月均用量" prop="monthlyConsumption6">
-          <el-input
-            v-model.number="formData.monthlyConsumption6"
-            placeholder="请输入近6个月月均用量"
-          />
-        </el-form-item>
-        <el-form-item label="当前是否欠费" prop="isInArrears">
-          <el-radio-group v-model="formData.isInArrears">
-            <el-radio :label="'是'">是</el-radio>
-            <el-radio :label="'否'">否</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="欠费金额" prop="arrearageAmount">
-          <el-input v-model="formData.arrearageAmount" placeholder="请输入欠费金额" />
-        </el-form-item>
-        <el-form-item label="类别" prop="entityZtlb">
-          <el-input v-model="formData.entityZtlb" placeholder="请输入类别" />
-        </el-form-item>
-        <el-form-item label="开户日期" prop="openDate">
-          <el-date-picker
-            v-model="formData.openDate"
-            type="date"
-            placeholder="选择开户日期"
-            value-format="YYYY-MM-DD"
-            style="width: 100%"
-          />
-        </el-form-item>
-        <el-form-item label="用户地址" prop="userAddress">
-          <el-input v-model="formData.userAddress" placeholder="请输入用户地址" />
-        </el-form-item>
-        <el-form-item label="是否一户一表" prop="onehouseOnemeter">
-          <el-radio-group v-model="formData.onehouseOnemeter">
-            <el-radio :label="'是'">是</el-radio>
-            <el-radio :label="'否'">否</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="缴费所属期" prop="paymentPeriod">
-          <el-input v-model="formData.paymentPeriod" placeholder="请输入缴费所属期" />
-        </el-form-item>
-        <el-form-item label="统计日期" prop="statisticalDate">
-          <el-date-picker
-            v-model="formData.statisticalDate"
-            type="date"
-            placeholder="选择统计日期"
-            value-format="YYYY-MM-DD"
-            style="width: 100%"
-          />
-        </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="formData.remark" placeholder="请输入备注" type="textarea" :rows="2" />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button @click="dialogVisible = false">取消</el-button>
-          <el-button type="primary" @click="handleConfirm">确定</el-button>
-        </span>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
 <style scoped>
-/* 如有特定样式需求,可在此添加,否则UnoCSS会处理大部分样式 */
+/* Add any specific styles here if needed, otherwise UnoCSS handles most */
 </style>

+ 420 - 308
src/views/ggsyfgl/sfgl/index.vue

@@ -1,9 +1,343 @@
+<template>
+  <div class="p-4">
+    <div class="mb-6 p-4 bg-white rounded-lg shadow-sm flex flex-wrap items-center gap-4">
+      <el-form :inline="true" :model="searchForm" class="flex-grow flex flex-wrap">
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">企业名称:</span>
+          <el-input
+            v-model="searchForm.enterpriseName"
+            style="width: 240px"
+            size="default"
+            placeholder="请输入企业名称"
+            @clear="handleSearch"
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">信用代码:</span>
+          <el-input
+            v-model="searchForm.unifiedSocialCreditCode"
+            style="width: 240px"
+            size="default"
+            placeholder="输入统一社会信用代码"
+            clearable
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">户号信息:</span>
+          <el-input
+            v-model="searchForm.accountNumber"
+            style="width: 240px"
+            size="default"
+            placeholder="输入户号信息"
+            clearable
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">年度:</span>
+          <el-select v-model="searchForm.year"
+                     style="width: 240px"
+                     size="default" placeholder="请选择年度">
+            <el-option
+              v-for="item in annualOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" :icon="Search" @click="handleSearch" size="search">查询
+          </el-button>
+          <el-button :icon="Refresh" @click="handleResetSearch" size="search">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <div class="flex gap-1" style="justify-content:flex-end">
+        <el-button type="primary" :icon="Plus" @click="handleAdd" size="search">新增</el-button>
+        <el-button
+          type="danger"
+          :icon="Delete"
+          @click="handleBatchDelete"
+          :disabled="selectedIds.length === 0"
+          size="search"
+        >批量删除
+        </el-button
+        >
+        <el-button type="success" :icon="Download" @click="exportExcel" size="search">导出</el-button>
+        <el-upload
+          class="inline-block ml-2"
+          action="/api/eenterpriseWaterAnnualStatistics/importData"
+          :show-file-list="false"
+          :on-success="handleUploadSuccess"
+          :on-error="handleUploadError"
+          :before-upload="handleBeforeUpload"
+          :http-request="(options) => importExcel(options.file)"
+        >
+          <el-button type="info" :icon="Upload" size="search">导入</el-button>
+        </el-upload>
+      </div>
+    </div>
+
+    <!-- Table -->
+    <div class="bg-white rounded-lg shadow-sm p-4 overflow-x-auto">
+      <el-table
+        :data="tableData"
+        style="width: 100%"
+        border
+        @selection-change="handleSelectionChange"
+        :cell-style="{ fontSize: '14px' }"
+        :header-cell-style="{ fontSize: '14px' }"
+        :row-style="{ fontSize: '14px' }"
+      >
+        <el-table-column type="selection" width="55" fixed="left"/>
+        <el-table-column prop="enterpriseName" label="企业名称" align="center"/>
+        <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" align="center"/>
+        <el-table-column prop="accountNumber" label="户号信息" align="center"/>
+        <el-table-column prop="year" label="年度" align="center"/>
+
+        <el-table-column prop="openingDate" label="开户日期" align="center"/>
+
+        <el-table-column label="第一季度" align="center">
+          <el-table-column prop="q1Ton" label="用水量(吨)" align="center"/>
+          <el-table-column prop="q1Cost" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="第二季度" align="center">
+          <el-table-column prop="q2Ton" label="用水量(吨)" align="center"/>
+          <el-table-column prop="q2Cost" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="第三季度" align="center">
+          <el-table-column prop="q3Ton" label="用水量(吨)" align="center"/>
+          <el-table-column prop="q3Cost" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="第四季度" align="center">
+          <el-table-column prop="q4Ton" label="用水量(吨)" align="center"/>
+          <el-table-column prop="q4Cost" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="年度总量" align="center">
+          <el-table-column prop="annualTotalTon" label="用水量(吨)" align="center"/>
+          <el-table-column prop="annualTotalCost" label="费用" align="center"/>
+        </el-table-column>
+        <el-table-column label="操作" fixed="right" align="center">
+          <template #default="{ row }">
+            <el-button :icon="Edit" size="small" @click="handleEdit(row)">编辑</el-button>
+            <el-button type="danger" :icon="Delete" size="small" @click="handleDelete(row.id)"
+            >删除
+            </el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- Pagination -->
+      <div class="mt-4 flex justify-end">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="pageNum"
+          :page-sizes="[10, 20, 50, 100]"
+          :page-size="pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total"
+        />
+      </div>
+    </div>
+
+    <!-- Add/Edit Dialog -->
+    <el-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      width="800px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+    >
+      <el-form
+        :model="formData"
+        ref="formRef"
+        label-width="120px"
+        class="grid grid-cols-1 md:grid-cols-2 gap-4"
+      >
+        <el-form-item
+          label="企业名称"
+          prop="enterpriseName"
+          :rules="[{ required: true, message: '请输入企业名称', trigger: 'blur' }]"
+        >
+          <el-input v-model="formData.enterpriseName" placeholder="请输入企业名称"/>
+        </el-form-item>
+        <el-form-item
+          label="信用代码"
+          prop="unifiedSocialCreditCode"
+          :rules="[{ required: true, message: '请输入统一社会信用代码', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.unifiedSocialCreditCode"
+            placeholder="请输入统一社会信用代码"
+          />
+        </el-form-item>
+        <el-form-item
+          label="户号信息"
+          prop="accountNumber"
+          :rules="[{ required: true, message: '请输入户号信息', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.accountNumber"
+            placeholder="请输入户号信息"
+          />
+        </el-form-item>
+        <el-form-item
+          label="开户日期"
+          prop="openingDate"
+          :rules="[{ required: true, message: '请选择开户日期', trigger: 'change' }]"
+        >
+          <el-date-picker v-model="formData.openingDate" type="date" format="YYYY/MM/DD" value-format="YYYY-MM-DD"/>
+<!--          <el-select v-model="formData.openingDate" placeholder="请选择开户日期" style="width: 100%">-->
+<!--            <el-option-->
+<!--              v-for="item in annualOptionsYMD"-->
+<!--              :key="item.value"-->
+<!--              :label="item.label"-->
+<!--              :value="item.value"-->
+<!--            />-->
+<!--          </el-select>-->
+        </el-form-item>
+        <el-form-item
+          label="年度"
+          prop="year"
+          :rules="[{ required: true, message: '请选择年度', trigger: 'change' }]"
+        >
+          <el-select v-model="formData.year" placeholder="请选择年度" style="width: 100%">
+            <el-option
+              v-for="item in annualOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item
+          label="第一季度费用"
+          prop="q1Cost"
+          :rules="[
+            { required: true, message: '请输入第一季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q1Cost" placeholder="请输入第一季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第一季度吨数"
+          prop="q1Ton"
+          :rules="[
+            { required: true, message: '请输入第一季度吨数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q1Ton" placeholder="请输入第一季度吨数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="第二季度费用"
+          prop="q2Cost"
+          :rules="[
+            { required: true, message: '请输入第二季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q2Cost" placeholder="请输入第二季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第二季度吨数"
+          prop="q2Ton"
+          :rules="[
+            { required: true, message: '请输入第二季度吨数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q2Ton" placeholder="请输入第二季度吨数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="第三季度费用"
+          prop="q3Cost"
+          :rules="[
+            { required: true, message: '请输入第三季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q3Cost" placeholder="请输入第三季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第三季度吨数"
+          prop="q3Ton"
+          :rules="[
+            { required: true, message: '请输入第三季度吨数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q3Ton" placeholder="请输入第三季度吨数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="第四季度费用"
+          prop="q4Cost"
+          :rules="[
+            { required: true, message: '请输入第四季度费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q4Cost" placeholder="请输入第四季度费用"/>
+        </el-form-item>
+        <el-form-item
+          label="第四季度吨数"
+          prop="q4Ton"
+          :rules="[
+            { required: true, message: '请输入第四季度吨数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.q4Ton" placeholder="请输入第四季度吨数"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="年度总费用"
+          prop="annualTotalCost"
+          :rules="[
+            { required: true, message: '请输入年度总费用', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.annualTotalCost" placeholder="请输入年度总费用"/>
+        </el-form-item>
+        <el-form-item
+          label="年度总吨数"
+          prop="annualTotalTon"
+          :rules="[
+            { required: true, message: '请输入年度总吨数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.annualTotalTon" placeholder="请输入年度总吨数"/>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogVisible = false">取消</el-button>
+          <el-button type="primary" @click="handleConfirm">确定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
 <script setup lang="ts">
-import { onMounted, reactive, ref } from 'vue'
-import { clientDownloadExcel, clientGet, clientPost } from '@/utils/request.ts'
-import type { FormInstance, UploadProps } from 'element-plus'
-import { ElForm, ElLoading, ElMessage, ElMessageBox } from 'element-plus'
-import { Delete, Download, Edit, Plus, Refresh, Search, Upload } from '@element-plus/icons-vue'
+import {onMounted, reactive, ref} from 'vue'
+import {clientDownloadExcel, clientGet, clientPost} from '@/utils/request.ts'
+import type {FormInstance, UploadProps} from 'element-plus'
+import {ElForm, ElLoading, ElMessage, ElMessageBox} from 'element-plus'
+import {Delete, Download, Edit, Plus, Refresh, Search, Upload} from '@element-plus/icons-vue'
 
 // 假设 BaseResponse 和 PageType 在全局或 request.ts 中已定义
 interface BaseResponse {
@@ -21,19 +355,26 @@ interface PageType<T> {
 
 interface Property {
   id: string // 主键ID
-  unitName: string // 单位名称
+
+  enterpriseName: string // 单位名称
   unifiedSocialCreditCode: string // 统一社会信用代码
-  annual?: string // 年度(可选)
-  firstQuarterUsage?: string // 第一季度
-  secondQuarterUsage?: string // 第二季度
-  thirdQuarterUsage?: string // 第三季度
-  fourthQuarterUsage?: string // 第四季度
-  total?: string // 合计
-  isCurrentlyInArrears?: string // 当前是否欠缴水费
+  year?: string // 年度(可选)
+  accountNumber?: string // 户号信息
+  q1Cost?: string // 第一季度费用
+  q1Ton?: string // 	第一季度吨数
+  q2Cost?: string // 第二季度费用
+  q2Ton?: string // 第二季度吨数
+  q3Cost?: string // 第三季度费用
+  q3Ton?: string // 	第三季度吨数
+  q4Cost?: string // 	第四季度费用
+  q4Ton?: string // 	第四季度吨数
+  annualTotalCost?: string // 	年度总费用
+  annualTotalTon?: string // 	年度总吨数
+  openingDate?: string // 	开户日期
+
+  updateTime?: string // 更新时间
   createTime?: string // 创建时间
   createBy?: string // 创建人
-  updateTime?: string // 修改时间
-  updateBy?: string // 修改人
 }
 
 interface PropertyOneResponse extends BaseResponse {
@@ -45,28 +386,40 @@ interface PropertyListResponse extends BaseResponse {
 }
 
 interface AddProperty {
-  unitName: string // 单位名称
+  enterpriseName: string // 单位名称
   unifiedSocialCreditCode: string // 统一社会信用代码
-  annual?: string // 年度(可选)
-  firstQuarterUsage?: string // 第一季度
-  secondQuarterUsage?: string // 第二季度
-  thirdQuarterUsage?: string // 第三季度
-  fourthQuarterUsage?: string // 第四季度
-  total?: string // 合计
-  isCurrentlyInArrears?: string // 当前是否欠缴水费
+  year?: string // 年度(可选)
+  accountNumber?: string // 户号信息
+  q1Cost?: string // 第一季度费用
+  q1Ton?: string // 	第一季度吨数
+  q2Cost?: string // 第二季度费用
+  q2Ton?: string // 第二季度吨数
+  q3Cost?: string // 第三季度费用
+  q3Ton?: string // 	第三季度吨数
+  q4Cost?: string // 	第四季度费用
+  q4Ton?: string // 	第四季度吨数
+  annualTotalCost?: string // 	年度总费用
+  annualTotalTon?: string // 	年度总吨数
+  openingDate?: string // 	开户日期
 }
 
 interface UpdateProperty {
   id?: string
-  unitName: string // 单位名称
+  enterpriseName: string // 单位名称
   unifiedSocialCreditCode: string // 统一社会信用代码
-  annual?: string // 年度(可选)
-  firstQuarterUsage?: string // 第一季度
-  secondQuarterUsage?: string // 第二季度
-  thirdQuarterUsage?: string // 第三季度
-  fourthQuarterUsage?: string // 第四季度
-  total?: string // 合计
-  isCurrentlyInArrears?: string // 当前是否欠缴水费
+  year?: string // 年度(可选)
+  accountNumber?: string // 户号信息
+  q1Cost?: string // 第一季度费用
+  q1Ton?: string // 	第一季度吨数
+  q2Cost?: string // 第二季度费用
+  q2Ton?: string // 第二季度吨数
+  q3Cost?: string // 第三季度费用
+  q3Ton?: string // 	第三季度吨数
+  q4Cost?: string // 	第四季度费用
+  q4Ton?: string // 	第四季度吨数
+  annualTotalCost?: string // 	年度总费用
+  annualTotalTon?: string // 	年度总吨数
+  openingDate?: string // 	开户日期
 }
 
 // 响应式状态变量
@@ -76,10 +429,10 @@ const pageSize = ref(10)
 const pageNum = ref(1)
 
 const searchForm = reactive({
-  unitName: '',
+  accountNumber: '',
+  enterpriseName: '',
   unifiedSocialCreditCode: '',
-  isCurrentlyInArrears: '',
-  annual: '',
+  year: '',
 })
 
 const dialogVisible = ref(false)
@@ -91,20 +444,20 @@ const selectedIds = ref<string[]>([])
 
 // 欠缴状态选项
 const arrearsOptions = [
-  { label: '是', value: '是' },
-  { label: '否', value: '否' },
+  {label: '是', value: '是'},
+  {label: '否', value: '否'},
 ]
 
 // 年度选项(动态生成最近5年)
 const currentYear = new Date().getFullYear()
-const annualOptions = Array.from({ length: 5 }, (_, i) => ({
+
+const annualOptions = Array.from({length: 10}, (_, i) => ({
   label: `${currentYear - i}年`,
   value: `${currentYear - i}`,
 }))
-
 // 新增
 const add = async (data: AddProperty) => {
-  const res = await clientPost<AddProperty, BaseResponse>('/equarterlyWaterUsage/save', {
+  const res = await clientPost<AddProperty, BaseResponse>('/eenterpriseWaterAnnualStatistics/save', {
     ...data,
   })
 
@@ -119,7 +472,7 @@ const add = async (data: AddProperty) => {
 
 // 根据id获取数据
 const getById = async (id: string) => {
-  const res = await clientGet<null, PropertyOneResponse>('/equarterlyWaterUsage/getById/' + id)
+  const res = await clientGet<null, PropertyOneResponse>('/eenterpriseWaterAnnualStatistics/getById/' + id)
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return null
@@ -133,27 +486,21 @@ const getList = async () => {
   const params = {
     pageNum: pageNum.value,
     pageSize: pageSize.value,
-    ...(searchForm.unitName ? { unitName: searchForm.unitName } : {}),
-    ...(searchForm.unifiedSocialCreditCode
-      ? { unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode }
-      : {}),
-    ...(searchForm.isCurrentlyInArrears
-      ? { isCurrentlyInArrears: searchForm.isCurrentlyInArrears }
-      : {}),
-    ...(searchForm.annual ? { annual: searchForm.annual } : {}),
+    ...(searchForm.accountNumber ? {accountNumber: searchForm.accountNumber} : {}),
+    ...(searchForm.unifiedSocialCreditCode ? {unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode} : {}),
+    ...(searchForm.enterpriseName ? {enterpriseName: searchForm.enterpriseName} : {}),
+    ...(searchForm.year ? {year: searchForm.year} : {}),
   }
 
-  const res = await clientGet<
-    {
-      pageNum: number
-      pageSize: number
-      unitName?: string
-      unifiedSocialCreditCode?: string
-      isCurrentlyInArrears?: string
-      annual?: string
-    },
-    PropertyListResponse
-  >('/equarterlyWaterUsage/findByPage', {
+  const res = await clientGet<{
+    pageNum: number
+    pageSize: number
+    accountNumber?: string
+    unifiedSocialCreditCode?: string
+    enterpriseName?: string
+    year?: string
+  },
+    PropertyListResponse>('/eenterpriseWaterAnnualStatistics/findByPage', {
     params,
   })
 
@@ -167,7 +514,7 @@ const getList = async () => {
 
 // 批量删除
 const delBatch = async (ids: string[]) => {
-  const res = await clientPost<string[], BaseResponse>('/equarterlyWaterUsage/deleteBatch', ids)
+  const res = await clientPost<string[], BaseResponse>('/eenterpriseWaterAnnualStatistics/deleteBatch', ids)
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return false
@@ -178,7 +525,7 @@ const delBatch = async (ids: string[]) => {
 
 // 修改
 const update = async (data: UpdateProperty) => {
-  const res = await clientPost<UpdateProperty, BaseResponse>('/equarterlyWaterUsage/update', {
+  const res = await clientPost<UpdateProperty, BaseResponse>('/eenterpriseWaterAnnualStatistics/update', {
     ...data,
   })
   if (res.code !== 200) {
@@ -201,17 +548,13 @@ const exportExcel = async () => {
   try {
     // 构建参数对象,只包含有值的搜索条件
     const params = {
-      ...(searchForm.unitName ? { unitName: searchForm.unitName } : {}),
-      ...(searchForm.unifiedSocialCreditCode
-        ? { unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode }
-        : {}),
-      ...(searchForm.isCurrentlyInArrears
-        ? { isCurrentlyInArrears: searchForm.isCurrentlyInArrears }
-        : {}),
-      ...(searchForm.annual ? { annual: searchForm.annual } : {}),
+      ...(searchForm.accountNumber ? {accountNumber: searchForm.accountNumber} : {}),
+      ...(searchForm.unifiedSocialCreditCode ? {unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode} : {}),
+      ...(searchForm.enterpriseName ? {enterpriseName: searchForm.enterpriseName} : {}),
+      ...(searchForm.year ? {year: searchForm.year} : {}),
     }
 
-    await clientDownloadExcel('/equarterlyWaterUsage/exportData', {
+    await clientDownloadExcel('/eenterpriseWaterAnnualStatistics/exportData', {
       params,
     })
     ElMessage.success('导出成功')
@@ -229,7 +572,7 @@ const importExcel = async (file: File) => {
   formData.append('file', file)
 
   const res = await clientPost<FormData, BaseResponse>(
-    '/equarterlyWaterUsage/importData',
+    '/eenterpriseWaterAnnualStatistics/importData',
     formData,
     {
       headers: {
@@ -243,6 +586,7 @@ const importExcel = async (file: File) => {
     return false
   }
   ElMessage.success(res.msg)
+  getList()
   return true
 }
 
@@ -254,7 +598,7 @@ const handleAdd = () => {
   // 重置表单数据
   Object.keys(formData).forEach((key) => delete formData[key as keyof Property])
   // 设置默认值为当前年度
-  formData.annual = `${currentYear}`
+  formData.openingDate = `${currentYear}`
   dialogVisible.value = true
 }
 
@@ -312,10 +656,10 @@ const handleSearch = () => {
 }
 
 const handleResetSearch = () => {
-  searchForm.unitName = ''
+  searchForm.accountNumber = ''
   searchForm.unifiedSocialCreditCode = ''
-  searchForm.isCurrentlyInArrears = ''
-  searchForm.annual = ''
+  searchForm.enterpriseName = ''
+  searchForm.year = ''
   pageNum.value = 1
   getList()
 }
@@ -325,7 +669,7 @@ const handleConfirm = async () => {
   await formRef.value.validate(async (valid) => {
     if (valid) {
       let success = false
-      const dataToSend = { ...formData }
+      const dataToSend = {...formData}
 
       if (isEdit.value) {
         success = await update(dataToSend)
@@ -389,238 +733,6 @@ onMounted(() => {
   init()
 })
 </script>
-
-<template>
-  <div class="p-4">
-    <h1 class="text-2xl font-bold mb-6">用水信息管理</h1>
-
-    <!-- Search and Action Bar -->
-    <div class="mb-6 p-4 bg-white rounded-lg shadow-sm flex flex-wrap items-center gap-4">
-      <el-form :inline="true" :model="searchForm" class="flex-grow flex flex-wrap gap-x-4">
-        <el-form-item label="单位名称">
-          <el-input v-model="searchForm.unitName" placeholder="输入单位名称" clearable />
-        </el-form-item>
-        <el-form-item label="信用代码">
-          <el-input
-            v-model="searchForm.unifiedSocialCreditCode"
-            placeholder="输入统一社会信用代码"
-            clearable
-          />
-        </el-form-item>
-        <el-form-item label="欠缴状态">
-          <el-select
-            v-model="searchForm.isCurrentlyInArrears"
-            placeholder="请选择欠缴状态"
-            style="width: 150px"
-          >
-            <el-option
-              v-for="item in arrearsOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="年度">
-          <el-select v-model="searchForm.annual" placeholder="请选择年度" style="width: 150px">
-            <el-option
-              v-for="item in annualOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" :icon="Search" @click="handleSearch">查询</el-button>
-          <el-button :icon="Refresh" @click="handleResetSearch">重置</el-button>
-        </el-form-item>
-      </el-form>
-
-      <div class="flex gap-2">
-        <el-button type="primary" :icon="Plus" @click="handleAdd">新增</el-button>
-        <el-button
-          type="danger"
-          :icon="Delete"
-          @click="handleBatchDelete"
-          :disabled="selectedIds.length === 0"
-          >批量删除</el-button
-        >
-        <el-button type="success" :icon="Download" @click="exportExcel">导出</el-button>
-        <el-upload
-          class="inline-block ml-2"
-          action="/api/equarterlyWaterUsage/importData"
-          :show-file-list="false"
-          :on-success="handleUploadSuccess"
-          :on-error="handleUploadError"
-          :before-upload="handleBeforeUpload"
-          :http-request="(options) => importExcel(options.file)"
-        >
-          <el-button type="info" :icon="Upload">导入</el-button>
-        </el-upload>
-      </div>
-    </div>
-
-    <!-- Table -->
-    <div class="bg-white rounded-lg shadow-sm p-4 overflow-x-auto">
-      <el-table
-        :data="tableData"
-        style="width: 100%"
-        border
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" fixed="left" />
-        <el-table-column prop="unitName" label="单位名称" width="150" />
-        <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" width="180" />
-        <el-table-column prop="annual" label="年度" width="100" />
-        <el-table-column prop="firstQuarterUsage" label="第一季度用量" width="120" />
-        <el-table-column prop="secondQuarterUsage" label="第二季度用量" width="120" />
-        <el-table-column prop="thirdQuarterUsage" label="第三季度用量" width="120" />
-        <el-table-column prop="fourthQuarterUsage" label="第四季度用量" width="120" />
-        <el-table-column prop="total" label="全年合计" width="100" />
-        <el-table-column prop="isCurrentlyInArrears" label="是否欠缴" width="100">
-          <template #default="{ row }">
-            <el-tag :type="row.isCurrentlyInArrears === '是' ? 'danger' : 'success'">
-              {{ row.isCurrentlyInArrears || '否' }}
-            </el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column label="操作" width="185" fixed="right">
-          <template #default="{ row }">
-            <el-button :icon="Edit" size="small" @click="handleEdit(row)">编辑</el-button>
-            <el-button type="danger" :icon="Delete" size="small" @click="handleDelete(row.id)"
-              >删除</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <!-- Pagination -->
-      <div class="mt-4 flex justify-end">
-        <el-pagination
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-          :current-page="pageNum"
-          :page-sizes="[10, 20, 50, 100]"
-          :page-size="pageSize"
-          layout="total, sizes, prev, pager, next, jumper"
-          :total="total"
-        />
-      </div>
-    </div>
-
-    <!-- Add/Edit Dialog -->
-    <el-dialog
-      v-model="dialogVisible"
-      :title="dialogTitle"
-      width="800px"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-    >
-      <el-form
-        :model="formData"
-        ref="formRef"
-        label-width="120px"
-        class="grid grid-cols-1 md:grid-cols-2 gap-4"
-      >
-        <el-form-item
-          label="单位名称"
-          prop="unitName"
-          :rules="[{ required: true, message: '请输入单位名称', trigger: 'blur' }]"
-        >
-          <el-input v-model="formData.unitName" placeholder="请输入单位名称" />
-        </el-form-item>
-        <el-form-item
-          label="信用代码"
-          prop="unifiedSocialCreditCode"
-          :rules="[{ required: true, message: '请输入统一社会信用代码', trigger: 'blur' }]"
-        >
-          <el-input
-            v-model="formData.unifiedSocialCreditCode"
-            placeholder="请输入统一社会信用代码"
-          />
-        </el-form-item>
-        <el-form-item
-          label="年度"
-          prop="annual"
-          :rules="[{ required: true, message: '请选择年度', trigger: 'change' }]"
-        >
-          <el-select v-model="formData.annual" placeholder="请选择年度" style="width: 100%">
-            <el-option
-              v-for="item in annualOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="是否欠缴" prop="isCurrentlyInArrears">
-          <el-radio-group v-model="formData.isCurrentlyInArrears">
-            <el-radio :label="'是'">是</el-radio>
-            <el-radio :label="'否'">否</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item
-          label="第一季度用量"
-          prop="firstQuarterUsage"
-          :rules="[
-            { required: true, message: '请输入第一季度用量', trigger: 'blur' },
-            { type: 'number', message: '请输入数字', trigger: 'blur' },
-          ]"
-        >
-          <el-input v-model.number="formData.firstQuarterUsage" placeholder="请输入第一季度用量" />
-        </el-form-item>
-        <el-form-item
-          label="第二季度用量"
-          prop="secondQuarterUsage"
-          :rules="[
-            { required: true, message: '请输入第二季度用量', trigger: 'blur' },
-            { type: 'number', message: '请输入数字', trigger: 'blur' },
-          ]"
-        >
-          <el-input v-model.number="formData.secondQuarterUsage" placeholder="请输入第二季度用量" />
-        </el-form-item>
-        <el-form-item
-          label="第三季度用量"
-          prop="thirdQuarterUsage"
-          :rules="[
-            { required: true, message: '请输入第三季度用量', trigger: 'blur' },
-            { type: 'number', message: '请输入数字', trigger: 'blur' },
-          ]"
-        >
-          <el-input v-model.number="formData.thirdQuarterUsage" placeholder="请输入第三季度用量" />
-        </el-form-item>
-        <el-form-item
-          label="第四季度用量"
-          prop="fourthQuarterUsage"
-          :rules="[
-            { required: true, message: '请输入第四季度用量', trigger: 'blur' },
-            { type: 'number', message: '请输入数字', trigger: 'blur' },
-          ]"
-        >
-          <el-input v-model.number="formData.fourthQuarterUsage" placeholder="请输入第四季度用量" />
-        </el-form-item>
-        <el-form-item
-          label="全年合计"
-          prop="total"
-          :rules="[
-            { required: true, message: '请输入全年合计', trigger: 'blur' },
-            { type: 'number', message: '请输入数字', trigger: 'blur' },
-          ]"
-        >
-          <el-input v-model.number="formData.total" placeholder="请输入全年合计" />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button @click="dialogVisible = false">取消</el-button>
-          <el-button type="primary" @click="handleConfirm">确定</el-button>
-        </span>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
 <style scoped>
 /* Add any specific styles here if needed, otherwise UnoCSS handles most */
 </style>

+ 278 - 262
src/views/qygl/qylxrgl/index.vue → src/views/qygl/qybmgl/index.vue

@@ -1,9 +1,207 @@
+<template>
+  <div class="p-4">
+    <div class="mb-6 p-4 bg-white rounded-lg shadow-sm flex flex-wrap items-center gap-4">
+      <el-form :inline="true" :model="searchForm" class="flex-grow flex flex-wrap">
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">部门名称:</span>
+          <el-input
+            v-model="searchForm.departmentName"
+            style="width: 240px"
+            size="default"
+            placeholder="请输入部门名称"
+            @clear="handleSearch"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" :icon="Search" @click="handleSearch" size="search">查询
+          </el-button>
+          <el-button :icon="Refresh" @click="handleResetSearch" size="search">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <div class="flex gap-1" style="justify-content:flex-end">
+        <el-button type="primary" :icon="Plus" @click="handleAdd" size="search">新增</el-button>
+        <el-button
+          type="danger"
+          :icon="Delete"
+          @click="handleBatchDelete"
+          :disabled="selectedIds.length === 0"
+          size="search"
+        >批量删除
+        </el-button
+        >
+        <el-button type="success" :icon="Download" @click="exportExcel" size="search">导出</el-button>
+        <el-upload
+          class="inline-block ml-2"
+          action="/api/edepartmentEmployeeStats/importData"
+          :show-file-list="false"
+          :on-success="handleUploadSuccess"
+          :on-error="handleUploadError"
+          :before-upload="handleBeforeUpload"
+          :http-request="(options) => importExcel(options.file)"
+        >
+          <el-button type="info" :icon="Upload" size="search">导入</el-button>
+        </el-upload>
+      </div>
+    </div>
+
+    <!-- Table -->
+    <div class="bg-white rounded-lg shadow-sm p-4 overflow-x-auto">
+      <el-table
+        :data="tableData"
+        style="width: 100%"
+        border
+        @selection-change="handleSelectionChange"
+        :cell-style="{ fontSize: '14px' }"
+        :header-cell-style="{ fontSize: '14px' }"
+        :row-style="{ fontSize: '14px' }"
+      >
+        <el-table-column type="selection" width="55" fixed="left"/>
+        <el-table-column prop="departmentName" label="部门名称" align="center"/>
+        <el-table-column prop="domesticEmployees" label="内籍员工数量	" align="center"/>
+        <el-table-column prop="educationDistribution" label="学历分布	" align="center"/>
+        <el-table-column prop="femaleRatio" label="女工比例" align="center"/>
+        <el-table-column prop="foreignEmployees" label="外籍员工数量" align="center"/>
+        <el-table-column prop="maleRatio" label="男工比例" align="center"/>
+        <el-table-column prop="totalEmployees" label="员工总数" align="center"/>
+        <el-table-column prop="ageDistribution" label="年龄分布" align="center"/>
+        <el-table-column label="操作" fixed="right" align="center">
+          <template #default="{ row }">
+            <el-button :icon="Edit" size="small" @click="handleEdit(row)">编辑</el-button>
+            <el-button type="danger" :icon="Delete" size="small" @click="handleDelete(row.id)"
+            >删除
+            </el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- Pagination -->
+      <div class="mt-4 flex justify-end">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="pageNum"
+          :page-sizes="[10, 20, 50, 100]"
+          :page-size="pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total"
+        />
+      </div>
+    </div>
+
+    <!-- Add/Edit Dialog -->
+    <el-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      width="800px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+    >
+      <el-form
+        :model="formData"
+        ref="formRef"
+        label-width="120px"
+        class="grid grid-cols-1 md:grid-cols-2 gap-4"
+      >
+        <el-form-item
+          label="部门名称"
+          prop="departmentName"
+          :rules="[{ required: true, message: '请输入部门名称', trigger: 'blur' }]"
+        >
+          <el-input v-model="formData.departmentName" placeholder="请输入部门名称"/>
+        </el-form-item>
+        <el-form-item
+          label="内籍员工数量"
+          prop="domesticEmployees"
+          :rules="[{ required: true, message: '请输入内籍员工数量', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.domesticEmployees"
+            placeholder="请输入内籍员工数量"
+          />
+        </el-form-item>
+
+        <el-form-item
+          label="学历分布"
+          prop="educationDistribution"
+          :rules="[{ required: true, message: '请输入学历分布', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.educationDistribution"
+            placeholder="请输入学历分布"
+          />
+        </el-form-item>
+        <el-form-item
+          label="女工比例"
+          prop="femaleRatio"
+          :rules="[{ required: true, message: '请输入女工比例', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.femaleRatio"
+            placeholder="请输入女工比例"
+          />
+        </el-form-item>
+
+        <el-form-item
+          label="外籍员工数量"
+          prop="foreignEmployees"
+          :rules="[
+            { required: true, message: '请输入外籍员工数量', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.foreignEmployees" placeholder="请输入外籍员工数量"/>
+        </el-form-item>
+        <el-form-item
+          label="男工比例"
+          prop="maleRatio"
+          :rules="[
+            { required: true, message: '请输入男工比例', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.maleRatio" placeholder="请输入男工比例"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="员工总数"
+          prop="totalEmployees"
+          :rules="[
+            { required: true, message: '请输入员工总数', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.totalEmployees" placeholder="请输入员工总数"/>
+        </el-form-item>
+        <el-form-item
+          label="年龄分布"
+          prop="ageDistribution"
+          :rules="[
+            { required: true, message: '请输入年龄分布', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.ageDistribution" placeholder="请输入年龄分布"/>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogVisible = false">取消</el-button>
+          <el-button type="primary" @click="handleConfirm">确定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
 <script setup lang="ts">
-import { onMounted, reactive, ref } from 'vue'
-import { clientDownloadExcel, clientGet, clientPost } from '@/utils/request.ts'
-import type { FormInstance, UploadProps } from 'element-plus'
-import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
-import { Delete, Download, Edit, Plus, Refresh, Search, Upload } from '@element-plus/icons-vue'
+import {onMounted, reactive, ref} from 'vue'
+import {clientDownloadExcel, clientGet, clientPost} from '@/utils/request.ts'
+import type {FormInstance, UploadProps} from 'element-plus'
+import {ElForm, ElLoading, ElMessage, ElMessageBox} from 'element-plus'
+import {Delete, Download, Edit, Plus, Refresh, Search, Upload} from '@element-plus/icons-vue'
 
 // 假设 BaseResponse 和 PageType 在全局或 request.ts 中已定义
 interface BaseResponse {
@@ -20,20 +218,15 @@ interface PageType<T> {
 }
 
 interface Property {
-  id: string // 联系人唯一标识
-  contactName: string // 联系人姓名
-  contactGender?: string // 性别(男,女,未知)
-  contactBirthday?: string // 出生日期 (改为string,与el-date-picker的value-format一致)
-  contactMobile?: string // 手机号码
-  contactPhone?: string // 固定电话
-  contactEmail?: string // 电子邮箱
-  contactTitle?: string // 职位
-  contactDepartment?: string // 所属部门
-  company?: string // 所属企业
-  createTime?: string // 创建时间 (改为string,用于显示)
-  createBy?: string // 创建人
-  updateTime?: string // 更新时间 (改为string,用于显示)
-  updateBy?: string // 修改人
+  id: string // 主键ID
+  departmentName: string // 部门名称
+  domesticEmployees: string // 内籍员工数量
+  educationDistribution: string // 学历分布
+  femaleRatio: string // 女工比例
+  foreignEmployees: string // 外籍员工数量
+  maleRatio: string // 男工比例
+  totalEmployees: string // 员工总数
+  ageDistribution: string // 年龄分布
 }
 
 interface PropertyOneResponse extends BaseResponse {
@@ -45,28 +238,26 @@ interface PropertyListResponse extends BaseResponse {
 }
 
 interface AddProperty {
-  contactName: string // 联系人姓名
-  contactGender?: string // 性别(男,女,未知)
-  contactBirthday?: string // 出生日期 (改为string)
-  contactMobile?: string // 手机号码
-  contactPhone?: string // 固定电话
-  contactEmail?: string // 电子邮箱
-  contactTitle?: string // 职位
-  contactDepartment?: string // 所属部门
-  company?: string // 所属企业
+  departmentName: string // 部门名称
+  domesticEmployees: string // 内籍员工数量
+  educationDistribution: string // 学历分布
+  femaleRatio: string // 女工比例
+  foreignEmployees: string // 外籍员工数量
+  maleRatio: string // 男工比例
+  totalEmployees: string // 员工总数
+  ageDistribution: string // 年龄分布
 }
 
 interface UpdateProperty {
   id?: string
-  contactName: string // 联系人姓名
-  contactGender?: string // 性别(男,女,未知)
-  contactBirthday?: string // 出生日期 (改为string)
-  contactMobile?: string // 手机号码
-  contactPhone?: string // 固定电话
-  contactEmail?: string // 电子邮箱
-  contactTitle?: string // 职位
-  contactDepartment?: string // 所属部门
-  company?: string // 所属企业
+  departmentName: string // 部门名称
+  domesticEmployees: string // 内籍员工数量
+  educationDistribution: string // 学历分布
+  femaleRatio: string // 女工比例
+  foreignEmployees: string // 外籍员工数量
+  maleRatio: string // 男工比例
+  totalEmployees: string // 员工总数
+  ageDistribution: string // 年龄分布
 }
 
 // 响应式状态变量
@@ -76,9 +267,7 @@ const pageSize = ref(10)
 const pageNum = ref(1)
 
 const searchForm = reactive({
-  contactName: '',
-  contactMobile: '',
-  contactDepartment: '',
+  departmentName: ''
 })
 
 const dialogVisible = ref(false)
@@ -88,21 +277,17 @@ const formData = reactive<Property>({})
 const formRef = ref<FormInstance>()
 const selectedIds = ref<string[]>([])
 
-// 性别选项
-const contactGenderOptions = [
-  { label: '男', value: '男' },
-  { label: '女', value: '女' },
-  { label: '未知', value: '未知' },
+// 规上企业是否
+const arrearsOptions = [
+  {label: '是', value: '是'},
+  {label: '否', value: '否'},
 ]
-
-// 辅助函数:获取性别标签
-const getContactGenderLabel = (value: string | undefined) => {
-  return contactGenderOptions.find((option) => option.value === value)?.label || '未知'
-}
+// 年度选项(动态生成最近5年)
+const currentYear = new Date().getFullYear()
 
 // 新增
 const add = async (data: AddProperty) => {
-  const res = await clientPost<AddProperty, BaseResponse>('/econtactManagement/save', {
+  const res = await clientPost<AddProperty, BaseResponse>('/edepartmentEmployeeStats/save', {
     ...data,
   })
 
@@ -117,7 +302,7 @@ const add = async (data: AddProperty) => {
 
 // 根据id获取数据
 const getById = async (id: string) => {
-  const res = await clientGet<null, PropertyOneResponse>('/econtactManagement/getById/' + id)
+  const res = await clientGet<null, PropertyOneResponse>('/edepartmentEmployeeStats/getById/' + id)
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return null
@@ -127,23 +312,20 @@ const getById = async (id: string) => {
 
 // 分页获取数据
 const getList = async () => {
-  const res = await clientGet<
-    {
-      pageNum: number
-      pageSize: number
-      contactName?: string
-      contactMobile?: string
-      contactDepartment?: string
-    },
-    PropertyListResponse
-  >('/econtactManagement/findByPage', {
-    params: {
-      pageNum: pageNum.value,
-      pageSize: pageSize.value,
-      contactName: searchForm.contactName || undefined,
-      contactMobile: searchForm.contactMobile || undefined,
-      contactDepartment: searchForm.contactDepartment || undefined,
-    },
+  // 构建参数对象,只包含有值的搜索条件
+  const params = {
+    pageNum: pageNum.value,
+    pageSize: pageSize.value,
+    ...(searchForm.departmentName ? {departmentName: searchForm.departmentName} : {})
+  }
+
+  const res = await clientGet<{
+    pageNum: number
+    pageSize: number
+    departmentName?: string
+  },
+    PropertyListResponse>('/edepartmentEmployeeStats/findByPage', {
+    params,
   })
 
   if (res.code !== 200) {
@@ -156,7 +338,7 @@ const getList = async () => {
 
 // 批量删除
 const delBatch = async (ids: string[]) => {
-  const res = await clientPost<string[], BaseResponse>('/econtactManagement/deleteBatch', ids)
+  const res = await clientPost<string[], BaseResponse>('/edepartmentEmployeeStats/deleteBatch', ids)
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return false
@@ -167,7 +349,7 @@ const delBatch = async (ids: string[]) => {
 
 // 修改
 const update = async (data: UpdateProperty) => {
-  const res = await clientPost<UpdateProperty, BaseResponse>('/econtactManagement/update', {
+  const res = await clientPost<UpdateProperty, BaseResponse>('/edepartmentEmployeeStats/update', {
     ...data,
   })
   if (res.code !== 200) {
@@ -188,12 +370,13 @@ const exportExcel = async () => {
   })
 
   try {
-    await clientDownloadExcel('/econtactManagement/exportData', {
-      params: {
-        contactName: searchForm.contactName || undefined,
-        contactMobile: searchForm.contactMobile || undefined,
-        contactDepartment: searchForm.contactDepartment || undefined,
-      },
+    // 构建参数对象,只包含有值的搜索条件
+    const params = {
+      ...(searchForm.departmentName ? {departmentName: searchForm.departmentName} : {})
+    }
+
+    await clientDownloadExcel('/edepartmentEmployeeStats/exportData', {
+      params,
     })
     ElMessage.success('导出成功')
   } catch (error) {
@@ -208,16 +391,23 @@ const exportExcel = async () => {
 const importExcel = async (file: File) => {
   const formData = new FormData()
   formData.append('file', file)
-  const res = await clientPost<FormData, BaseResponse>('/econtactManagement/importData', formData, {
-    headers: {
-      'Content-Type': 'multipart/form-data',
+
+  const res = await clientPost<FormData, BaseResponse>(
+    '/edepartmentEmployeeStats/importData',
+    formData,
+    {
+      headers: {
+        'Content-Type': 'multipart/form-data',
+      },
     },
-  })
+  )
+
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return false
   }
   ElMessage.success(res.msg)
+  getList()
   return true
 }
 
@@ -225,19 +415,19 @@ const importExcel = async (file: File) => {
 
 const handleAdd = () => {
   isEdit.value = false
-  dialogTitle.value = '新增联系人信息'
+  dialogTitle.value = '新增用企业信息'
   // 重置表单数据
   Object.keys(formData).forEach((key) => delete formData[key as keyof Property])
+  // 设置默认值为当前年度
+  formData.openingDate = `${currentYear}`
   dialogVisible.value = true
 }
 
 const handleEdit = async (row: Property) => {
   isEdit.value = true
-  dialogTitle.value = '编辑联系人信息'
+  dialogTitle.value = '编辑企业信息'
   const data = await getById(row.id)
   if (data) {
-    // 直接将后端返回的字符串赋值给 formData
-    // el-date-picker 配合 value-format 可以直接处理字符串
     Object.assign(formData, data)
     dialogVisible.value = true
   }
@@ -287,9 +477,7 @@ const handleSearch = () => {
 }
 
 const handleResetSearch = () => {
-  searchForm.contactName = ''
-  searchForm.contactMobile = ''
-  searchForm.contactDepartment = ''
+  searchForm.departmentName = ''
   pageNum.value = 1
   getList()
 }
@@ -299,10 +487,7 @@ const handleConfirm = async () => {
   await formRef.value.validate(async (valid) => {
     if (valid) {
       let success = false
-      const dataToSend = { ...formData }
-
-      // 日期字段已经由 el-date-picker 的 value-format 格式化为 YYYY-MM-DD HH:mm:ss 字符串
-      // 无需再次手动格式化,直接发送即可。
+      const dataToSend = {...formData}
 
       if (isEdit.value) {
         success = await update(dataToSend)
@@ -336,7 +521,6 @@ const handleSelectionChange = (selection: Property[]) => {
 
 const handleUploadSuccess: UploadProps['onSuccess'] = async (response, uploadFile) => {
   if (response && response.code === 200) {
-    // 确保response存在且code为200
     ElMessage.success('文件导入成功')
     getList()
   } else {
@@ -361,180 +545,12 @@ const handleBeforeUpload: UploadProps['beforeUpload'] = (rawFile) => {
 
 const init = () => {
   getList()
-}
+};
 
 onMounted(() => {
   init()
 })
 </script>
-
-<template>
-  <div class="p-4">
-    <h1 class="text-2xl font-bold mb-6">联系人管理信息</h1>
-
-    <!-- Search and Action Bar -->
-    <div class="mb-6 p-4 bg-white rounded-lg shadow-sm flex flex-wrap items-center gap-4">
-      <el-form :inline="true" :model="searchForm" class="flex-grow flex flex-wrap gap-x-4">
-        <el-form-item label="联系人姓名">
-          <el-input v-model="searchForm.contactName" placeholder="输入联系人姓名" clearable />
-        </el-form-item>
-        <el-form-item label="手机号码">
-          <el-input v-model="searchForm.contactMobile" placeholder="请输入手机号码" clearable />
-        </el-form-item>
-        <el-form-item label="所属部门">
-          <el-input v-model="searchForm.contactDepartment" placeholder="请输入所属部门" clearable />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" :icon="Search" @click="handleSearch">查询</el-button>
-          <el-button :icon="Refresh" @click="handleResetSearch">重置</el-button>
-        </el-form-item>
-      </el-form>
-
-      <div class="flex gap-2">
-        <el-button type="primary" :icon="Plus" @click="handleAdd">新增</el-button>
-        <el-button
-          type="danger"
-          :icon="Delete"
-          @click="handleBatchDelete"
-          :disabled="selectedIds.length === 0"
-          >批量删除</el-button
-        >
-        <el-button type="success" :icon="Download" @click="exportExcel">导出</el-button>
-        <el-upload
-          class="inline-block ml-2"
-          action="/api/econtactManagement/importData"
-          :show-file-list="false"
-          :on-success="handleUploadSuccess"
-          :on-error="handleUploadError"
-          :before-upload="handleBeforeUpload"
-          :http-request="(options) => importExcel(options.file)"
-        >
-          <el-button type="info" :icon="Upload">导入</el-button>
-        </el-upload>
-      </div>
-    </div>
-
-    <!-- Table -->
-    <div class="bg-white rounded-lg shadow-sm p-4 overflow-x-auto">
-      <el-table
-        :data="tableData"
-        style="width: 100%"
-        border
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" fixed="left" />
-        <el-table-column prop="contactName" label="联系人姓名" width="120" />
-        <el-table-column prop="contactGender" label="性别" width="80">
-          <template #default="{ row }">
-            {{ getContactGenderLabel(row.contactGender) }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="contactBirthday" label="出生日期" width="180">
-          <template #default="{ row }">
-            {{
-              row.contactBirthday ? new Date(row.contactBirthday).toLocaleDateString('zh-CN') : '-'
-            }}
-          </template>
-        </el-table-column>
-        <el-table-column prop="contactMobile" label="手机号码" width="120" />
-        <el-table-column prop="contactPhone" label="固定电话" width="120" />
-        <el-table-column prop="contactEmail" label="电子邮箱" width="180" />
-        <el-table-column prop="contactTitle" label="职位" width="120" />
-        <el-table-column prop="contactDepartment" label="所属部门" width="120" />
-        <el-table-column prop="company" label="所属企业" width="185" />
-        <el-table-column label="操作" width="185" fixed="right">
-          <template #default="{ row }">
-            <el-button :icon="Edit" size="small" @click="handleEdit(row)">编辑</el-button>
-            <el-button type="danger" :icon="Delete" size="small" @click="handleDelete(row.id)"
-              >删除</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <!-- Pagination -->
-      <div class="mt-4 flex justify-end">
-        <el-pagination
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-          :current-page="pageNum"
-          :page-sizes="[10, 20, 50, 100]"
-          :page-size="pageSize"
-          layout="total, sizes, prev, pager, next, jumper"
-          :total="total"
-        />
-      </div>
-    </div>
-
-    <!-- Add/Edit Dialog -->
-    <el-dialog
-      v-model="dialogVisible"
-      :title="dialogTitle"
-      width="800px"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-    >
-      <el-form
-        :model="formData"
-        ref="formRef"
-        label-width="120px"
-        class="grid grid-cols-1 md:grid-cols-2 gap-4"
-      >
-        <el-form-item
-          label="联系人姓名"
-          prop="contactName"
-          :rules="[{ required: true, message: '请输入联系人姓名', trigger: 'blur' }]"
-        >
-          <el-input v-model="formData.contactName" placeholder="请输入联系人姓名" />
-        </el-form-item>
-        <el-form-item label="性别" prop="contactGender">
-          <el-select v-model="formData.contactGender" placeholder="请选择性别" style="width: 100%">
-            <el-option
-              v-for="item in contactGenderOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="出生日期" prop="contactBirthday">
-          <el-date-picker
-            v-model="formData.contactBirthday"
-            type="date"
-            placeholder="选择出生日期时间"
-            value-format="YYYY-MM-DD"
-            style="width: 100%"
-          />
-        </el-form-item>
-        <el-form-item label="手机号码" prop="contactMobile">
-          <el-input v-model="formData.contactMobile" placeholder="请输入手机号码" />
-        </el-form-item>
-        <el-form-item label="固定电话" prop="contactPhone">
-          <el-input v-model="formData.contactPhone" placeholder="请输入固定电话" />
-        </el-form-item>
-        <el-form-item label="电子邮箱" prop="contactEmail">
-          <el-input v-model="formData.contactEmail" placeholder="请输入电子邮箱" />
-        </el-form-item>
-        <el-form-item label="职位" prop="contactTitle">
-          <el-input v-model="formData.contactTitle" placeholder="请输入职位" />
-        </el-form-item>
-        <el-form-item label="所属部门" prop="contactDepartment">
-          <el-input v-model="formData.contactDepartment" placeholder="请输入所属部门" />
-        </el-form-item>
-        <el-form-item label="所属企业" prop="company" class="md:col-span-2">
-          <el-input v-model="formData.company" placeholder="请输入所属企业" />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button @click="dialogVisible = false">取消</el-button>
-          <el-button type="primary" @click="handleConfirm">确定</el-button>
-        </span>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
 <style scoped>
 /* Add any specific styles here if needed, otherwise UnoCSS handles most */
 </style>

+ 425 - 193
src/views/qygl/qyjbxx/index.vue

@@ -1,21 +1,340 @@
+<template>
+  <div class="p-4">
+    <div class="mb-6 p-4 bg-white rounded-lg shadow-sm flex flex-wrap items-center gap-4">
+      <el-form :inline="true" :model="searchForm" class="flex-grow flex flex-wrap">
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">企业名称:</span>
+          <el-input
+            v-model="searchForm.enterpriseName"
+            style="width: 240px"
+            size="default"
+            placeholder="请输入企业名称"
+            @clear="handleSearch"
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">信用代码:</span>
+          <el-input
+            v-model="searchForm.unifiedSocialCreditCode"
+            style="width: 240px"
+            size="default"
+            placeholder="输入统一社会信用代码"
+            clearable
+          />
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">是否规上企业:</span>
+          <el-select v-model="searchForm.isAboveDesignatedSize"
+                     style="width: 240px"
+                     size="default" placeholder="请选择">
+            <el-option
+              v-for="item in arrearsOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <span slot="label" class="font-size-4.5">是否高新技术企业:</span>
+          <el-select v-model="searchForm.isHighTech"
+                     style="width: 240px"
+                     size="default" placeholder="请选择">
+            <el-option
+              v-for="item in arrearsOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" :icon="Search" @click="handleSearch" size="search">查询
+          </el-button>
+          <el-button :icon="Refresh" @click="handleResetSearch" size="search">重置</el-button>
+        </el-form-item>
+      </el-form>
+
+      <div class="flex gap-1" style="justify-content:flex-end">
+        <el-button type="primary" :icon="Plus" @click="handleAdd" size="search">新增</el-button>
+        <el-button
+          type="danger"
+          :icon="Delete"
+          @click="handleBatchDelete"
+          :disabled="selectedIds.length === 0"
+          size="search"
+        >批量删除
+        </el-button
+        >
+        <el-button type="success" :icon="Download" @click="exportExcel" size="search">导出</el-button>
+        <el-upload
+          class="inline-block ml-2"
+          action="/api/eenterpriseBasicInfo/importData"
+          :show-file-list="false"
+          :on-success="handleUploadSuccess"
+          :on-error="handleUploadError"
+          :before-upload="handleBeforeUpload"
+          :http-request="(options) => importExcel(options.file)"
+        >
+          <el-button type="info" :icon="Upload" size="search">导入</el-button>
+        </el-upload>
+      </div>
+    </div>
+
+    <!-- Table -->
+    <div class="bg-white rounded-lg shadow-sm p-4 overflow-x-auto">
+      <el-table
+        :data="tableData"
+        style="width: 100%"
+        border
+        @selection-change="handleSelectionChange"
+        :cell-style="{ fontSize: '14px' }"
+        :header-cell-style="{ fontSize: '14px' }"
+        :row-style="{ fontSize: '14px' }"
+      >
+        <el-table-column type="selection" width="55" fixed="left"/>
+        <el-table-column prop="enterpriseName" label="企业名称" align="center"/>
+        <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" align="center"/>
+        <el-table-column prop="enterpriseLeader" label="企业负责人" align="center"/>
+        <el-table-column prop="contactInformation" label="联系方式" align="center"/>
+
+        <el-table-column prop="isAboveDesignatedSize" label="是否规上企业" align="center"/>
+        <el-table-column prop="isHighTech" label="是否高新技术企业" align="center"/>
+        <el-table-column prop="outputValue" label="产值(万元)" align="center"/>
+        <el-table-column prop="outputValueYoy" label="产值同比(百分比)" align="center"/>
+        <el-table-column prop="registrationDate" label="注册日期" align="center"/>
+        <el-table-column prop="revenue" label="营收(万元)" align="center"/>
+        <el-table-column prop="revenueYoy" label="营收同比(百分比)" align="center"/>
+        <el-table-column prop="taxRevenue" label="税收(万元)" align="center"/>
+        <el-table-column prop="taxRevenueYoy" label="税收同比(百分比)" align="center"/>
+        <el-table-column label="操作" fixed="right" align="center">
+          <template #default="{ row }">
+            <el-button :icon="Edit" size="small" @click="handleEdit(row)">编辑</el-button>
+            <el-button type="danger" :icon="Delete" size="small" @click="handleDelete(row.id)"
+            >删除
+            </el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <!-- Pagination -->
+      <div class="mt-4 flex justify-end">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="pageNum"
+          :page-sizes="[10, 20, 50, 100]"
+          :page-size="pageSize"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total"
+        />
+      </div>
+    </div>
+
+    <!-- Add/Edit Dialog -->
+    <el-dialog
+      v-model="dialogVisible"
+      :title="dialogTitle"
+      width="800px"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+    >
+      <el-form
+        :model="formData"
+        ref="formRef"
+        label-width="120px"
+        class="grid grid-cols-1 md:grid-cols-2 gap-4"
+      >
+        <el-form-item
+          label="企业名称"
+          prop="enterpriseName"
+          :rules="[{ required: true, message: '请输入企业名称', trigger: 'blur' }]"
+        >
+          <el-input v-model="formData.enterpriseName" placeholder="请输入企业名称"/>
+        </el-form-item>
+        <el-form-item
+          label="信用代码"
+          prop="unifiedSocialCreditCode"
+          :rules="[{ required: true, message: '请输入统一社会信用代码', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.unifiedSocialCreditCode"
+            placeholder="请输入统一社会信用代码"
+          />
+        </el-form-item>
+
+        <el-form-item
+          label="企业负责人"
+          prop="enterpriseLeader"
+          :rules="[{ required: true, message: '请输入企业负责人', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.enterpriseLeader"
+            placeholder="请输入企业负责人"
+          />
+        </el-form-item>
+        <el-form-item
+          label="联系方式"
+          prop="contactInformation"
+          :rules="[{ required: true, message: '请输入联系方式', trigger: 'blur' }]"
+        >
+          <el-input
+            v-model="formData.contactInformation"
+            placeholder="请输入联系方式"
+          />
+        </el-form-item>
+
+        <el-form-item
+          label="是否规上企业"
+          prop="isAboveDesignatedSize"
+          :rules="[{ required: true, message: '请选择', trigger: 'change' }]"
+        >
+          <el-select v-model="formData.isAboveDesignatedSize" placeholder="请选择" style="width: 100%">
+            <el-option
+              v-for="item in arrearsOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+        <el-form-item
+          label="是否高新技术企业"
+          prop="isHighTech"
+          :rules="[{ required: true, message: '请选择', trigger: 'change' }]"
+        >
+          <el-select v-model="formData.isHighTech" placeholder="请选择" style="width: 100%">
+            <el-option
+              v-for="item in arrearsOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+
+        <el-form-item
+          label="产值(万元)"
+          prop="outputValue"
+          :rules="[
+            { required: true, message: '请输入产值(万元)', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.outputValue" placeholder="请输入产值(万元)"/>
+        </el-form-item>
+        <el-form-item
+          label="产值同比(百分比)"
+          prop="outputValueYoy"
+          :rules="[
+            { required: true, message: '请输入产值同比(百分比)', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.outputValueYoy" placeholder="请输入产值同比(百分比)"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="营收(万元)"
+          prop="revenue"
+          :rules="[
+            { required: true, message: '请输入营收(万元)', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.revenue" placeholder="请输入营收(万元)"/>
+        </el-form-item>
+        <el-form-item
+          label="营收同比(百分比)"
+          prop="revenueYoy"
+          :rules="[
+            { required: true, message: '请输入营收同比(百分比)', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.revenueYoy" placeholder="请输入营收同比(百分比)"/>
+        </el-form-item>
+
+
+        <el-form-item
+          label="税收(万元)"
+          prop="taxRevenue"
+          :rules="[
+            { required: true, message: '请输入税收(万元)', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.taxRevenue" placeholder="请输入税收(万元)"/>
+        </el-form-item>
+        <el-form-item
+          label="税收同比(百分比)"
+          prop="taxRevenueYoy"
+          :rules="[
+            { required: true, message: '请输入税收同比(百分比)', trigger: 'blur' },
+            { type: 'number', message: '请输入数字', trigger: 'blur' },
+          ]"
+        >
+          <el-input v-model.number="formData.taxRevenueYoy" placeholder="请输入税收同比(百分比)"/>
+        </el-form-item>
+        <el-form-item
+          label="注册日期"
+          prop="registrationDate"
+          :rules="[{ required: true, message: '请选择注册日期', trigger: 'change' }]"
+        >
+          <el-date-picker v-model="formData.registrationDate" type="date" format="YYYY/MM/DD" value-format="YYYY-MM-DD"/>
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="dialogVisible = false">取消</el-button>
+          <el-button type="primary" @click="handleConfirm">确定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
 <script setup lang="ts">
-import { onMounted, reactive, ref } from 'vue'
-import { clientDownloadExcel, clientGet, clientPost } from '@/utils/request.ts'
-import type { FormInstance, UploadProps } from 'element-plus'
-import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
-import { Delete, Download, Edit, Plus, Refresh, Search, Upload } from '@element-plus/icons-vue'
+import {onMounted, reactive, ref} from 'vue'
+import {clientDownloadExcel, clientGet, clientPost} from '@/utils/request.ts'
+import type {FormInstance, UploadProps} from 'element-plus'
+import {ElForm, ElLoading, ElMessage, ElMessageBox} from 'element-plus'
+import {Delete, Download, Edit, Plus, Refresh, Search, Upload} from '@element-plus/icons-vue'
+
+// 假设 BaseResponse 和 PageType 在全局或 request.ts 中已定义
+interface BaseResponse {
+  code: number
+  msg: string
+}
+
+interface PageType<T> {
+  records: T[]
+  total: number
+  size: number
+  current: number
+  pages: number
+}
 
 interface Property {
-  id: string // 主键
-  enterpriseName: string // 企业名称
-  address?: string // 地址
-  contact?: string // 联系方式
-  legalRepresentative?: string // 法人代表
-  establishmentDate?: string // 成立日期 (改为string,与el-date-picker的value-format一致)
+  id: string // 主键ID
+
+  enterpriseName: string // 单位名称
+  unifiedSocialCreditCode: string // 统一社会信用代码
+  enterpriseLeader: string // 企业负责人
+  contactInformation: string // 联系方式
+  isAboveDesignatedSize: string // 是否规上企业(否,是)
+  isHighTech: string // 是否高新技术企业(否,是)
+  outputValue: string // 产值(万元)
+  outputValueYoy: string // 产值同比(百分比)
+  registrationDate: string // 注册日期
+  revenue: string // 营收(万元)
+  revenueYoy: string // 营收同比(百分比)
+  taxRevenue: string // 税收(万元)
+  taxRevenueYoy: string // 税收同比(百分比)
+  updateTime?: string // 更新时间
   createTime?: string // 创建时间
-  createBy?: string // 创建人
-  updateTime?: string // 修改时间
-  updateBy?: string // 修改人
 }
 
 interface PropertyOneResponse extends BaseResponse {
@@ -27,20 +346,36 @@ interface PropertyListResponse extends BaseResponse {
 }
 
 interface AddProperty {
-  enterpriseName: string // 企业名称
-  address?: string // 地址
-  contact?: string // 联系方式
-  legalRepresentative?: string // 法人代表
-  establishmentDate?: string // 成立日期 (改为string)
+  enterpriseName: string // 单位名称
+  unifiedSocialCreditCode: string // 统一社会信用代码
+  enterpriseLeader: string // 企业负责人
+  contactInformation: string // 联系方式
+  isAboveDesignatedSize: string // 是否规上企业(否,是)
+  isHighTech: string // 是否高新技术企业(否,是)
+  outputValue: string // 产值(万元)
+  outputValueYoy: string // 产值同比(百分比)
+  registrationDate: string // 注册日期
+  revenue: string // 营收(万元)
+  revenueYoy: string // 营收同比(百分比)
+  taxRevenue: string // 税收(万元)
+  taxRevenueYoy: string // 税收同比(百分比)
 }
 
 interface UpdateProperty {
   id?: string
-  enterpriseName: string // 企业名称
-  address?: string // 地址
-  contact?: string // 联系方式
-  legalRepresentative?: string // 法人代表
-  establishmentDate?: string // 成立日期 (改为string)
+  enterpriseName: string // 单位名称
+  unifiedSocialCreditCode: string // 统一社会信用代码
+  enterpriseLeader: string // 企业负责人
+  contactInformation: string // 联系方式
+  isAboveDesignatedSize: string // 是否规上企业(否,是)
+  isHighTech: string // 是否高新技术企业(否,是)
+  outputValue: string // 产值(万元)
+  outputValueYoy: string // 产值同比(百分比)
+  registrationDate: string // 注册日期
+  revenue: string // 营收(万元)
+  revenueYoy: string // 营收同比(百分比)
+  taxRevenue: string // 税收(万元)
+  taxRevenueYoy: string // 税收同比(百分比)
 }
 
 // 响应式状态变量
@@ -50,7 +385,10 @@ const pageSize = ref(10)
 const pageNum = ref(1)
 
 const searchForm = reactive({
+  isHighTech: '',
   enterpriseName: '',
+  unifiedSocialCreditCode: '',
+  isAboveDesignatedSize: '',
 })
 
 const dialogVisible = ref(false)
@@ -60,9 +398,17 @@ const formData = reactive<Property>({})
 const formRef = ref<FormInstance>()
 const selectedIds = ref<string[]>([])
 
+// 规上企业是否
+const arrearsOptions = [
+  {label: '是', value: '是'},
+  {label: '否', value: '否'},
+]
+// 年度选项(动态生成最近5年)
+const currentYear = new Date().getFullYear()
+
 // 新增
 const add = async (data: AddProperty) => {
-  const res = await clientPost<AddProperty, BaseResponse>('/enterpriseInfo/save', {
+  const res = await clientPost<AddProperty, BaseResponse>('/eenterpriseBasicInfo/save', {
     ...data,
   })
 
@@ -77,7 +423,7 @@ const add = async (data: AddProperty) => {
 
 // 根据id获取数据
 const getById = async (id: string) => {
-  const res = await clientGet<null, PropertyOneResponse>('/enterpriseInfo/getById/' + id)
+  const res = await clientGet<null, PropertyOneResponse>('/eenterpriseBasicInfo/getById/' + id)
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return null
@@ -87,19 +433,26 @@ const getById = async (id: string) => {
 
 // 分页获取数据
 const getList = async () => {
-  const res = await clientGet<
-    {
-      pageNum: number
-      pageSize: number
-      enterpriseName?: string // 模糊搜索的值
-    },
-    PropertyListResponse
-  >('/enterpriseInfo/findByPage', {
-    params: {
-      pageNum: pageNum.value,
-      pageSize: pageSize.value,
-      enterpriseName: searchForm.enterpriseName, // 如果没有值就不要传个空的过去
-    },
+  // 构建参数对象,只包含有值的搜索条件
+  const params = {
+    pageNum: pageNum.value,
+    pageSize: pageSize.value,
+    ...(searchForm.isAboveDesignatedSize ? {isAboveDesignatedSize: searchForm.isAboveDesignatedSize} : {}),
+    ...(searchForm.unifiedSocialCreditCode ? {unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode} : {}),
+    ...(searchForm.enterpriseName ? {enterpriseName: searchForm.enterpriseName} : {}),
+    ...(searchForm.isHighTech ? {isHighTech: searchForm.isHighTech} : {}),
+  }
+
+  const res = await clientGet<{
+    pageNum: number
+    pageSize: number
+    isAboveDesignatedSize?: string
+    unifiedSocialCreditCode?: string
+    enterpriseName?: string
+    isHighTech?: string
+  },
+    PropertyListResponse>('/eenterpriseBasicInfo/findByPage', {
+    params,
   })
 
   if (res.code !== 200) {
@@ -112,8 +465,7 @@ const getList = async () => {
 
 // 批量删除
 const delBatch = async (ids: string[]) => {
-  // clientPost 期望直接的数据,而不是 JSON.stringify 后的字符串
-  const res = await clientPost<string[], BaseResponse>('/enterpriseInfo/deleteBatch', ids)
+  const res = await clientPost<string[], BaseResponse>('/eenterpriseBasicInfo/deleteBatch', ids)
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return false
@@ -124,7 +476,7 @@ const delBatch = async (ids: string[]) => {
 
 // 修改
 const update = async (data: UpdateProperty) => {
-  const res = await clientPost<UpdateProperty, BaseResponse>('/enterpriseInfo/update', {
+  const res = await clientPost<UpdateProperty, BaseResponse>('/eenterpriseBasicInfo/update', {
     ...data,
   })
   if (res.code !== 200) {
@@ -145,10 +497,16 @@ const exportExcel = async () => {
   })
 
   try {
-    await clientDownloadExcel('/enterpriseInfo/exportData', {
-      params: {
-        enterpriseName: searchForm.enterpriseName || undefined, // 模糊搜索的值
-      },
+    // 构建参数对象,只包含有值的搜索条件
+    const params = {
+      ...(searchForm.isAboveDesignatedSize ? {isAboveDesignatedSize: searchForm.isAboveDesignatedSize} : {}),
+      ...(searchForm.unifiedSocialCreditCode ? {unifiedSocialCreditCode: searchForm.unifiedSocialCreditCode} : {}),
+      ...(searchForm.enterpriseName ? {enterpriseName: searchForm.enterpriseName} : {}),
+      ...(searchForm.isHighTech ? {isHighTech: searchForm.isHighTech} : {}),
+    }
+
+    await clientDownloadExcel('/eenterpriseBasicInfo/exportData', {
+      params,
     })
     ElMessage.success('导出成功')
   } catch (error) {
@@ -162,17 +520,24 @@ const exportExcel = async () => {
 // excel导入
 const importExcel = async (file: File) => {
   const formData = new FormData()
-  formData.append('file', file) // 修正:clientPost 导入文件时应使用 FormData
-  const res = await clientPost<FormData, BaseResponse>('/enterpriseInfo/importData', formData, {
-    headers: {
-      'Content-Type': 'multipart/form-data',
+  formData.append('file', file)
+
+  const res = await clientPost<FormData, BaseResponse>(
+    '/eenterpriseBasicInfo/importData',
+    formData,
+    {
+      headers: {
+        'Content-Type': 'multipart/form-data',
+      },
     },
-  })
+  )
+
   if (res.code !== 200) {
     ElMessage.error(res.msg)
     return false
   }
   ElMessage.success(res.msg)
+  getList()
   return true
 }
 
@@ -180,19 +545,19 @@ const importExcel = async (file: File) => {
 
 const handleAdd = () => {
   isEdit.value = false
-  dialogTitle.value = '新增企业基本信息'
+  dialogTitle.value = '新增企业信息'
   // 重置表单数据
   Object.keys(formData).forEach((key) => delete formData[key as keyof Property])
+  // 设置默认值为当前年度
+  formData.openingDate = `${currentYear}`
   dialogVisible.value = true
 }
 
 const handleEdit = async (row: Property) => {
   isEdit.value = true
-  dialogTitle.value = '编辑企业基本信息'
+  dialogTitle.value = '编辑企业信息'
   const data = await getById(row.id)
   if (data) {
-    // 直接将后端返回的字符串赋值给 formData
-    // el-date-picker 配合 value-format 可以直接处理字符串
     Object.assign(formData, data)
     dialogVisible.value = true
   }
@@ -242,7 +607,10 @@ const handleSearch = () => {
 }
 
 const handleResetSearch = () => {
+  searchForm.isAboveDesignatedSize = ''
+  searchForm.unifiedSocialCreditCode = ''
   searchForm.enterpriseName = ''
+  searchForm.isHighTech = ''
   pageNum.value = 1
   getList()
 }
@@ -252,10 +620,7 @@ const handleConfirm = async () => {
   await formRef.value.validate(async (valid) => {
     if (valid) {
       let success = false
-      const dataToSend = { ...formData }
-
-      // 日期字段已经由 el-date-picker 的 value-format 格式化为 YYYY-MM-DD HH:mm:ss 字符串
-      // 无需再次手动格式化,直接发送即可。
+      const dataToSend = {...formData}
 
       if (isEdit.value) {
         success = await update(dataToSend)
@@ -289,7 +654,6 @@ const handleSelectionChange = (selection: Property[]) => {
 
 const handleUploadSuccess: UploadProps['onSuccess'] = async (response, uploadFile) => {
   if (response && response.code === 200) {
-    // 确保response存在且code为200
     ElMessage.success('文件导入成功')
     getList()
   } else {
@@ -314,144 +678,12 @@ const handleBeforeUpload: UploadProps['beforeUpload'] = (rawFile) => {
 
 const init = () => {
   getList()
-}
+};
 
 onMounted(() => {
   init()
 })
 </script>
-
-<template>
-  <div class="p-4">
-    <h1 class="text-2xl font-bold mb-6">企业基本信息管理</h1>
-
-    <!-- Search and Action Bar -->
-    <div class="mb-6 p-4 bg-white rounded-lg shadow-sm flex flex-wrap items-center gap-4">
-      <el-form :inline="true" :model="searchForm" class="flex-grow flex flex-wrap gap-x-4">
-        <el-form-item label="企业名称">
-          <el-input v-model="searchForm.enterpriseName" placeholder="请输入企业名称" clearable />
-        </el-form-item>
-        <el-form-item>
-          <el-button type="primary" :icon="Search" @click="handleSearch">查询</el-button>
-          <el-button :icon="Refresh" @click="handleResetSearch">重置</el-button>
-        </el-form-item>
-      </el-form>
-
-      <div class="flex gap-2">
-        <el-button type="primary" :icon="Plus" @click="handleAdd">新增</el-button>
-        <el-button
-          type="danger"
-          :icon="Delete"
-          @click="handleBatchDelete"
-          :disabled="selectedIds.length === 0"
-          >批量删除</el-button
-        >
-        <el-button type="success" :icon="Download" @click="exportExcel">导出</el-button>
-        <el-upload
-          class="inline-block ml-2"
-          action="/api/enterpriseInfo/importData"
-          :show-file-list="false"
-          :on-success="handleUploadSuccess"
-          :on-error="handleUploadError"
-          :before-upload="handleBeforeUpload"
-          :http-request="(options) => importExcel(options.file)"
-        >
-          <el-button type="info" :icon="Upload">导入</el-button>
-        </el-upload>
-      </div>
-    </div>
-
-    <!-- Table -->
-    <div class="bg-white rounded-lg shadow-sm p-4">
-      <el-table
-        :data="tableData"
-        style="width: 100%"
-        border
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column type="selection" width="55" />
-        <el-table-column prop="enterpriseName" label="企业名称" width="180" />
-        <el-table-column prop="address" label="地址" />
-        <el-table-column prop="contact" label="联系方式" width="120" />
-        <el-table-column prop="legalRepresentative" label="法人代表" width="120" />
-        <el-table-column prop="establishmentDate" label="成立日期" width="180">
-          <template #default="{ row }">
-            {{
-              row.establishmentDate
-                ? new Date(row.establishmentDate).toLocaleDateString('zh-CN')
-                : '-'
-            }}
-          </template>
-        </el-table-column>
-        <el-table-column label="操作" width="185" fixed="right">
-          <template #default="{ row }">
-            <el-button :icon="Edit" size="small" @click="handleEdit(row)">编辑</el-button>
-            <el-button type="danger" :icon="Delete" size="small" @click="handleDelete(row.id)"
-              >删除</el-button
-            >
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <!-- Pagination -->
-      <div class="mt-4 flex justify-end">
-        <el-pagination
-          @size-change="handleSizeChange"
-          @current-change="handleCurrentChange"
-          :current-page="pageNum"
-          :page-sizes="[10, 20, 50, 100]"
-          :page-size="pageSize"
-          layout="total, sizes, prev, pager, next, jumper"
-          :total="total"
-        />
-      </div>
-    </div>
-
-    <!-- Add/Edit Dialog -->
-    <el-dialog
-      v-model="dialogVisible"
-      :title="dialogTitle"
-      width="600px"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false"
-    >
-      <el-form :model="formData" ref="formRef" label-width="120px">
-        <el-form-item
-          label="企业名称"
-          prop="enterpriseName"
-          :rules="[{ required: true, message: '请输入企业名称', trigger: 'blur' }]"
-        >
-          <el-input v-model="formData.enterpriseName" placeholder="请输入企业名称" />
-        </el-form-item>
-        <el-form-item label="地址" prop="address">
-          <el-input v-model="formData.address" type="textarea" placeholder="请输入地址" />
-        </el-form-item>
-        <el-form-item label="联系方式" prop="contact">
-          <el-input v-model="formData.contact" placeholder="请输入联系方式" />
-        </el-form-item>
-        <el-form-item label="法人代表" prop="legalRepresentative">
-          <el-input v-model="formData.legalRepresentative" placeholder="请输入法人代表" />
-        </el-form-item>
-        <el-form-item label="成立日期" prop="establishmentDate">
-          <el-date-picker
-            v-model="formData.establishmentDate"
-            type="date"
-            placeholder="选择成立日期"
-            value-format="YYYY-MM-DD"
-            style="width: 100%"
-          />
-        </el-form-item>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button @click="dialogVisible = false">取消</el-button>
-          <el-button type="primary" @click="handleConfirm">确定</el-button>
-        </span>
-      </template>
-    </el-dialog>
-  </div>
-</template>
-
 <style scoped>
 /* Add any specific styles here if needed, otherwise UnoCSS handles most */
 </style>

+ 1 - 0
src/views/yggl/ygxzgl/index.vue

@@ -11,3 +11,4 @@ export default {
 <style scoped>
 
 </style>
+