土地资源管理
This commit is contained in:
		
							parent
							
								
									beb22c91f9
								
							
						
					
					
						commit
						1c56ca1d0f
					
				| @ -31,14 +31,14 @@ export default defineConfig(({ command, mode }) => { | ||||
|         'Access-Control-Allow-Origin': '*', | ||||
|       }, | ||||
|       proxy: { | ||||
|         // 仅 Brand 模块走子应用 DevServer
 | ||||
|         '/api/brand': { | ||||
|           target: 'http://localhost:9526', | ||||
|           changeOrigin: true, | ||||
|           // 如果想去掉 /api/brand 前缀(比如子应用实际监听的是 /brand/...),
 | ||||
|           // 可以加一个 rewrite:
 | ||||
|           // rewrite: path => path.replace(/^\/api\/brand/, '/brand'),
 | ||||
|         }, | ||||
|         // // 仅 Brand 模块走子应用 DevServer
 | ||||
|         // '/api/brand': {
 | ||||
|         //   target: 'http://localhost:9526',
 | ||||
|         //   changeOrigin: true,
 | ||||
|         //   // 如果想去掉 /api/brand 前缀(比如子应用实际监听的是 /brand/...),
 | ||||
|         //   // 可以加一个 rewrite:
 | ||||
|         //   // rewrite: path => path.replace(/^\/api\/brand/, '/brand'),
 | ||||
|         // },
 | ||||
|         [VITE_APP_BASE_API]: { | ||||
|           target: VITE_APP_BASE_URL, | ||||
|           changeOrigin: true, | ||||
|  | ||||
							
								
								
									
										54
									
								
								sub-government-affairs-service/src/apis/resource/member.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								sub-government-affairs-service/src/apis/resource/member.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,54 @@ | ||||
| import request from '@/utils/axios'; | ||||
| 
 | ||||
| // 获取网格列表
 | ||||
| export const GetGridList = (params = {}) => { | ||||
|   return request('/land-resource/gridManage/page', { | ||||
|     method: 'get', | ||||
|     params, | ||||
|   }); | ||||
| }; | ||||
| 
 | ||||
| // 网格员管理 - 列表
 | ||||
| export function GetMemberList(params = {}) { | ||||
|   return request('/land-resource/grid-member/page', { | ||||
|     method: 'GET', | ||||
|     params, | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // 网格员管理 - 新增
 | ||||
| export function AddMember(data = {}) { | ||||
|   return request('/land-resource/grid-member', { | ||||
|     method: 'POST', | ||||
|     data, | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // 网格员管理 - 修改
 | ||||
| export function UpdateMember(data = {}) { | ||||
|   return request('/land-resource/grid-member', { | ||||
|     method: 'PUT', | ||||
|     data, | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // 网格员管理 - 删除
 | ||||
| export function DeleteMember(id) { | ||||
|   return request(`/land-resource/grid-member/${id}`, { | ||||
|     method: 'DELETE', | ||||
|   }); | ||||
| } | ||||
| 
 | ||||
| // // 网格员管理 - 导出
 | ||||
| // export function ExportMember() {
 | ||||
| //   return request('/land-resource/grid-member/export', {
 | ||||
| //     method: 'POST',
 | ||||
| //   });
 | ||||
| // }
 | ||||
| export function ExportMember(data = {}) { | ||||
|   return request('/land-resource/grid-member/export', { | ||||
|     method: 'POST', | ||||
|     data, | ||||
|     responseType: 'blob', // 明确告诉 axios 返回 blob
 | ||||
|   }); | ||||
| } | ||||
| @ -21,13 +21,13 @@ export default [ | ||||
|         children: [ | ||||
|           { | ||||
|             path: '/sub-government-affairs-service/add-grid', | ||||
|             component: () => import('@/views/resource/grid/index.vue'), | ||||
|             component: () => import('@/views/resource/grid/AddGrid.vue'), | ||||
|             name: 'add', | ||||
|             meta: { title: '新增网格', icon: '' }, | ||||
|           }, | ||||
|           { | ||||
|             path: '/sub-government-affairs-service/add--grid-member', | ||||
|             component: () => import('@/views/resource/grid/AddGridMember.vue'), | ||||
|             component: () => import('@/views/resource/grid/GridMember.vue'), | ||||
|             name: 'member', | ||||
|             meta: { title: '新增网格员', icon: '' }, | ||||
|           }, | ||||
|  | ||||
| @ -53,20 +53,20 @@ const state = reactive({ | ||||
|     ...CRUD_OPTIONS, | ||||
|     // addBtnText: '添加网格', | ||||
|     column: [ | ||||
|       { | ||||
|         label: '网格区', | ||||
|         prop: 'gridArea', | ||||
|         search: true, | ||||
|         width: 200, | ||||
|         addDisplay: false, | ||||
|         editDisplay: false, | ||||
|         viewDisplay: true, | ||||
|         rules: { | ||||
|           required: true, | ||||
|           message: '请输入', | ||||
|           trigger: 'blur', | ||||
|         }, | ||||
|       }, | ||||
|       // { | ||||
|       //   label: '网格区', | ||||
|       //   prop: 'gridArea', | ||||
|       //   search: true, | ||||
|       //   width: 200, | ||||
|       //   addDisplay: false, | ||||
|       //   editDisplay: false, | ||||
|       //   viewDisplay: true, | ||||
|       //   rules: { | ||||
|       //     required: true, | ||||
|       //     message: '请输入', | ||||
|       //     trigger: 'blur', | ||||
|       //   }, | ||||
|       // }, | ||||
|       { | ||||
|         label: '网格名称', | ||||
|         prop: 'gridName', | ||||
| @ -80,7 +80,7 @@ const state = reactive({ | ||||
|       { | ||||
|         label: '网格区域', | ||||
|         prop: 'gridAreaName', | ||||
|         width: 300, | ||||
|         // width: 300, | ||||
|         display: false, | ||||
|         rules: { | ||||
|           required: true, | ||||
| @ -117,24 +117,24 @@ const state = reactive({ | ||||
|           trigger: 'blur', | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         label: '网格管理员', | ||||
|         prop: 'gridManager', | ||||
|         rules: { | ||||
|           required: true, | ||||
|           message: '请输入', | ||||
|           trigger: 'blur', | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         label: '联系方式', | ||||
|         prop: 'contactInfo', | ||||
|         rules: { | ||||
|           required: true, | ||||
|           message: '请输入', | ||||
|           trigger: 'blur', | ||||
|         }, | ||||
|       }, | ||||
|       // { | ||||
|       //   label: '网格管理员', | ||||
|       //   prop: 'gridManager', | ||||
|       //   rules: { | ||||
|       //     required: true, | ||||
|       //     message: '请输入', | ||||
|       //     trigger: 'blur', | ||||
|       //   }, | ||||
|       // }, | ||||
|       // { | ||||
|       //   label: '联系方式', | ||||
|       //   prop: 'contactInfo', | ||||
|       //   rules: { | ||||
|       //     required: true, | ||||
|       //     message: '请输入', | ||||
|       //     trigger: 'blur', | ||||
|       //   }, | ||||
|       // }, | ||||
|       { | ||||
|         label: '省', | ||||
|         prop: 'provinceCode', | ||||
| @ -172,7 +172,7 @@ const state = reactive({ | ||||
|         span: 24, | ||||
|         rows: 4, | ||||
|         overHidden: true, | ||||
|         width: 200, | ||||
|         // width: 200, | ||||
|       }, | ||||
|       { | ||||
|         label: '创建时间', | ||||
|  | ||||
| @ -28,159 +28,99 @@ | ||||
|     </avue-crud> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script setup> | ||||
| import { reactive, ref } from 'vue'; | ||||
| import { useApp } from '@/hooks'; | ||||
| import { CRUD_OPTIONS } from '@/config'; | ||||
| import { isEmpty, downloadFile } from '@/utils'; | ||||
| import { useUserStore } from '@/store/modules/user'; | ||||
| import { compact } from 'lodash'; | ||||
| import { GetEntityList, AddEntity, UpdateEntity, DeleteEntity, ExportEntity } from '@/apis/resource/grid'; | ||||
| 
 | ||||
| // 请根据你的项目路径替换为实际的接口路径 | ||||
| import { GetGridList, GetMemberList, AddMember, UpdateMember, DeleteMember, ExportMember } from '@/apis/resource/member'; | ||||
| 
 | ||||
| const { VITE_APP_BASE_API } = import.meta.env; | ||||
| const app = useApp(); | ||||
| const UserStore = useUserStore(); | ||||
| const crudRef = ref(null); | ||||
| 
 | ||||
| const state = reactive({ | ||||
|   loading: false, | ||||
|   query: { | ||||
|     current: 1, | ||||
|     size: 10, | ||||
|   }, | ||||
|   query: { current: 1, size: 10 }, | ||||
|   form: {}, | ||||
|   selection: [], | ||||
|   gridOptions: [], | ||||
|   options: { | ||||
|     ...CRUD_OPTIONS, | ||||
|     // addBtnText: '添加网格', | ||||
|     column: [ | ||||
|       { | ||||
|         label: '网格区', | ||||
|         prop: 'gridArea', | ||||
|         label: '网格员姓名', | ||||
|         prop: 'memberName', | ||||
|         searchLabelWidth: 100, | ||||
|         search: true, | ||||
|         width: 200, | ||||
|         addDisplay: false, | ||||
|         editDisplay: false, | ||||
|         viewDisplay: true, | ||||
|         rules: { | ||||
|           required: true, | ||||
|           message: '请输入', | ||||
|           message: '请输入网格员姓名', | ||||
|           trigger: 'blur', | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         label: '网格名称', | ||||
|         prop: 'gridName', | ||||
|         search: true, | ||||
|         rules: { | ||||
|           required: true, | ||||
|           message: '请输入', | ||||
|           trigger: 'blur', | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         label: '网格区域', | ||||
|         label: '所属行政区域', | ||||
|         prop: 'gridAreaName', | ||||
|         width: 300, | ||||
|         display: false, | ||||
|         searchLabelWidth: 110, | ||||
|         search: true, | ||||
|         rules: { | ||||
|           required: true, | ||||
|           message: '请输入', | ||||
|           message: '请输入所属区域', | ||||
|           trigger: 'blur', | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         label: '网格区域', | ||||
|         prop: 'cities', | ||||
|         type: 'cascader', | ||||
|         hide: true, | ||||
|         addDisplay: true, | ||||
|         editDisplay: true, | ||||
|         viewDisplay: false, | ||||
|         // multiple: true, | ||||
|         // checkStrictly: true, | ||||
|         // collapseTags: true, | ||||
|         // emitPath: false, | ||||
|         // checkDescendants: false, | ||||
|         label: '所属网格', | ||||
|         prop: 'gridId', | ||||
|         type: 'select', | ||||
|         width: 200, | ||||
|         search: true, | ||||
|         dicData: [], // 初始为空,将在mounted中填充 | ||||
|         props: { | ||||
|           label: 'areaName', | ||||
|           value: 'areaCode', | ||||
|           children: 'areaChildVOS', | ||||
|           label: 'gridName', | ||||
|           value: 'id', | ||||
|         }, | ||||
|         dicUrl: `${VITE_APP_BASE_API}/system/area/region?areaCode=530000`, | ||||
|         dicHeaders: { | ||||
|           authorization: UserStore.token, | ||||
|         }, | ||||
|         dicFormatter: (res) => res.data ?? [], | ||||
|         rules: { | ||||
|           required: true, | ||||
|           message: '请选择', | ||||
|           trigger: 'blur', | ||||
|           message: '请选择所属网格', | ||||
|           trigger: 'change', | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         label: '网格管理员', | ||||
|         prop: 'gridManager', | ||||
|         rules: { | ||||
|           required: true, | ||||
|           message: '请输入', | ||||
|           trigger: 'blur', | ||||
|         }, | ||||
|         label: '管理员标识', | ||||
|         prop: 'adminFlag', | ||||
|         type: 'radio', | ||||
|         dicData: [ | ||||
|           { label: '是', value: '1' }, | ||||
|           { label: '否', value: '0' }, | ||||
|         ], | ||||
|         valueDefault: '0', | ||||
|         hide: true, // 隐藏字段,如需显示可设置为false | ||||
|       }, | ||||
|       { | ||||
|         label: '联系方式', | ||||
|         prop: 'contactInfo', | ||||
|         rules: { | ||||
|           required: true, | ||||
|           message: '请输入', | ||||
|           trigger: 'blur', | ||||
|         }, | ||||
|       }, | ||||
|       { | ||||
|         label: '省', | ||||
|         prop: 'provinceCode', | ||||
|         hide: true, | ||||
|         display: false, | ||||
|       }, | ||||
|       { | ||||
|         label: '市', | ||||
|         prop: 'cityCode', | ||||
|         hide: true, | ||||
|         display: false, | ||||
|       }, | ||||
|       { | ||||
|         label: '县/区', | ||||
|         prop: 'gridAreaCode', | ||||
|         hide: true, | ||||
|         display: false, | ||||
|       }, | ||||
|       { | ||||
|         label: '乡镇', | ||||
|         prop: 'townCode', | ||||
|         hide: true, | ||||
|         display: false, | ||||
|       }, | ||||
|       { | ||||
|         label: '乡镇', | ||||
|         prop: 'village', | ||||
|         hide: true, | ||||
|         display: false, | ||||
|         label: '电话号码', | ||||
|         prop: 'phone', | ||||
|         rules: [ | ||||
|           { required: true, message: '请输入电话号码', trigger: 'blur' }, | ||||
|           { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码' }, | ||||
|         ], | ||||
|       }, | ||||
|       { | ||||
|         label: '备注', | ||||
|         prop: 'note', | ||||
|         type: 'textarea', | ||||
|         span: 24, | ||||
|         rows: 4, | ||||
|         rows: 3, | ||||
|         overHidden: true, | ||||
|         width: 200, | ||||
|       }, | ||||
|       { | ||||
|         label: '创建时间', | ||||
|         prop: 'createTime', | ||||
|         width: 200, | ||||
|         hide: true, | ||||
|         display: false, | ||||
|       }, | ||||
|     ], | ||||
|     actions: [ | ||||
|       { | ||||
| @ -210,10 +150,9 @@ const state = reactive({ | ||||
|   currentRow: {}, | ||||
| }); | ||||
| 
 | ||||
| // 加载 | ||||
| const loadData = () => { | ||||
|   state.loading = true; | ||||
|   GetEntityList(state.query) | ||||
|   GetMemberList(state.query) | ||||
|     .then((res) => { | ||||
|       if (res.code === 200) { | ||||
|         const { current, size, total, records } = res.data; | ||||
| @ -233,60 +172,56 @@ const loadData = () => { | ||||
|       state.loading = false; | ||||
|     }); | ||||
| }; | ||||
| 
 | ||||
| loadData(); | ||||
| 
 | ||||
| // 页数 | ||||
| // 加载网格列表 | ||||
| const loadGridOptions = async () => { | ||||
|   try { | ||||
|     const res = await GetGridList(); // 获取足够多的网格数据 | ||||
|     if (res.code === 200) { | ||||
|       state.options.column.find((item) => item.prop === 'gridId').dicData = res.data.records; | ||||
|     } | ||||
|   } catch (error) { | ||||
|     app.$message.error('获取网格列表失败'); | ||||
|   } | ||||
| }; | ||||
| loadGridOptions(); | ||||
| const currentChange = (current) => { | ||||
|   state.query.current = current; | ||||
|   loadData(); | ||||
|   // state.query.current = current; | ||||
|   // loadData(); | ||||
| }; | ||||
| 
 | ||||
| // 条数 | ||||
| const sizeChange = (size) => { | ||||
|   state.query.size = size; | ||||
|   loadData(); | ||||
|   // state.query.size = size; | ||||
|   // loadData(); | ||||
| }; | ||||
| 
 | ||||
| // 搜索 | ||||
| const searchChange = (params, done) => { | ||||
|   if (done) done(); | ||||
|   state.query = params; | ||||
|   state.query.current = 1; | ||||
|   loadData(); | ||||
|   // if (done) done(); | ||||
|   // state.query = params; | ||||
|   // state.query.current = 1; | ||||
|   // loadData(); | ||||
| }; | ||||
| 
 | ||||
| // 刷新 | ||||
| const refreshChange = () => { | ||||
|   loadData(); | ||||
|   app.$message.success('刷新成功'); | ||||
| }; | ||||
| 
 | ||||
| // 选择 | ||||
| const selectionChange = (rows) => { | ||||
|   state.selection = rows; | ||||
| }; | ||||
| 
 | ||||
| // 查看 | ||||
| const rowView = (row) => { | ||||
|   crudRef.value.rowView(row); | ||||
| }; | ||||
| 
 | ||||
| const setCity = (row) => { | ||||
|   if (!isEmpty(row.cities)) { | ||||
|     row.provinceCode = row?.cities[0] ?? null; | ||||
|     row.cityCode = row?.cities[1] ?? null; | ||||
|     row.gridAreaCode = row?.cities[2] ?? null; | ||||
|     row.townCode = row?.cities[3] ?? null; | ||||
|     row.village = row?.cities[4] ?? null; | ||||
|     // row.village = row?.cities.join(','); | ||||
|   } | ||||
| const rowEdit = (row) => { | ||||
|   crudRef.value.rowEdit(row); | ||||
| }; | ||||
| 
 | ||||
| // 新增 | ||||
| const rowSave = (row, done, loading) => { | ||||
|   setCity(row); | ||||
|   AddEntity(row) | ||||
|   AddMember(row) | ||||
|     .then((res) => { | ||||
|       if (res.code === 200) { | ||||
|         app.$message.success('添加成功!'); | ||||
| @ -294,23 +229,12 @@ const rowSave = (row, done, loading) => { | ||||
|         loadData(); | ||||
|       } | ||||
|     }) | ||||
|     .catch((err) => { | ||||
|       app.$message.error(err.msg); | ||||
|     }) | ||||
|     .finally(() => { | ||||
|       loading(); | ||||
|     }); | ||||
|     .catch((err) => app.$message.error(err.msg)) | ||||
|     .finally(() => loading()); | ||||
| }; | ||||
| 
 | ||||
| // 编辑 | ||||
| const rowEdit = (row) => { | ||||
|   const village = !isEmpty(row.village) ? row.village : []; | ||||
|   row.cities = compact([row.provinceCode, row.cityCode, row.gridAreaCode ?? '', row.townCode ?? '', ...village]); | ||||
|   crudRef.value.rowEdit(row); | ||||
| }; | ||||
| const rowUpdate = (row, index, done, loading) => { | ||||
|   setCity(row); | ||||
|   UpdateEntity(row) | ||||
|   UpdateMember(row) | ||||
|     .then((res) => { | ||||
|       if (res.code === 200) { | ||||
|         app.$message.success('更新成功!'); | ||||
| @ -318,56 +242,48 @@ const rowUpdate = (row, index, done, loading) => { | ||||
|         loadData(); | ||||
|       } | ||||
|     }) | ||||
|     .catch((err) => { | ||||
|       app.$message.error(err.msg); | ||||
|     }) | ||||
|     .finally(() => { | ||||
|       loading(); | ||||
|     }); | ||||
|     .catch((err) => app.$message.error(err.msg)) | ||||
|     .finally(() => loading()); | ||||
| }; | ||||
| 
 | ||||
| // 删除 | ||||
| const rowDel = (row, index, done) => { | ||||
|   if (isEmpty(row)) return; | ||||
|   app | ||||
|     .$confirm(`删除后信息将不可查看,确认要删除吗?`, '确定删除', { | ||||
|     .$confirm(`确认删除该网格员吗?`, '提示', { | ||||
|       confirmButtonText: '确定', | ||||
|       cancelButtonText: '取消', | ||||
|       type: 'warning', | ||||
|     }) | ||||
|     .then(() => { | ||||
|       DeleteEntity({ id: row.id }) | ||||
|       DeleteMember(row.id) // 👈 只传 id | ||||
|         .then((res) => { | ||||
|           if (res.code === 200) { | ||||
|             app.$message.success('删除成功!'); | ||||
|             loadData(); | ||||
|             done?.(); // 若使用 Table 的 inline 操作支持回调 | ||||
|           } | ||||
|         }) | ||||
|         .catch((err) => { | ||||
|           app.$message.error(err.msg); | ||||
|         }); | ||||
|         .catch((err) => app.$message.error(err.msg || '删除失败')); | ||||
|     }) | ||||
|     .catch(() => {}); | ||||
| }; | ||||
| 
 | ||||
| // 导出 | ||||
| const onExport = () => { | ||||
|   if (isEmpty(state.data)) { | ||||
|     app.$message.error('当前暂时没有可供导出的数据!'); | ||||
|     return; | ||||
|   } | ||||
|   state.loading = true; | ||||
|   const fileName = '网格明细表'; | ||||
|   ExportEntity(state.query) | ||||
| 
 | ||||
|   // 仅发送有效的查询条件 | ||||
|   const { current, size, ...query } = state.query; | ||||
| 
 | ||||
|   ExportMember(query) | ||||
|     .then((res) => { | ||||
|       if (res.status === 200) { | ||||
|         downloadFile(res.data, `${fileName}.xlsx`, 'blob'); | ||||
|         app.$message.success('导出成功!'); | ||||
|       } | ||||
|     }) | ||||
|     .catch((err) => { | ||||
|       app.$message.error('导出失败!'); | ||||
|       downloadFile(res, '网格员明细表.xlsx', 'blob'); | ||||
|       app.$message.success('导出成功!'); | ||||
|     }) | ||||
|     .catch(() => app.$message.error('导出失败!')) | ||||
|     .finally(() => { | ||||
|       state.loading = false; | ||||
|     }); | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user