diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..0c6add7 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,15 @@ +{ + "permissions": { + "allow": [ + "Bash(node -e \"console.log\\(require\\('@vue/babel-preset-app/package.json'\\).version\\)\")", + "Bash(node *)", + "Bash(npm ls *)", + "Bash(npx vue-cli-service *)", + "Bash(curl -sI \"https://webapi.amap.com/maps?v=2.0&key=3239bc04f77a5c89b2b5e628da96b6ed\")", + "Bash(curl -sI \"https://webapi.amap.com/maps?v=1.4.15&key=3239bc04f77a5c89b2b5e628da96b6ed\")", + "Bash(npm run *)", + "Read(//Users/wangbiao/.claude/**)", + "Read(//Users/wangbiao/.claude/plugins/**)" + ] + } +} diff --git a/src/api/property/propertyApi.js b/src/api/property/propertyApi.js new file mode 100644 index 0000000..e9dfb97 --- /dev/null +++ b/src/api/property/propertyApi.js @@ -0,0 +1,48 @@ +import request from '@/utils/request' + +// 物业人员管理 API + +/** 人员列表查询 */ +export function queryPropertyUsers(params) { + return request({ url: '/app/property.queryUsers', method: 'post', data: params }) +} + +/** 轨迹查询 */ +export function queryLocationTracks(params) { + return request({ url: '/app/property.queryLocationTracks', method: 'post', data: params }) +} + +/** 打卡记录查询 */ +export function queryAttendanceRecords(params) { + return request({ url: '/app/property.queryAttendanceRecords', method: 'post', data: params }) +} + +/** 巡更记录查询 */ +export function queryPatrolRecords(params) { + return request({ url: '/app/property.queryPatrolRecords', method: 'post', data: params }) +} + +/** 保洁记录查询 */ +export function queryCleaningRecords(params) { + return request({ url: '/app/property.queryCleaningRecords', method: 'post', data: params }) +} + +/** 工单查询 */ +export function queryRepairOrders(params) { + return request({ url: '/app/property.queryRepairOrders', method: 'post', data: params }) +} + +/** 更新工单状态 */ +export function updateRepairStatus(params) { + return request({ url: '/app/property.updateRepairStatus', method: 'post', data: params }) +} + +/** 消息通知查询 */ +export function queryMessages(params) { + return request({ url: '/app/property.queryMessages', method: 'post', data: params }) +} + +/** 标记消息已读 */ +export function readMessage(params) { + return request({ url: '/app/property.readMessage', method: 'post', data: params }) +} diff --git a/src/router/propertyRouter.js b/src/router/propertyRouter.js new file mode 100644 index 0000000..72629b3 --- /dev/null +++ b/src/router/propertyRouter.js @@ -0,0 +1,47 @@ +/** + * 物业人员管理路由配置 + */ +export default [ + { + path: '/property/track', + name: 'propertyTrack', + component: () => import('@/views/property/TrackView.vue'), + meta: { title: '轨迹监控', icon: 'el-icon-map-location' } + }, + { + path: '/property/staff', + name: 'propertyStaff', + component: () => import('@/views/property/StaffView.vue'), + meta: { title: '人员管理', icon: 'el-icon-user' } + }, + { + path: '/property/attendance', + name: 'propertyAttendance', + component: () => import('@/views/property/AttendanceView.vue'), + meta: { title: '打卡管理', icon: 'el-icon-time' } + }, + { + path: '/property/patrol', + name: 'propertyPatrol', + component: () => import('@/views/property/PatrolView.vue'), + meta: { title: '巡更记录', icon: 'el-icon-warning' } + }, + { + path: '/property/cleaning', + name: 'propertyCleaning', + component: () => import('@/views/property/CleaningView.vue'), + meta: { title: '保洁记录', icon: 'el-icon-brush' } + }, + { + path: '/property/repair', + name: 'propertyRepair', + component: () => import('@/views/property/RepairOrderView.vue'), + meta: { title: '工单列表', icon: 'el-icon-s-tools' } + }, + { + path: '/property/submitRepair', + name: 'propertySubmitRepair', + component: () => import('@/views/property/RepairOrderView.vue'), + meta: { title: '提交工单', icon: 'el-icon-s-tools' } + } +] diff --git a/src/views/property/AttendanceView.vue b/src/views/property/AttendanceView.vue new file mode 100644 index 0000000..f6dfbc0 --- /dev/null +++ b/src/views/property/AttendanceView.vue @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 查询 + 导出 + + + + + + 打卡记录 + + + + {{ workTypeLabel(scope.row.work_type) }} + + + + + {{ scope.row.punch_type === 'ON' ? '上班' : '下班' }} + + + + + + + + + + + + + + + + diff --git a/src/views/property/CleaningView.vue b/src/views/property/CleaningView.vue new file mode 100644 index 0000000..5cadea5 --- /dev/null +++ b/src/views/property/CleaningView.vue @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + 查询 + + + + + + 保洁作业记录 + + + + + + + + + + + 详情 + + + + + + + + + {{ currentRecord.user_name }} + {{ currentRecord.work_area }} + {{ currentRecord.work_content }} + {{ currentRecord.work_time }} + {{ currentRecord.longitude }}, {{ currentRecord.latitude }} + + + + + 无 + + {{ currentRecord.remark || '无' }} + + + + + + + + diff --git a/src/views/property/PatrolView.vue b/src/views/property/PatrolView.vue new file mode 100644 index 0000000..ff89e64 --- /dev/null +++ b/src/views/property/PatrolView.vue @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + 查询 + + + + + + 巡更记录 + + + + + + + + + + + 详情 + + + + + + + + + {{ currentRecord.user_name }} + {{ currentRecord.patrol_location }} + {{ currentRecord.patrol_content }} + {{ currentRecord.patrol_time }} + {{ currentRecord.longitude }}, {{ currentRecord.latitude }} + + + + + 无 + + {{ currentRecord.remark || '无' }} + + + + + + + + diff --git a/src/views/property/RepairOrderView.vue b/src/views/property/RepairOrderView.vue new file mode 100644 index 0000000..8a65fe2 --- /dev/null +++ b/src/views/property/RepairOrderView.vue @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + 查询 + + + + + + 工单列表(共 {{ pagination.total }} 条) + + + + + + + + + {{ statusLabel(scope.row.status) }} + + + + + + + 详情 + 分配 + + + + + + + + + + {{ currentOrder.title }} + + + {{ statusLabel(currentOrder.status) }} + + + {{ currentOrder.submitter_name }} + {{ currentOrder.repairer_name || '未分配' }} + {{ currentOrder.repair_location }} + {{ currentOrder.longitude }}, {{ currentOrder.latitude }} + {{ currentOrder.description }} + + + + + 无 + + {{ currentOrder.repair_result || '暂无' }} + + + + + 无 + + {{ currentOrder.create_time }} + {{ currentOrder.complete_time || '未完成' }} + + + + + + + + + + 取消 + 确认分配 + + + + + + + + diff --git a/src/views/property/StaffView.vue b/src/views/property/StaffView.vue new file mode 100644 index 0000000..579254f --- /dev/null +++ b/src/views/property/StaffView.vue @@ -0,0 +1,83 @@ + + + + + 人员列表 + + + + + + + + + + + {{ workTypeLabel(scope.row.work_type) }} + + + + + {{ scope.row.role === 'ADMIN' ? '管理员' : '员工' }} + + + + + + + {{ scope.row.status === 'ON' ? '在职' : '离职' }} + + + + + + + + + + + + + diff --git a/src/views/property/TrackView.vue b/src/views/property/TrackView.vue new file mode 100644 index 0000000..774794f --- /dev/null +++ b/src/views/property/TrackView.vue @@ -0,0 +1,261 @@ + + + + + + + + + + + + + + + + + + 查询 + + 播放轨迹 + + + + + + + + + + + + 轨迹点列表(共 {{ trackData.length }} 个点) + + + + + + + + + {{ scope.row.loc_status === 'NORMAL' ? '正常' : '异常' }} + + + + + + 定位 + + + + + + + + + +