修改后端接口
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import { message } from 'antd'
|
||||
import { useUserStore } from '@/stores/user'
|
||||
import axios from 'axios'
|
||||
import { message } from 'ant-design-vue'
|
||||
|
||||
// 创建axios实例
|
||||
const instance = axios.create({
|
||||
@@ -11,14 +10,14 @@ const instance = axios.create({
|
||||
}
|
||||
})
|
||||
|
||||
// 请求拦截器
|
||||
// 请求拦截器 - 从localStorage中获取token
|
||||
instance.interceptors.request.use(
|
||||
config => {
|
||||
// 获取用户store
|
||||
const userStore = useUserStore()
|
||||
// 从localStorage中获取token
|
||||
const token = localStorage.getItem('token')
|
||||
// 如果有token,添加到请求头
|
||||
if (userStore.token) {
|
||||
config.headers['Authorization'] = `Bearer ${userStore.token}`
|
||||
if (token) {
|
||||
config.headers['Authorization'] = `Bearer ${token}`
|
||||
}
|
||||
return config
|
||||
},
|
||||
@@ -40,227 +39,257 @@ instance.interceptors.response.use(
|
||||
switch (error.response.status) {
|
||||
case 401:
|
||||
// 未授权,跳转到登录页面
|
||||
const userStore = useUserStore()
|
||||
userStore.logout()
|
||||
localStorage.removeItem('token')
|
||||
window.location.href = '/login'
|
||||
import('ant-design-vue').then(({ message }) => {
|
||||
message.error('登录已过期,请重新登录')
|
||||
})
|
||||
message.error('登录已过期,请重新登录')
|
||||
break
|
||||
case 403:
|
||||
import('ant-design-vue').then(({ message }) => {
|
||||
message.error('没有权限执行此操作')
|
||||
})
|
||||
message.error('没有权限执行此操作')
|
||||
break
|
||||
case 404:
|
||||
import('ant-design-vue').then(({ message }) => {
|
||||
message.error('请求的资源不存在')
|
||||
})
|
||||
message.error('请求的资源不存在')
|
||||
break
|
||||
case 500:
|
||||
import('ant-design-vue').then(({ message }) => {
|
||||
message.error('服务器内部错误')
|
||||
})
|
||||
message.error('服务器内部错误')
|
||||
break
|
||||
default:
|
||||
import('ant-design-vue').then(({ message }) => {
|
||||
message.error(error.response.data.message || '请求失败')
|
||||
})
|
||||
message.error('请求失败')
|
||||
}
|
||||
} else if (error.request) {
|
||||
// 请求发出但没有收到响应
|
||||
import('ant-design-vue').then(({ message }) => {
|
||||
message.error('网络错误,请检查网络连接')
|
||||
})
|
||||
message.error('网络连接失败')
|
||||
} else {
|
||||
// 请求配置出错
|
||||
import('ant-design-vue').then(({ message }) => {
|
||||
message.error('请求配置错误')
|
||||
})
|
||||
message.error('请求配置出错')
|
||||
}
|
||||
return Promise.reject(error)
|
||||
}
|
||||
)
|
||||
|
||||
// API接口定义
|
||||
const api = {
|
||||
// 认证相关API
|
||||
auth: {
|
||||
// 登录
|
||||
login: (data) => instance.post('/auth/login', data),
|
||||
// 获取用户信息
|
||||
getUserInfo: () => instance.get('/auth/userinfo'),
|
||||
// 退出登录
|
||||
logout: () => instance.post('/auth/logout'),
|
||||
// 认证相关的API
|
||||
const auth = {
|
||||
// 登录
|
||||
login: data => instance.post('/auth/login', data),
|
||||
// 获取用户信息
|
||||
getUserInfo: () => instance.get('/auth/userInfo'),
|
||||
// 退出登录
|
||||
logout: () => instance.post('/auth/logout'),
|
||||
// 重置密码
|
||||
resetPassword: data => instance.post('/auth/resetPassword', data)
|
||||
}
|
||||
|
||||
// 用户管理相关的API
|
||||
const user = {
|
||||
// 获取用户列表
|
||||
getList: params => instance.get('/user/list', { params }),
|
||||
// 新增用户
|
||||
create: data => instance.post('/user/create', data),
|
||||
// 编辑用户
|
||||
update: data => instance.post('/user/update', data),
|
||||
// 删除用户
|
||||
delete: id => instance.post(`/user/delete/${id}`),
|
||||
// 禁用/启用用户
|
||||
toggleStatus: data => instance.post('/user/toggleStatus', data),
|
||||
// 重置密码
|
||||
resetPassword: id => instance.post(`/user/resetPassword/${id}`)
|
||||
}
|
||||
|
||||
// 监管相关的API
|
||||
const supervision = {
|
||||
// 获取监管列表
|
||||
getList: params => instance.get('/supervision/list', { params }),
|
||||
// 获取监管详情
|
||||
getDetail: id => instance.get(`/supervision/detail/${id}`),
|
||||
// 新增监管
|
||||
create: data => instance.post('/supervision/create', data),
|
||||
// 更新监管
|
||||
update: data => instance.post('/supervision/update', data),
|
||||
// 删除监管
|
||||
delete: id => instance.post(`/supervision/delete/${id}`)
|
||||
}
|
||||
|
||||
// 审批相关的API
|
||||
const approval = {
|
||||
// 获取审批列表
|
||||
getList: params => instance.get('/approval/list', { params }),
|
||||
// 获取审批详情
|
||||
getDetail: id => instance.get(`/approval/detail/${id}`),
|
||||
// 提交审批
|
||||
submit: data => instance.post('/approval/submit', data),
|
||||
// 审批操作
|
||||
approve: data => instance.post('/approval/approve', data),
|
||||
// 驳回操作
|
||||
reject: data => instance.post('/approval/reject', data),
|
||||
// 撤回操作
|
||||
withdraw: id => instance.post(`/approval/withdraw/${id}`)
|
||||
}
|
||||
|
||||
// 疫情监控相关的API
|
||||
const epidemic = {
|
||||
// 获取疫情监控列表
|
||||
getList: params => instance.get('/epidemic/list', { params }),
|
||||
// 获取疫情监控详情
|
||||
getDetail: id => instance.get(`/epidemic/detail/${id}`),
|
||||
// 新增疫情监控
|
||||
create: data => instance.post('/epidemic/create', data),
|
||||
// 更新疫情监控
|
||||
update: data => instance.post('/epidemic/update', data),
|
||||
// 删除疫情监控
|
||||
delete: id => instance.post(`/epidemic/delete/${id}`),
|
||||
// 处理疫情
|
||||
handle: data => instance.post('/epidemic/handle', data)
|
||||
}
|
||||
|
||||
// 数据可视化相关的API
|
||||
const visualization = {
|
||||
// 获取养殖情况统计
|
||||
getBreedingStats: params => instance.get('/visualization/breedingStats', { params }),
|
||||
// 获取疫情趋势
|
||||
getEpidemicTrend: params => instance.get('/visualization/epidemicTrend', { params }),
|
||||
// 获取监管效果
|
||||
getSupervisionEffect: params => instance.get('/visualization/supervisionEffect', { params })
|
||||
}
|
||||
|
||||
// 文件管理相关的API
|
||||
const file = {
|
||||
// 上传文件
|
||||
upload: data => instance.post('/file/upload', data),
|
||||
// 下载文件
|
||||
download: id => instance.get(`/file/download/${id}`),
|
||||
// 获取文件列表
|
||||
getList: params => instance.get('/file/list', { params }),
|
||||
// 删除文件
|
||||
delete: id => instance.post(`/file/delete/${id}`)
|
||||
}
|
||||
|
||||
// 人员管理相关的API
|
||||
const staff = {
|
||||
// 获取人员列表
|
||||
getList: params => instance.get('/staff/list', { params }),
|
||||
// 新增人员
|
||||
create: data => instance.post('/staff/create', data),
|
||||
// 更新人员
|
||||
update: data => instance.post('/staff/update', data),
|
||||
// 删除人员
|
||||
delete: id => instance.post(`/staff/delete/${id}`),
|
||||
// 获取人员详情
|
||||
getDetail: id => instance.get(`/staff/detail/${id}`)
|
||||
}
|
||||
|
||||
// 服务管理相关的API
|
||||
const service = {
|
||||
// 获取服务列表
|
||||
getList: params => instance.get('/service/list', { params }),
|
||||
// 新增服务
|
||||
create: data => instance.post('/service/create', data),
|
||||
// 更新服务
|
||||
update: data => instance.post('/service/update', data),
|
||||
// 删除服务
|
||||
delete: id => instance.post(`/service/delete/${id}`),
|
||||
// 获取服务详情
|
||||
getDetail: id => instance.get(`/service/detail/${id}`)
|
||||
}
|
||||
|
||||
// 仓库管理相关的API
|
||||
const warehouse = {
|
||||
// 获取仓库列表
|
||||
getList: params => instance.get('/warehouse/list', { params }),
|
||||
// 新增仓库
|
||||
create: data => instance.post('/warehouse/create', data),
|
||||
// 更新仓库
|
||||
update: data => instance.post('/warehouse/update', data),
|
||||
// 删除仓库
|
||||
delete: id => instance.post(`/warehouse/delete/${id}`),
|
||||
// 获取仓库详情
|
||||
getDetail: id => instance.get(`/warehouse/detail/${id}`)
|
||||
}
|
||||
|
||||
// 系统设置相关的API
|
||||
const system = {
|
||||
// 获取系统设置
|
||||
getSettings: () => instance.get('/system/settings'),
|
||||
// 更新系统设置
|
||||
updateSettings: data => instance.post('/system/updateSettings', data),
|
||||
// 获取操作日志
|
||||
getOperationLogs: params => instance.get('/system/operationLogs', { params })
|
||||
}
|
||||
|
||||
// 政府管理相关的API
|
||||
const government = {
|
||||
// 行政人员管理
|
||||
adminStaff: {
|
||||
// 获取行政人员列表
|
||||
getList: params => instance.get('/government/admin-staff/list', { params }),
|
||||
// 新增行政人员
|
||||
create: data => instance.post('/government/admin-staff/create', data),
|
||||
// 编辑行政人员
|
||||
update: data => instance.post('/government/admin-staff/update', data),
|
||||
// 删除行政人员
|
||||
delete: id => instance.post(`/government/admin-staff/delete/${id}`),
|
||||
// 重置密码
|
||||
resetPassword: (data) => instance.post('/auth/reset-password', data)
|
||||
resetPassword: id => instance.post(`/government/admin-staff/reset-password/${id}`)
|
||||
},
|
||||
|
||||
// 用户管理相关API
|
||||
user: {
|
||||
// 获取用户列表
|
||||
getList: (params) => instance.get('/users', { params }),
|
||||
// 获取单个用户信息
|
||||
getDetail: (id) => instance.get(`/users/${id}`),
|
||||
// 创建用户
|
||||
create: (data) => instance.post('/users', data),
|
||||
// 更新用户
|
||||
update: (id, data) => instance.put(`/users/${id}`, data),
|
||||
// 删除用户
|
||||
delete: (id) => instance.delete(`/users/${id}`),
|
||||
// 批量删除用户
|
||||
batchDelete: (ids) => instance.post('/users/batch-delete', { ids }),
|
||||
// 更新用户状态
|
||||
updateStatus: (id, status) => instance.put(`/users/${id}/status`, { status })
|
||||
// 部门管理
|
||||
departments: {
|
||||
// 获取部门列表
|
||||
getList: () => instance.get('/government/departments/list'),
|
||||
// 新增部门
|
||||
create: data => instance.post('/government/departments/create', data),
|
||||
// 编辑部门
|
||||
update: data => instance.post('/government/departments/update', data),
|
||||
// 删除部门
|
||||
delete: id => instance.post(`/government/departments/delete/${id}`)
|
||||
},
|
||||
|
||||
// 监管相关API
|
||||
supervision: {
|
||||
// 获取监管统计数据
|
||||
getStats: () => instance.get('/supervision/stats'),
|
||||
// 获取监管任务列表
|
||||
getTasks: (params) => instance.get('/supervision/tasks', { params }),
|
||||
// 获取监管任务详情
|
||||
getTaskDetail: (id) => instance.get(`/supervision/tasks/${id}`),
|
||||
// 创建监管任务
|
||||
createTask: (data) => instance.post('/supervision/tasks', data),
|
||||
// 更新监管任务
|
||||
updateTask: (id, data) => instance.put(`/supervision/tasks/${id}`, data),
|
||||
// 删除监管任务
|
||||
deleteTask: (id) => instance.delete(`/supervision/tasks/${id}`)
|
||||
// 岗位管理
|
||||
positions: {
|
||||
// 获取岗位列表
|
||||
getList: () => instance.get('/government/positions/list'),
|
||||
// 新增岗位
|
||||
create: data => instance.post('/government/positions/create', data),
|
||||
// 编辑岗位
|
||||
update: data => instance.post('/government/positions/update', data),
|
||||
// 删除岗位
|
||||
delete: id => instance.post(`/government/positions/delete/${id}`)
|
||||
},
|
||||
|
||||
// 审批相关API
|
||||
approval: {
|
||||
// 获取审批流程列表
|
||||
getList: (params) => instance.get('/approval', { params }),
|
||||
// 创建审批流程
|
||||
create: (data) => instance.post('/approval', data),
|
||||
// 获取审批详情
|
||||
getDetail: (id) => instance.get(`/approval/${id}`),
|
||||
// 更新审批状态
|
||||
updateStatus: (id, status) => instance.put(`/approval/${id}/status`, { status })
|
||||
},
|
||||
|
||||
// 疫情监控相关API
|
||||
epidemic: {
|
||||
// 获取疫情统计数据
|
||||
getStats: () => instance.get('/epidemic/stats'),
|
||||
// 获取疫苗接种数据
|
||||
getVaccinationData: (params) => instance.get('/epidemic/vaccination', { params }),
|
||||
// 获取检测数据
|
||||
getTestData: (params) => instance.get('/epidemic/test', { params })
|
||||
},
|
||||
|
||||
// 数据可视化相关API
|
||||
visualization: {
|
||||
// 获取可视化数据
|
||||
getData: (params) => instance.get('/visualization/data', { params })
|
||||
},
|
||||
|
||||
// 文件管理相关API
|
||||
file: {
|
||||
// 获取文件列表
|
||||
getList: (params) => instance.get('/files', { params }),
|
||||
// 上传文件
|
||||
upload: (file, onUploadProgress) => {
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
return instance.post('/files/upload', formData, {
|
||||
headers: {
|
||||
'Content-Type': 'multipart/form-data'
|
||||
},
|
||||
onUploadProgress
|
||||
})
|
||||
// 养殖户管理
|
||||
farmers: {
|
||||
// 获取养殖户列表
|
||||
getList: params => instance.get('/government/farmers', { params }),
|
||||
// 新增养殖户
|
||||
create: data => instance.post('/government/farmers', data),
|
||||
// 编辑养殖户
|
||||
update: (id, data) => instance.put(`/government/farmers/${id}`, data),
|
||||
// 删除养殖户
|
||||
delete: id => instance.delete(`/government/farmers/${id}`),
|
||||
// 重置密码
|
||||
resetPassword: id => instance.post(`/government/farmers/${id}/reset-password`)
|
||||
},
|
||||
// 下载文件
|
||||
download: (id) => instance.get(`/files/${id}/download`, { responseType: 'blob' }),
|
||||
// 删除文件
|
||||
delete: (id) => instance.delete(`/files/${id}`)
|
||||
// 养殖类型相关
|
||||
farmTypes: {
|
||||
// 获取养殖类型列表
|
||||
getList: () => instance.get('/government/farm-types')
|
||||
},
|
||||
|
||||
// 人员管理相关API
|
||||
personnel: {
|
||||
// 获取人员列表
|
||||
getList: (params) => instance.get('/personnel', { params }),
|
||||
// 创建人员
|
||||
create: (data) => instance.post('/personnel', data),
|
||||
// 更新人员
|
||||
update: (id, data) => instance.put(`/personnel/${id}`, data),
|
||||
// 删除人员
|
||||
delete: (id) => instance.delete(`/personnel/${id}`)
|
||||
},
|
||||
|
||||
// 服务管理相关API
|
||||
service: {
|
||||
// 获取服务列表
|
||||
getList: (params) => instance.get('/service', { params }),
|
||||
// 创建服务
|
||||
create: (data) => instance.post('/service', data),
|
||||
// 更新服务
|
||||
update: (id, data) => instance.put(`/service/${id}`, data),
|
||||
// 删除服务
|
||||
delete: (id) => instance.delete(`/service/${id}`)
|
||||
},
|
||||
|
||||
// 仓库管理相关API
|
||||
warehouse: {
|
||||
// 获取物资列表
|
||||
getList: (params) => instance.get('/warehouse', { params }),
|
||||
// 获取单个物资详情
|
||||
getDetail: (id) => instance.get(`/warehouse/${id}`),
|
||||
// 创建物资
|
||||
create: (data) => instance.post('/warehouse', data),
|
||||
// 更新物资
|
||||
update: (id, data) => instance.put(`/warehouse/${id}`, data),
|
||||
// 删除物资
|
||||
delete: (id) => instance.delete(`/warehouse/${id}`),
|
||||
// 物资入库
|
||||
stockIn: (data) => instance.post('/warehouse/in', data),
|
||||
// 物资出库
|
||||
stockOut: (data) => instance.post('/warehouse/out', data),
|
||||
// 获取库存统计信息
|
||||
getStats: () => instance.get('/warehouse/stats')
|
||||
},
|
||||
|
||||
// 系统设置相关API
|
||||
system: {
|
||||
// 获取系统设置
|
||||
getSettings: () => instance.get('/system/settings'),
|
||||
// 更新系统设置
|
||||
updateSettings: (data) => instance.put('/system/settings', data),
|
||||
// 获取日志列表
|
||||
getLogs: (params) => instance.get('/system/logs', { params })
|
||||
},
|
||||
|
||||
// 政府管理相关API
|
||||
government: {
|
||||
// 行政人员管理
|
||||
adminStaff: {
|
||||
// 获取行政人员列表
|
||||
getList: (params) => instance.get('/government/admin-staff', { params }),
|
||||
// 创建行政人员
|
||||
create: (data) => instance.post('/government/admin-staff', data),
|
||||
// 更新行政人员
|
||||
update: (id, data) => instance.put(`/government/admin-staff/${id}`, data),
|
||||
// 删除行政人员
|
||||
delete: (id) => instance.delete(`/government/admin-staff/${id}`),
|
||||
// 重置行政人员密码
|
||||
resetPassword: (id) => instance.post(`/government/admin-staff/${id}/reset-password`)
|
||||
},
|
||||
|
||||
// 部门管理
|
||||
departments: {
|
||||
// 获取部门列表
|
||||
getList: (params) => instance.get('/government/departments', { params })
|
||||
},
|
||||
|
||||
// 岗位管理
|
||||
positions: {
|
||||
// 获取岗位列表
|
||||
getList: (params) => instance.get('/government/positions', { params })
|
||||
}
|
||||
// 养殖种类相关
|
||||
animalTypes: {
|
||||
// 获取养殖种类列表
|
||||
getList: () => instance.get('/government/animal-types')
|
||||
}
|
||||
}
|
||||
|
||||
// 导出所有API
|
||||
const api = {
|
||||
auth,
|
||||
user,
|
||||
supervision,
|
||||
approval,
|
||||
epidemic,
|
||||
visualization,
|
||||
file,
|
||||
staff,
|
||||
service,
|
||||
warehouse,
|
||||
system,
|
||||
government
|
||||
}
|
||||
|
||||
export default api
|
||||
@@ -166,16 +166,32 @@ const fetchAdminStaffList = async () => {
|
||||
search: searchValue.value
|
||||
}
|
||||
const response = await api.government.adminStaff.getList(params)
|
||||
staffData.value = response.data.map(item => ({
|
||||
...item,
|
||||
department: departments.value.find(dept => dept.id === item.department_id)?.name || '',
|
||||
position: positions.value.find(pos => pos.id === item.position_id)?.name || '',
|
||||
key: item.id
|
||||
}))
|
||||
pagination.total = response.total
|
||||
|
||||
// 确保response.data是一个数组
|
||||
if (response && Array.isArray(response.data)) {
|
||||
staffData.value = response.data.map(item => ({
|
||||
...item,
|
||||
department: departments.value.find(dept => dept.id === item.department_id)?.name || '',
|
||||
position: positions.value.find(pos => pos.id === item.position_id)?.name || '',
|
||||
key: item.id
|
||||
}))
|
||||
pagination.total = response.total || response.data.length
|
||||
} else {
|
||||
// 处理异常情况
|
||||
staffData.value = []
|
||||
pagination.total = 0
|
||||
console.error('行政人员列表数据格式错误:', response)
|
||||
}
|
||||
|
||||
console.log('行政人员列表数据:', staffData.value)
|
||||
} catch (error) {
|
||||
message.error('获取行政人员列表失败')
|
||||
console.error('获取行政人员列表失败:', error)
|
||||
// 添加错误详细信息展示
|
||||
if (error.response) {
|
||||
console.error('错误状态码:', error.response.status)
|
||||
console.error('错误数据:', error.response.data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,7 +199,16 @@ const fetchAdminStaffList = async () => {
|
||||
const fetchDepartments = async () => {
|
||||
try {
|
||||
const response = await api.government.departments.getList()
|
||||
departments.value = response.data
|
||||
// 处理数据格式 - 确保departments是一个数组
|
||||
if (response && response.data && Array.isArray(response.data)) {
|
||||
departments.value = response.data
|
||||
} else if (response) {
|
||||
// 处理API返回的非标准格式数据
|
||||
departments.value = Object.values(response).map(item =>
|
||||
typeof item === 'object' ? item : { id: item, name: item }
|
||||
)
|
||||
}
|
||||
console.log('部门列表数据:', departments.value)
|
||||
} catch (error) {
|
||||
message.error('获取部门列表失败')
|
||||
console.error('获取部门列表失败:', error)
|
||||
@@ -194,7 +219,16 @@ const fetchDepartments = async () => {
|
||||
const fetchPositions = async () => {
|
||||
try {
|
||||
const response = await api.government.positions.getList()
|
||||
positions.value = response.data
|
||||
// 处理数据格式 - 确保positions是一个数组
|
||||
if (response && response.data && Array.isArray(response.data)) {
|
||||
positions.value = response.data
|
||||
} else if (response) {
|
||||
// 处理API返回的非标准格式数据
|
||||
positions.value = Object.values(response).map(item =>
|
||||
typeof item === 'object' ? item : { id: item, name: item }
|
||||
)
|
||||
}
|
||||
console.log('岗位列表数据:', positions.value)
|
||||
} catch (error) {
|
||||
message.error('获取岗位列表失败')
|
||||
console.error('获取岗位列表失败:', error)
|
||||
|
||||
@@ -7,20 +7,28 @@
|
||||
</div>
|
||||
<div>
|
||||
<a-input-search
|
||||
placeholder="请输入"
|
||||
placeholder="请输入账号、姓名、养殖场名称"
|
||||
style="width: 200px; margin-right: 8px;"
|
||||
v-model:value="searchKeyword"
|
||||
@search="handleSearch"
|
||||
/>
|
||||
<a-select
|
||||
placeholder="账号"
|
||||
style="width: 120px;"
|
||||
v-model:value="accountFilter"
|
||||
placeholder="养殖场类型"
|
||||
style="width: 120px; margin-right: 8px;"
|
||||
v-model:value="farmTypeFilter"
|
||||
@change="handleSearch"
|
||||
>
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option value="account1">账号筛选1</a-select-option>
|
||||
<a-select-option value="account2">账号筛选2</a-select-option>
|
||||
<a-select-option v-for="type in farmTypes" :key="type.value" :value="type.value">{{ type.label }}</a-select-option>
|
||||
</a-select>
|
||||
<a-select
|
||||
placeholder="养殖种类"
|
||||
style="width: 120px;"
|
||||
v-model:value="animalTypeFilter"
|
||||
@change="handleSearch"
|
||||
>
|
||||
<a-select-option value="">全部</a-select-option>
|
||||
<a-select-option v-for="type in animalTypes" :key="type.value" :value="type.value">{{ type.label }}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
</div>
|
||||
@@ -32,11 +40,13 @@
|
||||
:pagination="pagination"
|
||||
row-key="id"
|
||||
:scroll="{ x: 'max-content' }"
|
||||
@change="handleTableChange"
|
||||
:loading="loading"
|
||||
>
|
||||
<!-- 状态列 -->
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'status'">
|
||||
<a-tag :color="getStatusColor(record.status)">{{ getStatusText(record.status) }}</a-tag>
|
||||
<a-tag :color="getStatusColor(record.status_value)">{{ record.status }}</a-tag>
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
<div style="display: flex; gap: 8px;">
|
||||
@@ -48,16 +58,91 @@
|
||||
</template>
|
||||
</a-table>
|
||||
|
||||
<!-- 新增/编辑养殖户对话框 -->
|
||||
<a-modal
|
||||
v-model:visible="modalVisible"
|
||||
:title="modalTitle"
|
||||
@ok="handleOk"
|
||||
@cancel="handleCancel"
|
||||
>
|
||||
<a-form :model="formData" :label-col="{ span: 6 }" :wrapper-col="{ span: 16 }">
|
||||
<a-form-item label="账号" name="account" :rules="[{ required: true, message: '请输入账号' }]">
|
||||
<a-input v-model:value="formData.account" placeholder="请输入账号" />
|
||||
</a-form-item>
|
||||
<a-form-item label="账号昵称" name="nickname" :rules="[{ required: true, message: '请输入账号昵称' }]">
|
||||
<a-input v-model:value="formData.nickname" placeholder="请输入账号昵称" />
|
||||
</a-form-item>
|
||||
<a-form-item label="真实姓名" name="real_name" :rules="[{ required: true, message: '请输入真实姓名' }]">
|
||||
<a-input v-model:value="formData.real_name" placeholder="请输入真实姓名" />
|
||||
</a-form-item>
|
||||
<a-form-item label="养殖场名称" name="farm_name" :rules="[{ required: true, message: '请输入养殖场名称' }]">
|
||||
<a-input v-model:value="formData.farm_name" placeholder="请输入养殖场名称" />
|
||||
</a-form-item>
|
||||
<a-form-item label="养殖场类型" name="farm_type" :rules="[{ required: true, message: '请选择养殖场类型' }]">
|
||||
<a-select v-model:value="formData.farm_type" placeholder="请选择养殖场类型">
|
||||
<a-select-option v-for="type in farmTypes" :key="type.value" :value="type.value">{{ type.label }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="养殖种类" name="animal_type" :rules="[{ required: true, message: '请选择养殖种类' }]">
|
||||
<a-select v-model:value="formData.animal_type" placeholder="请选择养殖种类">
|
||||
<a-select-option v-for="type in animalTypes" :key="type.value" :value="type.value">{{ type.label }}</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="养殖数量" name="animal_count" :rules="[{ required: true, message: '请输入养殖数量' }, { type: 'number', min: 0 }]">
|
||||
<a-input-number v-model:value="formData.animal_count" :min="0" placeholder="请输入养殖数量" />
|
||||
</a-form-item>
|
||||
<a-form-item label="养殖场地址" name="address" :rules="[{ required: true, message: '请输入养殖场地址' }]">
|
||||
<a-input v-model:value="formData.address" placeholder="请输入养殖场地址" />
|
||||
</a-form-item>
|
||||
<a-form-item label="状态" name="status" :rules="[{ required: true, message: '请选择状态' }]">
|
||||
<a-select v-model:value="formData.status" placeholder="请选择状态">
|
||||
<a-select-option value="active">正常</a-select-option>
|
||||
<a-select-option value="inactive">暂停</a-select-option>
|
||||
<a-select-option value="closed">关闭</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
|
||||
<!-- 查看详情对话框 -->
|
||||
<a-modal
|
||||
v-model:visible="viewModalVisible"
|
||||
title="养殖户详情"
|
||||
@cancel="handleViewCancel"
|
||||
>
|
||||
<div v-if="selectedFarmer">
|
||||
<p><strong>账号:</strong>{{ selectedFarmer.account }}</p>
|
||||
<p><strong>账号昵称:</strong>{{ selectedFarmer.nickname }}</p>
|
||||
<p><strong>真实姓名:</strong>{{ selectedFarmer.real_name }}</p>
|
||||
<p><strong>养殖场名称:</strong>{{ selectedFarmer.farm_name }}</p>
|
||||
<p><strong>养殖场类型:</strong>{{ selectedFarmer.farm_type }}</p>
|
||||
<p><strong>养殖种类:</strong>{{ selectedFarmer.animal_type }}</p>
|
||||
<p><strong>养殖数量:</strong>{{ selectedFarmer.animal_count }}</p>
|
||||
<p><strong>养殖场地址:</strong>{{ selectedFarmer.address }}</p>
|
||||
<p><strong>登记时间:</strong>{{ selectedFarmer.register_time }}</p>
|
||||
<p><strong>登记人:</strong>{{ selectedFarmer.registrar }}</p>
|
||||
<p><strong>状态:</strong><a-tag :color="getStatusColor(selectedFarmer.status_value)">{{ selectedFarmer.status }}</a-tag></p>
|
||||
</div>
|
||||
</a-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { message } from 'ant-design-vue'
|
||||
import { ref, reactive, onMounted, computed } from 'vue'
|
||||
import { message, Modal } from 'ant-design-vue'
|
||||
import api from '@/utils/api'
|
||||
|
||||
// 搜索关键词
|
||||
// 搜索条件
|
||||
const searchKeyword = ref('')
|
||||
const accountFilter = ref('')
|
||||
const farmTypeFilter = ref('')
|
||||
const animalTypeFilter = ref('')
|
||||
|
||||
// 加载状态
|
||||
const loading = ref(false)
|
||||
|
||||
// 养殖类型和种类列表
|
||||
const farmTypes = ref([])
|
||||
const animalTypes = ref([])
|
||||
|
||||
// 表格列定义
|
||||
const columns = [
|
||||
@@ -67,12 +152,6 @@ const columns = [
|
||||
key: 'account',
|
||||
width: 150
|
||||
},
|
||||
{
|
||||
title: '机构识别码',
|
||||
dataIndex: 'orgCode',
|
||||
key: 'orgCode',
|
||||
width: 150
|
||||
},
|
||||
{
|
||||
title: '账号昵称',
|
||||
dataIndex: 'nickname',
|
||||
@@ -81,32 +160,32 @@ const columns = [
|
||||
},
|
||||
{
|
||||
title: '真实姓名',
|
||||
dataIndex: 'realName',
|
||||
key: 'realName',
|
||||
dataIndex: 'real_name',
|
||||
key: 'real_name',
|
||||
width: 150
|
||||
},
|
||||
{
|
||||
title: '养殖场名称',
|
||||
dataIndex: 'farmName',
|
||||
key: 'farmName',
|
||||
dataIndex: 'farm_name',
|
||||
key: 'farm_name',
|
||||
width: 180
|
||||
},
|
||||
{
|
||||
title: '养殖场类型',
|
||||
dataIndex: 'farmType',
|
||||
key: 'farmType',
|
||||
dataIndex: 'farm_type',
|
||||
key: 'farm_type',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: '养殖场种类',
|
||||
dataIndex: 'animalType',
|
||||
key: 'animalType',
|
||||
title: '养殖种类',
|
||||
dataIndex: 'animal_type',
|
||||
key: 'animal_type',
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: '数量',
|
||||
dataIndex: 'animalCount',
|
||||
key: 'animalCount',
|
||||
dataIndex: 'animal_count',
|
||||
key: 'animal_count',
|
||||
width: 100
|
||||
},
|
||||
{
|
||||
@@ -117,10 +196,10 @@ const columns = [
|
||||
},
|
||||
{
|
||||
title: '登记时间',
|
||||
dataIndex: 'registerTime',
|
||||
key: 'registerTime',
|
||||
dataIndex: 'register_time',
|
||||
key: 'register_time',
|
||||
width: 150,
|
||||
sorter: (a, b) => new Date(a.registerTime) - new Date(b.registerTime)
|
||||
sorter: (a, b) => new Date(a.register_time) - new Date(b.register_time)
|
||||
},
|
||||
{
|
||||
title: '登记人',
|
||||
@@ -129,11 +208,9 @@ const columns = [
|
||||
width: 120
|
||||
},
|
||||
{
|
||||
title: '更新时间',
|
||||
dataIndex: 'updateTime',
|
||||
key: 'updateTime',
|
||||
width: 150,
|
||||
sorter: (a, b) => new Date(a.updateTime) - new Date(b.updateTime)
|
||||
title: '状态',
|
||||
key: 'status',
|
||||
width: 100
|
||||
},
|
||||
{
|
||||
title: '操作',
|
||||
@@ -149,127 +226,206 @@ const pagination = reactive({
|
||||
pageSize: 10,
|
||||
total: 0,
|
||||
showSizeChanger: true,
|
||||
showTotal: (total) => `共 ${total} 条记录`
|
||||
showTotal: (total) => `共 ${total} 条记录`,
|
||||
pageSizeOptions: ['10', '20', '50', '100']
|
||||
})
|
||||
|
||||
// 模拟数据
|
||||
const farmersData = ref([
|
||||
{
|
||||
id: '1',
|
||||
account: '176****4187',
|
||||
orgCode: '18094-785778',
|
||||
nickname: '齐五旺',
|
||||
realName: '齐五旺',
|
||||
farmName: '齐五旺养殖场',
|
||||
farmType: '散养',
|
||||
animalType: '牛',
|
||||
animalCount: 10,
|
||||
address: '内蒙古自治区通辽市扎鲁特旗鲁北镇额尔格图木塔格镇',
|
||||
registerTime: '2023-05-22 08:59:44',
|
||||
registrar: '齐五旺',
|
||||
updateTime: '2025-08-10 06:07:41',
|
||||
status: 'active'
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
account: '132****9345',
|
||||
orgCode: '384708-449642',
|
||||
nickname: '扎鲁特数据中心',
|
||||
realName: '扎鲁特数据中心',
|
||||
farmName: '扎鲁特数据中心',
|
||||
farmType: '散养',
|
||||
animalType: '牛',
|
||||
animalCount: 10,
|
||||
address: '内蒙古自治区通辽市扎鲁特旗',
|
||||
registerTime: '2024-07-23 13:37:00',
|
||||
registrar: '扎鲁特数据中心',
|
||||
updateTime: '2024-10-16 11:33:02',
|
||||
status: 'active'
|
||||
},
|
||||
{
|
||||
id: '3',
|
||||
account: '139****1221',
|
||||
orgCode: '382987-319364',
|
||||
nickname: '邵晓艳',
|
||||
realName: '邵晓艳',
|
||||
farmName: '扎鲁特旗百顺养殖专业合作社',
|
||||
farmType: '规模',
|
||||
animalType: '牛',
|
||||
animalCount: 741,
|
||||
address: '内蒙古自治区通辽市扎鲁特旗巴日合镇巴日合村委会',
|
||||
registerTime: '2023-07-10 11:17:50',
|
||||
registrar: '赵忠林',
|
||||
updateTime: '2024-07-03 11:53:47',
|
||||
status: 'active'
|
||||
},
|
||||
{
|
||||
id: '4',
|
||||
account: '151****1013',
|
||||
orgCode: '1069-899484',
|
||||
nickname: '双成家庭农场',
|
||||
realName: '双成',
|
||||
farmName: '双成家庭农场',
|
||||
farmType: '散养',
|
||||
animalType: '牛',
|
||||
animalCount: 74,
|
||||
address: '内蒙古自治区通辽市扎鲁特旗鲁北镇宝力根花镇',
|
||||
registerTime: '2023-04-24 10:54:22',
|
||||
registrar: '双成',
|
||||
updateTime: '2024-05-08 11:14:48',
|
||||
status: 'active'
|
||||
},
|
||||
{
|
||||
id: '5',
|
||||
account: '150****1368',
|
||||
orgCode: '1451-668414',
|
||||
nickname: '刘超',
|
||||
realName: '刘超',
|
||||
farmName: '大数据中心',
|
||||
farmType: '散养',
|
||||
animalType: '牛',
|
||||
animalCount: 11,
|
||||
address: '内蒙古自治区通辽市扎鲁特旗鲁北镇',
|
||||
registerTime: '2023-04-11 15:36:37',
|
||||
registrar: '孙主任',
|
||||
updateTime: '2024-03-04 11:18:24',
|
||||
status: 'active'
|
||||
}
|
||||
])
|
||||
// 养殖户数据
|
||||
const farmersData = ref([])
|
||||
|
||||
// 对话框相关
|
||||
const modalVisible = ref(false)
|
||||
const modalTitle = ref('')
|
||||
const editingId = ref(null)
|
||||
const formData = reactive({
|
||||
account: '',
|
||||
nickname: '',
|
||||
real_name: '',
|
||||
farm_name: '',
|
||||
farm_type: '',
|
||||
animal_type: '',
|
||||
animal_count: 0,
|
||||
address: '',
|
||||
status: 'active'
|
||||
})
|
||||
|
||||
// 查看详情相关
|
||||
const viewModalVisible = ref(false)
|
||||
const selectedFarmer = ref(null)
|
||||
|
||||
// 初始化数据
|
||||
onMounted(() => {
|
||||
pagination.total = farmersData.value.length
|
||||
initData()
|
||||
})
|
||||
|
||||
// 初始化数据
|
||||
const initData = async () => {
|
||||
try {
|
||||
await Promise.all([
|
||||
fetchFarmers(),
|
||||
fetchFarmTypes(),
|
||||
fetchAnimalTypes()
|
||||
])
|
||||
} catch (error) {
|
||||
message.error('初始化数据失败')
|
||||
console.error('初始化数据失败:', error)
|
||||
}
|
||||
}
|
||||
|
||||
// 获取养殖户列表
|
||||
const fetchFarmers = async () => {
|
||||
try {
|
||||
loading.value = true
|
||||
const params = {
|
||||
page: pagination.current,
|
||||
pageSize: pagination.pageSize,
|
||||
search: searchKeyword.value,
|
||||
farmType: farmTypeFilter.value,
|
||||
animalType: animalTypeFilter.value
|
||||
}
|
||||
|
||||
const response = await api.government.farmers.getList(params)
|
||||
farmersData.value = response.data || []
|
||||
pagination.total = response.total || 0
|
||||
} catch (error) {
|
||||
message.error('获取养殖户列表失败')
|
||||
console.error('获取养殖户列表失败:', error)
|
||||
farmersData.value = []
|
||||
pagination.total = 0
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 获取养殖类型列表
|
||||
const fetchFarmTypes = async () => {
|
||||
try {
|
||||
const response = await api.government.farmTypes.getList()
|
||||
farmTypes.value = response
|
||||
} catch (error) {
|
||||
message.error('获取养殖类型列表失败')
|
||||
console.error('获取养殖类型列表失败:', error)
|
||||
}
|
||||
}
|
||||
|
||||
// 获取养殖种类列表
|
||||
const fetchAnimalTypes = async () => {
|
||||
try {
|
||||
const response = await api.government.animalTypes.getList()
|
||||
animalTypes.value = response
|
||||
} catch (error) {
|
||||
message.error('获取养殖种类列表失败')
|
||||
console.error('获取养殖种类列表失败:', error)
|
||||
}
|
||||
}
|
||||
|
||||
// 处理搜索
|
||||
const handleSearch = () => {
|
||||
// 实际应用中这里应该调用API进行搜索
|
||||
message.success('搜索条件已应用')
|
||||
pagination.current = 1
|
||||
fetchFarmers()
|
||||
}
|
||||
|
||||
// 处理表格分页、排序等变化
|
||||
const handleTableChange = (paginationInfo) => {
|
||||
pagination.current = paginationInfo.current
|
||||
pagination.pageSize = paginationInfo.pageSize
|
||||
fetchFarmers()
|
||||
}
|
||||
|
||||
// 处理导出
|
||||
const handleExport = () => {
|
||||
message.success('数据导出中...')
|
||||
// 实际应用中这里应该调用导出API
|
||||
}
|
||||
|
||||
// 处理添加养殖户
|
||||
const handleAddFarmer = () => {
|
||||
message.success('打开新增养殖监管表单')
|
||||
modalTitle.value = '新增养殖户'
|
||||
editingId.value = null
|
||||
// 重置表单
|
||||
Object.keys(formData).forEach(key => {
|
||||
formData[key] = key === 'animal_count' ? 0 : key === 'status' ? 'active' : ''
|
||||
})
|
||||
modalVisible.value = true
|
||||
}
|
||||
|
||||
// 处理编辑养殖户
|
||||
const handleEdit = async (record) => {
|
||||
try {
|
||||
modalTitle.value = '编辑养殖户'
|
||||
editingId.value = record.id
|
||||
// 填充表单数据
|
||||
formData.account = record.account
|
||||
formData.nickname = record.nickname
|
||||
formData.real_name = record.real_name
|
||||
formData.farm_name = record.farm_name
|
||||
formData.farm_type = record.farm_type
|
||||
formData.animal_type = record.animal_type
|
||||
formData.animal_count = record.animal_count
|
||||
formData.address = record.address
|
||||
formData.status = record.status_value
|
||||
modalVisible.value = true
|
||||
} catch (error) {
|
||||
message.error('加载养殖户信息失败')
|
||||
console.error('加载养殖户信息失败:', error)
|
||||
}
|
||||
}
|
||||
|
||||
// 处理查看详情
|
||||
const handleView = (record) => {
|
||||
message.info(`查看养殖户: ${record.farmName}`)
|
||||
selectedFarmer.value = record
|
||||
viewModalVisible.value = true
|
||||
}
|
||||
|
||||
// 处理编辑
|
||||
const handleEdit = (record) => {
|
||||
message.info(`编辑养殖户: ${record.farmName}`)
|
||||
}
|
||||
|
||||
// 处理删除
|
||||
// 处理删除养殖户
|
||||
const handleDelete = (id) => {
|
||||
message.success(`删除养殖户ID: ${id}`)
|
||||
Modal.confirm({
|
||||
title: '确认删除',
|
||||
content: '确定要删除该养殖户吗?',
|
||||
okText: '确定',
|
||||
cancelText: '取消',
|
||||
async onOk() {
|
||||
try {
|
||||
await api.government.farmers.delete(id)
|
||||
message.success('删除成功')
|
||||
fetchFarmers()
|
||||
} catch (error) {
|
||||
message.error('删除失败')
|
||||
console.error('删除养殖户失败:', error)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 处理对话框确定
|
||||
const handleOk = async () => {
|
||||
try {
|
||||
if (editingId.value) {
|
||||
// 编辑养殖户
|
||||
await api.government.farmers.update(editingId.value, formData)
|
||||
message.success('更新成功')
|
||||
} else {
|
||||
// 新增养殖户
|
||||
await api.government.farmers.create(formData)
|
||||
message.success('创建成功')
|
||||
}
|
||||
modalVisible.value = false
|
||||
fetchFarmers()
|
||||
} catch (error) {
|
||||
message.error(editingId.value ? '更新失败' : '创建失败')
|
||||
console.error(editingId.value ? '更新养殖户失败:' : '创建养殖户失败:', error)
|
||||
}
|
||||
}
|
||||
|
||||
// 处理对话框取消
|
||||
const handleCancel = () => {
|
||||
modalVisible.value = false
|
||||
}
|
||||
|
||||
// 处理查看详情对话框取消
|
||||
const handleViewCancel = () => {
|
||||
viewModalVisible.value = false
|
||||
selectedFarmer.value = null
|
||||
}
|
||||
|
||||
// 获取状态颜色
|
||||
|
||||
Reference in New Issue
Block a user