From d957d1a03955342dbe5d589119d0080dc767f373 Mon Sep 17 00:00:00 2001 From: Zy <1448159279@qq.com> Date: Sat, 11 Apr 2026 17:55:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BF=E5=AE=A2=E6=A8=A1=E5=9D=97=E5=BE=85?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/system/MonthCard/index.ts | 63 ++++ src/api/system/MonthCard/type.ts | 180 ++++++++++ src/api/system/ParkingCost/index.ts | 63 ++++ src/api/system/ParkingCost/type.ts | 195 ++++++++++ src/api/system/Repair/index.ts | 74 ++++ src/api/system/Repair/type.ts | 205 +++++++++++ src/api/system/RepairProject/index.ts | 76 ++++ src/api/system/RepairProject/type.ts | 130 +++++++ src/api/system/Visitor/index.ts | 63 ++++ src/api/system/Visitor/type.ts | 180 ++++++++++ src/api/system/cars/index.ts | 10 +- src/components/Holder/index.vue | 41 ++- src/components/Holder/repairUser.vue | 208 +++++++++++ src/utils/Reg.ts | 66 ++++ src/utils/house.ts | 12 - src/utils/index.ts | 50 +++ src/utils/time.ts | 66 ++++ src/views/community/AddCommunity.vue | 3 - src/views/system/MonthCard/addMonthCard.vue | 245 +++++++++++++ src/views/system/MonthCard/index.vue | 299 ++++++++++++++++ .../system/ParkingCost/addParkingCost.vue | 293 +++++++++++++++ src/views/system/ParkingCost/index.vue | 338 ++++++++++++++++++ src/views/system/Repair/addRepair.vue | 321 +++++++++++++++++ src/views/system/Repair/addRepairlist.vue | 182 ++++++++++ src/views/system/Repair/index.vue | 264 ++++++++++++++ src/views/system/Repair/repairMain.vue | 230 ++++++++++++ src/views/system/Repair/repairlist.vue | 329 +++++++++++++++++ src/views/system/Visitor/index.vue | 280 +++++++++++++++ src/views/system/carArea/addCarArea.vue | 2 +- src/views/system/cars/addCars.vue | 15 +- .../system/houseRental/addhouseResident.vue | 5 +- src/views/system/parking/addParking.vue | 6 +- src/views/system/parking/index.vue | 20 +- src/views/system/parking/template.vue | 132 +++++-- src/views/system/resident/addResident.vue | 13 +- 35 files changed, 4564 insertions(+), 95 deletions(-) create mode 100644 src/api/system/MonthCard/index.ts create mode 100644 src/api/system/MonthCard/type.ts create mode 100644 src/api/system/ParkingCost/index.ts create mode 100644 src/api/system/ParkingCost/type.ts create mode 100644 src/api/system/Repair/index.ts create mode 100644 src/api/system/Repair/type.ts create mode 100644 src/api/system/RepairProject/index.ts create mode 100644 src/api/system/RepairProject/type.ts create mode 100644 src/api/system/Visitor/index.ts create mode 100644 src/api/system/Visitor/type.ts create mode 100644 src/components/Holder/repairUser.vue create mode 100644 src/utils/Reg.ts create mode 100644 src/utils/time.ts create mode 100644 src/views/system/MonthCard/addMonthCard.vue create mode 100644 src/views/system/MonthCard/index.vue create mode 100644 src/views/system/ParkingCost/addParkingCost.vue create mode 100644 src/views/system/ParkingCost/index.vue create mode 100644 src/views/system/Repair/addRepair.vue create mode 100644 src/views/system/Repair/addRepairlist.vue create mode 100644 src/views/system/Repair/index.vue create mode 100644 src/views/system/Repair/repairMain.vue create mode 100644 src/views/system/Repair/repairlist.vue create mode 100644 src/views/system/Visitor/index.vue diff --git a/src/api/system/MonthCard/index.ts b/src/api/system/MonthCard/index.ts new file mode 100644 index 0000000..df59129 --- /dev/null +++ b/src/api/system/MonthCard/index.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { MonthCardVO, MonthCardForm, MonthCardQuery } from '@/api/system/MonthCard/type'; + +/** + * 查询月卡管理列表 + * @param query + * @returns {*} + */ + +export const listMonthCard = (query?: MonthCardQuery): AxiosPromise => { + return request({ + url: '/monthCard/list', + method: 'get', + params: query + }); +}; + +/** + * 查询月卡管理详细 + * @param id + */ +export const getMonthCard = (id: string | number): AxiosPromise => { + return request({ + url: '/monthCard/' + id, + method: 'get' + }); +}; + +/** + * 新增月卡管理 + * @param data + */ +export const addMonthCard = (data: MonthCardForm) => { + return request({ + url: '/monthCard', + method: 'post', + data: data + }); +}; + +/** + * 修改月卡管理 + * @param data + */ +export const updateMonthCard = (data: MonthCardForm) => { + return request({ + url: '/monthCard', + method: 'put', + data: data + }); +}; + +/** + * 删除月卡管理 + * @param id + */ +export const delMonthCard = (id: string | number | Array) => { + return request({ + url: '/monthCard/' + id, + method: 'delete' + }); +}; diff --git a/src/api/system/MonthCard/type.ts b/src/api/system/MonthCard/type.ts new file mode 100644 index 0000000..bbb8444 --- /dev/null +++ b/src/api/system/MonthCard/type.ts @@ -0,0 +1,180 @@ +export interface MonthCardVO { + /** + * 月卡管理表id + */ + id: string | number; + + /** + * 办理时间 + */ + handleTime: string; + + /** + * 持卡人姓名 + */ + cardName: string; + + /** + * 手机号码 + */ + phone: string; + + /** + * 绑定车牌号 + */ + carNum: string; + + /** + * 办理人姓名 + */ + handleName: string; + + /** + * 月卡编号 + */ + cardCode: string; + + /** + * 费用/元 + */ + cost: number; + + /** + * 支付方式 0微信 1支付宝 2线下缴费 + */ + payMethod: string; + + /** + * 备注 + */ + remark: string; + + /** + * 开始日期 + */ + startTime: string; + + /** + * 结束日期 + */ + endTime: string; +} + +export interface MonthCardForm extends BaseEntity { + /** + * 月卡管理表id + */ + id?: string | number; + + /** + * 办理时间 + */ + handleTime?: string; + + /** + * 持卡人姓名 + */ + cardName?: string; + + /** + * 手机号码 + */ + phone?: string; + + /** + * 绑定车牌号 + */ + carNum?: string; + + /** + * 办理人姓名 + */ + handleName?: string; + + /** + * 月卡编号 + */ + cardCode?: string; + + /** + * 费用/元 + */ + cost?: number; + + /** + * 支付方式 0微信 1支付宝 2线下缴费 + */ + payMethod?: string; + + /** + * 备注 + */ + remark?: string; + + /** + * 开始日期 + */ + startTime?: string; + + /** + * 结束日期 + */ + endTime?: string; +} + +export interface MonthCardQuery extends PageQuery { + /** + * 办理时间 + */ + handleTime?: string; + + /** + * 持卡人姓名 + */ + cardName?: string; + + /** + * 手机号码 + */ + phone?: string; + + /** + * 绑定车牌号 + */ + carNum?: string; + + /** + * 办理人姓名 + */ + handleName?: string; + + /** + * 月卡编号 + */ + cardCode?: string; + + /** + * 费用/元 + */ + cost?: number; + + /** + * 支付方式 0微信 1支付宝 2线下缴费 + */ + payMethod?: string; + + /** + * 开始日期 + */ + startTime?: string; + + /** + * 结束日期 + */ + endTime?: string; + + /** + * 日期范围参数 + */ + params?: any; +} diff --git a/src/api/system/ParkingCost/index.ts b/src/api/system/ParkingCost/index.ts new file mode 100644 index 0000000..49bbaaf --- /dev/null +++ b/src/api/system/ParkingCost/index.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { ParkingCostVO, ParkingCostForm, ParkingCostQuery } from '@/api/system/type'; + +/** + * 查询停车缴费管理列表 + * @param query + * @returns {*} + */ + +export const listParkingCost = (query?: ParkingCostQuery): AxiosPromise => { + return request({ + url: '/parkingCost/list', + method: 'get', + params: query + }); +}; + +/** + * 查询停车缴费管理详细 + * @param id + */ +export const getParkingCost = (id: string | number): AxiosPromise => { + return request({ + url: '/parkingCost/' + id, + method: 'get' + }); +}; + +/** + * 新增停车缴费管理 + * @param data + */ +export const addParkingCost = (data: ParkingCostForm) => { + return request({ + url: '/parkingCost', + method: 'post', + data: data + }); +}; + +/** + * 修改停车缴费管理 + * @param data + */ +export const updateParkingCost = (data: ParkingCostForm) => { + return request({ + url: '/parkingCost', + method: 'put', + data: data + }); +}; + +/** + * 删除停车缴费管理 + * @param id + */ +export const delParkingCost = (id: string | number | Array) => { + return request({ + url: '/parkingCost/' + id, + method: 'delete' + }); +}; diff --git a/src/api/system/ParkingCost/type.ts b/src/api/system/ParkingCost/type.ts new file mode 100644 index 0000000..df296de --- /dev/null +++ b/src/api/system/ParkingCost/type.ts @@ -0,0 +1,195 @@ +export interface ParkingCostVO { + /** + * 停车缴费表id + */ + id: string | number; + + /** + * 区域id + */ + areaId: string | number; + + /** + * 车位id + */ + parkingId: string | number; + + /** + * 收费项目 0临时停车 + */ + chargeItem: string; + + /** + * 缴纳人姓名 + */ + payerName: string; + + /** + * 车牌号 + */ + carNum: string; + + /** + * 开始时间 + */ + startTime: string; + + /** + * 结束时间 + */ + endTime: string; + + /** + * 费用/元 + */ + cost: number; + + /** + * 缴纳状态 0待缴纳 1已缴纳 + */ + payerStatus: string; + + /** + * 支付方式 0微信 1支付宝 2线下缴费 + */ + payMethod: string; + + /** + * 备注 + */ + remark: string; + + /** + * 所属小区id + */ + villageId: string | number; +} + +export interface ParkingCostForm extends BaseEntity { + /** + * 停车缴费表id + */ + id?: string | number; + + /** + * 区域id + */ + areaId?: string | number; + + /** + * 车位id + */ + parkingId?: string | number; + + /** + * 收费项目 0临时停车 + */ + chargeItem?: string; + + /** + * 缴纳人姓名 + */ + payerName?: string; + + /** + * 车牌号 + */ + carNum?: string; + + /** + * 开始时间 + */ + startTime?: string; + + /** + * 结束时间 + */ + endTime?: string; + + /** + * 费用/元 + */ + cost?: number; + + /** + * 缴纳状态 0待缴纳 1已缴纳 + */ + payerStatus?: string; + + /** + * 支付方式 0微信 1支付宝 2线下缴费 + */ + payMethod?: string; + + /** + * 备注 + */ + remark?: string; + + /** + * 所属小区id + */ + villageId?: string | number; +} + +export interface ParkingCostQuery extends PageQuery { + /** + * 区域id + */ + areaId?: string | number; + + /** + * 车位id + */ + parkingId?: string | number; + + /** + * 收费项目 0临时停车 + */ + chargeItem?: string; + + /** + * 缴纳人姓名 + */ + payerName?: string; + + /** + * 车牌号 + */ + carNum?: string; + + /** + * 开始时间 + */ + startTime?: string; + + /** + * 结束时间 + */ + endTime?: string; + + /** + * 费用/元 + */ + cost?: number; + + /** + * 缴纳状态 0待缴纳 1已缴纳 + */ + payerStatus?: string; + + /** + * 支付方式 0微信 1支付宝 2线下缴费 + */ + payMethod?: string; + + /** + * 所属小区id + */ + villageId?: string | number; + + /** + * 日期范围参数 + */ + params?: any; +} diff --git a/src/api/system/Repair/index.ts b/src/api/system/Repair/index.ts new file mode 100644 index 0000000..398aef8 --- /dev/null +++ b/src/api/system/Repair/index.ts @@ -0,0 +1,74 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { RepairVO, RepairForm, RepairQuery } from '@/api/system/Repair/type'; + +/** + * 查询报修管理列表 + * @param query + * @returns {*} + */ + +export const listRepair = (query?: RepairQuery): AxiosPromise => { + return request({ + url: '/repair/list', + method: 'get', + params: query + }); +}; + +/** + * 查询报修管理详细 + * @param id + */ +export const getRepair = (id: string | number): AxiosPromise => { + return request({ + url: '/repair/' + id, + method: 'get' + }); +}; + +/** + * 新增报修管理 + * @param data + */ +export const addRepair = (data: RepairForm) => { + return request({ + url: '/repair', + method: 'post', + data: data + }); +}; + +/** + * 修改报修管理 + * @param data + */ +export const updateRepair = (data: RepairForm) => { + return request({ + url: '/repair', + method: 'put', + data: data + }); +}; + +/** + * 删除报修管理 + * @param id + */ +export const delRepair = (id: string | number | Array) => { + return request({ + url: '/repair/' + id, + method: 'delete' + }); +}; +/** + * 上传报修图片 + * @param { formdata } formdata + */ +export const uploadRepairImages = (formdata: FormData) => { + return request({ + url: '/repair/uploadImages', + method: 'POST', + data: formdata + }); +}; diff --git a/src/api/system/Repair/type.ts b/src/api/system/Repair/type.ts new file mode 100644 index 0000000..6f12149 --- /dev/null +++ b/src/api/system/Repair/type.ts @@ -0,0 +1,205 @@ +export interface RepairVO { + /** + * 报修管理表id + */ + id: string | number; + + /** + * 关联房屋id + */ + houseId: string | number; + + /** + * 维修项目id + */ + maintenanceItemId: string | number; + + /** + * 问题描述 + */ + problem: string; + + /** + * 报修人id(住户表id) + */ + residentId: string | number; + + /** + * 手机号码 + */ + phone: number; + + /** + * 预约日期 + */ + orderDate: string; + + /** + * 问题图片地址 + */ + problemImageUrl: string; + + /** + * 0 已提交 1已分配 2维修中 3维修完成 + */ + problemStatus: string; + + /** + * 维修描述 + */ + repairDes: string; + + /** + * 维修图片url + */ + repairImageUrl: string; + + /** + * 维修人员id + */ + repairId: string | number; +} + +export interface RepairForm extends BaseEntity { + /** + * 报修管理表id + */ + id?: string | number; + + /** + * 关联房屋id + */ + houseId?: string | number; + + /** + * 维修项目id + */ + maintenanceItemId?: string | number; + + /** + * 问题描述 + */ + problem?: string; + + /** + * 报修人id(住户表id) + */ + residentId?: string | number; + + /** + * 手机号码 + */ + phone?: number; + + /** + * 预约日期 + */ + orderDate?: string; + + /** + * 问题图片地址 + */ + problemImageUrl?: string; + + /** + * 创建者 + */ + createBy?: number; + + /** + * 创建时间 + */ + createTime?: string; + + /** + * 更新者 + */ + updateBy?: number; + + /** + * 更新时间 + */ + updateTime?: string; + + /** + * 0 已提交 1已分配 2维修中 3维修完成 + */ + problemStatus?: string; + + /** + * 维修描述 + */ + repairDes?: string; + + /** + * 维修图片url + */ + repairImageUrl?: string; + + /** + * 维修人员id + */ + repairId?: string | number; +} + +export interface RepairQuery extends PageQuery { + /** + * 关联房屋id + */ + houseId?: string | number; + + /** + * 维修项目id + */ + maintenanceItemId?: string | number; + + /** + * 问题描述 + */ + problem?: string; + + /** + * 报修人id(住户表id) + */ + residentId?: string | number; + + /** + * 手机号码 + */ + phone?: number; + + /** + * 预约日期 + */ + orderDate?: string; + + /** + * 问题图片地址 + */ + problemImageUrl?: string; + + /** + * 0 已提交 1已分配 2维修中 3维修完成 + */ + problemStatus?: string; + + /** + * 维修描述 + */ + repairDes?: string; + + /** + * 维修图片url + */ + repairImageUrl?: string; + + /** + * 维修人员id + */ + repairId?: string | number; + + /** + * 日期范围参数 + */ + params?: any; +} diff --git a/src/api/system/RepairProject/index.ts b/src/api/system/RepairProject/index.ts new file mode 100644 index 0000000..93b00da --- /dev/null +++ b/src/api/system/RepairProject/index.ts @@ -0,0 +1,76 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { RepairProjectVO, RepairProjectForm, RepairProjectQuery } from '@/api/repairProject/types'; + +/** + * 查询报修维修项目管理列表 + * @param query + * @returns {*} + */ + +export const listRepairProject = (query?: RepairProjectQuery): AxiosPromise => { + return request({ + url: '/repairProject/list', + method: 'get', + params: query + }); +}; + +/** + * 查询报修维修项目管理详细 + * @param id + */ +export const getRepairProject = (id: string | number): AxiosPromise => { + return request({ + url: '/repairProject/' + id, + method: 'get' + }); +}; + +/** + * 新增报修维修项目管理 + * @param data + */ +export const addRepairProject = (data: RepairProjectForm) => { + return request({ + url: '/repairProject', + method: 'post', + data: data + }); +}; + +/** + * 修改报修维修项目管理 + * @param data + */ +export const updateRepairProject = (data: RepairProjectForm) => { + return request({ + url: '/repairProject', + method: 'put', + data: data + }); +}; + +/** + * 删除报修维修项目管理 + * @param id + */ +export const delRepairProject = (id: string | number | Array) => { + return request({ + url: '/repairProject/' + id, + method: 'delete' + }); +}; +/** + * 查询报修维修项目tree管理列表 + * @param query + * @returns {*} + */ + +export const gettreelistRepairProject = (query?: RepairProjectQuery): AxiosPromise => { + return request({ + url: '/repairProject/treeList', + method: 'get', + params: query + }); +}; diff --git a/src/api/system/RepairProject/type.ts b/src/api/system/RepairProject/type.ts new file mode 100644 index 0000000..77da46b --- /dev/null +++ b/src/api/system/RepairProject/type.ts @@ -0,0 +1,130 @@ +export interface RepairProjectVO { + /** + * 维修项目表id + */ + id: string | number; + + /** + * 维修项目名 + */ + projectName: string; + + /** + * 父级项目id + */ + parentId: string | number; + + /** + * 项目类型 0公共报修 1个人报修 + */ + projectType: string; + + /** + * 项目层级 0,1 + */ + projectLevel: number; + + /** + * 排序 (数越小越靠前) + */ + sortOrder: number; + + /** + * 状态 0启用 1停用 + */ + status: string; +} + +export interface RepairProjectForm extends BaseEntity { + /** + * 维修项目表id + */ + id?: string | number; + + /** + * 维修项目名 + */ + projectName?: string; + + /** + * 父级项目id + */ + parentId?: string | number; + + /** + * 项目类型 0公共报修 1个人报修 + */ + projectType?: string; + + /** + * 项目层级 0,1 + */ + projectLevel?: number; + + /** + * 排序 (数越小越靠前) + */ + sortOrder?: number; + + /** + * 状态 0启用 1停用 + */ + status?: string; + + /** + * 创建时间 + */ + cretaeTime?: string; + + /** + * 创建者 + */ + createBy?: number; + + /** + * 更新时间 + */ + updateTime?: string; + + /** + * 更新者 + */ + updateBy?: number; +} + +export interface RepairProjectQuery extends PageQuery { + /** + * 维修项目名 + */ + projectName?: string; + + /** + * 父级项目id + */ + parentId?: string | number; + + /** + * 项目类型 0公共报修 1个人报修 + */ + projectType?: string; + + /** + * 项目层级 0,1 + */ + projectLevel?: number; + + /** + * 排序 (数越小越靠前) + */ + sortOrder?: number; + + /** + * 状态 0启用 1停用 + */ + status?: string; + + /** + * 日期范围参数 + */ + params?: any; +} diff --git a/src/api/system/Visitor/index.ts b/src/api/system/Visitor/index.ts new file mode 100644 index 0000000..d8655b2 --- /dev/null +++ b/src/api/system/Visitor/index.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { VisitorVO, VisitorForm, VisitorQuery } from '@/api/system/Visitor/type'; + +/** + * 查询访客管理列表 + * @param query + * @returns {*} + */ + +export const listVisitor = (query?: VisitorQuery): AxiosPromise => { + return request({ + url: '/visitor/list', + method: 'get', + params: query + }); +}; + +/** + * 查询访客管理详细 + * @param id + */ +export const getVisitor = (id: string | number): AxiosPromise => { + return request({ + url: '/visitor/' + id, + method: 'get' + }); +}; + +/** + * 新增访客管理 + * @param data + */ +export const addVisitor = (data: VisitorForm) => { + return request({ + url: '/visitor', + method: 'post', + data: data + }); +}; + +/** + * 修改访客管理 + * @param data + */ +export const updateVisitor = (data: VisitorForm) => { + return request({ + url: '/visitor', + method: 'put', + data: data + }); +}; + +/** + * 删除访客管理 + * @param id + */ +export const delVisitor = (id: string | number | Array) => { + return request({ + url: '/visitor/' + id, + method: 'delete' + }); +}; diff --git a/src/api/system/Visitor/type.ts b/src/api/system/Visitor/type.ts new file mode 100644 index 0000000..b104c52 --- /dev/null +++ b/src/api/system/Visitor/type.ts @@ -0,0 +1,180 @@ +export interface VisitorVO { + /** + * 访客管理表id + */ + id: string | number; + + /** + * 访问房屋id + */ + houseId: string | number; + + /** + * 访客姓名 + */ + visitorName: string; + + /** + * 访客性别 0男 1女 3未知 + */ + visitorGender: string; + + /** + * 访客联系方式 + */ + visitorPhone: string; + + /** + * 车牌号 + */ + carNum: string; + + /** + * 随行人数 + */ + visitorNum: number; + + /** + * 来访时间 + */ + startTime: string; + + /** + * 离开时间 + */ + endTime: string; + + /** + * 来访方式 0车辆来访 1人员来访 + */ + type: string; + + /** + * 访客状态 0等待来访 1已到访 + */ + status: string; +} + +export interface VisitorForm extends BaseEntity { + /** + * 访客管理表id + */ + id?: string | number; + + /** + * 访问房屋id + */ + houseId?: string | number; + + /** + * 访客姓名 + */ + visitorName?: string; + + /** + * 访客性别 0男 1女 3未知 + */ + visitorGender?: string; + + /** + * 访客联系方式 + */ + visitorPhone?: string; + + /** + * 车牌号 + */ + carNum?: string; + + /** + * 随行人数 + */ + visitorNum?: number; + + /** + * 来访时间 + */ + startTime?: string; + + /** + * 离开时间 + */ + endTime?: string; + + /** + * 来访方式 0车辆来访 1人员来访 + */ + type?: string; + + /** + * 访客状态 0等待来访 1已到访 + */ + status?: string; + + /** + * 创建时间 + */ + createTime?: string; + + /** + * 创建者(住户id) + */ + createId?: string | number; +} + +export interface VisitorQuery extends PageQuery { + /** + * 访问房屋id + */ + houseId?: string | number; + + /** + * 访客姓名 + */ + visitorName?: string; + + /** + * 访客性别 0男 1女 3未知 + */ + visitorGender?: string; + + /** + * 访客联系方式 + */ + visitorPhone?: string; + + /** + * 车牌号 + */ + carNum?: string; + + /** + * 随行人数 + */ + visitorNum?: number; + + /** + * 来访时间 + */ + startTime?: string; + + /** + * 离开时间 + */ + endTime?: string; + + /** + * 来访方式 0车辆来访 1人员来访 + */ + type?: string; + + /** + * 访客状态 0等待来访 1已到访 + */ + status?: string; + + /** + * 日期范围参数 + */ + params?: any; +} diff --git a/src/api/system/cars/index.ts b/src/api/system/cars/index.ts index 4f36d95..b123dbb 100644 --- a/src/api/system/cars/index.ts +++ b/src/api/system/cars/index.ts @@ -10,7 +10,7 @@ import { CarVO, CarForm, CarQuery } from '@/api/system/cars/type'; export const listCar = (query?: CarQuery): AxiosPromise => { return request({ - url: '/car/car/list', + url: '/car/list', method: 'get', params: query }); @@ -22,7 +22,7 @@ export const listCar = (query?: CarQuery): AxiosPromise => { */ export const getCar = (id: string | number): AxiosPromise => { return request({ - url: '/car/car/' + id, + url: '/car/' + id, method: 'get' }); }; @@ -33,7 +33,7 @@ export const getCar = (id: string | number): AxiosPromise => { */ export const addCar = (data: CarForm) => { return request({ - url: '/car/car', + url: '/car', method: 'post', data: data }); @@ -45,7 +45,7 @@ export const addCar = (data: CarForm) => { */ export const updateCar = (data: CarForm) => { return request({ - url: '/car/car', + url: '/car', method: 'put', data: data }); @@ -57,7 +57,7 @@ export const updateCar = (data: CarForm) => { */ export const delCar = (id: string | number | Array) => { return request({ - url: '/car/car/' + id, + url: '/car/' + id, method: 'delete' }); }; diff --git a/src/components/Holder/index.vue b/src/components/Holder/index.vue index e9dc0c6..b5c7b5a 100644 --- a/src/components/Holder/index.vue +++ b/src/components/Holder/index.vue @@ -4,10 +4,8 @@ 请选择 -
+
姓名:{{ multipleSelection[0] && multipleSelection[0].name }} - 电话:{{ multipleSelection[0] && multipleSelection[0].phone }} - 住址:{{ multipleSelection[0] && multipleSelection[0].housePath }}
@@ -87,14 +85,16 @@ interface tableType extends ResidentVO { housePath?: string; } const props = defineProps<{ - isedit: boolean; + userid: string; }>(); +// 2. 转成 ref(更安全,可选,但推荐) +const { userid } = toRefs(props); const emit = defineEmits<{ - change: [value: tableType]; + change: [value: string | number]; }>(); const dialog = ref({ dialogVisible: false, - dialogTitle: '添加' + dialogTitle: '选择住户' }); const queryParams = ref({ @@ -130,15 +130,26 @@ function gettreedata() { }); } gettreedata(); +getlist(); + +watch( + userid, + (newval) => { + if (newval !== null && newval !== undefined && newval.length > 0) { + const find = tableData.value.find((item) => item.id == newval); + if (find) { + multipleSelection.value = [find]; + } + } + }, + { + deep: true, + immediate: true + } +); // function choiceResidentFun() { - if (props.isedit) { - dialog.value.dialogTitle = '编辑车位'; - } else { - dialog.value.dialogTitle = '添加车位'; - } - getlist(); dialog.value.dialogVisible = true; } // 获取表格 @@ -181,7 +192,7 @@ function confim() { if (multipleSelection.value.length > 0) { const pop = multipleSelection.value.pop(); multipleSelection.value = [pop]; - emit('change', pop); + emit('change', pop.id); } } @@ -203,12 +214,12 @@ function handleSelectionChange(val) { diff --git a/src/utils/Reg.ts b/src/utils/Reg.ts new file mode 100644 index 0000000..821e976 --- /dev/null +++ b/src/utils/Reg.ts @@ -0,0 +1,66 @@ +/** + * 验证身份证号码(18位,支持尾号x/X) + * @param idCard 身份证号 + * @return {boolean} true 符合 false 不符合 + */ +export function validateIdCard(idCard: string): boolean { + // 18位身份证正则 + const reg = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/; + return reg.test(idCard.trim()); +} +/** + * 验证车牌号 + * @param val 兼容新能源 + 普通车牌 + * @return {boolean} true 符合 false 不符合 + */ +export function isPlateNumber(val: string): boolean { + const reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/; + return reg.test(val); +} +/** + * 验证金钱 + * @param {number} val + * @return {boolean} true 符合 false 不符合 + */ +export function isMoney(value: number): boolean { + const reg = /^(0|[1-9]\d*)(\.\d{1,2})?$/; + return reg.test(String(value).trim()); +} +/** + * 验证姓名 + * @param {string} val + * @return {boolean} true 符合 false 不符合 + */ +export function isChineseName(val: string): boolean { + return /^[\u4e00-\u9fa5·]{2,16}$/.test(String(val).trim()); +} + +const reg = { + /** 金钱 */ + money: /^(0|[1-9]\d*)(\.\d{1,2})?$/, + /** 身份证 */ + idCard: /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/, + /** 车牌 */ + PlateNumber: /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼][A-Z][A-HJ-NP-Z0-9]{4,5}[A-HJ-NP-Z0-9挂学警港澳]$/, + /** 姓名 */ + ChineseName: /^[\u4e00-\u9fa5·]{2,16}$/, + /** 手机号 */ + phone: /^1[3-9]\d{9}$/, + /** 邮箱 */ + email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/, + /** QQ */ + qq: /^[1-9]\d{4,11}$/, + /** 微信 */ + wechat: /^[a-zA-Z][a-zA-Z0-9_-]{5,19}$/ +}; +// 自动推导 TS 类型(最标准) +export type RegType = keyof typeof reg; +/** + * 验证姓名 + * @param {string|number} value + * @param {string} regType + * @return {boolean} true 符合 false 不符合 + */ +export function validator(value: string | number, regType: RegType): boolean { + return reg[regType].test(String(value)); +} diff --git a/src/utils/house.ts b/src/utils/house.ts index 86a41f2..cb2513d 100644 --- a/src/utils/house.ts +++ b/src/utils/house.ts @@ -54,7 +54,6 @@ export function convertBuildingToTree(buildings: any[]): Tree[] { }); buildingTree.children = unitTrees; - console.log(buildingTree); return buildingTree; }); } @@ -121,17 +120,6 @@ export function getHousePathById(treeData: Tree[], houseId: number, response: Va return path; } -/** - * 验证身份证号码(18位,支持尾号x/X) - * @param idCard 身份证号 - * @return {boolean} true 符合 false 不符合 - */ -export function validateIdCard(idCard: string): boolean { - // 18位身份证正则 - const reg = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/; - return reg.test(idCard.trim()); -} - export const houseUselist = ['普通住宅', '商业用地', '商住两用', '其他']; // 对字符串 图片地址,处理 diff --git a/src/utils/index.ts b/src/utils/index.ts index 2b0aad5..c4d025c 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -316,3 +316,53 @@ export const removeClass = (ele: HTMLElement, cls: string) => { export const isExternal = (path: string) => { return /^(https?:|http?:|mailto:|tel:)/.test(path); }; + +/** + * 通用:根据 projectLevel 层级字段,将扁平数组转为树形结构 + * @param list 原始扁平数组 + * @returns 树形结构数据(children 为空则设为 null) + */ +export function buildTreeByLevel(list: T[]): T[] { + if (!list || list.length === 0) return []; + + // 1. 深拷贝 + 初始化 children + const data = JSON.parse(JSON.stringify(list)); + data.forEach((item: any) => (item.children = [])); + + const tree: any[] = []; + + // 2. 根据 projectLevel 构建父子关系 + data.forEach((item: any, index: number) => { + const level = Number(item.projectLevel); + + // 顶级节点(level = 0) + if (level === 0) { + tree.push(item); + } + // 子节点:寻找上一级节点 + else { + const parentLevel = level - 1; + // 向前寻找最近的父级 + const parent = data + .slice(0, index) + .reverse() + .find((i: any) => Number(i.projectLevel) === parentLevel); + + if (parent) parent.children.push(item); + } + }); + + // 3. 清理空 children(没有子节点 = null,表格不显示展开箭头) + const cleanEmptyChildren = (nodes: any[]) => { + nodes.forEach((node) => { + if (node.children?.length === 0) { + node.children = null; + } else if (node.children) { + cleanEmptyChildren(node.children); + } + }); + }; + cleanEmptyChildren(tree); + + return tree; +} diff --git a/src/utils/time.ts b/src/utils/time.ts new file mode 100644 index 0000000..cc53a14 --- /dev/null +++ b/src/utils/time.ts @@ -0,0 +1,66 @@ +/** + * 计算两个日期之间相差的天数 + * @param date1 开始日期 + * @param date2 结束日期 + * @returns 相差天数(绝对值) + */ +export function diffDays(date1: string | Date, date2: string | Date): number { + const d1 = new Date(date1); + const d2 = new Date(date2); + // 转为时间戳并取绝对值 + const diff = Math.abs(d1.getTime() - d2.getTime()); + // 一天的毫秒数 + return Math.floor(diff / (1000 * 60 * 60 * 24)); +} + +/** + * 格式化两个时间的差值,自动显示 年/月/天/时/分/秒 + * @param startTime 开始时间(Date / 时间戳 / 字符串) + * @param endTime 结束时间,默认当前时间 + * @returns 如:2年3个月、15天、2小时30分、50秒 + */ +export function formatTimeDiff(startTime: string | number | Date, endTime: string | number | Date = new Date()): string { + const start = new Date(startTime).getTime(); + const end = new Date(endTime).getTime(); + + // 毫秒差值(绝对值) + let diff = Math.abs(end - start); + if (diff < 1000) return '0秒'; + + // 单位定义 + const second = 1000; + const minute = 60 * second; + const hour = 60 * minute; + const day = 24 * hour; + const month = 30 * day; // 粗略按月计算 + const year = 365 * day; + + // 计算 + const years = Math.floor(diff / year); + diff -= years * year; + + const months = Math.floor(diff / month); + diff -= months * month; + + const days = Math.floor(diff / day); + diff -= days * day; + + const hours = Math.floor(diff / hour); + diff -= hours * hour; + + const minutes = Math.floor(diff / minute); + diff -= minutes * minute; + + const seconds = Math.floor(diff / second); + + // 拼接显示 + const res: string[] = []; + if (years > 0) res.push(years + '年'); + if (months > 0) res.push(months + '个月'); + if (days > 0) res.push(days + '天'); + if (hours > 0) res.push(hours + '小时'); + if (minutes > 0) res.push(minutes + '分钟'); + if (seconds > 0 && res.length === 0) res.push(seconds + '秒'); + + return res.join(''); +} diff --git a/src/views/community/AddCommunity.vue b/src/views/community/AddCommunity.vue index d56a980..404b837 100644 --- a/src/views/community/AddCommunity.vue +++ b/src/views/community/AddCommunity.vue @@ -262,9 +262,6 @@ const reg = { qq: /^[1-9]\d{4,11}$/, wechat: /^[a-zA-Z][a-zA-Z0-9_-]{5,19}$/ }; - -// 使用 -reg.phone.test('13800138000'); // 上传图片 const submitForm = () => { formRef.value?.validate(async (valid: boolean) => { diff --git a/src/views/system/MonthCard/addMonthCard.vue b/src/views/system/MonthCard/addMonthCard.vue new file mode 100644 index 0000000..a5faa65 --- /dev/null +++ b/src/views/system/MonthCard/addMonthCard.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/src/views/system/MonthCard/index.vue b/src/views/system/MonthCard/index.vue new file mode 100644 index 0000000..ca19839 --- /dev/null +++ b/src/views/system/MonthCard/index.vue @@ -0,0 +1,299 @@ + + + diff --git a/src/views/system/ParkingCost/addParkingCost.vue b/src/views/system/ParkingCost/addParkingCost.vue new file mode 100644 index 0000000..ec6ff2c --- /dev/null +++ b/src/views/system/ParkingCost/addParkingCost.vue @@ -0,0 +1,293 @@ + + + + + diff --git a/src/views/system/ParkingCost/index.vue b/src/views/system/ParkingCost/index.vue new file mode 100644 index 0000000..04878f1 --- /dev/null +++ b/src/views/system/ParkingCost/index.vue @@ -0,0 +1,338 @@ + + + + + diff --git a/src/views/system/Repair/addRepair.vue b/src/views/system/Repair/addRepair.vue new file mode 100644 index 0000000..62e8d56 --- /dev/null +++ b/src/views/system/Repair/addRepair.vue @@ -0,0 +1,321 @@ + + + + + diff --git a/src/views/system/Repair/addRepairlist.vue b/src/views/system/Repair/addRepairlist.vue new file mode 100644 index 0000000..5432484 --- /dev/null +++ b/src/views/system/Repair/addRepairlist.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/src/views/system/Repair/index.vue b/src/views/system/Repair/index.vue new file mode 100644 index 0000000..88e7104 --- /dev/null +++ b/src/views/system/Repair/index.vue @@ -0,0 +1,264 @@ + + + + diff --git a/src/views/system/Repair/repairMain.vue b/src/views/system/Repair/repairMain.vue new file mode 100644 index 0000000..f94d853 --- /dev/null +++ b/src/views/system/Repair/repairMain.vue @@ -0,0 +1,230 @@ + + + + diff --git a/src/views/system/Repair/repairlist.vue b/src/views/system/Repair/repairlist.vue new file mode 100644 index 0000000..f65a3f5 --- /dev/null +++ b/src/views/system/Repair/repairlist.vue @@ -0,0 +1,329 @@ + + + diff --git a/src/views/system/Visitor/index.vue b/src/views/system/Visitor/index.vue new file mode 100644 index 0000000..e346ae9 --- /dev/null +++ b/src/views/system/Visitor/index.vue @@ -0,0 +1,280 @@ + + + diff --git a/src/views/system/carArea/addCarArea.vue b/src/views/system/carArea/addCarArea.vue index 7ecbba4..c7b39bb 100644 --- a/src/views/system/carArea/addCarArea.vue +++ b/src/views/system/carArea/addCarArea.vue @@ -1,6 +1,6 @@