一大波修改
This commit is contained in:
		
							parent
							
								
									ab7d436744
								
							
						
					
					
						commit
						3d64c5fcb7
					
				| @ -173,11 +173,11 @@ const crudOptions = reactive({ | |||||||
|       icon: 'view', |       icon: 'view', | ||||||
|       event: ({ row }) => handleView(row), |       event: ({ row }) => handleView(row), | ||||||
|     }, |     }, | ||||||
|     { |     // { | ||||||
|       name: '编辑', |     //   name: '编辑', | ||||||
|       icon: 'edit', |     //   icon: 'edit', | ||||||
|       event: ({ row }) => handleEdit(row), |     //   event: ({ row }) => handleEdit(row), | ||||||
|     }, |     // }, | ||||||
|     { |     { | ||||||
|       type: 'danger', |       type: 'danger', | ||||||
|       name: '删除', |       name: '删除', | ||||||
| @ -232,23 +232,23 @@ const handleDelete = async (row) => { | |||||||
| 
 | 
 | ||||||
| const handleSubmit = async () => { | const handleSubmit = async () => { | ||||||
|   console.log('提交表单:', formData.value); |   console.log('提交表单:', formData.value); | ||||||
|   try { |   // try { | ||||||
|     if (dialogTitle.value === '新增网格') { |   //   if (dialogTitle.value === '新增网格') { | ||||||
|       await createGrid(formData.value); |   //     await createGrid(formData.value); | ||||||
|       ElMessage.success('新增成功'); |   //     ElMessage.success('新增成功'); | ||||||
|       resetForm(); |   //     resetForm(); | ||||||
|       visible.value = false; |   //     visible.value = false; | ||||||
|       getData(); |   //     getData(); | ||||||
|     } else { |   //   } else { | ||||||
|       await updateGrid(formData.value); |   //     await updateGrid(formData.value); | ||||||
|       ElMessage.success('更新成功'); |   //     ElMessage.success('更新成功'); | ||||||
|       resetForm(); |   //     resetForm(); | ||||||
|       visible.value = false; |   //     visible.value = false; | ||||||
|       getData(); |   //     getData(); | ||||||
|     } |   //   } | ||||||
|   } catch (error) { |   // } catch (error) { | ||||||
|     ElMessage.error(error.message || '新增失败,请重试'); |   //   ElMessage.error(error.message || '新增失败,请重试'); | ||||||
|   } |   // } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||||
|  | |||||||
| @ -127,11 +127,8 @@ const filterObject = (obj) => { | |||||||
| const crudData = ref([]); | const crudData = ref([]); | ||||||
| const crudOptions = reactive({ | const crudOptions = reactive({ | ||||||
|   ...CRUD_OPTIONS, |   ...CRUD_OPTIONS, | ||||||
|   addBtn: false, |  | ||||||
|   header: false, |   header: false, | ||||||
|   searchBtn: false, |   menu: false, | ||||||
|   emptyBtn: false, |  | ||||||
|   refreshBtn: false, |  | ||||||
|   height: 'calc(100vh - 360px)', |   height: 'calc(100vh - 360px)', | ||||||
|   column: [ |   column: [ | ||||||
|     { label: '地块编号', prop: 'id', width: 160 }, |     { label: '地块编号', prop: 'id', width: 160 }, | ||||||
| @ -227,23 +224,23 @@ const handleDelete = async (row) => { | |||||||
| 
 | 
 | ||||||
| const handleSubmit = async () => { | const handleSubmit = async () => { | ||||||
|   console.log('提交表单:', formData.value); |   console.log('提交表单:', formData.value); | ||||||
|   try { |   // try { | ||||||
|     if (dialogTitle.value === '新增网格') { |   //   if (dialogTitle.value === '新增网格') { | ||||||
|       await createGrid(formData.value); |   //     await createGrid(formData.value); | ||||||
|       ElMessage.success('新增成功'); |   //     ElMessage.success('新增成功'); | ||||||
|       resetForm(); |   //     resetForm(); | ||||||
|       visible.value = false; |   //     visible.value = false; | ||||||
|       getData(); |   //     getData(); | ||||||
|     } else { |   //   } else { | ||||||
|       await updateGrid(formData.value); |   //     await updateGrid(formData.value); | ||||||
|       ElMessage.success('更新成功'); |   //     ElMessage.success('更新成功'); | ||||||
|       resetForm(); |   //     resetForm(); | ||||||
|       visible.value = false; |   //     visible.value = false; | ||||||
|       getData(); |   //     getData(); | ||||||
|     } |   //   } | ||||||
|   } catch (error) { |   // } catch (error) { | ||||||
|     ElMessage.error(error.message || '新增失败,请重试'); |   //   ElMessage.error(error.message || '新增失败,请重试'); | ||||||
|   } |   // } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||||
|  | |||||||
| @ -1,231 +1,203 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="custom-page"> |   <div class="custom-page"> | ||||||
|     <h1>林地</h1> |     <h1>林地</h1> | ||||||
|     <LandSearch :search="searchForm" @on-search="handleSearch" @on-reset="handleReset" /> |     <!-- 搜索 --> | ||||||
|  |     <el-form :inline="true" :model="searchForm" class="search-bar"> | ||||||
|  |       <el-form-item label="关键词"> | ||||||
|  |         <el-input v-model="searchForm.name" placeholder="请输入关键词" clearable /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item lable=""> | ||||||
|  |         <AreaCascader v-model:region-code="searchForm.regionCode" v-model:grid-id="searchForm.id" :width="600" /> | ||||||
|  |       </el-form-item> | ||||||
|  |       <el-form-item> | ||||||
|  |         <el-button type="primary" @click="handleSearch"> 搜索 </el-button> | ||||||
|  |         <el-button @click="resetSearch"> 重置 </el-button> | ||||||
|  |       </el-form-item> | ||||||
|  |     </el-form> | ||||||
|  |     <!-- 四个固定 Tabs --> | ||||||
|     <el-tabs v-model="activeTab" @tab-click="handleTabChange"> |     <el-tabs v-model="activeTab" @tab-click="handleTabChange"> | ||||||
|       <!-- <el-tab-pane label="待提交" name="0" /> --> |       <!-- <el-tab-pane label="待提交" name="0" /> --> | ||||||
|       <el-tab-pane label="待审核" name="1" /> |       <el-tab-pane label="待审核" name="1" /> | ||||||
|       <el-tab-pane label="已通过" name="2" /> |       <el-tab-pane label="已通过" name="2" /> | ||||||
|       <el-tab-pane label="已驳回" name="0" /> |       <el-tab-pane label="已驳回" name="0" /> | ||||||
|     </el-tabs> |     </el-tabs> | ||||||
|     <TableComponent |     <avue-crud | ||||||
|       :loading="loading" |       ref="crudRef" | ||||||
|       :columns="columns" |       v-model:page="pageData" | ||||||
|       :table-data="tableData" |       :data="crudData" | ||||||
|       :current-page="pageData.currentPage" |       :option="crudOptions" | ||||||
|       :page-size="pageData.pageSize" |       :table-loading="loading" | ||||||
|       :total="pageData.total" |       @current-change="handleCurrentChange" | ||||||
|       :show-pagination="true" |       @size-change="handleSizeChange" | ||||||
|       :show-border="true" |  | ||||||
|       :show-sort="true" |  | ||||||
|       style="height: calc(100vh - 320px)" |  | ||||||
|       @page-change="handlePageChange" |  | ||||||
|     > |     > | ||||||
|       <template #action="scope"> |       <!-- <template #menu-left> | ||||||
|         <!-- <el-button size="small" @click="handleEdit(scope.row)">编辑</el-button> |         <el-button type="primary" icon="Plus" @click="handleAdd">新增网格</el-button> | ||||||
|         <el-button size="small" type="danger" @click="handleDelete(scope.row)">删除</el-button> --> |       </template> --> | ||||||
|         <custom-table-operate :actions="getActions(scope.row)" :data="scope" /> |       <template #menu="scope"> | ||||||
|  |         <custom-table-operate :actions="crudOptions.actions" :data="scope" /> | ||||||
|       </template> |       </template> | ||||||
|     </TableComponent> |     </avue-crud> | ||||||
|     <el-dialog :key="dialogTitle" v-model="visible" :title="dialogTitle" width="60%" align-center :draggable="true"> |     <el-dialog :key="dialogTitle" v-model="visible" :title="dialogTitle" width="60%" align-center :draggable="true"> | ||||||
|       <el-tabs v-model="activeFormTab" class="tabs-wrapper"> |       <el-form ref="form" :model="formData" :rules="rules" :disabled="isReadonly" label-width="100px" class="form-item"> | ||||||
|         <el-tab-pane label="土地基本信息" name="basic"> |         <p class="form-title">填写网格信息</p> | ||||||
|           <p class="form-title">基本信息</p> |         <el-form-item label="网格名称" prop="gridName"> | ||||||
|           <el-form ref="basicFormRef" :model="formData" :disabled="isReadonly" label-width="120px"> |           <el-input v-model="formData.gridName" placeholder="请输入网格名称" /> | ||||||
|             <el-row :gutter="20"> |         </el-form-item> | ||||||
|               <el-col :span="12"> |         <el-form-item label="所属行政区域" prop="gridAreaCode"> | ||||||
|                 <el-form-item label="地块名称" prop="landName"> |           <AreaSelect v-model="formData.gridAreaCode" :label="null" :emit-path="false" /> | ||||||
|                   <el-input v-model="formData.landName" placeholder="请输入地块名称" /> |         </el-form-item> | ||||||
|                 </el-form-item> |         <el-form-item label="网格化地图" prop="scopeImg"> | ||||||
|                 <el-form-item label="土地类型" prop="landType"> |           <FileUploader v-model="formData.scopeImg" :limit="1" /> | ||||||
|                   <el-tree-select |         </el-form-item> | ||||||
|                     v-model="formData.landType" |         <el-form-item label="备注" prop="note"> | ||||||
|                     :data="landTypeOptions" |           <el-input v-model="formData.note" placeholder="请输入备注" /> | ||||||
|                     :props="treeProps" |         </el-form-item> | ||||||
|                     placeholder="选择土地类型" |       </el-form> | ||||||
|                     clearable |  | ||||||
|                     check-strictly |  | ||||||
|                     :render-after-expand="false" |  | ||||||
|                   /> |  | ||||||
|                 </el-form-item> |  | ||||||
|                 <el-form-item label="具体位置" prop="address"> |  | ||||||
|                   <el-input v-model="formData.address" placeholder="请输入具体位置" /> |  | ||||||
|                 </el-form-item> |  | ||||||
|                 <el-form-item label="土壤类型" prop="soilTypeId"> |  | ||||||
|                   <url-select |  | ||||||
|                     v-model="formData.soilTypeId" |  | ||||||
|                     placeholder="选择土壤类型" |  | ||||||
|                     url="/land-resource/baseInfo/soilTypePage" |  | ||||||
|                     :params="{ current: 1, size: 100 }" |  | ||||||
|                     label-key="soilType" |  | ||||||
|                     value-key="id" |  | ||||||
|                     :clearable="true" |  | ||||||
|                   /> |  | ||||||
|                 </el-form-item> |  | ||||||
|                 <el-form-item label="土地照片" prop="landUrl"> |  | ||||||
|                   <FileUploader v-model="formData.landUrl" :limit="1" /> |  | ||||||
|                 </el-form-item> |  | ||||||
|               </el-col> |  | ||||||
|               <el-col :span="12"> |  | ||||||
|                 <el-form-item label="面积(亩)" prop="area"> |  | ||||||
|                   <el-input-number v-model="formData.area" :min="0" :precision="2" :step="0.1" controls-position="right" style="width: 100%" /> |  | ||||||
|                 </el-form-item> |  | ||||||
| 
 |  | ||||||
|                 <el-form-item label="" label-width="0" prop="gridId"> |  | ||||||
|                   <AreaCascader v-model:region-code="formData.gridAreaCode" v-model:grid-id="formData.gridId" label="" :split-rows="true" /> |  | ||||||
|                 </el-form-item> |  | ||||||
| 
 |  | ||||||
|                 <el-form-item label="土地范围" prop="scope"> |  | ||||||
|                   <el-input v-model="formData.scope" placeholder="请输入土地范围" /> |  | ||||||
|                   <!-- <Attrs v-model:attrs="formData.scope" type="add" accept="image/*" /> --> |  | ||||||
|                 </el-form-item> |  | ||||||
|               </el-col> |  | ||||||
|             </el-row> |  | ||||||
|           </el-form> |  | ||||||
|         </el-tab-pane> |  | ||||||
|         <el-tab-pane label="土地承包信息" name="property"> |  | ||||||
|           <p class="form-title">承包信息</p> |  | ||||||
|           <el-form ref="propertyFormRef" :model="formData" :disabled="isReadonly" label-width="150px"> |  | ||||||
|             <el-row :gutter="20"> |  | ||||||
|               <el-col :span="12"> |  | ||||||
|                 <el-form-item label="土地承包经营权人" prop="propertyName"> |  | ||||||
|                   <el-input v-model="formData.propertyName" placeholder="请输入产权人姓名" /> |  | ||||||
|                 </el-form-item> |  | ||||||
|                 <el-form-item label="联系方式" prop="propertyPhone"> |  | ||||||
|                   <el-input v-model="formData.propertyPhone" placeholder="请输入产权人联系方式" /> |  | ||||||
|                 </el-form-item> |  | ||||||
|                 <el-form-item label="土地经营权证书编号" prop="landCode"> |  | ||||||
|                   <el-input v-model="formData.landCode" placeholder="请输入产权编号" /> |  | ||||||
|                 </el-form-item> |  | ||||||
|                 <el-form-item label="土地经营权证书" prop="propertyCertificateUrl"> |  | ||||||
|                   <FileUploader v-model="formData.propertyCertificateUrl" :limit="1" /> |  | ||||||
|                 </el-form-item> |  | ||||||
|               </el-col> |  | ||||||
|               <!-- <el-col :span="12"></el-col> --> |  | ||||||
|             </el-row> |  | ||||||
|           </el-form> |  | ||||||
|         </el-tab-pane> |  | ||||||
|         <el-tab-pane label="土地流转信息" name="use"> |  | ||||||
|           <p class="form-title">流转信息</p> |  | ||||||
|           <el-form ref="useForm" :model="formData" label-width="120px"> |  | ||||||
|             <el-row> |  | ||||||
|               <el-col :span="12"> |  | ||||||
|                 <el-form-item label="是否土地流转" prop="landTransfer"> |  | ||||||
|                   <el-radio-group v-model="formData.landTransfer" :disabled="isReadonly"> |  | ||||||
|                     <el-radio label="1">是</el-radio> |  | ||||||
|                     <el-radio label="0">否</el-radio> |  | ||||||
|                   </el-radio-group> |  | ||||||
|                 </el-form-item> |  | ||||||
|                 <el-form-item v-if="formData.landTransfer === '1'" label="土地受让方" prop="landUseName"> |  | ||||||
|                   <el-input v-model="formData.landUseName" placeholder="请输入土地受让方" /> |  | ||||||
|                 </el-form-item> |  | ||||||
|                 <el-form-item v-if="formData.landTransfer === '1'" label="联系电话" prop="landUsePhone"> |  | ||||||
|                   <el-input v-model="formData.landUsePhone" placeholder="请输入土地受让方联系方式" /> |  | ||||||
|                 </el-form-item> |  | ||||||
|                 <el-form-item v-if="formData.landTransfer === '1'" label="流转合同" prop="landCertificateUrl"> |  | ||||||
|                   <FileUploader v-model="formData.landCertificateUrl" :limit="1" /> |  | ||||||
|                 </el-form-item> |  | ||||||
|               </el-col> |  | ||||||
|             </el-row> |  | ||||||
|           </el-form> |  | ||||||
|         </el-tab-pane> |  | ||||||
|       </el-tabs> |  | ||||||
| 
 |  | ||||||
|       <template #footer> |       <template #footer> | ||||||
|         <span class="dialog-footer"> |         <div class="dialog-footer"> | ||||||
|           <el-button @click="visible = false">取消</el-button> |           <el-button @click="handleCancel">取消</el-button> | ||||||
|           <template v-if="!isReadonly"> |           <el-button v-if="!isReadonly" type="primary" @click="handleSubmit()"> 保存 </el-button> | ||||||
|             <el-button type="primary" @click="submitAll">修改</el-button> |         </div> | ||||||
|           </template> |  | ||||||
|         </span> |  | ||||||
|       </template> |       </template> | ||||||
|     </el-dialog> |     </el-dialog> | ||||||
|   </div> |   </div> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script setup> | <script setup> | ||||||
| import { ref, onMounted } from 'vue'; | // --------------------------------------------------------------------- | ||||||
| import LandSearch from './components/LandSearch.vue'; | // avue-crud 通用代码 | ||||||
| import TableComponent from '@/components/tableComponent.vue'; | // --------------------------------------------------------------------- | ||||||
|  | import { ref, reactive, watch, onMounted, computed, nextTick } from 'vue'; | ||||||
|  | import { CRUD_OPTIONS } from '@/config'; | ||||||
|  | import { ElMessage, ElMessageBox } from 'element-plus'; | ||||||
|  | import { useUserStore } from '@/store/modules/user'; | ||||||
|  | import { mockData } from './landData'; | ||||||
| 
 | 
 | ||||||
| const searchForm = ref({}); | const UserStore = useUserStore(); | ||||||
| const handleSearch = (searchData) => { | const user = UserStore.getUserInfo(); | ||||||
|   // 使用搜索条件 | console.log('admin 属性:', user.admin); | ||||||
|   console.log(searchData); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| const handleReset = () => { |  | ||||||
|   // 重置后的逻辑 |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| const activeTab = ref('1'); |  | ||||||
| const handleTabChange = ({ name }) => { |  | ||||||
|   //   activeTab.value = name; |  | ||||||
|   console.log('切换tab', activeTab.value); |  | ||||||
|   getData(); |  | ||||||
| }; |  | ||||||
| 
 | 
 | ||||||
| const loading = ref(false); | const loading = ref(false); | ||||||
| const tableData = ref([]); | 
 | ||||||
|  | const visible = ref(false); | ||||||
|  | const isReadonly = ref(false); | ||||||
|  | const dialogTitle = ref(); | ||||||
|  | const activeTab = ref('1'); | ||||||
|  | const formData = ref({ | ||||||
|  |   gridName: '', | ||||||
|  |   gridAreaCode: '', | ||||||
|  |   scope: '', | ||||||
|  |   scopeImg: '', | ||||||
|  |   note: '', | ||||||
|  | }); | ||||||
|  | const initialFormData = { ...formData.value }; | ||||||
|  | const resetForm = () => { | ||||||
|  |   formData.value = { ...initialFormData }; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| const pageData = ref({ | const pageData = ref({ | ||||||
|   currentPage: 1, |   currentPage: 1, | ||||||
|   pageSize: 10, |   pageSize: 10, | ||||||
|   total: 0, |   total: 0, | ||||||
| }); | }); | ||||||
| const columns = ref([ | const searchForm = ref({ | ||||||
|   { label: '地块编号', prop: 'id', width: 160 }, |   gridName: '', | ||||||
|   { label: '地块名称', prop: 'landName', width: 170 }, |   keyword: '', | ||||||
|   { label: '面积', prop: 'area', formatter: (row, column, cellValue) => `${Number(cellValue).toFixed(2)} 亩` }, |   regionCode: '', | ||||||
|   { label: '土地分类', prop: 'landTypeName' }, |   id: '', | ||||||
|   { label: '土壤类型', prop: 'soilTypeName' }, |   status: -1, | ||||||
|   { label: '所属行政区域', prop: 'fullRegionName', width: 160 }, | }); | ||||||
|   { label: '所属网格', prop: 'gridName', width: 90 }, | const initialSearchForm = { ...searchForm.value }; | ||||||
|   { label: '具体位置', prop: 'address', width: 160 }, | const resetSearch = () => { | ||||||
|   { label: '土地承包经营人', prop: 'propertyName' }, |   searchForm.value = { ...initialSearchForm }; | ||||||
|   { label: '联系电话', prop: 'propertyPhone' }, | }; | ||||||
|   { label: '土地经营权证书编号', prop: 'landCode', width: 160 }, | // 过滤对象,只保留有值的属性 | ||||||
|   { label: '是否土地流转', prop: 'isTransfer', formatter: (row, column, cellValue) => (cellValue === 1 ? '是' : '否') }, | const filterObject = (obj) => { | ||||||
|   { label: '土地受让方', prop: 'transferName' }, |   const newObj = {}; | ||||||
|   { label: '受让方联系电话', prop: 'transferPhone', width: 100 }, |   Object.keys(obj).forEach((key) => { | ||||||
|   { label: '流转合同', prop: 'transferContract' }, |     const value = obj[key]; | ||||||
|   { label: '信息填报人', prop: 'fillName' }, |     // 检查值是否有效,排除空字符串、null 和 undefined | ||||||
|   { label: '信息填报单位', prop: 'fillGroup' }, |     if (value !== '' && value !== null && value !== undefined) { | ||||||
|   { label: '信息填报时间', prop: 'fillTime' }, |       newObj[key] = value; | ||||||
|   // { label: '信息更新人', prop: 'updateName' }, |     } | ||||||
|   // { label: '信息更新单位', prop: 'updateGroup' }, |   }); | ||||||
|   { label: '信息更新时间', prop: 'updateTime' }, |   return newObj; | ||||||
|   { label: '操作', prop: 'action', slotName: 'action', fixed: 'right' }, | }; | ||||||
| ]); |  | ||||||
| 
 | 
 | ||||||
| const actions = [ | const crudData = ref([]); | ||||||
|   { | const crudOptions = reactive({ | ||||||
|     name: '查看', |   ...CRUD_OPTIONS, | ||||||
|     icon: 'view', |   header: false, | ||||||
|     event: ({ row }) => handleView(row), |   menu: false, | ||||||
|   }, |   height: 'calc(100vh - 360px)', | ||||||
|   { |   column: [ | ||||||
|     name: '编辑', |     { label: '地块编号', prop: 'id', width: 160 }, | ||||||
|     icon: 'edit', |     { label: '地块名称', prop: 'landName', width: 170 }, | ||||||
|     event: ({ row }) => handleEdit(row), |     { label: '面积', prop: 'area', formatter: (row, column, cellValue) => `${Number(cellValue).toFixed(2)} 亩` }, | ||||||
|   }, |     { label: '土地分类', prop: 'landTypeName' }, | ||||||
|   { |     { label: '土壤类型', prop: 'soilTypeName' }, | ||||||
|     type: 'danger', |     { label: '所属行政区域', prop: 'fullRegionName', width: 160 }, | ||||||
|     name: '删除', |     { label: '所属网格', prop: 'gridName', width: 90 }, | ||||||
|     icon: 'delete', |     { label: '具体位置', prop: 'address', width: 160 }, | ||||||
|     event: ({ row }) => handleDelete(row.id), |     { label: '土地承包经营人', prop: 'propertyName' }, | ||||||
|   }, |     { label: '联系电话', prop: 'propertyPhone' }, | ||||||
| ]; |     { label: '土地经营权证书编号', prop: 'landCode', width: 160 }, | ||||||
| const handleView = async (row) => { |     { label: '是否土地流转', prop: 'isTransfer' }, | ||||||
|  |     { label: '土地受让方', prop: 'transferName' }, | ||||||
|  |     { label: '受让方联系电话', prop: 'transferPhone', width: 100 }, | ||||||
|  |     { label: '流转合同', prop: 'transferContract' }, | ||||||
|  |     { label: '信息填报人', prop: 'fillName' }, | ||||||
|  |     { label: '信息填报单位', prop: 'fillGroup' }, | ||||||
|  |     { label: '信息填报时间', prop: 'fillTime' }, | ||||||
|  |     // { label: '信息更新人', prop: 'updateName' }, | ||||||
|  |     // { label: '信息更新单位', prop: 'updateGroup' }, | ||||||
|  |     { label: '信息更新时间', prop: 'updateTime' }, | ||||||
|  |   ], | ||||||
|  |   actions: [ | ||||||
|  |     { | ||||||
|  |       name: '查看', | ||||||
|  |       icon: 'view', | ||||||
|  |       event: ({ row }) => handleView(row), | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       name: '编辑', | ||||||
|  |       icon: 'edit', | ||||||
|  |       event: ({ row }) => handleEdit(row), | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       type: 'danger', | ||||||
|  |       name: '删除', | ||||||
|  |       icon: 'delete', | ||||||
|  |       event: ({ row }) => handleDelete(row), | ||||||
|  |     }, | ||||||
|  |   ], | ||||||
|  | }); | ||||||
|  | const handleTabChange = ({ name }) => { | ||||||
|  |   //   activeTab.value = name; | ||||||
|  |   console.log('切换tab', activeTab.value); | ||||||
|  |   getData(); | ||||||
|  | }; | ||||||
|  | const handleRefresh = async () => { | ||||||
|  |   searchForm.value = { ...initialSearchForm }; | ||||||
|  |   getData(); | ||||||
|  | }; | ||||||
|  | const handleCurrentChange = (val) => { | ||||||
|  |   pageData.value.currentPage = val; | ||||||
|  | }; | ||||||
|  | const handleSizeChange = (val) => { | ||||||
|  |   pageData.value.pageSize = val; | ||||||
|  | }; | ||||||
|  | const handleView = (row) => { | ||||||
|   isReadonly.value = true; |   isReadonly.value = true; | ||||||
|   formData.value = await getLandDetail(row.id); |   formData.value = { ...row }; | ||||||
|   dialogTitle.value = '查看网格'; |   dialogTitle.value = '查看网格'; | ||||||
|   visible.value = true; |   //   visible.value = true; | ||||||
| }; | }; | ||||||
| const handleEdit = (row) => { | const handleEdit = (row) => { | ||||||
|   isReadonly.value = false; |   isReadonly.value = false; | ||||||
|   formData.value = { ...row }; |   formData.value = { ...row }; | ||||||
|   dialogTitle.value = '编辑网格'; |   dialogTitle.value = '编辑网格'; | ||||||
|   visible.value = true; |   //   visible.value = true; | ||||||
| }; | }; | ||||||
| const handleDelete = async (row) => { | const handleDelete = async (row) => { | ||||||
|   console.log('删除', row); |   console.log('删除', row); | ||||||
| @ -250,127 +222,105 @@ const handleDelete = async (row) => { | |||||||
|   //   } |   //   } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const handlePageChange = ({ page, pageSize }) => { | const handleSubmit = async () => { | ||||||
|   pageData.value.currentPage = page; |   console.log('提交表单:', formData.value); | ||||||
|   pageData.value.pageSize = pageSize; |  | ||||||
|   getData(); |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| const visible = ref(false); |  | ||||||
| const isReadonly = ref(false); |  | ||||||
| const dialogTitle = ref(); |  | ||||||
| const activeFormTab = ref('basic'); |  | ||||||
| const formData = ref({ |  | ||||||
|   gridName: '', |  | ||||||
|   gridAreaCode: '', |  | ||||||
|   scope: '', |  | ||||||
|   scopeImg: '', |  | ||||||
|   note: '', |  | ||||||
| }); |  | ||||||
| const initialFormData = { ...formData.value }; |  | ||||||
| const resetForm = () => { |  | ||||||
|   formData.value = { ...initialFormData }; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| import { mockData } from './landData'; |  | ||||||
| import { createLand, deleteLand, editLand, fetchLandList, getLandById, approveLand } from '@/apis/landResourceManagement/landManagement'; |  | ||||||
| import request from '@/utils/axios'; |  | ||||||
| const getData = async () => { |  | ||||||
|   loading.value = true; |  | ||||||
|   const requestData = { |  | ||||||
|     ...searchForm.value, |  | ||||||
|     page: pageData.value.currentPage, |  | ||||||
|     size: pageData.value.pageSize, |  | ||||||
|     landStatus: activeTab.value, |  | ||||||
|     landTypeName: '草地', |  | ||||||
|   }; |  | ||||||
|   const response = await fetchLandList(requestData); |  | ||||||
|   tableData.value = Array.isArray(response.data.records) ? response.data.records : []; |  | ||||||
|   pageData.value.total = tableData.value.length; |  | ||||||
|   loading.value = false; |  | ||||||
| }; |  | ||||||
| const getLandDetail = async (id) => { |  | ||||||
|   const response = await getLandById(id); |  | ||||||
|   return response.data; |  | ||||||
| }; |  | ||||||
| const landTypeOptions = ref([]); |  | ||||||
| const treeProps = ref({ |  | ||||||
|   value: 'id', |  | ||||||
|   label: 'landType', |  | ||||||
|   children: 'children', |  | ||||||
|   // disabled: (data) => { |  | ||||||
|   //   return data.children && data.children.length > 0; |  | ||||||
|   // }, |  | ||||||
| }); |  | ||||||
| const fetchLandTypeData = async () => { |  | ||||||
|   try { |   try { | ||||||
|     const response = await request.get('/land-resource/baseInfo/landTree', { params: { status: '1' } }); |     if (dialogTitle.value === '新增网格') { | ||||||
|     if (response.code === 200) { |       await createGrid(formData.value); | ||||||
|       landTypeOptions.value = response.data; |       ElMessage.success('新增成功'); | ||||||
|  |       resetForm(); | ||||||
|  |       visible.value = false; | ||||||
|  |       getData(); | ||||||
|  |     } else { | ||||||
|  |       await updateGrid(formData.value); | ||||||
|  |       ElMessage.success('更新成功'); | ||||||
|  |       resetForm(); | ||||||
|  |       visible.value = false; | ||||||
|  |       getData(); | ||||||
|     } |     } | ||||||
|   } catch (error) { |   } catch (error) { | ||||||
|     console.error('获取土地类型数据失败', error); |     ElMessage.error(error.message || '新增失败,请重试'); | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  | 
 | ||||||
|  | // --------------------------------------------------------------------- | ||||||
|  | // 业务代码 | ||||||
|  | // --------------------------------------------------------------------- | ||||||
|  | import { createGrid, updateGrid, deleteGrid, fetchGridList, getGridDetail, exportGrid } from '@/apis/landResourceManagement/gridManagement'; | ||||||
|  | 
 | ||||||
| onMounted(() => { | onMounted(() => { | ||||||
|   getData(); |   getData(); | ||||||
|   fetchLandTypeData(); |  | ||||||
| }); | }); | ||||||
|  | const getData = async () => { | ||||||
|  |   //   const filteredParams = filterObject(searchForm.value); | ||||||
|  |   //   const response = await fetchGridList(filteredParams); | ||||||
|  |   //   crudData.value = Array.isArray(response.data.records) ? response.data.records : []; | ||||||
|  |   loading.value = true; | ||||||
|  |   // 模拟接口延迟 | ||||||
|  |   await new Promise((resolve) => setTimeout(resolve, 300)); | ||||||
|  |   crudData.value = mockData | ||||||
|  |     .filter((item) => item.status === activeTab.value) | ||||||
|  |     .map((item) => ({ | ||||||
|  |       ...item, | ||||||
|  |       landTypeName: '林地', | ||||||
|  |     })); | ||||||
|  |   pageData.value.total = crudData.value.length; | ||||||
|  |   loading.value = false; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const handleAdd = () => { | ||||||
|  |   console.log('handleAdd'); | ||||||
|  |   resetForm(); | ||||||
|  |   isReadonly.value = false; | ||||||
|  |   dialogTitle.value = '新增网格'; | ||||||
|  |   visible.value = true; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const handleSearch = () => { | ||||||
|  |   getData(); | ||||||
|  | }; | ||||||
|  | const handleCancel = () => { | ||||||
|  |   visible.value = false; | ||||||
|  | }; | ||||||
| </script> | </script> | ||||||
|  | 
 | ||||||
| <style scoped lang="scss"> | <style scoped lang="scss"> | ||||||
| .custom-page { | .custom-page { | ||||||
|   display: flex; |   padding-bottom: 0px; | ||||||
|   flex-direction: column; |  | ||||||
| } | } | ||||||
| h1 { | h1 { | ||||||
|   font-size: 20px; |   font-size: 20px; | ||||||
|   font-weight: bold; |   font-weight: bold; | ||||||
|  |   margin-bottom: 20px; | ||||||
| } | } | ||||||
| .tabs-wrapper { | .search-bar { | ||||||
|   width: 100%; |   padding-left: 20px; | ||||||
|   display: flex; | } | ||||||
|   align-items: center; | :deep(.el-dialog__body) { | ||||||
|   // background-color: #7daaaa; |   padding: 20px; | ||||||
| 
 |   height: calc(100vh - 300px); | ||||||
|   .el-tabs__header { |   overflow-y: auto; | ||||||
|     width: 100%; |  | ||||||
| 
 |  | ||||||
|     .el-tabs__nav-scroll { |  | ||||||
|       display: flex; |  | ||||||
|       justify-content: center; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     .el-tabs__item { |  | ||||||
|       font-size: 16px; |  | ||||||
|       color: #555555; |  | ||||||
|       font-weight: 500; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|   :deep(.el-tabs__content) { |  | ||||||
|     padding: 20px; |  | ||||||
|     // background-color: #af8686; |  | ||||||
|     border-radius: 4px; |  | ||||||
|     width: 80%; |  | ||||||
|     height: calc(100vh - 400px); |  | ||||||
|     overflow-y: auto; |  | ||||||
| 
 |  | ||||||
|     .el-tab-pane { |  | ||||||
|       margin: 0 auto; |  | ||||||
|       width: 100%; |  | ||||||
|       // background-color: #555555; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
| } | } | ||||||
| 
 |  | ||||||
| .form-title { | .form-title { | ||||||
|   font-size: 16px; |   font-size: 16px; | ||||||
|   font-weight: 500; |   font-weight: 500; | ||||||
|   margin: 30px 0; |   margin: 30px 0; | ||||||
|   color: #333333; |   color: #333333; | ||||||
| } | } | ||||||
| 
 | .form-item { | ||||||
|  |   width: 500px; | ||||||
|  |   margin: 0 auto; | ||||||
|  | } | ||||||
| .dialog-footer { | .dialog-footer { | ||||||
|   display: block; |  | ||||||
|   text-align: center; |   text-align: center; | ||||||
| } | } | ||||||
|  | .custom-search { | ||||||
|  |   display: flex; | ||||||
|  |   align-items: center; | ||||||
|  |   padding-left: 20px; | ||||||
|  | 
 | ||||||
|  |   .el-button { | ||||||
|  |     margin-left: 12px; | ||||||
|  |   } | ||||||
|  | } | ||||||
| </style> | </style> | ||||||
|  | |||||||
| @ -1,329 +0,0 @@ | |||||||
| <template> |  | ||||||
|   <div class="custom-page"> |  | ||||||
|     <h1>林地</h1> |  | ||||||
|     <!-- 搜索 --> |  | ||||||
|     <el-form :inline="true" :model="searchForm" class="search-bar"> |  | ||||||
|       <el-form-item label="关键词"> |  | ||||||
|         <el-input v-model="searchForm.name" placeholder="请输入关键词" clearable /> |  | ||||||
|       </el-form-item> |  | ||||||
|       <el-form-item lable=""> |  | ||||||
|         <AreaCascader v-model:region-code="searchForm.regionCode" v-model:grid-id="searchForm.id" :width="600" /> |  | ||||||
|       </el-form-item> |  | ||||||
|       <el-form-item> |  | ||||||
|         <el-button type="primary" @click="handleSearch"> 搜索 </el-button> |  | ||||||
|         <el-button @click="resetSearch"> 重置 </el-button> |  | ||||||
|       </el-form-item> |  | ||||||
|     </el-form> |  | ||||||
|     <!-- 四个固定 Tabs --> |  | ||||||
|     <el-tabs v-model="activeTab" @tab-click="handleTabChange"> |  | ||||||
|       <!-- <el-tab-pane label="待提交" name="0" /> --> |  | ||||||
|       <el-tab-pane label="待审核" name="1" /> |  | ||||||
|       <el-tab-pane label="已通过" name="2" /> |  | ||||||
|       <el-tab-pane label="已驳回" name="0" /> |  | ||||||
|     </el-tabs> |  | ||||||
|     <avue-crud |  | ||||||
|       ref="crudRef" |  | ||||||
|       v-model:page="pageData" |  | ||||||
|       :data="crudData" |  | ||||||
|       :option="crudOptions" |  | ||||||
|       :table-loading="loading" |  | ||||||
|       @current-change="handleCurrentChange" |  | ||||||
|       @size-change="handleSizeChange" |  | ||||||
|     > |  | ||||||
|       <!-- <template #menu-left> |  | ||||||
|         <el-button type="primary" icon="Plus" @click="handleAdd">新增网格</el-button> |  | ||||||
|       </template> --> |  | ||||||
|       <template #menu="scope"> |  | ||||||
|         <custom-table-operate :actions="crudOptions.actions" :data="scope" /> |  | ||||||
|       </template> |  | ||||||
|     </avue-crud> |  | ||||||
|     <el-dialog :key="dialogTitle" v-model="visible" :title="dialogTitle" width="60%" align-center :draggable="true"> |  | ||||||
|       <el-form ref="form" :model="formData" :rules="rules" :disabled="isReadonly" label-width="100px" class="form-item"> |  | ||||||
|         <p class="form-title">填写网格信息</p> |  | ||||||
|         <el-form-item label="网格名称" prop="gridName"> |  | ||||||
|           <el-input v-model="formData.gridName" placeholder="请输入网格名称" /> |  | ||||||
|         </el-form-item> |  | ||||||
|         <el-form-item label="所属行政区域" prop="gridAreaCode"> |  | ||||||
|           <AreaSelect v-model="formData.gridAreaCode" :label="null" :emit-path="false" /> |  | ||||||
|         </el-form-item> |  | ||||||
|         <el-form-item label="网格化地图" prop="scopeImg"> |  | ||||||
|           <FileUploader v-model="formData.scopeImg" :limit="1" /> |  | ||||||
|         </el-form-item> |  | ||||||
|         <el-form-item label="备注" prop="note"> |  | ||||||
|           <el-input v-model="formData.note" placeholder="请输入备注" /> |  | ||||||
|         </el-form-item> |  | ||||||
|       </el-form> |  | ||||||
|       <template #footer> |  | ||||||
|         <div class="dialog-footer"> |  | ||||||
|           <el-button @click="handleCancel">取消</el-button> |  | ||||||
|           <el-button v-if="!isReadonly" type="primary" @click="handleSubmit()"> 保存 </el-button> |  | ||||||
|         </div> |  | ||||||
|       </template> |  | ||||||
|     </el-dialog> |  | ||||||
|   </div> |  | ||||||
| </template> |  | ||||||
| 
 |  | ||||||
| <script setup> |  | ||||||
| // --------------------------------------------------------------------- |  | ||||||
| // avue-crud 通用代码 |  | ||||||
| // --------------------------------------------------------------------- |  | ||||||
| import { ref, reactive, watch, onMounted, computed, nextTick } from 'vue'; |  | ||||||
| import { CRUD_OPTIONS } from '@/config'; |  | ||||||
| import { ElMessage, ElMessageBox } from 'element-plus'; |  | ||||||
| import { useUserStore } from '@/store/modules/user'; |  | ||||||
| import { mockData } from './landData'; |  | ||||||
| 
 |  | ||||||
| const UserStore = useUserStore(); |  | ||||||
| const user = UserStore.getUserInfo(); |  | ||||||
| console.log('admin 属性:', user.admin); |  | ||||||
| 
 |  | ||||||
| const loading = ref(false); |  | ||||||
| 
 |  | ||||||
| const visible = ref(false); |  | ||||||
| const isReadonly = ref(false); |  | ||||||
| const dialogTitle = ref(); |  | ||||||
| const activeTab = ref('1'); |  | ||||||
| const formData = ref({ |  | ||||||
|   gridName: '', |  | ||||||
|   gridAreaCode: '', |  | ||||||
|   scope: '', |  | ||||||
|   scopeImg: '', |  | ||||||
|   note: '', |  | ||||||
| }); |  | ||||||
| const initialFormData = { ...formData.value }; |  | ||||||
| const resetForm = () => { |  | ||||||
|   formData.value = { ...initialFormData }; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| const pageData = ref({ |  | ||||||
|   currentPage: 1, |  | ||||||
|   pageSize: 10, |  | ||||||
|   total: 0, |  | ||||||
| }); |  | ||||||
| const searchForm = ref({ |  | ||||||
|   gridName: '', |  | ||||||
|   keyword: '', |  | ||||||
|   regionCode: '', |  | ||||||
|   id: '', |  | ||||||
|   status: -1, |  | ||||||
| }); |  | ||||||
| const initialSearchForm = { ...searchForm.value }; |  | ||||||
| const resetSearch = () => { |  | ||||||
|   searchForm.value = { ...initialSearchForm }; |  | ||||||
| }; |  | ||||||
| // 过滤对象,只保留有值的属性 |  | ||||||
| const filterObject = (obj) => { |  | ||||||
|   const newObj = {}; |  | ||||||
|   Object.keys(obj).forEach((key) => { |  | ||||||
|     const value = obj[key]; |  | ||||||
|     // 检查值是否有效,排除空字符串、null 和 undefined |  | ||||||
|     if (value !== '' && value !== null && value !== undefined) { |  | ||||||
|       newObj[key] = value; |  | ||||||
|     } |  | ||||||
|   }); |  | ||||||
|   return newObj; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| const crudData = ref([]); |  | ||||||
| const crudOptions = reactive({ |  | ||||||
|   ...CRUD_OPTIONS, |  | ||||||
|   addBtn: false, |  | ||||||
|   header: false, |  | ||||||
|   searchBtn: false, |  | ||||||
|   emptyBtn: false, |  | ||||||
|   refreshBtn: false, |  | ||||||
|   height: 'calc(100vh - 360px)', |  | ||||||
|   column: [ |  | ||||||
|     { label: '地块编号', prop: 'id', width: 160 }, |  | ||||||
|     { label: '地块名称', prop: 'landName', width: 170 }, |  | ||||||
|     { label: '面积', prop: 'area', formatter: (row, column, cellValue) => `${Number(cellValue).toFixed(2)} 亩` }, |  | ||||||
|     { label: '土地分类', prop: 'landTypeName' }, |  | ||||||
|     { label: '土壤类型', prop: 'soilTypeName' }, |  | ||||||
|     { label: '所属行政区域', prop: 'fullRegionName', width: 160 }, |  | ||||||
|     { label: '所属网格', prop: 'gridName', width: 90 }, |  | ||||||
|     { label: '具体位置', prop: 'address', width: 160 }, |  | ||||||
|     { label: '土地承包经营人', prop: 'propertyName' }, |  | ||||||
|     { label: '联系电话', prop: 'propertyPhone' }, |  | ||||||
|     { label: '土地经营权证书编号', prop: 'landCode', width: 160 }, |  | ||||||
|     { label: '是否土地流转', prop: 'isTransfer' }, |  | ||||||
|     { label: '土地受让方', prop: 'transferName' }, |  | ||||||
|     { label: '受让方联系电话', prop: 'transferPhone', width: 100 }, |  | ||||||
|     { label: '流转合同', prop: 'transferContract' }, |  | ||||||
|     { label: '信息填报人', prop: 'fillName' }, |  | ||||||
|     { label: '信息填报单位', prop: 'fillGroup' }, |  | ||||||
|     { label: '信息填报时间', prop: 'fillTime' }, |  | ||||||
|     // { label: '信息更新人', prop: 'updateName' }, |  | ||||||
|     // { label: '信息更新单位', prop: 'updateGroup' }, |  | ||||||
|     { label: '信息更新时间', prop: 'updateTime' }, |  | ||||||
|   ], |  | ||||||
|   actions: [ |  | ||||||
|     { |  | ||||||
|       name: '查看', |  | ||||||
|       icon: 'view', |  | ||||||
|       event: ({ row }) => handleView(row), |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       name: '编辑', |  | ||||||
|       icon: 'edit', |  | ||||||
|       event: ({ row }) => handleEdit(row), |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       type: 'danger', |  | ||||||
|       name: '删除', |  | ||||||
|       icon: 'delete', |  | ||||||
|       event: ({ row }) => handleDelete(row), |  | ||||||
|     }, |  | ||||||
|   ], |  | ||||||
| }); |  | ||||||
| const handleTabChange = ({ name }) => { |  | ||||||
|   //   activeTab.value = name; |  | ||||||
|   console.log('切换tab', activeTab.value); |  | ||||||
|   getData(); |  | ||||||
| }; |  | ||||||
| const handleRefresh = async () => { |  | ||||||
|   searchForm.value = { ...initialSearchForm }; |  | ||||||
|   getData(); |  | ||||||
| }; |  | ||||||
| const handleCurrentChange = (val) => { |  | ||||||
|   pageData.value.currentPage = val; |  | ||||||
| }; |  | ||||||
| const handleSizeChange = (val) => { |  | ||||||
|   pageData.value.pageSize = val; |  | ||||||
| }; |  | ||||||
| const handleView = (row) => { |  | ||||||
|   isReadonly.value = true; |  | ||||||
|   formData.value = { ...row }; |  | ||||||
|   dialogTitle.value = '查看网格'; |  | ||||||
|   //   visible.value = true; |  | ||||||
| }; |  | ||||||
| const handleEdit = (row) => { |  | ||||||
|   isReadonly.value = false; |  | ||||||
|   formData.value = { ...row }; |  | ||||||
|   dialogTitle.value = '编辑网格'; |  | ||||||
|   //   visible.value = true; |  | ||||||
| }; |  | ||||||
| const handleDelete = async (row) => { |  | ||||||
|   console.log('删除', row); |  | ||||||
|   //   try { |  | ||||||
|   //     await ElMessageBox.confirm('确认删除该网格吗?', '提示', { |  | ||||||
|   //       confirmButtonText: '确定', |  | ||||||
|   //       cancelButtonText: '取消', |  | ||||||
|   //       type: 'warning', |  | ||||||
|   //     }); |  | ||||||
| 
 |  | ||||||
|   //     const response = await deleteGrid(row.id); |  | ||||||
| 
 |  | ||||||
|   //     ElMessage.success('删除成功'); |  | ||||||
|   //     getData(); |  | ||||||
|   //   } catch (error) { |  | ||||||
|   //     if (error === 'cancel') { |  | ||||||
|   //       ElMessage.info('已取消删除'); |  | ||||||
|   //     } else { |  | ||||||
|   //       ElMessage.error('删除失败'); |  | ||||||
|   //       console.error('删除异常:', error); |  | ||||||
|   //     } |  | ||||||
|   //   } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| const handleSubmit = async () => { |  | ||||||
|   console.log('提交表单:', formData.value); |  | ||||||
|   try { |  | ||||||
|     if (dialogTitle.value === '新增网格') { |  | ||||||
|       await createGrid(formData.value); |  | ||||||
|       ElMessage.success('新增成功'); |  | ||||||
|       resetForm(); |  | ||||||
|       visible.value = false; |  | ||||||
|       getData(); |  | ||||||
|     } else { |  | ||||||
|       await updateGrid(formData.value); |  | ||||||
|       ElMessage.success('更新成功'); |  | ||||||
|       resetForm(); |  | ||||||
|       visible.value = false; |  | ||||||
|       getData(); |  | ||||||
|     } |  | ||||||
|   } catch (error) { |  | ||||||
|     ElMessage.error(error.message || '新增失败,请重试'); |  | ||||||
|   } |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| // --------------------------------------------------------------------- |  | ||||||
| // 业务代码 |  | ||||||
| // --------------------------------------------------------------------- |  | ||||||
| import { createGrid, updateGrid, deleteGrid, fetchGridList, getGridDetail, exportGrid } from '@/apis/landResourceManagement/gridManagement'; |  | ||||||
| 
 |  | ||||||
| onMounted(() => { |  | ||||||
|   getData(); |  | ||||||
| }); |  | ||||||
| const getData = async () => { |  | ||||||
|   //   const filteredParams = filterObject(searchForm.value); |  | ||||||
|   //   const response = await fetchGridList(filteredParams); |  | ||||||
|   //   crudData.value = Array.isArray(response.data.records) ? response.data.records : []; |  | ||||||
|   loading.value = true; |  | ||||||
|   // 模拟接口延迟 |  | ||||||
|   await new Promise((resolve) => setTimeout(resolve, 300)); |  | ||||||
|   crudData.value = mockData |  | ||||||
|     .filter((item) => item.status === activeTab.value) |  | ||||||
|     .map((item) => ({ |  | ||||||
|       ...item, |  | ||||||
|       landTypeName: '林地', |  | ||||||
|     })); |  | ||||||
|   pageData.value.total = crudData.value.length; |  | ||||||
|   loading.value = false; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| const handleAdd = () => { |  | ||||||
|   console.log('handleAdd'); |  | ||||||
|   resetForm(); |  | ||||||
|   isReadonly.value = false; |  | ||||||
|   dialogTitle.value = '新增网格'; |  | ||||||
|   visible.value = true; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| const handleSearch = () => { |  | ||||||
|   getData(); |  | ||||||
| }; |  | ||||||
| const handleCancel = () => { |  | ||||||
|   visible.value = false; |  | ||||||
| }; |  | ||||||
| </script> |  | ||||||
| 
 |  | ||||||
| <style scoped lang="scss"> |  | ||||||
| .custom-page { |  | ||||||
|   padding-bottom: 0px; |  | ||||||
| } |  | ||||||
| h1 { |  | ||||||
|   font-size: 20px; |  | ||||||
|   font-weight: bold; |  | ||||||
|   margin-bottom: 20px; |  | ||||||
| } |  | ||||||
| .search-bar { |  | ||||||
|   padding-left: 20px; |  | ||||||
| } |  | ||||||
| :deep(.el-dialog__body) { |  | ||||||
|   padding: 20px; |  | ||||||
|   height: calc(100vh - 300px); |  | ||||||
|   overflow-y: auto; |  | ||||||
| } |  | ||||||
| .form-title { |  | ||||||
|   font-size: 16px; |  | ||||||
|   font-weight: 500; |  | ||||||
|   margin: 30px 0; |  | ||||||
|   color: #333333; |  | ||||||
| } |  | ||||||
| .form-item { |  | ||||||
|   width: 500px; |  | ||||||
|   margin: 0 auto; |  | ||||||
| } |  | ||||||
| .dialog-footer { |  | ||||||
|   text-align: center; |  | ||||||
| } |  | ||||||
| .custom-search { |  | ||||||
|   display: flex; |  | ||||||
|   align-items: center; |  | ||||||
|   padding-left: 20px; |  | ||||||
| 
 |  | ||||||
|   .el-button { |  | ||||||
|     margin-left: 12px; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| </style> |  | ||||||
| @ -0,0 +1,385 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="custom-page"> | ||||||
|  |     <h1>林地</h1> | ||||||
|  |     <LandSearch :search="searchForm" @on-search="handleSearch" @on-reset="handleReset" /> | ||||||
|  |     <el-tabs v-model="activeTab" @tab-click="handleTabChange"> | ||||||
|  |       <!-- <el-tab-pane label="待提交" name="0" /> --> | ||||||
|  |       <el-tab-pane label="待审核" name="1" /> | ||||||
|  |       <el-tab-pane label="已通过" name="2" /> | ||||||
|  |       <el-tab-pane label="已驳回" name="0" /> | ||||||
|  |     </el-tabs> | ||||||
|  |     <TableComponent | ||||||
|  |       :loading="loading" | ||||||
|  |       :columns="columns" | ||||||
|  |       :table-data="tableData" | ||||||
|  |       :current-page="pageData.currentPage" | ||||||
|  |       :page-size="pageData.pageSize" | ||||||
|  |       :total="pageData.total" | ||||||
|  |       :show-pagination="true" | ||||||
|  |       :show-border="true" | ||||||
|  |       :show-sort="true" | ||||||
|  |       style="height: calc(100vh - 320px)" | ||||||
|  |       @page-change="handlePageChange" | ||||||
|  |     > | ||||||
|  |       <template #action="scope"> | ||||||
|  |         <!-- <el-button size="small" @click="handleEdit(scope.row)">编辑</el-button> | ||||||
|  |         <el-button size="small" type="danger" @click="handleDelete(scope.row)">删除</el-button> --> | ||||||
|  |         <custom-table-operate :actions="getActions(scope.row)" :data="scope" /> | ||||||
|  |       </template> | ||||||
|  |     </TableComponent> | ||||||
|  |     <el-dialog :key="dialogTitle" v-model="visible" :title="dialogTitle" width="60%" align-center :draggable="true"> | ||||||
|  |       <el-tabs v-model="activeFormTab" class="tabs-wrapper"> | ||||||
|  |         <el-tab-pane label="土地基本信息" name="basic"> | ||||||
|  |           <p class="form-title">基本信息</p> | ||||||
|  |           <el-form ref="basicFormRef" :model="formData" :disabled="isReadonly" label-width="120px"> | ||||||
|  |             <el-row :gutter="20"> | ||||||
|  |               <el-col :span="12"> | ||||||
|  |                 <el-form-item label="地块名称" prop="landName"> | ||||||
|  |                   <el-input v-model="formData.landName" placeholder="请输入地块名称" /> | ||||||
|  |                 </el-form-item> | ||||||
|  |                 <el-form-item label="土地类型" prop="landType"> | ||||||
|  |                   <el-tree-select | ||||||
|  |                     v-model="formData.landType" | ||||||
|  |                     :data="landTypeOptions" | ||||||
|  |                     :props="treeProps" | ||||||
|  |                     placeholder="选择土地类型" | ||||||
|  |                     clearable | ||||||
|  |                     check-strictly | ||||||
|  |                     :render-after-expand="false" | ||||||
|  |                   /> | ||||||
|  |                 </el-form-item> | ||||||
|  |                 <el-form-item label="具体位置" prop="address"> | ||||||
|  |                   <el-input v-model="formData.address" placeholder="请输入具体位置" /> | ||||||
|  |                 </el-form-item> | ||||||
|  |                 <el-form-item label="土壤类型" prop="soilTypeId"> | ||||||
|  |                   <url-select | ||||||
|  |                     v-model="formData.soilTypeId" | ||||||
|  |                     placeholder="选择土壤类型" | ||||||
|  |                     url="/land-resource/baseInfo/soilTypePage" | ||||||
|  |                     :params="{ current: 1, size: 100 }" | ||||||
|  |                     label-key="soilType" | ||||||
|  |                     value-key="id" | ||||||
|  |                     :clearable="true" | ||||||
|  |                   /> | ||||||
|  |                 </el-form-item> | ||||||
|  |                 <el-form-item label="土地照片" prop="landUrl"> | ||||||
|  |                   <FileUploader v-model="formData.landUrl" :limit="1" /> | ||||||
|  |                 </el-form-item> | ||||||
|  |               </el-col> | ||||||
|  |               <el-col :span="12"> | ||||||
|  |                 <el-form-item label="面积(亩)" prop="area"> | ||||||
|  |                   <el-input-number v-model="formData.area" :min="0" :precision="2" :step="0.1" controls-position="right" style="width: 100%" /> | ||||||
|  |                 </el-form-item> | ||||||
|  | 
 | ||||||
|  |                 <el-form-item label="" label-width="0" prop="gridId"> | ||||||
|  |                   <AreaCascader v-model:region-code="formData.gridAreaCode" v-model:grid-id="formData.gridId" label="" :split-rows="true" /> | ||||||
|  |                 </el-form-item> | ||||||
|  | 
 | ||||||
|  |                 <el-form-item label="土地范围" prop="scope"> | ||||||
|  |                   <el-input v-model="formData.scope" placeholder="请输入土地范围" /> | ||||||
|  |                   <!-- <Attrs v-model:attrs="formData.scope" type="add" accept="image/*" /> --> | ||||||
|  |                 </el-form-item> | ||||||
|  |               </el-col> | ||||||
|  |             </el-row> | ||||||
|  |           </el-form> | ||||||
|  |         </el-tab-pane> | ||||||
|  |         <el-tab-pane label="土地承包信息" name="property"> | ||||||
|  |           <p class="form-title">承包信息</p> | ||||||
|  |           <el-form ref="propertyFormRef" :model="formData" :disabled="isReadonly" label-width="150px"> | ||||||
|  |             <el-row :gutter="20"> | ||||||
|  |               <el-col :span="12"> | ||||||
|  |                 <el-form-item label="土地承包经营权人" prop="propertyName"> | ||||||
|  |                   <el-input v-model="formData.propertyName" placeholder="请输入产权人姓名" /> | ||||||
|  |                 </el-form-item> | ||||||
|  |                 <el-form-item label="联系方式" prop="propertyPhone"> | ||||||
|  |                   <el-input v-model="formData.propertyPhone" placeholder="请输入产权人联系方式" /> | ||||||
|  |                 </el-form-item> | ||||||
|  |                 <el-form-item label="土地经营权证书编号" prop="landCode"> | ||||||
|  |                   <el-input v-model="formData.landCode" placeholder="请输入产权编号" /> | ||||||
|  |                 </el-form-item> | ||||||
|  |                 <el-form-item label="土地经营权证书" prop="propertyCertificateUrl"> | ||||||
|  |                   <FileUploader v-model="formData.propertyCertificateUrl" :limit="1" /> | ||||||
|  |                 </el-form-item> | ||||||
|  |               </el-col> | ||||||
|  |               <!-- <el-col :span="12"></el-col> --> | ||||||
|  |             </el-row> | ||||||
|  |           </el-form> | ||||||
|  |         </el-tab-pane> | ||||||
|  |         <el-tab-pane label="土地流转信息" name="use"> | ||||||
|  |           <p class="form-title">流转信息</p> | ||||||
|  |           <el-form ref="useForm" :model="formData" label-width="120px"> | ||||||
|  |             <el-row> | ||||||
|  |               <el-col :span="12"> | ||||||
|  |                 <el-form-item label="是否土地流转" prop="landTransfer"> | ||||||
|  |                   <el-radio-group v-model="formData.landTransfer" :disabled="isReadonly"> | ||||||
|  |                     <el-radio label="1">是</el-radio> | ||||||
|  |                     <el-radio label="0">否</el-radio> | ||||||
|  |                   </el-radio-group> | ||||||
|  |                 </el-form-item> | ||||||
|  |                 <el-form-item v-if="formData.landTransfer === '1'" label="土地受让方" prop="landUseName"> | ||||||
|  |                   <el-input v-model="formData.landUseName" placeholder="请输入土地受让方" /> | ||||||
|  |                 </el-form-item> | ||||||
|  |                 <el-form-item v-if="formData.landTransfer === '1'" label="联系电话" prop="landUsePhone"> | ||||||
|  |                   <el-input v-model="formData.landUsePhone" placeholder="请输入土地受让方联系方式" /> | ||||||
|  |                 </el-form-item> | ||||||
|  |                 <el-form-item v-if="formData.landTransfer === '1'" label="流转合同" prop="landCertificateUrl"> | ||||||
|  |                   <FileUploader v-model="formData.landCertificateUrl" :limit="1" /> | ||||||
|  |                 </el-form-item> | ||||||
|  |               </el-col> | ||||||
|  |             </el-row> | ||||||
|  |           </el-form> | ||||||
|  |         </el-tab-pane> | ||||||
|  |       </el-tabs> | ||||||
|  | 
 | ||||||
|  |       <template #footer> | ||||||
|  |         <span class="dialog-footer"> | ||||||
|  |           <el-button @click="visible = false">取消</el-button> | ||||||
|  |           <template v-if="!isReadonly"> | ||||||
|  |             <el-button type="primary" @click="submitAll">修改</el-button> | ||||||
|  |           </template> | ||||||
|  |         </span> | ||||||
|  |       </template> | ||||||
|  |     </el-dialog> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script setup> | ||||||
|  | import { ref, onMounted } from 'vue'; | ||||||
|  | import LandSearch from './components/LandSearch.vue'; | ||||||
|  | import TableComponent from '@/components/tableComponent.vue'; | ||||||
|  | 
 | ||||||
|  | const searchForm = ref({}); | ||||||
|  | const handleSearch = (searchData) => { | ||||||
|  |   // 使用搜索条件 | ||||||
|  |   console.log(searchData); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const handleReset = () => { | ||||||
|  |   // 重置后的逻辑 | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const activeTab = ref('1'); | ||||||
|  | const handleTabChange = ({ name }) => { | ||||||
|  |   //   activeTab.value = name; | ||||||
|  |   console.log('切换tab', activeTab.value); | ||||||
|  |   getData(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const loading = ref(false); | ||||||
|  | const tableData = ref([]); | ||||||
|  | const pageData = ref({ | ||||||
|  |   currentPage: 1, | ||||||
|  |   pageSize: 10, | ||||||
|  |   total: 0, | ||||||
|  | }); | ||||||
|  | const columns = ref([ | ||||||
|  |   { label: '地块编号', prop: 'id', width: 160 }, | ||||||
|  |   { label: '地块名称', prop: 'landName', width: 170 }, | ||||||
|  |   { label: '面积', prop: 'area', formatter: (row, column, cellValue) => `${Number(cellValue).toFixed(2)} 亩` }, | ||||||
|  |   { label: '土地分类', prop: 'landTypeName' }, | ||||||
|  |   { label: '土壤类型', prop: 'soilTypeName' }, | ||||||
|  |   { label: '所属行政区域', prop: 'fullRegionName', width: 160 }, | ||||||
|  |   { label: '所属网格', prop: 'gridName', width: 90 }, | ||||||
|  |   { label: '具体位置', prop: 'address', width: 160 }, | ||||||
|  |   { label: '土地承包经营人', prop: 'propertyName' }, | ||||||
|  |   { label: '联系电话', prop: 'propertyPhone' }, | ||||||
|  |   { label: '土地经营权证书编号', prop: 'landCode', width: 160 }, | ||||||
|  |   { label: '是否土地流转', prop: 'isTransfer', formatter: (row, column, cellValue) => (cellValue === 1 ? '是' : '否') }, | ||||||
|  |   { label: '土地受让方', prop: 'transferName' }, | ||||||
|  |   { label: '受让方联系电话', prop: 'transferPhone', width: 100 }, | ||||||
|  |   { label: '流转合同', prop: 'transferContract' }, | ||||||
|  |   { label: '信息填报人', prop: 'fillName' }, | ||||||
|  |   { label: '信息填报单位', prop: 'fillGroup' }, | ||||||
|  |   { label: '信息填报时间', prop: 'fillTime' }, | ||||||
|  |   // { label: '信息更新人', prop: 'updateName' }, | ||||||
|  |   // { label: '信息更新单位', prop: 'updateGroup' }, | ||||||
|  |   { label: '信息更新时间', prop: 'updateTime' }, | ||||||
|  |   { label: '操作', prop: 'action', slotName: 'action', fixed: 'right' }, | ||||||
|  | ]); | ||||||
|  | 
 | ||||||
|  | const actions = [ | ||||||
|  |   { | ||||||
|  |     name: '查看', | ||||||
|  |     icon: 'view', | ||||||
|  |     event: ({ row }) => handleView(row), | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     name: '编辑', | ||||||
|  |     icon: 'edit', | ||||||
|  |     event: ({ row }) => handleEdit(row), | ||||||
|  |   }, | ||||||
|  |   { | ||||||
|  |     type: 'danger', | ||||||
|  |     name: '删除', | ||||||
|  |     icon: 'delete', | ||||||
|  |     event: ({ row }) => handleDelete(row.id), | ||||||
|  |   }, | ||||||
|  | ]; | ||||||
|  | const handleView = async (row) => { | ||||||
|  |   isReadonly.value = true; | ||||||
|  |   formData.value = await getLandDetail(row.id); | ||||||
|  |   dialogTitle.value = '查看网格'; | ||||||
|  |   visible.value = true; | ||||||
|  | }; | ||||||
|  | const handleEdit = (row) => { | ||||||
|  |   isReadonly.value = false; | ||||||
|  |   formData.value = { ...row }; | ||||||
|  |   dialogTitle.value = '编辑网格'; | ||||||
|  |   visible.value = true; | ||||||
|  | }; | ||||||
|  | const handleDelete = async (row) => { | ||||||
|  |   console.log('删除', row); | ||||||
|  |   //   try { | ||||||
|  |   //     await ElMessageBox.confirm('确认删除该网格吗?', '提示', { | ||||||
|  |   //       confirmButtonText: '确定', | ||||||
|  |   //       cancelButtonText: '取消', | ||||||
|  |   //       type: 'warning', | ||||||
|  |   //     }); | ||||||
|  | 
 | ||||||
|  |   //     const response = await deleteGrid(row.id); | ||||||
|  | 
 | ||||||
|  |   //     ElMessage.success('删除成功'); | ||||||
|  |   //     getData(); | ||||||
|  |   //   } catch (error) { | ||||||
|  |   //     if (error === 'cancel') { | ||||||
|  |   //       ElMessage.info('已取消删除'); | ||||||
|  |   //     } else { | ||||||
|  |   //       ElMessage.error('删除失败'); | ||||||
|  |   //       console.error('删除异常:', error); | ||||||
|  |   //     } | ||||||
|  |   //   } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const handlePageChange = ({ page, pageSize }) => { | ||||||
|  |   pageData.value.currentPage = page; | ||||||
|  |   pageData.value.pageSize = pageSize; | ||||||
|  |   getData(); | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | const visible = ref(false); | ||||||
|  | const isReadonly = ref(false); | ||||||
|  | const dialogTitle = ref(); | ||||||
|  | const activeFormTab = ref('basic'); | ||||||
|  | const formData = ref({ | ||||||
|  |   gridName: '', | ||||||
|  |   gridAreaCode: '', | ||||||
|  |   scope: '', | ||||||
|  |   scopeImg: '', | ||||||
|  |   note: '', | ||||||
|  | }); | ||||||
|  | const initialFormData = { ...formData.value }; | ||||||
|  | const resetForm = () => { | ||||||
|  |   formData.value = { ...initialFormData }; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | import { mockData } from './landData'; | ||||||
|  | import { createLand, deleteLand, editLand, fetchLandList, getLandById, approveLand } from '@/apis/landResourceManagement/landManagement'; | ||||||
|  | import request from '@/utils/axios'; | ||||||
|  | const getData = async () => { | ||||||
|  |   loading.value = true; | ||||||
|  |   // const requestData = { | ||||||
|  |   //   ...searchForm.value, | ||||||
|  |   //   page: pageData.value.currentPage, | ||||||
|  |   //   size: pageData.value.pageSize, | ||||||
|  |   //   landStatus: activeTab.value, | ||||||
|  |   //   landTypeName: '草地', | ||||||
|  |   // }; | ||||||
|  |   // const response = await fetchLandList(requestData); | ||||||
|  |   // tableData.value = Array.isArray(response.data.records) ? response.data.records : []; | ||||||
|  |   // pageData.value.total = tableData.value.length; | ||||||
|  |   // loading.value = false; | ||||||
|  |   await new Promise((resolve) => setTimeout(resolve, 300)); | ||||||
|  |   tableData.value = mockData | ||||||
|  |     .filter((item) => item.status === activeTab.value) | ||||||
|  |     .map((item) => ({ | ||||||
|  |       ...item, | ||||||
|  |       landTypeName: '林地', | ||||||
|  |     })); | ||||||
|  |   pageData.value.total = tableData.value.length; | ||||||
|  |   loading.value = false; | ||||||
|  | }; | ||||||
|  | const getLandDetail = async (id) => { | ||||||
|  |   const response = await getLandById(id); | ||||||
|  |   return response.data; | ||||||
|  | }; | ||||||
|  | const landTypeOptions = ref([]); | ||||||
|  | const treeProps = ref({ | ||||||
|  |   value: 'id', | ||||||
|  |   label: 'landType', | ||||||
|  |   children: 'children', | ||||||
|  |   // disabled: (data) => { | ||||||
|  |   //   return data.children && data.children.length > 0; | ||||||
|  |   // }, | ||||||
|  | }); | ||||||
|  | const fetchLandTypeData = async () => { | ||||||
|  |   try { | ||||||
|  |     const response = await request.get('/land-resource/baseInfo/landTree', { params: { status: '1' } }); | ||||||
|  |     if (response.code === 200) { | ||||||
|  |       landTypeOptions.value = response.data; | ||||||
|  |     } | ||||||
|  |   } catch (error) { | ||||||
|  |     console.error('获取土地类型数据失败', error); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | onMounted(() => { | ||||||
|  |   getData(); | ||||||
|  |   fetchLandTypeData(); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .custom-page { | ||||||
|  |   display: flex; | ||||||
|  |   flex-direction: column; | ||||||
|  | } | ||||||
|  | h1 { | ||||||
|  |   font-size: 20px; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | .tabs-wrapper { | ||||||
|  |   width: 100%; | ||||||
|  |   display: flex; | ||||||
|  |   align-items: center; | ||||||
|  |   // background-color: #7daaaa; | ||||||
|  | 
 | ||||||
|  |   .el-tabs__header { | ||||||
|  |     width: 100%; | ||||||
|  | 
 | ||||||
|  |     .el-tabs__nav-scroll { | ||||||
|  |       display: flex; | ||||||
|  |       justify-content: center; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     .el-tabs__item { | ||||||
|  |       font-size: 16px; | ||||||
|  |       color: #555555; | ||||||
|  |       font-weight: 500; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |   :deep(.el-tabs__content) { | ||||||
|  |     padding: 20px; | ||||||
|  |     // background-color: #af8686; | ||||||
|  |     border-radius: 4px; | ||||||
|  |     width: 80%; | ||||||
|  |     height: calc(100vh - 400px); | ||||||
|  |     overflow-y: auto; | ||||||
|  | 
 | ||||||
|  |     .el-tab-pane { | ||||||
|  |       margin: 0 auto; | ||||||
|  |       width: 100%; | ||||||
|  |       // background-color: #555555; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .form-title { | ||||||
|  |   font-size: 16px; | ||||||
|  |   font-weight: 500; | ||||||
|  |   margin: 30px 0; | ||||||
|  |   color: #333333; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .dialog-footer { | ||||||
|  |   display: block; | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @ -218,17 +218,14 @@ const filterObject = (obj) => { | |||||||
| const crudData = ref([]); | const crudData = ref([]); | ||||||
| const crudOptions = reactive({ | const crudOptions = reactive({ | ||||||
|   ...CRUD_OPTIONS, |   ...CRUD_OPTIONS, | ||||||
|   addBtn: false, |  | ||||||
|   header: false, |   header: false, | ||||||
|   searchBtn: false, |   menu: false, | ||||||
|   emptyBtn: false, |  | ||||||
|   refreshBtn: false, |  | ||||||
|   height: 'calc(100vh - 360px)', |   height: 'calc(100vh - 360px)', | ||||||
|   column: [ |   column: [ | ||||||
|     { label: '地块编号', prop: 'id', width: 160 }, |     { label: '地块编号', prop: 'id', width: 160 }, | ||||||
|     { label: '地块名称', prop: 'landName', width: 170 }, |     { label: '地块名称', prop: 'landName', width: 170 }, | ||||||
|     { label: '面积', prop: 'area', formatter: (row, column, cellValue) => `${Number(cellValue).toFixed(2)} 亩` }, |     { label: '面积', prop: 'area', formatter: (row, column, cellValue) => `${Number(cellValue).toFixed(2)} 亩` }, | ||||||
|     { label: '土地分类', prop: 'fullLandType' }, |     { label: '土地分类', prop: 'landTypeName' }, | ||||||
|     { label: '土壤类型', prop: 'soilTypeName' }, |     { label: '土壤类型', prop: 'soilTypeName' }, | ||||||
|     { label: '所属行政区域', prop: 'fullRegionName', width: 160 }, |     { label: '所属行政区域', prop: 'fullRegionName', width: 160 }, | ||||||
|     { label: '所属网格', prop: 'gridName', width: 90 }, |     { label: '所属网格', prop: 'gridName', width: 90 }, | ||||||
| @ -262,22 +259,22 @@ const crudOptions = reactive({ | |||||||
|       icon: 'delete', |       icon: 'delete', | ||||||
|       event: ({ row }) => handleDelete(row), |       event: ({ row }) => handleDelete(row), | ||||||
|     }, |     }, | ||||||
|     { |     // { | ||||||
|       name: '审核', |     //   name: '审核', | ||||||
|       icon: 'approve', |     //   icon: 'approve', | ||||||
|       event: ({ row }) => onApprove(row), |     //   event: ({ row }) => onApprove(row), | ||||||
|     }, |     // }, | ||||||
|     // TODO: 驳回应该有填写驳回原因的弹窗 |     // // TODO: 驳回应该有填写驳回原因的弹窗 | ||||||
|     { |     // { | ||||||
|       name: '驳回', |     //   name: '驳回', | ||||||
|       icon: 'reject', |     //   icon: 'reject', | ||||||
|       event: ({ row }) => onReject(row), |     //   event: ({ row }) => onReject(row), | ||||||
|     }, |     // }, | ||||||
|     { |     // { | ||||||
|       name: '驳回原因', |     //   name: '驳回原因', | ||||||
|       icon: 'reject', |     //   icon: 'reject', | ||||||
|       event: ({ row }) => onRejectReason(row), |     //   event: ({ row }) => onRejectReason(row), | ||||||
|     }, |     // }, | ||||||
|   ], |   ], | ||||||
| }); | }); | ||||||
| const handleTabChange = ({ name }) => { | const handleTabChange = ({ name }) => { | ||||||
| @ -331,23 +328,6 @@ const handleDelete = async (row) => { | |||||||
| 
 | 
 | ||||||
| const handleSubmit = async () => { | const handleSubmit = async () => { | ||||||
|   console.log('提交表单:', formData.value); |   console.log('提交表单:', formData.value); | ||||||
|   try { |  | ||||||
|     if (dialogTitle.value === '新增网格') { |  | ||||||
|       await createLand(formData.value); |  | ||||||
|       ElMessage.success('新增成功'); |  | ||||||
|       resetForm(); |  | ||||||
|       visible.value = false; |  | ||||||
|       getData(); |  | ||||||
|     } else { |  | ||||||
|       await editLand(formData.value); |  | ||||||
|       ElMessage.success('更新成功'); |  | ||||||
|       resetForm(); |  | ||||||
|       visible.value = false; |  | ||||||
|       getData(); |  | ||||||
|     } |  | ||||||
|   } catch (error) { |  | ||||||
|     ElMessage.error(error.message || '新增失败,请重试'); |  | ||||||
|   } |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||||
| @ -361,9 +341,18 @@ onMounted(() => { | |||||||
| }); | }); | ||||||
| const getData = async () => { | const getData = async () => { | ||||||
|   loading.value = true; |   loading.value = true; | ||||||
|   const filteredParams = filterObject(searchForm.value); |   // const filteredParams = filterObject(searchForm.value); | ||||||
|   const response = await fetchLandList(filteredParams); |   // const response = await fetchLandList(filteredParams); | ||||||
|   crudData.value = Array.isArray(response.data.records) ? response.data.records : []; |   // crudData.value = Array.isArray(response.data.records) ? response.data.records : []; | ||||||
|  |   // pageData.value.total = crudData.value.length; | ||||||
|  |   // loading.value = false; | ||||||
|  |   await new Promise((resolve) => setTimeout(resolve, 300)); | ||||||
|  |   crudData.value = mockData | ||||||
|  |     .filter((item) => item.status === activeTab.value) | ||||||
|  |     .map((item) => ({ | ||||||
|  |       ...item, | ||||||
|  |       landTypeName: '草地', | ||||||
|  |     })); | ||||||
|   pageData.value.total = crudData.value.length; |   pageData.value.total = crudData.value.length; | ||||||
|   loading.value = false; |   loading.value = false; | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -127,11 +127,8 @@ const filterObject = (obj) => { | |||||||
| const crudData = ref([]); | const crudData = ref([]); | ||||||
| const crudOptions = reactive({ | const crudOptions = reactive({ | ||||||
|   ...CRUD_OPTIONS, |   ...CRUD_OPTIONS, | ||||||
|   addBtn: false, |  | ||||||
|   header: false, |   header: false, | ||||||
|   searchBtn: false, |   menu: false, | ||||||
|   emptyBtn: false, |  | ||||||
|   refreshBtn: false, |  | ||||||
|   height: 'calc(100vh - 360px)', |   height: 'calc(100vh - 360px)', | ||||||
|   column: [ |   column: [ | ||||||
|     { label: '地块编号', prop: 'id', width: 160 }, |     { label: '地块编号', prop: 'id', width: 160 }, | ||||||
| @ -227,23 +224,6 @@ const handleDelete = async (row) => { | |||||||
| 
 | 
 | ||||||
| const handleSubmit = async () => { | const handleSubmit = async () => { | ||||||
|   console.log('提交表单:', formData.value); |   console.log('提交表单:', formData.value); | ||||||
|   try { |  | ||||||
|     if (dialogTitle.value === '新增网格') { |  | ||||||
|       await createGrid(formData.value); |  | ||||||
|       ElMessage.success('新增成功'); |  | ||||||
|       resetForm(); |  | ||||||
|       visible.value = false; |  | ||||||
|       getData(); |  | ||||||
|     } else { |  | ||||||
|       await updateGrid(formData.value); |  | ||||||
|       ElMessage.success('更新成功'); |  | ||||||
|       resetForm(); |  | ||||||
|       visible.value = false; |  | ||||||
|       getData(); |  | ||||||
|     } |  | ||||||
|   } catch (error) { |  | ||||||
|     ElMessage.error(error.message || '新增失败,请重试'); |  | ||||||
|   } |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // --------------------------------------------------------------------- | // --------------------------------------------------------------------- | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user