| | |
| | | /** |
| | | * 用户ID |
| | | */ |
| | | userId?: number; |
| | | userId?: string; |
| | | |
| | | /** |
| | | * 优惠券ID |
| | |
| | | /** |
| | | * 经手人ID |
| | | */ |
| | | handlerId?: BigInt; |
| | | handlerId?: string; |
| | | |
| | | /** |
| | | * 收购方代码 |
| | |
| | | /** |
| | | * 用户ID |
| | | */ |
| | | userId?: number; |
| | | userId?: string; |
| | | |
| | | /** |
| | | * 标题 |
| | |
| | | title?: string; |
| | | |
| | | /** |
| | | * 支付方式 0-待支付 1-微信 2-支付宝 |
| | | * 支付方式 0-待支付 1-微信 2-支付宝 3-碳积分 |
| | | */ |
| | | payType?: number; |
| | | |
| | |
| | | bloodOxygen?: number; |
| | | |
| | | /** |
| | | * 步数 |
| | | */ |
| | | stepCount?: number; |
| | | |
| | | /** |
| | | * 数据类型 |
| | | */ |
| | | dataType?: string; |
| | | |
| | | /** |
| | | * 创建时间 |
| | | */ |
| | | createTime?: string; |
| | |
| | | * sw62_007估算销售额 |
| | | */ |
| | | estimatedSalesSw62007?: number; |
| | | |
| | | /** |
| | | * 创建时间 |
| | | */ |
| | | createTime?: string; |
| | | |
| | | /** |
| | | * 更新时间 |
| | | */ |
| | | updateTime?: string; |
| | | |
| | | /** |
| | | * 部门名称 |
| | | */ |
| | | departmentName?: string; |
| | | |
| | | /** |
| | | * 任意键值 |
| | | */ |
| | | [key: string]: any; |
| | | } |
| | | |
| | | interface ReportDailySorterEntity { |
| | | /** |
| | | * ID |
| | | */ |
| | | id?: number; |
| | | |
| | | /** |
| | | * 日期 |
| | | */ |
| | | date?: Date; |
| | | |
| | | /** |
| | | * 身份证号 |
| | | */ |
| | | businessId?: string; |
| | | |
| | | /** |
| | | * 姓名 |
| | | */ |
| | | businessName?: string; |
| | | |
| | | /** |
| | | * 所属单位ID |
| | | */ |
| | | departmentId?: BigInt; |
| | | |
| | | /** |
| | | * 所属单位名称 |
| | | */ |
| | | departmentName?: string; |
| | | |
| | | /** |
| | | * 工作站点ID |
| | | */ |
| | | workSiteId?: string; |
| | | |
| | | /** |
| | | * 工作站点名称 |
| | | */ |
| | | workSiteName?: string; |
| | | |
| | | /** |
| | | * 签到时间 |
| | | */ |
| | | checkInTime?: Date; |
| | | |
| | | /** |
| | | * 签退时间 |
| | | */ |
| | | checkOutTime?: Date; |
| | | |
| | | /** |
| | | * 工作时长(小时) |
| | | */ |
| | | workHours?: number; |
| | | |
| | | /** |
| | | * 考勤状态 |
| | | */ |
| | | attendanceStatus?: string; |
| | | |
| | | /** |
| | | * GPS数据点数量 |
| | | */ |
| | | gpsPointCount?: number; |
| | | |
| | | /** |
| | | * 工作轨迹里程(km) |
| | | */ |
| | | totalKm?: number; |
| | | |
| | | /** |
| | | * 移动时长(分钟) |
| | | */ |
| | | minutesMoving?: number; |
| | | |
| | | /** |
| | | * 回收订单数 |
| | | */ |
| | | orderCount?: number; |
| | | |
| | | /** |
| | | * 完成订单数 |
| | | */ |
| | | completedOrderCount?: number; |
| | | |
| | | /** |
| | | * 预约上门订单数 |
| | | */ |
| | | appointmentOrderCount?: number; |
| | | |
| | | /** |
| | | * 发放碳积分 |
| | | */ |
| | | totalCarbonPoint?: number; |
| | | |
| | | /** |
| | | * 健康数据数量 |
| | | */ |
| | | healthDataCount?: number; |
| | | |
| | | /** |
| | | * 健康异常数量 |
| | | */ |
| | | healthAbnormalCount?: number; |
| | | |
| | | /** |
| | | * 健康告警总数 |
| | | */ |
| | | alarmCount?: number; |
| | | |
| | | /** |
| | | * 一般告警次数 |
| | | */ |
| | | generalAlarmCount?: number; |
| | | |
| | | /** |
| | | * 中等告警次数 |
| | | */ |
| | | mediumAlarmCount?: number; |
| | | |
| | | /** |
| | | * 严重告警次数 |
| | | */ |
| | | seriousAlarmCount?: number; |
| | | |
| | | /** |
| | | * 未处理告警次数 |
| | | */ |
| | | unhandledAlarmCount?: number; |
| | | |
| | | /** |
| | | * 创建时间 |
| | |
| | | |
| | | type json = any; |
| | | |
| | | type DictKey = |
| | | | "upgradeType" |
| | | | "complainType" |
| | | | "feedbackType" |
| | | | "ratedpayload" |
| | | | "iottype" |
| | | | "brand" |
| | | | "occupation" |
| | | | "sitetype" |
| | | | "datachanel" |
| | | | "vehicletype" |
| | | | "businesstype" |
| | | | "appointmentslot"; |
| | | |
| | | interface PagePagination { |
| | | size: number; |
| | | page: number; |
| | |
| | | interface ReportDailysitePageResponse { |
| | | pagination: PagePagination; |
| | | list: ReportDailysiteEntity[]; |
| | | } |
| | | |
| | | interface ReportDailysorterPageResponse { |
| | | pagination: PagePagination; |
| | | list: ReportDailySorterEntity[]; |
| | | } |
| | | |
| | | interface ReportDailyvehiclePageResponse { |
| | |
| | | request: Request; |
| | | } |
| | | |
| | | interface ReportDailysorter { |
| | | /** |
| | | * 删除 |
| | | */ |
| | | delete(data?: any): Promise<any>; |
| | | |
| | | /** |
| | | * 修改 |
| | | */ |
| | | update(data?: any): Promise<any>; |
| | | |
| | | /** |
| | | * 单个信息 |
| | | */ |
| | | info(data?: any): Promise<ReportDailySorterEntity>; |
| | | |
| | | /** |
| | | * 列表查询 |
| | | */ |
| | | list(data?: any): Promise<ReportDailySorterEntity[]>; |
| | | |
| | | /** |
| | | * 分页查询 |
| | | */ |
| | | page(data?: any): Promise<ReportDailysorterPageResponse>; |
| | | |
| | | /** |
| | | * 新增 |
| | | */ |
| | | add(data?: any): Promise<any>; |
| | | |
| | | /** |
| | | * 权限标识 |
| | | */ |
| | | permission: { |
| | | delete: string; |
| | | update: string; |
| | | info: string; |
| | | list: string; |
| | | page: string; |
| | | add: string; |
| | | }; |
| | | |
| | | /** |
| | | * 权限状态 |
| | | */ |
| | | _permission: { |
| | | delete: boolean; |
| | | update: boolean; |
| | | info: boolean; |
| | | list: boolean; |
| | | page: boolean; |
| | | add: boolean; |
| | | }; |
| | | |
| | | request: Request; |
| | | } |
| | | |
| | | interface ReportDailyvehicle { |
| | | /** |
| | | * 删除 |
| | |
| | | page: boolean; |
| | | add: boolean; |
| | | }; |
| | | |
| | | request: Request; |
| | | } |
| | | |
| | | interface ReportScreen { |
| | | /** |
| | | * 驾驶舱汇总 |
| | | */ |
| | | query(data?: any): Promise<any>; |
| | | |
| | | /** |
| | | * 权限标识 |
| | | */ |
| | | permission: { query: string }; |
| | | |
| | | /** |
| | | * 权限状态 |
| | | */ |
| | | _permission: { query: boolean }; |
| | | |
| | | request: Request; |
| | | } |
| | |
| | | report: { |
| | | dailydepartment: ReportDailydepartment; |
| | | dailysite: ReportDailysite; |
| | | dailysorter: ReportDailysorter; |
| | | dailyvehicle: ReportDailyvehicle; |
| | | joblog: ReportJoblog; |
| | | screen: ReportScreen; |
| | | }; |
| | | shop: { |
| | | recycleappointment: ShopRecycleappointment; |
| | |
| | | [{"prefix":"/admin/app/complain","name":"AppComplainEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-未处理 1-已处理","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"类型","nullable":false,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"contact","type":"string","length":"","comment":"联系方式","nullable":false,"source":"a.contact"},{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"b.nickName"},{"propertyName":"handlerName","type":"string","length":"","comment":"姓名","nullable":true,"source":"c.name"}]}},{"prefix":"/admin/app/feedback","name":"AppFeedbackEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-未处理 1-已处理","nullable":false,"defaultValue":0,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"contact","type":"string","length":"","comment":"联系方式","nullable":false,"source":"a.contact"},{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"b.nickName"},{"propertyName":"handlerName","type":"string","length":"","comment":"姓名","nullable":true,"source":"c.name"}]}},{"prefix":"/admin/app/goods","name":"AppGoodsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-禁用 1-启用","nullable":false,"defaultValue":1,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"类型 0-天 1-月 2-年 3-永久","nullable":false,"defaultValue":0,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"标题","nullable":false,"source":"a.title"}]}},{"prefix":"/admin/app/version","name":"AppVersionEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-禁用 1-启用","nullable":false,"defaultValue":1,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"类型","nullable":false,"defaultValue":0,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"version","type":"string","length":"","comment":"版本号","nullable":false,"source":"a.version"}]}},{"prefix":"/admin/base/coding","name":"","api":[{"method":"get","path":"/getModuleTree"},{"method":"post","path":"/createCode"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/comm","name":"","api":[{"method":"post","path":"/personUpdate"},{"method":"get","path":"/uploadMode"},{"method":"get","path":"/permmenu"},{"method":"get","path":"/program"},{"method":"get","path":"/person"},{"method":"post","path":"/upload"},{"method":"post","path":"/logout"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/open","name":"","api":[{"method":"get","path":"/refreshToken"},{"method":"get","path":"/captcha"},{"method":"post","path":"/login"},{"method":"get","path":"/html"},{"method":"get","path":"/eps"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/department","name":"BaseSysDepartmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/order"},{"method":"post","path":"/list"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/log","name":"BaseSysLogEntity","api":[{"method":"post","path":"/setKeep"},{"method":"get","path":"/getKeep"},{"method":"post","path":"/clear"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"姓名","nullable":true,"source":"b.name"},{"propertyName":"action","type":"string","length":"","comment":"行为","nullable":false,"source":"a.action"},{"propertyName":"ip","type":"string","length":"","comment":"ip","nullable":true,"source":"a.ip"}]}},{"prefix":"/admin/base/sys/menu","name":"BaseSysMenuEntity","api":[{"method":"post","path":"/create"},{"method":"post","path":"/export"},{"method":"post","path":"/import"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/parse"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/param","name":"BaseSysParamEntity","api":[{"method":"get","path":"/stringbykey"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/html"},{"method":"get","path":"/info"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"dataType","type":"number","length":"","comment":"数据类型 0-字符串 1-富文本 2-文件 ","nullable":false,"defaultValue":0,"source":"a.dataType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"keyName","type":"string","length":"","comment":"键","nullable":false,"source":"a.keyName"}]}},{"prefix":"/admin/base/sys/role","name":"BaseSysRoleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"label","type":"string","length":"50","comment":"角色标签","nullable":true,"source":"a.label"}]}},{"prefix":"/admin/base/sys/user","name":"BaseSysUserEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/move"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/buyer","name":"BasicdataBuyerEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"部门ID","nullable":true,"source":"a.departmentId"},{"propertyName":"name","type":"string","length":"200","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"contact","type":"string","length":"50","comment":"联系人","nullable":true,"source":"a.contact"}],"fieldLike":[{"propertyName":"name","type":"string","length":"200","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"address","type":"string","length":"255","comment":"地址","nullable":true,"source":"a.address"}],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/driver","name":"BasicdataDriverEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"所属单位","nullable":true,"source":"a.departmentId"},{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":0,"dict":["激活","禁用"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessId","type":"string","length":"64","comment":"身份证号","nullable":false,"source":"a.businessId"},{"propertyName":"phone","type":"string","length":"32","comment":"手机号","nullable":true,"source":"a.phone"},{"propertyName":"licenseNo","type":"string","length":"64","comment":"驾驶证号","nullable":true,"source":"a.licenseNo"}]}},{"prefix":"/admin/basicdata/iot","name":"BasicdataIotEntity","api":[{"method":"post","path":"/getYsDevices"},{"method":"post","path":"/getSitelist"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"iotTypeCode","type":"string","length":"","comment":"终端类型","nullable":false,"source":"a.iotTypeCode"},{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":1,"dict":["禁用","启用"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"iotName","type":"string","length":"","comment":"终端名称","nullable":false,"source":"a.iotName"},{"propertyName":"iotCode","type":"string","length":"","comment":"终端编码","nullable":false,"source":"a.iotCode"}]}},{"prefix":"/admin/basicdata/site","name":"BasicdataSiteEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/sorter","name":"BasicdataSorterEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":0,"dict":["在职","离职","禁用"],"source":"a.status"},{"propertyName":"departmentId","type":"bigint","length":"","comment":"所属单位","nullable":true,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessName","type":"string","length":"64","comment":"姓名","nullable":false,"source":"a.businessName"},{"propertyName":"businessId","type":"string","length":"32","comment":"身份证号","nullable":true,"source":"a.businessId"},{"propertyName":"phone","type":"string","length":"32","comment":"手机号","nullable":false,"source":"a.phone"}]}},{"prefix":"/admin/basicdata/vehicle","name":"BasicdataVehicleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"vehicleType","type":"string","length":"","comment":"车型","nullable":false,"defaultValue":"厢式货车","dict":"vehicletype","source":"a.vehicleType"},{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":0,"dict":["启用","禁用"],"source":"a.status"},{"propertyName":"departmentId","type":"bigint","length":"","comment":"所属单位","nullable":true,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessId","type":"string","length":"32","comment":"车牌号","nullable":false,"source":"a.businessId"},{"propertyName":"defaultDriver","type":"bigint","length":"","comment":"默认司机","nullable":true,"source":"a.defaultDriver"}]}},{"prefix":"/admin/basicdata/wastetype","name":"BasicdataWastetypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"isRecyclable","type":"number","length":"","comment":"是否可回收","nullable":false,"defaultValue":0,"dict":["否","是"],"source":"a.isRecyclable"},{"propertyName":"status","type":"number","length":"","comment":"是否启用","nullable":false,"defaultValue":1,"dict":["禁用","启用"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"code","type":"string","length":"","comment":"代码","nullable":false,"source":"a.code"}]}},{"prefix":"/admin/count/home","name":"","api":[{"method":"post","path":"/goodsCategory"},{"method":"post","path":"/orderSummary"},{"method":"post","path":"/userSummary"},{"method":"post","path":"/orderChart"},{"method":"post","path":"/userChart"},{"method":"post","path":"/goodsRank"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/cs/msg","name":"CsMsgEntity","api":[{"method":"get","path":"/unreadCount"},{"method":"post","path":"/read"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/cs/session","name":"CsSessionEntity","api":[{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/demo/goods","name":"DemoGoodsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":1,"dict":["禁用","启用"],"source":"a.status"}],"fieldLike":[{"propertyName":"title","type":"string","length":"50","comment":"标题","nullable":false,"source":"a.title"}],"keyWordLikeFields":[{"propertyName":"description","type":"string","length":"","comment":"描述","nullable":true,"source":"a.description"}]}},{"prefix":"/admin/demo/tenant","name":"DemoGoodsEntity","api":[{"method":"post","path":"/noTenant"},{"method":"post","path":"/noUse"},{"method":"post","path":"/use"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/dict/info","name":"DictInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/types"},{"method":"post","path":"/data"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/dict/type","name":"DictTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/goods/comment","name":"GoodsCommentEntity","api":[{"method":"post","path":"/page"}],"search":{"fieldEq":[{"propertyName":"goodsId","type":"number","length":"","comment":"商品ID","nullable":false,"source":"a.goodsId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"content","type":"string","length":"","comment":"内容","nullable":false,"source":"a.content"},{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"b.nickName"}]}},{"prefix":"/admin/goods/info","name":"GoodsInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-下架 1-上架","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"typeId","type":"number","length":"","comment":"类型ID","nullable":false,"source":"a.typeId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"标题","nullable":false,"source":"a.title"},{"propertyName":"subTitle","type":"string","length":"","comment":"副标题","nullable":true,"source":"a.subTitle"}]}},{"prefix":"/admin/goods/searchKeyword","name":"GoodsSearchKeywordEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"}]}},{"prefix":"/admin/goods/spec","name":"GoodsSpecEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/goods/type","name":"GoodsTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"parentId","type":"number","length":"","comment":"父ID","nullable":true,"source":"a.parentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"}]}},{"prefix":"/admin/info/banner","name":"InfoBannerEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 1:启用 2:禁用","nullable":false,"defaultValue":1,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/market/coupon/info","name":"MarketCouponInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-禁用 1-启用","nullable":false,"defaultValue":0,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"标题","nullable":false,"source":"a.title"}]}},{"prefix":"/admin/market/coupon/user","name":"MarketCouponUserEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-未使用 1-已使用","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"couponId","type":"number","length":"","comment":"优惠券ID","nullable":false,"source":"a.couponId"},{"propertyName":"userId","type":"number","length":"","comment":"用户ID","nullable":false,"source":"a.userId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"b.nickName"}]}},{"prefix":"/admin/monitor/capturetask","name":"PushCaptureTaskEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"抓拍状态","nullable":false,"defaultValue":"PENDING","dict":["PENDING","SUCCESS","FAILED"],"source":"a.status"},{"propertyName":"captureDate","type":"string","length":"","comment":"任务执行日期","nullable":true,"source":"a.captureDate"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"deviceSerial","type":"string","length":"","comment":"设备序列号","nullable":false,"source":"a.deviceSerial"},{"propertyName":"captureTaskId","type":"string","length":"","comment":"抓图任务ID(萤石返回)","nullable":true,"source":"a.captureTaskId"}]}},{"prefix":"/admin/monitor/ys7","name":"","api":[{"method":"post","path":"/getToken"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/operation/traderecord","name":"OperationTradeRecordEntity","api":[{"method":"post","path":"/import"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"transactionType","type":"string","length":"","comment":"交易类型","nullable":true,"source":"a.transactionType"},{"propertyName":"incomeType","type":"string","length":"","comment":"收支类型","nullable":false,"defaultValue":"收入","dict":["收入","支出","其他"],"source":"a.incomeType"},{"propertyName":"payMethod","type":"string","length":"","comment":"支付方式","nullable":true,"source":"a.payMethod"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"goodsName","type":"string","length":"","comment":"商品名称","nullable":true,"source":"a.goodsName"},{"propertyName":"opponent","type":"string","length":"","comment":"交易对方","nullable":true,"source":"a.opponent"}]}},{"prefix":"/admin/operation/wastesale","name":"OperationWastesaleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"部门ID","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/order/info","name":"OrderInfoEntity","api":[{"method":"post","path":"/refundHandle"},{"method":"get","path":"/logistics"},{"method":"post","path":"/deliver"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"}],"search":{"fieldEq":[{"propertyName":"status","type":"tinyint","length":"","comment":"状态 0-待付款 1-待发货 2-待收货 3-待评价 4-交易完成 5-退款中 6-已退款 7-已关闭","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"payType","type":"number","length":"","comment":"支付方式 0-待支付 1-微信 2-支付宝","nullable":false,"defaultValue":0,"source":"a.payType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"标题","nullable":true,"source":"a.title"},{"propertyName":"orderNum","type":"string","length":"","comment":"订单号","nullable":true,"source":"a.orderNum"},{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"b.nickName"}]}},{"prefix":"/admin/plugin/info","name":"PluginInfoEntity","api":[{"method":"post","path":"/install"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/auditlog","name":"PushAuditlogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"客户端ID","nullable":false,"source":"a.deviceNo"},{"propertyName":"pushType","type":"string","length":"","comment":"推送类型","nullable":false,"defaultValue":"weight","dict":["weight","health_gps","vehicle_gps","driver_anomaly","others"],"source":"a.pushType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"errorMessage","type":"text","length":"","comment":"错误返回信息","nullable":true,"source":"a.errorMessage"}]}},{"prefix":"/admin/push/cameragps","name":"PushCameraGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"定位精度","nullable":false,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"sn","type":"string","length":"","comment":"设备序列号","nullable":false,"source":"a.sn"}]}},{"prefix":"/admin/push/devicealarm","name":"PushDevicealarmEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"devSerial","type":"string","length":"","comment":"设备序列号","nullable":false,"source":"a.devSerial"},{"propertyName":"departmentName","type":"string","length":"","comment":"部门名称","nullable":false,"source":"c.name"}]}},{"prefix":"/admin/push/deviceonoff","name":"PushDeviceOnoffEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"deviceId","type":"string","length":"","comment":"设备ID","nullable":false,"source":"a.deviceId"},{"propertyName":"subSerial","type":"string","length":"","comment":"子序列号","nullable":true,"source":"a.subSerial"},{"propertyName":"deviceName","type":"string","length":"","comment":"设备名称","nullable":true,"source":"a.deviceName"}]}},{"prefix":"/admin/push/siteweight","name":"PushSiteweightEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"设备号","nullable":false,"source":"a.deviceNo"},{"propertyName":"siteType","type":"string","length":"","comment":"站点类型","nullable":false,"defaultValue":"收集点","dict":"sitetype","source":"d.siteType"}],"fieldLike":[{"propertyName":"deviceNo","type":"string","length":"","comment":"设备号","nullable":false,"source":"a.deviceNo"}],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sorteralarm","name":"PushSorterAlarmEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"所属单位","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sorterattendance","name":"PushSorterAttendanceEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"所属单位","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sortergps","name":"PushSorterGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"所属单位","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sorterhealth","name":"PushSorterHealthEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"所属单位","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/vehiclegps","name":"PushVehicleGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"定位精度","nullable":false,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"sn","type":"string","length":"","comment":"设备序列号","nullable":false,"source":"a.sn"},{"propertyName":"vehicleNo","type":"string","length":"","comment":"车牌号","nullable":true,"source":"a.vehicleNo"}]}},{"prefix":"/admin/push/weight","name":"PushWeightEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"设备号","nullable":false,"source":"a.deviceNo"},{"propertyName":"garbageType","type":"string","length":"","comment":"垃圾类型","nullable":false,"source":"a.garbageType"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/recycle/data","name":"RecycleDataEntity","api":[{"method":"post","path":"/restore"},{"method":"get","path":"/info"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"userName","type":"string","length":"","comment":"姓名","nullable":true,"source":"b.name"},{"propertyName":"url","type":"string","length":"","comment":"请求的接口","nullable":true,"source":"a.url"}]}},{"prefix":"/admin/report/dailydepartment","name":"ReportDailyDepartmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"日期","nullable":false,"source":"a.date"},{"propertyName":"departmentId","type":"number","length":"","comment":"部门ID","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"departmentName","type":"string","length":"","comment":"部门名称","nullable":false,"source":"a.departmentName"}]}},{"prefix":"/admin/report/dailysite","name":"ReportDailysiteEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"日期","nullable":false,"source":"a.date"},{"propertyName":"siteId","type":"number","length":"","comment":"站点ID","nullable":false,"source":"a.siteId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"siteName","type":"string","length":"","comment":"站点名称","nullable":false,"source":"a.siteName"}]}},{"prefix":"/admin/report/dailyvehicle","name":"ReportDailyVehicleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"日期","nullable":false,"source":"a.date"},{"propertyName":"vehicleNo","type":"string","length":"32","comment":"车牌号","nullable":false,"source":"a.vehicleNo"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"vehicleNo","type":"string","length":"32","comment":"车牌号","nullable":false,"source":"a.vehicleNo"}]}},{"prefix":"/admin/report/joblog","name":"ReportJoblogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"dataDate","type":"date","length":"","comment":"数据目标日期","nullable":false,"source":"a.dataDate"},{"propertyName":"status","type":"enum","length":"","comment":"状态: 未开始, 运行中, 成功, 失败","nullable":false,"defaultValue":"INIT","source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"jobName","type":"string","length":"","comment":"任务类型: SITE_DAILY(站点日汇总), DEPT_DAILY(部门日汇总)","nullable":false,"source":"a.jobName"}]}},{"prefix":"/admin/shop/recycleappointment","name":"RecycleAppointmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"状态","nullable":false,"defaultValue":"未知","dict":["待审核","待接单","已接单","上门中","已完成","已取消","未知"],"source":"a.status"},{"propertyName":"departmentId","type":"number","length":"","comment":"学校ID","nullable":true,"source":"a.departmentId"},{"propertyName":"sorterId","type":"string","length":"","comment":"分拣员ID","nullable":true,"defaultValue":0,"source":"a.sorterId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"appointmentNo","type":"string","length":"","comment":"预约编号","nullable":false,"source":"a.appointmentNo"},{"propertyName":"contactName","type":"string","length":"","comment":"联系人","nullable":false,"source":"a.contactName"},{"propertyName":"contactPhone","type":"string","length":"","comment":"联系电话","nullable":false,"source":"a.contactPhone"}]}},{"prefix":"/admin/shop/recycleappointmentlog","name":"RecycleAppointmentLogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"appointmentId","type":"number","length":"","comment":"预约ID","nullable":false,"source":"a.appointmentId"},{"propertyName":"action","type":"string","length":"","comment":"操作类型","nullable":false,"dict":["创建预约","审核通过","分配人员","接单","到达","开始回收","完成","取消","改期"],"source":"a.action"},{"propertyName":"operatorType","type":"string","length":"","comment":"操作人类型","nullable":false,"source":"a.operatorType"},{"propertyName":"operatorId","type":"number","length":"","comment":"操作人ID","nullable":false,"source":"a.operatorId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/shop/recycleitem","name":"RecycleItemEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"itemId","type":"string","length":"","comment":"分类ID","nullable":false,"source":"a.itemId"},{"propertyName":"category","type":"string","length":"","comment":"废品类别编码","nullable":false,"source":"a.category"},{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":0,"dict":["启用","禁用"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/shop/recycleorder","name":"RecycleOrderEntity","api":[{"method":"post","path":"/saveWithSummary"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"orderType","type":"string","length":"","comment":"订单类型","nullable":false,"defaultValue":"现场","dict":["现场","预约","大屏","活动"],"source":"a.orderType"},{"propertyName":"status","type":"string","length":"","comment":"状态","nullable":false,"defaultValue":"已完成","dict":["待处理","进行中","已完成","已取消"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"orderNo","type":"string","length":"","comment":"订单编号","nullable":false,"source":"a.orderNo"}]}},{"prefix":"/admin/shop/recycleorderitem","name":"RecycleOrderItemEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"orderNo","type":"string","length":"","comment":"订单NO","nullable":false,"source":"a.orderNo"},{"propertyName":"itemId","type":"string","length":"","comment":"垃圾分类ID","nullable":false,"source":"a.itemId"}],"fieldLike":[{"propertyName":"itemName","type":"string","length":"","comment":"垃圾分类名称","nullable":false,"source":"a.itemName"}],"keyWordLikeFields":[]}},{"prefix":"/admin/shop/transaction","name":"RecycleTransactionEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"remark","type":"string","length":"","comment":"备注","nullable":true,"source":"a.remark"}]}},{"prefix":"/admin/space/info","name":"SpaceInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"type","type":"string","length":"","comment":"类型","nullable":false,"source":"a.type"},{"propertyName":"classifyId","type":"number","length":"","comment":"分类ID","nullable":true,"source":"a.classifyId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/space/type","name":"SpaceTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/task/info","name":"TaskInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/start"},{"method":"post","path":"/once"},{"method":"post","path":"/stop"},{"method":"get","path":"/info"},{"method":"post","path":"/page"},{"method":"get","path":"/log"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-停止 1-运行","nullable":false,"defaultValue":1,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"状态 0-系统 1-用户","nullable":false,"defaultValue":0,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/user/address","name":"UserAddressEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/user/info","name":"UserInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":1,"dict":["禁用","正常","已注销"],"source":"a.status"},{"propertyName":"gender","type":"number","length":"","comment":"性别","nullable":false,"defaultValue":0,"dict":["未知","男","女"],"source":"a.gender"},{"propertyName":"loginType","type":"number","length":"","comment":"登录方式","nullable":false,"defaultValue":0,"dict":["小程序","公众号","H5"],"source":"a.loginType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"a.nickName"},{"propertyName":"phone","type":"string","length":"","comment":"手机号","nullable":true,"source":"a.phone"}]}}] |
| | | [{"prefix":"/admin/app/complain","name":"AppComplainEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-未处理 1-已处理","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"类型","nullable":false,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"contact","type":"string","length":"","comment":"联系方式","nullable":false,"source":"a.contact"},{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"b.nickName"},{"propertyName":"handlerName","type":"string","length":"","comment":"姓名","nullable":true,"source":"c.name"}]}},{"prefix":"/admin/app/feedback","name":"AppFeedbackEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-未处理 1-已处理","nullable":false,"defaultValue":0,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"contact","type":"string","length":"","comment":"联系方式","nullable":false,"source":"a.contact"},{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"b.nickName"},{"propertyName":"handlerName","type":"string","length":"","comment":"姓名","nullable":true,"source":"c.name"}]}},{"prefix":"/admin/app/goods","name":"AppGoodsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-禁用 1-启用","nullable":false,"defaultValue":1,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"类型 0-天 1-月 2-年 3-永久","nullable":false,"defaultValue":0,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"标题","nullable":false,"source":"a.title"}]}},{"prefix":"/admin/app/version","name":"AppVersionEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-禁用 1-启用","nullable":false,"defaultValue":1,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"类型","nullable":false,"defaultValue":0,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"version","type":"string","length":"","comment":"版本号","nullable":false,"source":"a.version"}]}},{"prefix":"/admin/base/coding","name":"","api":[{"method":"get","path":"/getModuleTree"},{"method":"post","path":"/createCode"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/comm","name":"","api":[{"method":"post","path":"/personUpdate"},{"method":"get","path":"/uploadMode"},{"method":"get","path":"/permmenu"},{"method":"get","path":"/program"},{"method":"get","path":"/person"},{"method":"post","path":"/upload"},{"method":"post","path":"/logout"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/open","name":"","api":[{"method":"get","path":"/refreshToken"},{"method":"get","path":"/captcha"},{"method":"post","path":"/login"},{"method":"get","path":"/html"},{"method":"get","path":"/eps"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/department","name":"BaseSysDepartmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/order"},{"method":"post","path":"/list"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/log","name":"BaseSysLogEntity","api":[{"method":"post","path":"/setKeep"},{"method":"get","path":"/getKeep"},{"method":"post","path":"/clear"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"姓名","nullable":true,"source":"b.name"},{"propertyName":"action","type":"string","length":"","comment":"行为","nullable":false,"source":"a.action"},{"propertyName":"ip","type":"string","length":"","comment":"ip","nullable":true,"source":"a.ip"}]}},{"prefix":"/admin/base/sys/menu","name":"BaseSysMenuEntity","api":[{"method":"post","path":"/create"},{"method":"post","path":"/export"},{"method":"post","path":"/import"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/parse"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/base/sys/param","name":"BaseSysParamEntity","api":[{"method":"get","path":"/stringbykey"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/html"},{"method":"get","path":"/info"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"dataType","type":"number","length":"","comment":"数据类型 0-字符串 1-富文本 2-文件 ","nullable":false,"defaultValue":0,"source":"a.dataType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"keyName","type":"string","length":"","comment":"键","nullable":false,"source":"a.keyName"}]}},{"prefix":"/admin/base/sys/role","name":"BaseSysRoleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"label","type":"string","length":"50","comment":"角色标签","nullable":true,"source":"a.label"}]}},{"prefix":"/admin/base/sys/user","name":"BaseSysUserEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/move"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/buyer","name":"BasicdataBuyerEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"部门ID","nullable":true,"source":"a.departmentId"},{"propertyName":"name","type":"string","length":"200","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"contact","type":"string","length":"50","comment":"联系人","nullable":true,"source":"a.contact"}],"fieldLike":[{"propertyName":"name","type":"string","length":"200","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"address","type":"string","length":"255","comment":"地址","nullable":true,"source":"a.address"}],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/driver","name":"BasicdataDriverEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"所属单位","nullable":true,"source":"a.departmentId"},{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":0,"dict":["激活","禁用"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessId","type":"string","length":"64","comment":"身份证号","nullable":false,"source":"a.businessId"},{"propertyName":"phone","type":"string","length":"32","comment":"手机号","nullable":true,"source":"a.phone"},{"propertyName":"licenseNo","type":"string","length":"64","comment":"驾驶证号","nullable":true,"source":"a.licenseNo"}]}},{"prefix":"/admin/basicdata/iot","name":"BasicdataIotEntity","api":[{"method":"post","path":"/getYsDevices"},{"method":"post","path":"/getSitelist"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"iotTypeCode","type":"string","length":"","comment":"终端类型","nullable":false,"source":"a.iotTypeCode"},{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":1,"dict":["禁用","启用"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"iotName","type":"string","length":"","comment":"终端名称","nullable":false,"source":"a.iotName"},{"propertyName":"iotCode","type":"string","length":"","comment":"终端编码","nullable":false,"source":"a.iotCode"}]}},{"prefix":"/admin/basicdata/site","name":"BasicdataSiteEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/basicdata/sorter","name":"BasicdataSorterEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":0,"dict":["在职","离职","禁用"],"source":"a.status"},{"propertyName":"departmentId","type":"bigint","length":"","comment":"所属单位","nullable":true,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessName","type":"string","length":"64","comment":"姓名","nullable":false,"source":"a.businessName"},{"propertyName":"businessId","type":"string","length":"32","comment":"身份证号","nullable":true,"source":"a.businessId"},{"propertyName":"phone","type":"string","length":"32","comment":"手机号","nullable":false,"source":"a.phone"}]}},{"prefix":"/admin/basicdata/vehicle","name":"BasicdataVehicleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"vehicleType","type":"string","length":"","comment":"车型","nullable":false,"defaultValue":"厢式货车","dict":"vehicletype","source":"a.vehicleType"},{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":0,"dict":["启用","禁用"],"source":"a.status"},{"propertyName":"departmentId","type":"bigint","length":"","comment":"所属单位","nullable":true,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessId","type":"string","length":"32","comment":"车牌号","nullable":false,"source":"a.businessId"},{"propertyName":"defaultDriver","type":"bigint","length":"","comment":"默认司机","nullable":true,"source":"a.defaultDriver"}]}},{"prefix":"/admin/basicdata/wastetype","name":"BasicdataWastetypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"isRecyclable","type":"number","length":"","comment":"是否可回收","nullable":false,"defaultValue":0,"dict":["否","是"],"source":"a.isRecyclable"},{"propertyName":"status","type":"number","length":"","comment":"是否启用","nullable":false,"defaultValue":1,"dict":["禁用","启用"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"},{"propertyName":"code","type":"string","length":"","comment":"代码","nullable":false,"source":"a.code"}]}},{"prefix":"/admin/count/home","name":"","api":[{"method":"post","path":"/goodsCategory"},{"method":"post","path":"/orderSummary"},{"method":"post","path":"/userSummary"},{"method":"post","path":"/orderChart"},{"method":"post","path":"/userChart"},{"method":"post","path":"/goodsRank"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/cs/msg","name":"CsMsgEntity","api":[{"method":"get","path":"/unreadCount"},{"method":"post","path":"/read"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/cs/session","name":"CsSessionEntity","api":[{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/demo/goods","name":"DemoGoodsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":1,"dict":["禁用","启用"],"source":"a.status"}],"fieldLike":[{"propertyName":"title","type":"string","length":"50","comment":"标题","nullable":false,"source":"a.title"}],"keyWordLikeFields":[{"propertyName":"description","type":"string","length":"","comment":"描述","nullable":true,"source":"a.description"}]}},{"prefix":"/admin/demo/tenant","name":"DemoGoodsEntity","api":[{"method":"post","path":"/noTenant"},{"method":"post","path":"/noUse"},{"method":"post","path":"/use"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/dict/info","name":"DictInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/types"},{"method":"post","path":"/data"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/dict/type","name":"DictTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/goods/comment","name":"GoodsCommentEntity","api":[{"method":"post","path":"/page"}],"search":{"fieldEq":[{"propertyName":"goodsId","type":"number","length":"","comment":"商品ID","nullable":false,"source":"a.goodsId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"content","type":"string","length":"","comment":"内容","nullable":false,"source":"a.content"},{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"b.nickName"}]}},{"prefix":"/admin/goods/info","name":"GoodsInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-下架 1-上架","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"typeId","type":"number","length":"","comment":"类型ID","nullable":false,"source":"a.typeId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"标题","nullable":false,"source":"a.title"},{"propertyName":"subTitle","type":"string","length":"","comment":"副标题","nullable":true,"source":"a.subTitle"}]}},{"prefix":"/admin/goods/searchKeyword","name":"GoodsSearchKeywordEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"}]}},{"prefix":"/admin/goods/spec","name":"GoodsSpecEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/goods/type","name":"GoodsTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"parentId","type":"number","length":"","comment":"父ID","nullable":true,"source":"a.parentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"name","type":"string","length":"","comment":"名称","nullable":false,"source":"a.name"}]}},{"prefix":"/admin/info/banner","name":"InfoBannerEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 1:启用 2:禁用","nullable":false,"defaultValue":1,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/market/coupon/info","name":"MarketCouponInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-禁用 1-启用","nullable":false,"defaultValue":0,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"标题","nullable":false,"source":"a.title"}]}},{"prefix":"/admin/market/coupon/user","name":"MarketCouponUserEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-未使用 1-已使用","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"couponId","type":"number","length":"","comment":"优惠券ID","nullable":false,"source":"a.couponId"},{"propertyName":"userId","type":"string","length":"","comment":"用户ID","nullable":false,"source":"a.userId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"b.nickName"}]}},{"prefix":"/admin/monitor/capturetask","name":"PushCaptureTaskEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"抓拍状态","nullable":false,"defaultValue":"PENDING","dict":["PENDING","SUCCESS","FAILED"],"source":"a.status"},{"propertyName":"captureDate","type":"string","length":"","comment":"任务执行日期","nullable":true,"source":"a.captureDate"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"deviceSerial","type":"string","length":"","comment":"设备序列号","nullable":false,"source":"a.deviceSerial"},{"propertyName":"captureTaskId","type":"string","length":"","comment":"抓图任务ID(萤石返回)","nullable":true,"source":"a.captureTaskId"}]}},{"prefix":"/admin/monitor/ys7","name":"","api":[{"method":"post","path":"/getToken"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/operation/traderecord","name":"OperationTradeRecordEntity","api":[{"method":"post","path":"/import"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"transactionType","type":"string","length":"","comment":"交易类型","nullable":true,"source":"a.transactionType"},{"propertyName":"incomeType","type":"string","length":"","comment":"收支类型","nullable":false,"defaultValue":"收入","dict":["收入","支出","其他"],"source":"a.incomeType"},{"propertyName":"payMethod","type":"string","length":"","comment":"支付方式","nullable":true,"source":"a.payMethod"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"goodsName","type":"string","length":"","comment":"商品名称","nullable":true,"source":"a.goodsName"},{"propertyName":"opponent","type":"string","length":"","comment":"交易对方","nullable":true,"source":"a.opponent"}]}},{"prefix":"/admin/operation/wastesale","name":"OperationWastesaleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"bigint","length":"","comment":"部门ID","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/order/info","name":"OrderInfoEntity","api":[{"method":"post","path":"/refundHandle"},{"method":"get","path":"/logistics"},{"method":"post","path":"/deliver"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"}],"search":{"fieldEq":[{"propertyName":"status","type":"tinyint","length":"","comment":"状态 0-待付款 1-待发货 2-待收货 3-待评价 4-交易完成 5-退款中 6-已退款 7-已关闭","nullable":false,"defaultValue":0,"source":"a.status"},{"propertyName":"payType","type":"number","length":"","comment":"支付方式 0-待支付 1-微信 2-支付宝 3-碳积分","nullable":false,"defaultValue":0,"source":"a.payType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"title","type":"string","length":"","comment":"标题","nullable":true,"source":"a.title"},{"propertyName":"orderNum","type":"string","length":"","comment":"订单号","nullable":true,"source":"a.orderNum"},{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"b.nickName"}]}},{"prefix":"/admin/plugin/info","name":"PluginInfoEntity","api":[{"method":"post","path":"/install"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/auditlog","name":"PushAuditlogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"客户端ID","nullable":false,"source":"a.deviceNo"},{"propertyName":"pushType","type":"string","length":"","comment":"推送类型","nullable":false,"defaultValue":"weight","dict":["weight","health_gps","vehicle_gps","driver_anomaly","others"],"source":"a.pushType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"errorMessage","type":"text","length":"","comment":"错误返回信息","nullable":true,"source":"a.errorMessage"}]}},{"prefix":"/admin/push/cameragps","name":"PushCameraGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"定位精度","nullable":false,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"sn","type":"string","length":"","comment":"设备序列号","nullable":false,"source":"a.sn"}]}},{"prefix":"/admin/push/devicealarm","name":"PushDevicealarmEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"devSerial","type":"string","length":"","comment":"设备序列号","nullable":false,"source":"a.devSerial"},{"propertyName":"departmentName","type":"string","length":"","comment":"部门名称","nullable":false,"source":"c.name"}]}},{"prefix":"/admin/push/deviceonoff","name":"PushDeviceOnoffEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"deviceId","type":"string","length":"","comment":"设备ID","nullable":false,"source":"a.deviceId"},{"propertyName":"subSerial","type":"string","length":"","comment":"子序列号","nullable":true,"source":"a.subSerial"},{"propertyName":"deviceName","type":"string","length":"","comment":"设备名称","nullable":true,"source":"a.deviceName"}]}},{"prefix":"/admin/push/siteweight","name":"PushSiteweightEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"设备号","nullable":false,"source":"a.deviceNo"},{"propertyName":"siteType","type":"string","length":"","comment":"站点类型","nullable":false,"defaultValue":"收集点","dict":"sitetype","source":"d.siteType"}],"fieldLike":[{"propertyName":"deviceNo","type":"string","length":"","comment":"设备号","nullable":false,"source":"a.deviceNo"}],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sorteralarm","name":"PushSorterAlarmEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"所属单位","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sorterattendance","name":"PushSorterAttendanceEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"所属单位","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sortergps","name":"PushSorterGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"所属单位","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/sorterhealth","name":"PushSorterHealthEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"departmentId","type":"number","length":"","comment":"所属单位","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/push/vehiclegps","name":"PushVehicleGpsEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"定位精度","nullable":false,"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"sn","type":"string","length":"","comment":"设备序列号","nullable":false,"source":"a.sn"},{"propertyName":"vehicleNo","type":"string","length":"","comment":"车牌号","nullable":true,"source":"a.vehicleNo"}]}},{"prefix":"/admin/push/weight","name":"PushWeightEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"deviceNo","type":"string","length":"","comment":"设备号","nullable":false,"source":"a.deviceNo"},{"propertyName":"garbageType","type":"string","length":"","comment":"垃圾类型","nullable":false,"source":"a.garbageType"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/recycle/data","name":"RecycleDataEntity","api":[{"method":"post","path":"/restore"},{"method":"get","path":"/info"},{"method":"post","path":"/page"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"userName","type":"string","length":"","comment":"姓名","nullable":true,"source":"b.name"},{"propertyName":"url","type":"string","length":"","comment":"请求的接口","nullable":true,"source":"a.url"}]}},{"prefix":"/admin/report/dailydepartment","name":"ReportDailyDepartmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"日期","nullable":false,"source":"a.date"},{"propertyName":"departmentId","type":"number","length":"","comment":"部门ID","nullable":false,"source":"a.departmentId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"departmentName","type":"string","length":"","comment":"部门名称","nullable":false,"source":"a.departmentName"}]}},{"prefix":"/admin/report/dailysite","name":"ReportDailysiteEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"日期","nullable":false,"source":"a.date"},{"propertyName":"siteId","type":"number","length":"","comment":"站点ID","nullable":false,"source":"a.siteId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"siteName","type":"string","length":"","comment":"站点名称","nullable":false,"source":"a.siteName"}]}},{"prefix":"/admin/report/dailysorter","name":"ReportDailySorterEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"日期","nullable":false,"source":"a.date"},{"propertyName":"businessId","type":"string","length":"32","comment":"身份证号","nullable":false,"source":"a.businessId"},{"propertyName":"attendanceStatus","type":"string","length":"","comment":"考勤状态","nullable":false,"defaultValue":"缺卡","dict":["正常","迟到","早退","缺卡","旷工"],"source":"a.attendanceStatus"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"businessName","type":"string","length":"64","comment":"姓名","nullable":true,"source":"a.businessName"},{"propertyName":"businessId","type":"string","length":"32","comment":"身份证号","nullable":false,"source":"a.businessId"}]}},{"prefix":"/admin/report/dailyvehicle","name":"ReportDailyVehicleEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"date","type":"date","length":"","comment":"日期","nullable":false,"source":"a.date"},{"propertyName":"vehicleNo","type":"string","length":"32","comment":"车牌号","nullable":false,"source":"a.vehicleNo"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"vehicleNo","type":"string","length":"32","comment":"车牌号","nullable":false,"source":"a.vehicleNo"}]}},{"prefix":"/admin/report/joblog","name":"ReportJoblogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"dataDate","type":"date","length":"","comment":"数据目标日期","nullable":false,"source":"a.dataDate"},{"propertyName":"status","type":"enum","length":"","comment":"状态: 未开始, 运行中, 成功, 失败","nullable":false,"defaultValue":"INIT","source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"jobName","type":"string","length":"","comment":"任务类型: SITE_DAILY(站点日汇总), DEPT_DAILY(部门日汇总)","nullable":false,"source":"a.jobName"}]}},{"prefix":"/admin/report/screen","name":"","api":[{"method":"post","path":"/query"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/shop/recycleappointment","name":"RecycleAppointmentEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"string","length":"","comment":"状态","nullable":false,"defaultValue":"新增","dict":["新增","待审核","待接单","已确认","已接单","上门中","已完成","已取消","未知"],"source":"a.status"},{"propertyName":"departmentId","type":"number","length":"","comment":"学校ID","nullable":true,"source":"a.departmentId"},{"propertyName":"sorterId","type":"string","length":"","comment":"分拣员ID","nullable":true,"defaultValue":0,"source":"a.sorterId"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"appointmentNo","type":"string","length":"","comment":"预约编号","nullable":false,"source":"a.appointmentNo"},{"propertyName":"contactName","type":"string","length":"","comment":"联系人","nullable":false,"source":"a.contactName"},{"propertyName":"contactPhone","type":"string","length":"","comment":"联系电话","nullable":false,"source":"a.contactPhone"}]}},{"prefix":"/admin/shop/recycleappointmentlog","name":"RecycleAppointmentLogEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"appointmentId","type":"number","length":"","comment":"预约ID","nullable":false,"source":"a.appointmentId"},{"propertyName":"action","type":"string","length":"","comment":"操作类型","nullable":false,"dict":["创建预约","审核通过","分配人员","确认","接单","到达","开始回收","完成","取消","改期"],"source":"a.action"},{"propertyName":"operatorType","type":"string","length":"","comment":"操作人类型","nullable":false,"source":"a.operatorType"},{"propertyName":"operatorId","type":"number","length":"","comment":"操作人ID","nullable":false,"source":"a.operatorId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/shop/recycleitem","name":"RecycleItemEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"itemId","type":"string","length":"","comment":"分类ID","nullable":false,"source":"a.itemId"},{"propertyName":"category","type":"string","length":"","comment":"废品类别编码","nullable":false,"source":"a.category"},{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":0,"dict":["启用","禁用"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/shop/recycleorder","name":"RecycleOrderEntity","api":[{"method":"post","path":"/saveWithSummary"},{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"orderType","type":"string","length":"","comment":"订单类型","nullable":false,"defaultValue":"现场","dict":["现场","预约","大屏","活动","打卡"],"source":"a.orderType"},{"propertyName":"status","type":"string","length":"","comment":"状态","nullable":false,"defaultValue":"已完成","dict":["待处理","进行中","已完成","已取消"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"orderNo","type":"string","length":"","comment":"订单编号","nullable":false,"source":"a.orderNo"}]}},{"prefix":"/admin/shop/recycleorderitem","name":"RecycleOrderItemEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"orderNo","type":"string","length":"","comment":"订单NO","nullable":false,"source":"a.orderNo"},{"propertyName":"itemId","type":"string","length":"","comment":"垃圾分类ID","nullable":false,"source":"a.itemId"}],"fieldLike":[{"propertyName":"itemName","type":"string","length":"","comment":"垃圾分类名称","nullable":false,"source":"a.itemName"}],"keyWordLikeFields":[]}},{"prefix":"/admin/shop/transaction","name":"RecycleTransactionEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"remark","type":"string","length":"","comment":"备注","nullable":true,"source":"a.remark"}]}},{"prefix":"/admin/space/info","name":"SpaceInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"type","type":"string","length":"","comment":"类型","nullable":false,"source":"a.type"},{"propertyName":"classifyId","type":"number","length":"","comment":"分类ID","nullable":true,"source":"a.classifyId"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/space/type","name":"SpaceTypeEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/task/info","name":"TaskInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"post","path":"/start"},{"method":"post","path":"/once"},{"method":"post","path":"/stop"},{"method":"get","path":"/info"},{"method":"post","path":"/page"},{"method":"get","path":"/log"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态 0-停止 1-运行","nullable":false,"defaultValue":1,"source":"a.status"},{"propertyName":"type","type":"number","length":"","comment":"状态 0-系统 1-用户","nullable":false,"defaultValue":0,"source":"a.type"}],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/user/address","name":"UserAddressEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[],"fieldLike":[],"keyWordLikeFields":[]}},{"prefix":"/admin/user/info","name":"UserInfoEntity","api":[{"method":"post","path":"/delete"},{"method":"post","path":"/update"},{"method":"get","path":"/info"},{"method":"post","path":"/list"},{"method":"post","path":"/page"},{"method":"post","path":"/add"}],"search":{"fieldEq":[{"propertyName":"status","type":"number","length":"","comment":"状态","nullable":false,"defaultValue":1,"dict":["禁用","正常","已注销"],"source":"a.status"},{"propertyName":"gender","type":"number","length":"","comment":"性别","nullable":false,"defaultValue":0,"dict":["未知","男","女"],"source":"a.gender"},{"propertyName":"loginType","type":"number","length":"","comment":"登录方式","nullable":false,"defaultValue":0,"dict":["小程序","公众号","H5"],"source":"a.loginType"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"nickName","type":"string","length":"","comment":"昵称","nullable":true,"source":"a.nickName"},{"propertyName":"phone","type":"string","length":"","comment":"手机号","nullable":true,"source":"a.phone"}]}}] |
| New file |
| | |
| | | <template> |
| | | <div class="kpi-card" :class="{ 'is-alert': alert }"> |
| | | <div class="kpi-card__label">{{ label }}</div> |
| | | <div class="kpi-card__value"> |
| | | <cl-number :value="numeric" :fixed="fixed" type="amount" :suffix="suffix" /> |
| | | </div> |
| | | <div v-if="hint" class="kpi-card__hint">{{ hint }}</div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { computed } from 'vue'; |
| | | |
| | | const props = defineProps<{ |
| | | label: string; |
| | | value: number | string; |
| | | suffix?: string; |
| | | fixed?: number; |
| | | hint?: string; |
| | | alert?: boolean; |
| | | }>(); |
| | | |
| | | const numeric = computed(() => Number(props.value) || 0); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .kpi-card { |
| | | padding: 14px 16px; |
| | | border-radius: 12px; |
| | | border: 1px solid var(--el-border-color-extra-light); |
| | | background: var(--el-bg-color); |
| | | color: var(--el-text-color-primary); |
| | | min-height: 96px; |
| | | |
| | | &__label { |
| | | font-size: 13px; |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | |
| | | &__value { |
| | | margin-top: 8px; |
| | | font-size: 26px; |
| | | font-weight: 700; |
| | | line-height: 1.2; |
| | | color: var(--el-text-color-primary); |
| | | |
| | | :deep(.cl-number__suffix) { |
| | | margin-left: 4px; |
| | | font-size: 13px; |
| | | font-weight: 500; |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | } |
| | | |
| | | &__hint { |
| | | margin-top: 8px; |
| | | font-size: 12px; |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | |
| | | &.is-alert { |
| | | border-color: var(--el-color-danger-light-5); |
| | | background: var(--el-color-danger-light-9); |
| | | |
| | | .kpi-card__value { |
| | | color: var(--el-color-danger); |
| | | } |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div class="panel-card"> |
| | | <div class="panel-card__header"> |
| | | <div class="panel-card__title"> |
| | | <span>{{ title }}</span> |
| | | <span v-if="sub" class="panel-card__sub">{{ sub }}</span> |
| | | </div> |
| | | <div class="panel-card__extra"> |
| | | <slot name="extra" /> |
| | | </div> |
| | | </div> |
| | | <div class="panel-card__body"> |
| | | <slot /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineProps<{ |
| | | title: string; |
| | | sub?: string; |
| | | }>(); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .panel-card { |
| | | display: flex; |
| | | flex-direction: column; |
| | | height: 100%; |
| | | min-height: 280px; |
| | | border-radius: 12px; |
| | | border: 1px solid var(--el-border-color-extra-light); |
| | | background: var(--el-bg-color); |
| | | color: var(--el-text-color-primary); |
| | | |
| | | &__header { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | gap: 12px; |
| | | padding: 12px 16px 0; |
| | | min-height: 48px; |
| | | } |
| | | |
| | | &__title { |
| | | display: flex; |
| | | align-items: baseline; |
| | | gap: 8px; |
| | | font-size: 15px; |
| | | font-weight: 600; |
| | | color: var(--el-text-color-primary); |
| | | |
| | | > span:first-child { |
| | | color: var(--el-text-color-primary); |
| | | } |
| | | } |
| | | |
| | | &__sub { |
| | | font-size: 12px; |
| | | font-weight: 400; |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | |
| | | &__body { |
| | | flex: 1; |
| | | min-height: 0; |
| | | padding: 8px 8px 12px; |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div ref="rootRef" class="green-screen" :class="{ 'is-fullscreen': isFullscreen }"> |
| | | <header class="green-screen__header"> |
| | | <div class="brand"> |
| | | <div class="brand__mark" /> |
| | | <div> |
| | | <div class="brand__title">校园绿色运营驾驶舱</div> |
| | | <div class="brand__sub">{{ current?.audience }}视角 · {{ current?.label }}</div> |
| | | </div> |
| | | </div> |
| | | |
| | | <nav class="nav"> |
| | | <button |
| | | v-for="item in SCREEN_NAV" |
| | | :key="item.key" |
| | | class="nav__item" |
| | | :class="{ 'is-active': item.key === currentKey }" |
| | | type="button" |
| | | @click="go(item.path)" |
| | | > |
| | | <span class="nav__index">{{ item.index }}</span> |
| | | <span>{{ item.label }}</span> |
| | | </button> |
| | | </nav> |
| | | |
| | | <div class="tools"> |
| | | <el-tag v-if="loadError" type="danger" effect="plain" size="small">{{ loadError }}</el-tag> |
| | | <el-tag v-else-if="unavailable.length" type="warning" effect="plain" size="small"> |
| | | 部分指标待补数 |
| | | </el-tag> |
| | | <el-tag v-else type="success" effect="plain" size="small">实时数据</el-tag> |
| | | <cl-select-button v-model="timeRange" :options="TIME_RANGE_OPTIONS" small /> |
| | | <el-button :icon="Refresh" circle :loading="loading" @click="reload" /> |
| | | <el-button :icon="isFullscreen ? Close : FullScreen" circle @click="toggleFullscreen" /> |
| | | </div> |
| | | </header> |
| | | |
| | | <section v-loading="loading" class="green-screen__body"> |
| | | <slot /> |
| | | <el-collapse v-if="unavailable.length" class="missing"> |
| | | <el-collapse-item title="当前拿不到或口径待确认的指标" name="1"> |
| | | <ul> |
| | | <li v-for="item in unavailable" :key="item">{{ item }}</li> |
| | | </ul> |
| | | </el-collapse-item> |
| | | </el-collapse> |
| | | </section> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | import { computed, onMounted, onUnmounted, ref } from 'vue'; |
| | | import { useRoute, useRouter } from 'vue-router'; |
| | | import { Close, FullScreen, Refresh } from '@element-plus/icons-vue'; |
| | | import { SCREEN_NAV, TIME_RANGE_OPTIONS, type ScreenKey } from '../data/screen'; |
| | | import { provideScreenTime, useScreenData } from '../hooks/use-screen'; |
| | | |
| | | const route = useRoute(); |
| | | const router = useRouter(); |
| | | const timeRange = provideScreenTime(); |
| | | const { data, loading, loadError, reload } = useScreenData(); |
| | | const rootRef = ref<HTMLElement>(); |
| | | const isFullscreen = ref(false); |
| | | |
| | | const unavailable = computed(() => data.value.unavailable || []); |
| | | |
| | | const currentKey = computed<ScreenKey>(() => { |
| | | const page = String(route.params.page || 'overview') as ScreenKey; |
| | | return SCREEN_NAV.some(e => e.key === page) ? page : 'overview'; |
| | | }); |
| | | |
| | | const current = computed(() => SCREEN_NAV.find(e => e.key === currentKey.value)); |
| | | |
| | | function go(path: string) { |
| | | if (path !== route.path) router.push(path); |
| | | } |
| | | |
| | | function syncFullscreen() { |
| | | isFullscreen.value = document.fullscreenElement === rootRef.value; |
| | | } |
| | | |
| | | async function toggleFullscreen() { |
| | | const el = rootRef.value; |
| | | if (!el) return; |
| | | |
| | | if (document.fullscreenElement === el) { |
| | | await document.exitFullscreen(); |
| | | } else if (document.fullscreenElement) { |
| | | await document.exitFullscreen(); |
| | | await el.requestFullscreen(); |
| | | } else { |
| | | await el.requestFullscreen(); |
| | | } |
| | | } |
| | | |
| | | onMounted(() => { |
| | | document.addEventListener('fullscreenchange', syncFullscreen); |
| | | }); |
| | | |
| | | onUnmounted(() => { |
| | | document.removeEventListener('fullscreenchange', syncFullscreen); |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .green-screen { |
| | | display: flex; |
| | | flex-direction: column; |
| | | height: 100%; |
| | | min-height: calc(100vh - 118px); |
| | | background: linear-gradient(180deg, var(--el-bg-color-page) 0%, var(--el-fill-color-lighter) 100%); |
| | | color: var(--el-text-color-primary); |
| | | |
| | | &.is-fullscreen { |
| | | padding: 12px; |
| | | min-height: 100vh; |
| | | background: #07111f; |
| | | |
| | | .green-screen__header, |
| | | .brand__title { |
| | | color: #e5e7eb; |
| | | } |
| | | |
| | | .brand__sub { |
| | | color: #94a3b8; |
| | | } |
| | | } |
| | | |
| | | &__header { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 16px; |
| | | padding: 8px 4px 12px; |
| | | flex-shrink: 0; |
| | | } |
| | | |
| | | &__body { |
| | | flex: 1; |
| | | min-height: 0; |
| | | overflow: auto; |
| | | padding-bottom: 8px; |
| | | } |
| | | } |
| | | |
| | | .brand { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 10px; |
| | | min-width: 220px; |
| | | |
| | | &__mark { |
| | | width: 12px; |
| | | height: 36px; |
| | | border-radius: 6px; |
| | | background: linear-gradient(180deg, #22c55e, #16a34a); |
| | | } |
| | | |
| | | &__title { |
| | | font-size: 18px; |
| | | font-weight: 700; |
| | | letter-spacing: 0.5px; |
| | | line-height: 1.2; |
| | | } |
| | | |
| | | &__sub { |
| | | margin-top: 2px; |
| | | font-size: 12px; |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | } |
| | | |
| | | .nav { |
| | | display: flex; |
| | | flex: 1; |
| | | gap: 8px; |
| | | overflow-x: auto; |
| | | |
| | | &__item { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 6px; |
| | | height: 36px; |
| | | padding: 0 12px; |
| | | border: 1px solid var(--el-border-color-extra-light); |
| | | border-radius: 999px; |
| | | background: var(--el-bg-color); |
| | | color: var(--el-text-color-regular); |
| | | white-space: nowrap; |
| | | cursor: pointer; |
| | | transition: all 0.2s ease; |
| | | |
| | | &:hover, |
| | | &.is-active { |
| | | border-color: var(--el-color-primary-light-5); |
| | | color: var(--el-color-primary); |
| | | background: var(--el-color-primary-light-9); |
| | | } |
| | | } |
| | | |
| | | &__index { |
| | | font-size: 11px; |
| | | font-weight: 700; |
| | | opacity: 0.7; |
| | | } |
| | | } |
| | | |
| | | .tools { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 10px; |
| | | flex-shrink: 0; |
| | | } |
| | | |
| | | .missing { |
| | | margin: 8px 0 0; |
| | | border: none; |
| | | |
| | | ul { |
| | | margin: 0; |
| | | padding-left: 18px; |
| | | line-height: 1.8; |
| | | color: var(--el-text-color-regular); |
| | | font-size: 13px; |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | import { type ModuleConfig } from '/@/cool'; |
| | | |
| | | export default (): ModuleConfig => { |
| | | return { |
| | | label: '绿色校园驾驶舱', |
| | | description: '学校管理层与运营公司视角的绿色运营大屏', |
| | | order: 10, |
| | | views: [ |
| | | { |
| | | path: '/report/screen/:page?', |
| | | name: 'report-screen', |
| | | meta: { |
| | | label: '绿色校园驾驶舱', |
| | | keepAlive: true |
| | | }, |
| | | component: () => import('./views/screen/index.vue') |
| | | } |
| | | ] |
| | | }; |
| | | }; |
| New file |
| | |
| | | export type TimeRange = 'today' | 'week' | 'month' | 'quarter' | 'year'; |
| | | export type ScreenKey = 'overview' | 'resource' | 'carbon' | 'participation' | 'operation'; |
| | | export type RankMetric = 'weight' | 'people' | 'pointPerCapita' | 'weightPerCapita' | 'carbon'; |
| | | |
| | | export const SCREEN_NAV: { key: ScreenKey; path: string; index: string; label: string; audience: string }[] = [ |
| | | { key: 'overview', path: '/report/screen/overview', index: '01', label: '绿色校园总览', audience: '校领导' }, |
| | | { key: 'resource', path: '/report/screen/resource', index: '02', label: '垃圾资源化分析', audience: '后勤 / 环保' }, |
| | | { key: 'carbon', path: '/report/screen/carbon', index: '03', label: '碳减排与绿色贡献', audience: '双碳 / ESG' }, |
| | | { key: 'participation', path: '/report/screen/participation', index: '04', label: '师生参与与碳积分', audience: '学工 / 团委' }, |
| | | { key: 'operation', path: '/report/screen/operation', index: '05', label: '回收运营监控', audience: '运营公司' } |
| | | ]; |
| | | |
| | | export const TIME_RANGE_OPTIONS: { label: string; value: TimeRange }[] = [ |
| | | { label: '今日', value: 'today' }, |
| | | { label: '本周', value: 'week' }, |
| | | { label: '本月', value: 'month' }, |
| | | { label: '本季度', value: 'quarter' }, |
| | | { label: '本年度', value: 'year' } |
| | | ]; |
| | | |
| | | export interface ScreenData { |
| | | range: TimeRange | string; |
| | | axis: string[]; |
| | | kpis: Record<string, number>; |
| | | wasteMix: { name: string; code?: string; weight: number; value: number; count: number; color: string }[]; |
| | | recycleItems: { name: string; weight: number; value: number; carbon: number; color: string }[]; |
| | | trend: { weight: number[]; value: number[]; carbon: number[] }; |
| | | yearCarbon: number[]; |
| | | deptRank: any[]; |
| | | classRank: any[]; |
| | | majorRank: any[]; |
| | | pointFlow: { issued: number; transfer: number; donate: number; mall: number; balance: number }; |
| | | participateTrend: number[]; |
| | | deliverTrend: number[]; |
| | | ordersByType: { axis: string[]; 现场回收: number[]; 预约上门: number[]; 大屏投递: number[]; 活动回收: number[] }; |
| | | appointmentFlow: { name: string; value: number }[]; |
| | | sorterStatus: { name: string; value: number; color: string }[]; |
| | | vehicles: { no: string; km: number; idle: number; overspeed: number; status: string }[]; |
| | | sites: { name: string; weight: number; online: boolean }[]; |
| | | unavailable?: string[]; |
| | | } |
| | | |
| | | export function emptyScreen(range: TimeRange = 'month'): ScreenData { |
| | | return { |
| | | range, |
| | | axis: [], |
| | | kpis: { |
| | | todayWeightKg: 0, |
| | | periodWeightTon: 0, |
| | | resourceRate: 0, |
| | | periodValue: 0, |
| | | periodCarbonTon: 0, |
| | | totalWeightTon: 0, |
| | | totalParticipants: 0, |
| | | totalPoints: 0, |
| | | recyclableTon: 0, |
| | | bulkTon: 0, |
| | | elecTon: 0, |
| | | fabricTon: 0, |
| | | yearCarbonTon: 0, |
| | | monthCarbonTon: 0, |
| | | totalCarbonTon: 0, |
| | | greenActions: 0, |
| | | newParticipants: 0, |
| | | participateRate: 0, |
| | | pointsIssued: 0, |
| | | pointsConsumed: 0, |
| | | pointsBalance: 0, |
| | | sorterOnline: 0, |
| | | sorterTotal: 0, |
| | | vehicleOnline: 0, |
| | | vehicleTotal: 0, |
| | | siteOnline: 0, |
| | | siteTotal: 0, |
| | | todayOrders: 0, |
| | | todayAppointments: 0, |
| | | pendingAppointments: 0, |
| | | alerts: 0, |
| | | healthAlerts: 0 |
| | | }, |
| | | wasteMix: [], |
| | | recycleItems: [], |
| | | trend: { weight: [], value: [], carbon: [] }, |
| | | yearCarbon: Array.from({ length: 12 }, () => 0), |
| | | deptRank: [], |
| | | classRank: [], |
| | | majorRank: [], |
| | | pointFlow: { issued: 0, transfer: 0, donate: 0, mall: 0, balance: 0 }, |
| | | participateTrend: [], |
| | | deliverTrend: [], |
| | | ordersByType: { axis: [], 现场回收: [], 预约上门: [], 大屏投递: [], 活动回收: [] }, |
| | | appointmentFlow: [ |
| | | { name: '预约', value: 0 }, |
| | | { name: '接单', value: 0 }, |
| | | { name: '完成', value: 0 } |
| | | ], |
| | | sorterStatus: [ |
| | | { name: '工作中', value: 0, color: '#22c55e' }, |
| | | { name: '休息', value: 0, color: '#f59e0b' }, |
| | | { name: '异常', value: 0, color: '#ef4444' }, |
| | | { name: '离线', value: 0, color: '#94a3b8' } |
| | | ], |
| | | vehicles: [], |
| | | sites: [], |
| | | unavailable: [] |
| | | }; |
| | | } |
| New file |
| | |
| | | import { computed, ref, watch } from 'vue'; |
| | | import { useDark } from '@vueuse/core'; |
| | | import { useTheme } from '/#/theme'; |
| | | import { useCool } from '/@/cool'; |
| | | import { emptyScreen, type ScreenData, type TimeRange } from '../data/screen'; |
| | | |
| | | const sharedTimeRange = ref<TimeRange>('month'); |
| | | const screenData = ref<ScreenData>(emptyScreen()); |
| | | const loading = ref(false); |
| | | const loadError = ref(''); |
| | | |
| | | export function provideScreenTime() { |
| | | return sharedTimeRange; |
| | | } |
| | | |
| | | export function useScreenTime() { |
| | | return sharedTimeRange; |
| | | } |
| | | |
| | | export function useScreenData() { |
| | | return { |
| | | timeRange: sharedTimeRange, |
| | | data: screenData, |
| | | loading, |
| | | loadError, |
| | | reload: () => loadImpl() |
| | | }; |
| | | } |
| | | |
| | | let inited = false; |
| | | let loadImpl: () => Promise<void> = async () => {}; |
| | | |
| | | export function useScreenLoader() { |
| | | const { service } = useCool(); |
| | | |
| | | async function load() { |
| | | loading.value = true; |
| | | loadError.value = ''; |
| | | try { |
| | | const payload = { range: sharedTimeRange.value }; |
| | | const screen = service.report?.screen; |
| | | const res: ScreenData = screen?.query |
| | | ? await screen.query(payload) |
| | | : await service.request({ |
| | | url: 'admin/report/screen/query', |
| | | method: 'POST', |
| | | data: payload |
| | | }); |
| | | const fallback = emptyScreen(sharedTimeRange.value); |
| | | screenData.value = { |
| | | ...fallback, |
| | | ...(res || {}), |
| | | kpis: { ...fallback.kpis, ...(res?.kpis || {}) }, |
| | | trend: { ...fallback.trend, ...(res?.trend || {}) }, |
| | | pointFlow: { ...fallback.pointFlow, ...(res?.pointFlow || {}) }, |
| | | ordersByType: { ...fallback.ordersByType, ...(res?.ordersByType || {}) } |
| | | }; |
| | | } catch (e: any) { |
| | | screenData.value = emptyScreen(sharedTimeRange.value); |
| | | loadError.value = e?.message || '驾驶舱接口调用失败'; |
| | | } finally { |
| | | loading.value = false; |
| | | } |
| | | } |
| | | |
| | | loadImpl = load; |
| | | |
| | | if (!inited) { |
| | | inited = true; |
| | | watch(sharedTimeRange, () => load()); |
| | | } |
| | | |
| | | load(); |
| | | |
| | | return { load, loading, loadError }; |
| | | } |
| | | |
| | | export function useChartTheme() { |
| | | const isDark = useDark(); |
| | | const theme = useTheme(); |
| | | |
| | | const textColor = computed(() => (isDark.value ? '#e5e7eb' : '#334155')); |
| | | const mutedColor = computed(() => (isDark.value ? '#94a3b8' : '#64748b')); |
| | | const splitColor = computed(() => (isDark.value ? '#334155' : '#e2e8f0')); |
| | | const tooltipBg = computed(() => (isDark.value ? '#0f172a' : '#ffffff')); |
| | | const primary = computed(() => theme.color || '#16a34a'); |
| | | |
| | | function baseGrid() { |
| | | return { containLabel: true, left: 12, right: 16, top: 28, bottom: 8 }; |
| | | } |
| | | |
| | | function axisStyle() { |
| | | return { |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false }, |
| | | splitLine: { show: false }, |
| | | axisLabel: { color: mutedColor.value } |
| | | }; |
| | | } |
| | | |
| | | function tooltip() { |
| | | return { |
| | | backgroundColor: tooltipBg.value, |
| | | borderColor: splitColor.value, |
| | | textStyle: { color: textColor.value } |
| | | }; |
| | | } |
| | | |
| | | return { |
| | | isDark, |
| | | textColor, |
| | | mutedColor, |
| | | splitColor, |
| | | tooltipBg, |
| | | primary, |
| | | baseGrid, |
| | | axisStyle, |
| | | tooltip |
| | | }; |
| | | } |
| New file |
| | |
| | | <template> |
| | | <div class="screen-page"> |
| | | <el-row :gutter="10" class="kpi-row"> |
| | | <el-col v-for="item in kpis" :key="item.label" :lg="4" :sm="12" :xs="24"> |
| | | <kpi-card v-bind="item" /> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10" class="mid-row"> |
| | | <el-col :lg="14" :xs="24"> |
| | | <panel-card title="碳减排趋势" sub="今日看近 7 日;年视图按月,其余按日"> |
| | | <v-chart :option="trendOption" autoresize class="chart" /> |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="10" :xs="24"> |
| | | <panel-card title="碳减排来源" sub="按可回收子类拆分"> |
| | | <v-chart :option="sourceOption" autoresize class="chart" /> |
| | | </panel-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10"> |
| | | <el-col :lg="16" :xs="24"> |
| | | <panel-card title="本年度月度碳减排" sub="日表 carbonTotal 单位 kgCO₂e,展示时 ÷1000 为吨"> |
| | | <v-chart :option="yearOption" autoresize class="chart" /> |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="8" :xs="24"> |
| | | <panel-card title="口径说明" sub="大屏只展示 KPI,不直接绑表"> |
| | | <ul class="note"> |
| | | <li>碳减排 = Σ 分类重量 × 碳减因数 × 方向</li> |
| | | <li>因数来自垃圾种类 carbonFactor</li> |
| | | <li>日表字段单位为 kgCO₂e,大屏吨数已除以 1000</li> |
| | | <li>本页给学校双碳、ESG、绿色教育汇报,不展示分拣点明细</li> |
| | | </ul> |
| | | </panel-card> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: 'report-screen-carbon' |
| | | }); |
| | | |
| | | import { computed } from 'vue'; |
| | | import KpiCard from '../../components/kpi-card.vue'; |
| | | import PanelCard from '../../components/panel-card.vue'; |
| | | import { useChartTheme, useScreenData } from '../../hooks/use-screen'; |
| | | |
| | | const { data, timeRange } = useScreenData(); |
| | | const { textColor, mutedColor, splitColor, primary, baseGrid, axisStyle, tooltip } = useChartTheme(); |
| | | |
| | | const kpis = computed(() => [ |
| | | { label: '累计碳减排', value: data.value.kpis.totalCarbonTon, suffix: '吨CO₂e', fixed: 1 }, |
| | | { label: '本年度碳减排', value: data.value.kpis.yearCarbonTon, suffix: '吨CO₂e', fixed: 1 }, |
| | | { label: '本区间碳减排', value: data.value.kpis.periodCarbonTon, suffix: '吨CO₂e', fixed: 2 }, |
| | | { label: '累计资源回收', value: data.value.kpis.totalWeightTon, suffix: '吨', fixed: 1 }, |
| | | { label: '累计参与师生', value: data.value.kpis.totalParticipants, suffix: '人', fixed: 0 }, |
| | | { label: '累计环保行为', value: data.value.kpis.greenActions, suffix: '次', fixed: 0 } |
| | | ]); |
| | | |
| | | const trendOption = computed(() => { |
| | | const isYear = timeRange.value === 'year'; |
| | | return { |
| | | grid: baseGrid(), |
| | | tooltip: { trigger: 'axis', ...tooltip() }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: isYear ? Array.from({ length: 12 }, (_, i) => `${i + 1}月`) : data.value.axis, |
| | | ...axisStyle() |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | name: '吨CO₂e', |
| | | nameTextStyle: { color: mutedColor.value }, |
| | | splitLine: { lineStyle: { color: splitColor.value, type: 'dashed' } }, |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'line', |
| | | smooth: true, |
| | | showSymbol: true, |
| | | symbolSize: 8, |
| | | data: isYear ? data.value.yearCarbon : data.value.trend.carbon.map(v => Number((v / 1000).toFixed(3))), |
| | | itemStyle: { color: primary.value }, |
| | | areaStyle: { color: primary.value, opacity: 0.12 } |
| | | } |
| | | ] |
| | | }; |
| | | }); |
| | | |
| | | const yearOption = computed(() => ({ |
| | | grid: baseGrid(), |
| | | tooltip: { trigger: 'axis', ...tooltip() }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: Array.from({ length: 12 }, (_, i) => `${i + 1}月`), |
| | | ...axisStyle() |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | name: '吨CO₂e', |
| | | nameTextStyle: { color: mutedColor.value }, |
| | | splitLine: { lineStyle: { color: splitColor.value, type: 'dashed' } }, |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | barWidth: 16, |
| | | data: data.value.yearCarbon, |
| | | itemStyle: { color: primary.value, borderRadius: [6, 6, 0, 0] } |
| | | } |
| | | ] |
| | | })); |
| | | |
| | | const sourceOption = computed(() => ({ |
| | | tooltip: { trigger: 'item', formatter: '{b}<br/>{c} kgCO₂e ({d}%)', ...tooltip() }, |
| | | legend: { bottom: 0, textStyle: { color: mutedColor.value } }, |
| | | series: [ |
| | | { |
| | | type: 'pie', |
| | | radius: ['36%', '60%'], |
| | | center: ['50%', '46%'], |
| | | padAngle: 3, |
| | | itemStyle: { borderRadius: 6 }, |
| | | label: { color: textColor.value, formatter: '{b}\n{d}%' }, |
| | | data: data.value.recycleItems.map(e => ({ |
| | | name: e.name + '回收', |
| | | value: e.carbon, |
| | | itemStyle: { color: e.color } |
| | | })) |
| | | } |
| | | ] |
| | | })); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .screen-page { |
| | | .kpi-row, |
| | | .mid-row { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .kpi-row { |
| | | :deep(.el-col) { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | |
| | | .mid-row { |
| | | :deep(.panel-card) { |
| | | min-height: 360px; |
| | | } |
| | | } |
| | | |
| | | .chart { |
| | | height: 300px; |
| | | width: 100%; |
| | | } |
| | | |
| | | .note { |
| | | margin: 8px 12px 12px; |
| | | padding-left: 18px; |
| | | color: var(--el-text-color-regular); |
| | | line-height: 1.9; |
| | | font-size: 13px; |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <screen-shell> |
| | | <component :is="pageMap[currentKey]" /> |
| | | </screen-shell> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: 'report-screen' |
| | | }); |
| | | |
| | | import { computed } from 'vue'; |
| | | import { useRoute, useRouter } from 'vue-router'; |
| | | import ScreenShell from '../../components/screen-shell.vue'; |
| | | import Overview from './overview.vue'; |
| | | import Resource from './resource.vue'; |
| | | import Carbon from './carbon.vue'; |
| | | import Participation from './participation.vue'; |
| | | import Operation from './operation.vue'; |
| | | import { SCREEN_NAV, type ScreenKey } from '../../data/screen'; |
| | | import { useScreenLoader } from '../../hooks/use-screen'; |
| | | |
| | | useScreenLoader(); |
| | | |
| | | const route = useRoute(); |
| | | const router = useRouter(); |
| | | |
| | | const pageMap = { |
| | | overview: Overview, |
| | | resource: Resource, |
| | | carbon: Carbon, |
| | | participation: Participation, |
| | | operation: Operation |
| | | }; |
| | | |
| | | const currentKey = computed<ScreenKey>(() => { |
| | | const page = String(route.params.page || 'overview') as ScreenKey; |
| | | return SCREEN_NAV.some(e => e.key === page) ? page : 'overview'; |
| | | }); |
| | | |
| | | if (!route.params.page) { |
| | | router.replace('/report/screen/overview'); |
| | | } |
| | | </script> |
| New file |
| | |
| | | <template> |
| | | <div class="screen-page"> |
| | | <el-row :gutter="10" class="kpi-row"> |
| | | <el-col :lg="3" :sm="8" :xs="12"> |
| | | <kpi-card label="在线分拣员" :value="data.kpis.sorterOnline" |
| | | :hint="`${data.kpis.sorterOnline} / ${data.kpis.sorterTotal}`" /> |
| | | </el-col> |
| | | <el-col :lg="3" :sm="8" :xs="12"> |
| | | <kpi-card label="在线车辆" :value="data.kpis.vehicleOnline" |
| | | :hint="`${data.kpis.vehicleOnline} / ${data.kpis.vehicleTotal}`" /> |
| | | </el-col> |
| | | <el-col :lg="3" :sm="8" :xs="12"> |
| | | <kpi-card label="在线分拣点" :value="data.kpis.siteOnline" |
| | | :hint="`${data.kpis.siteOnline} / ${data.kpis.siteTotal},按站点启用`" /> |
| | | </el-col> |
| | | <el-col :lg="3" :sm="8" :xs="12"> |
| | | <kpi-card label="今日回收订单" :value="data.kpis.todayOrders" :hint="``" /> |
| | | </el-col> |
| | | <el-col :lg="4" :sm="8" :xs="12"> |
| | | <kpi-card label="今日预约 / 待处理" :value="data.kpis.todayAppointments" |
| | | :hint="`待处理 ${data.kpis.pendingAppointments}`" /> |
| | | </el-col> |
| | | <el-col :lg="4" :sm="8" :xs="12"> |
| | | <kpi-card label="异常告警" :value="data.kpis.alerts" alert |
| | | :hint="`健康异常 ${data.kpis.healthAlerts},不展示隐私体征`" /> |
| | | </el-col> |
| | | <el-col :lg="4" :sm="8" :xs="12"> |
| | | <kpi-card label="车辆安全事件" :value="safetyCount" hint="超速 / 急刹等,来自车辆日汇总" /> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10" class="mid-row"> |
| | | <el-col :lg="14" :xs="24"> |
| | | <panel-card title="订单趋势" sub="现场 / 预约 / 大屏 / 活动,按天对比"> |
| | | <v-chart :option="orderOption" autoresize class="chart" /> |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="10" :xs="24"> |
| | | <panel-card title="预约订单漏斗" sub="新增/待审核 → 已确认/已接单 → 已完成"> |
| | | <div class="funnel"> |
| | | <div v-for="(item, index) in data.appointmentFlow" :key="item.name" class="funnel__item"> |
| | | <div class="funnel__name">{{ item.name }}</div> |
| | | <div class="funnel__bar"> |
| | | <i :style="{ width: funnelWidth(item.value) }" /> |
| | | </div> |
| | | <div class="funnel__value">{{ item.value }}</div> |
| | | <span v-if="index < data.appointmentFlow.length - 1" class="funnel__next">→</span> |
| | | </div> |
| | | </div> |
| | | <p class="funnel__tip">预约 → 接单 → 完成</p> |
| | | </panel-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10"> |
| | | <el-col :lg="8" :xs="24"> |
| | | <panel-card title="分拣员状态" sub="来自分拣员日表,只汇总状态,不展示体征明细"> |
| | | <div class="status-list"> |
| | | <div v-for="item in data.sorterStatus" :key="item.name" class="status-list__item"> |
| | | <i :style="{ background: item.color }" /> |
| | | <span>{{ item.name }}</span> |
| | | <strong>{{ item.value }}</strong> |
| | | </div> |
| | | </div> |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="8" :xs="24"> |
| | | <panel-card title="车辆运行" sub="公司领导看运力与安全,不进校领导首页"> |
| | | <div class="table table--vehicle"> |
| | | <div class="table__head"> |
| | | <span>车牌</span> |
| | | <span>里程km</span> |
| | | <span>怠速分</span> |
| | | <span>超速</span> |
| | | <span>状态</span> |
| | | </div> |
| | | <div v-for="item in data.vehicles" :key="item.no" class="table__row"> |
| | | <span>{{ item.no }}</span> |
| | | <span>{{ item.km }}</span> |
| | | <span>{{ item.idle }}</span> |
| | | <span>{{ item.overspeed }}</span> |
| | | <span :class="item.status === '在线' ? 'is-on' : 'is-off'">{{ item.status }}</span> |
| | | </div> |
| | | </div> |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="8" :xs="24"> |
| | | <panel-card title="分拣点吞吐" sub="运营维度才下钻到点位"> |
| | | <div class="table table--site"> |
| | | <div class="table__head"> |
| | | <span>收集点</span> |
| | | <span>今日kg</span> |
| | | <span>在线</span> |
| | | </div> |
| | | <div v-for="item in data.sites" :key="item.name" class="table__row"> |
| | | <span>{{ item.name }}</span> |
| | | <span>{{ item.weight }}</span> |
| | | <span :class="item.online ? 'is-on' : 'is-off'">{{ item.online ? '在线' : '离线' }}</span> |
| | | </div> |
| | | </div> |
| | | </panel-card> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: 'report-screen-operation' |
| | | }); |
| | | |
| | | import { computed } from 'vue'; |
| | | import KpiCard from '../../components/kpi-card.vue'; |
| | | import PanelCard from '../../components/panel-card.vue'; |
| | | import { useChartTheme, useScreenData } from '../../hooks/use-screen'; |
| | | |
| | | const { data } = useScreenData(); |
| | | const { mutedColor, splitColor, tooltip } = useChartTheme(); |
| | | |
| | | const safetyCount = computed(() => data.value.vehicles.reduce((s, e) => s + e.overspeed, 0)); |
| | | |
| | | function funnelWidth(value: number) { |
| | | const max = data.value.appointmentFlow[0]?.value || 1; |
| | | return `${Math.max((value / max) * 100, 18)}%`; |
| | | } |
| | | |
| | | const orderOption = computed(() => { |
| | | const colors = ['#16a34a', '#3b82f6', '#f59e0b', '#a855f7']; |
| | | const keys = ['现场回收', '预约上门', '大屏投递', '活动回收'] as const; |
| | | return { |
| | | grid: { containLabel: true, left: 8, right: 12, top: 36, bottom: 8 }, |
| | | legend: { top: 0, textStyle: { color: mutedColor.value } }, |
| | | tooltip: { trigger: 'axis', ...tooltip() }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: data.value.ordersByType.axis, |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | splitLine: { lineStyle: { color: splitColor.value, type: 'dashed' } }, |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | series: keys.map((name, i) => ({ |
| | | name, |
| | | type: 'bar', |
| | | stack: 'order', |
| | | barWidth: 18, |
| | | data: data.value.ordersByType[name], |
| | | itemStyle: { color: colors[i] } |
| | | })) |
| | | }; |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .screen-page { |
| | | |
| | | .kpi-row, |
| | | .mid-row { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .kpi-row { |
| | | :deep(.el-col) { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | |
| | | .mid-row, |
| | | :deep(.panel-card) { |
| | | min-height: 0; |
| | | } |
| | | |
| | | .mid-row { |
| | | :deep(.panel-card) { |
| | | min-height: 340px; |
| | | } |
| | | } |
| | | |
| | | .chart { |
| | | height: 280px; |
| | | width: 100%; |
| | | } |
| | | |
| | | .funnel { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 12px; |
| | | padding: 18px 16px 0; |
| | | |
| | | &__item { |
| | | display: grid; |
| | | grid-template-columns: 52px 1fr 40px 16px; |
| | | align-items: center; |
| | | gap: 8px; |
| | | } |
| | | |
| | | &__name { |
| | | font-size: 13px; |
| | | color: var(--el-text-color-regular); |
| | | } |
| | | |
| | | &__bar { |
| | | height: 18px; |
| | | border-radius: 99px; |
| | | background: var(--el-fill-color-light); |
| | | |
| | | i { |
| | | display: block; |
| | | height: 100%; |
| | | border-radius: 99px; |
| | | background: var(--el-color-primary); |
| | | } |
| | | } |
| | | |
| | | &__value { |
| | | text-align: right; |
| | | font-weight: 700; |
| | | } |
| | | |
| | | &__next { |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | |
| | | &__tip { |
| | | margin: 16px; |
| | | font-size: 12px; |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | } |
| | | |
| | | .status-list { |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 12px; |
| | | padding: 16px; |
| | | |
| | | &__item { |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 10px; |
| | | padding: 12px 14px; |
| | | border-radius: 10px; |
| | | background: var(--el-fill-color-lighter); |
| | | font-size: 14px; |
| | | |
| | | i { |
| | | width: 10px; |
| | | height: 10px; |
| | | border-radius: 50%; |
| | | } |
| | | |
| | | span { |
| | | flex: 1; |
| | | } |
| | | |
| | | strong { |
| | | font-size: 20px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .table { |
| | | padding: 8px 12px 16px; |
| | | font-size: 13px; |
| | | |
| | | &--vehicle &__head, |
| | | &--vehicle &__row { |
| | | grid-template-columns: 1.4fr repeat(4, 0.8fr); |
| | | } |
| | | |
| | | &--site &__head, |
| | | &--site &__row { |
| | | grid-template-columns: 1.6fr 0.8fr 0.6fr; |
| | | } |
| | | |
| | | &__head, |
| | | &__row { |
| | | display: grid; |
| | | gap: 8px; |
| | | padding: 10px 4px; |
| | | } |
| | | |
| | | &__head { |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | |
| | | &__row { |
| | | border-top: 1px solid var(--el-border-color-extra-light); |
| | | } |
| | | |
| | | .is-on { |
| | | color: var(--el-color-success); |
| | | } |
| | | |
| | | .is-off { |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | } |
| | | |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div class="screen-page"> |
| | | <el-row :gutter="10" class="kpi-row"> |
| | | <el-col v-for="item in kpis" :key="item.label" :xl="3" :lg="6" :sm="12" :xs="24"> |
| | | <kpi-card v-bind="item" /> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10" class="mid-row"> |
| | | <el-col :lg="10" :xs="24"> |
| | | <panel-card title="垃圾分类结构" sub="学校管理层看结构,不看单次称重"> |
| | | <template #extra> |
| | | <cl-select-button v-model="mixMetric" :options="mixOptions" small /> |
| | | </template> |
| | | <v-chart :option="mixOption" autoresize class="chart" /> |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="14" :xs="24"> |
| | | <panel-card title="回收趋势" :sub="trendHint"> |
| | | <template #extra> |
| | | <cl-select-button v-model="trendMetric" :options="trendOptions" small /> |
| | | </template> |
| | | <v-chart :option="trendOption" autoresize class="chart" /> |
| | | </panel-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10"> |
| | | <el-col :span="24"> |
| | | <panel-card title="各院系参与人数" sub="按用户学院名称 collegeName 汇总,人均按参与人数"> |
| | | <v-chart :option="rankOption" autoresize class="chart chart--bar" /> |
| | | </panel-card> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: 'report-screen-overview' |
| | | }); |
| | | |
| | | import { computed, ref } from 'vue'; |
| | | import KpiCard from '../../components/kpi-card.vue'; |
| | | import PanelCard from '../../components/panel-card.vue'; |
| | | import { useChartTheme, useScreenData } from '../../hooks/use-screen'; |
| | | |
| | | const { data, timeRange } = useScreenData(); |
| | | const { textColor, mutedColor, splitColor, primary, baseGrid, axisStyle, tooltip } = useChartTheme(); |
| | | |
| | | const mixMetric = ref<'weight' | 'value' | 'count'>('weight'); |
| | | const trendMetric = ref<'weight' | 'value' | 'carbon'>('weight'); |
| | | |
| | | const mixOptions = [ |
| | | { label: '重量', value: 'weight' }, |
| | | { label: '价值', value: 'value' }, |
| | | { label: '数量', value: 'count' } |
| | | ]; |
| | | |
| | | const trendOptions = [ |
| | | { label: '重量', value: 'weight' }, |
| | | { label: '价值', value: 'value' }, |
| | | { label: '碳减排', value: 'carbon' } |
| | | ]; |
| | | |
| | | const kpis = computed(() => [ |
| | | { label: '今日回收量', value: data.value.kpis.todayWeightKg, suffix: 'kg', fixed: 1, hint: '实时称重汇总' }, |
| | | { label: '本区间回收量', value: data.value.kpis.periodWeightTon, suffix: '吨', fixed: 2, hint: '当前时间范围' }, |
| | | { label: '资源化率', value: data.value.kpis.resourceRate, suffix: '%', fixed: 1, hint: '可回收物重量 / 总重量,不含大件和电子' }, |
| | | { label: '回收价值', value: data.value.kpis.periodValue, suffix: '元', fixed: 0, hint: '日表估算销售额' }, |
| | | { label: '碳减排', value: data.value.kpis.periodCarbonTon, suffix: '吨CO₂e', fixed: 2, hint: '分类重量 × 碳减因数' }, |
| | | { label: '累计回收量', value: data.value.kpis.totalWeightTon, suffix: '吨', fixed: 1, hint: '上线以来累计' }, |
| | | { label: '累计参与人数', value: data.value.kpis.totalParticipants, suffix: '人', fixed: 0, hint: '去重校园用户' }, |
| | | { label: '累计碳积分', value: data.value.kpis.totalPoints, suffix: '分', fixed: 0, hint: '账户余额合计' } |
| | | ]); |
| | | |
| | | const mixOption = computed(() => ({ |
| | | tooltip: { trigger: 'item', formatter: '{b}<br/>{c} ({d}%)', ...tooltip() }, |
| | | legend: { bottom: 0, textStyle: { color: mutedColor.value } }, |
| | | series: [ |
| | | { |
| | | type: 'pie', |
| | | radius: ['38%', '62%'], |
| | | center: ['50%', '46%'], |
| | | padAngle: 3, |
| | | itemStyle: { borderRadius: 6 }, |
| | | label: { color: textColor.value, formatter: '{b}\n{d}%' }, |
| | | data: data.value.wasteMix.map(e => ({ |
| | | name: e.name, |
| | | value: e[mixMetric.value], |
| | | itemStyle: { color: e.color } |
| | | })) |
| | | } |
| | | ] |
| | | })); |
| | | |
| | | const trendHint = computed(() => { |
| | | const map = { today: '近 7 日', week: '按日', month: '按日', quarter: '按日', year: '按月' }; |
| | | return map[timeRange.value]; |
| | | }); |
| | | |
| | | const trendUnit = computed(() => { |
| | | if (trendMetric.value === 'value') return '元'; |
| | | if (trendMetric.value === 'carbon') return 'kgCO₂e'; |
| | | return 'kg'; |
| | | }); |
| | | |
| | | const trendOption = computed(() => ({ |
| | | grid: baseGrid(), |
| | | tooltip: { trigger: 'axis', ...tooltip() }, |
| | | xAxis: { type: 'category', data: data.value.axis, ...axisStyle() }, |
| | | yAxis: { |
| | | type: 'value', |
| | | name: trendUnit.value, |
| | | nameTextStyle: { color: mutedColor.value }, |
| | | splitLine: { lineStyle: { color: splitColor.value, type: 'dashed' } }, |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'line', |
| | | smooth: true, |
| | | showSymbol: false, |
| | | data: data.value.trend[trendMetric.value], |
| | | itemStyle: { color: primary.value }, |
| | | areaStyle: { color: primary.value, opacity: 0.12 } |
| | | } |
| | | ] |
| | | })); |
| | | |
| | | const rankOption = computed(() => ({ |
| | | grid: { containLabel: true, left: 8, right: 24, top: 16, bottom: 8 }, |
| | | tooltip: { trigger: 'axis', ...tooltip() }, |
| | | xAxis: { |
| | | type: 'value', |
| | | name: '人', |
| | | splitLine: { lineStyle: { color: splitColor.value, type: 'dashed' } }, |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | yAxis: { |
| | | type: 'category', |
| | | data: data.value.deptRank.map(e => e.name).reverse(), |
| | | axisLabel: { color: textColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | barWidth: 14, |
| | | data: data.value.deptRank.map(e => e.people).reverse(), |
| | | itemStyle: { color: primary.value, borderRadius: [0, 8, 8, 0] } |
| | | } |
| | | ] |
| | | })); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .screen-page { |
| | | .kpi-row, |
| | | .mid-row { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .kpi-row { |
| | | :deep(.el-col) { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | |
| | | .mid-row { |
| | | :deep(.panel-card) { |
| | | min-height: 360px; |
| | | } |
| | | } |
| | | |
| | | .chart { |
| | | height: 300px; |
| | | width: 100%; |
| | | |
| | | &--bar { |
| | | height: 320px; |
| | | } |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div class="screen-page"> |
| | | <el-row :gutter="10" class="kpi-row"> |
| | | <el-col v-for="item in kpis" :key="item.label" :lg="4" :sm="12" :xs="24"> |
| | | <kpi-card v-bind="item" /> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10" class="mid-row"> |
| | | <el-col :lg="14" :xs="24"> |
| | | <panel-card title="参与趋势" sub="可在人数与投递次数之间切换"> |
| | | <template #extra> |
| | | <cl-select-button v-model="trendKind" :options="trendOptions" small /> |
| | | </template> |
| | | <v-chart :option="trendOption" autoresize class="chart" /> |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="10" :xs="24"> |
| | | <panel-card title="碳积分流转" sub="第一版用流向,不做 Sankey"> |
| | | <div class="flow"> |
| | | <div class="flow__node is-in"> |
| | | <span>发放</span> |
| | | <strong>{{ data.pointFlow.issued.toLocaleString() }}</strong> |
| | | </div> |
| | | <div class="flow__arrow">↓</div> |
| | | <div class="flow__split"> |
| | | <div> |
| | | <span>转赠</span> |
| | | <strong>{{ data.pointFlow.transfer.toLocaleString() }}</strong> |
| | | </div> |
| | | <div> |
| | | <span>捐赠</span> |
| | | <strong>{{ data.pointFlow.donate.toLocaleString() }}</strong> |
| | | </div> |
| | | <div> |
| | | <span>商城消费</span> |
| | | <strong>{{ data.pointFlow.mall.toLocaleString() }}</strong> |
| | | </div> |
| | | </div> |
| | | <div class="flow__arrow">↓</div> |
| | | <div class="flow__node is-out"> |
| | | <span>当前余额</span> |
| | | <strong>{{ data.pointFlow.balance.toLocaleString() }}</strong> |
| | | </div> |
| | | </div> |
| | | </panel-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10"> |
| | | <el-col :span="24"> |
| | | <panel-card title="组织排行榜" sub="人均按参与人数;院系不统计参与率"> |
| | | <template #extra> |
| | | <div class="rank-tools"> |
| | | <cl-select-button v-model="rankOrg" :options="orgOptions" small /> |
| | | <cl-select-button v-model="rankMetric" :options="metricOptions" small /> |
| | | </div> |
| | | </template> |
| | | <v-chart :option="rankOption" autoresize class="chart chart--rank" /> |
| | | </panel-card> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: 'report-screen-participation' |
| | | }); |
| | | |
| | | import { computed, ref } from 'vue'; |
| | | import KpiCard from '../../components/kpi-card.vue'; |
| | | import PanelCard from '../../components/panel-card.vue'; |
| | | import { type RankMetric } from '../../data/screen'; |
| | | import { useChartTheme, useScreenData } from '../../hooks/use-screen'; |
| | | |
| | | const { data } = useScreenData(); |
| | | const { textColor, mutedColor, splitColor, primary, baseGrid, axisStyle, tooltip } = useChartTheme(); |
| | | |
| | | const trendKind = ref<'people' | 'times'>('people'); |
| | | const rankOrg = ref<'class' | 'major' | 'dept'>('class'); |
| | | const rankMetric = ref<RankMetric>('people'); |
| | | |
| | | const trendOptions = [ |
| | | { label: '每日参与人数', value: 'people' }, |
| | | { label: '每日投递次数', value: 'times' } |
| | | ]; |
| | | |
| | | const orgOptions = [ |
| | | { label: '班级', value: 'class' }, |
| | | { label: '专业', value: 'major' }, |
| | | { label: '院系', value: 'dept' } |
| | | ]; |
| | | |
| | | const metricOptions: { label: string; value: RankMetric }[] = [ |
| | | { label: '参与人数', value: 'people' }, |
| | | { label: '回收重量', value: 'weight' }, |
| | | { label: '人均回收量', value: 'weightPerCapita' }, |
| | | { label: '人均积分', value: 'pointPerCapita' }, |
| | | { label: '碳减排', value: 'carbon' } |
| | | ]; |
| | | |
| | | const kpis = computed(() => [ |
| | | { label: '参与师生', value: data.value.kpis.totalParticipants, suffix: '人', fixed: 0 }, |
| | | { label: '参与率', value: data.value.kpis.participateRate, suffix: '%', fixed: 1, hint: '参与人数 / 参数 student.count.{部门ID}' }, |
| | | { label: '本区间新增参与', value: data.value.kpis.newParticipants, suffix: '人', fixed: 0, hint: '区间内出现过的去重用户' }, |
| | | { label: '碳积分发放', value: data.value.kpis.pointsIssued, suffix: '分', fixed: 0 }, |
| | | { label: '碳积分消费', value: data.value.kpis.pointsConsumed, suffix: '分', fixed: 0 }, |
| | | { label: '碳积分余额', value: data.value.kpis.pointsBalance, suffix: '分', fixed: 0 } |
| | | ]); |
| | | |
| | | const trendOption = computed(() => ({ |
| | | grid: baseGrid(), |
| | | tooltip: { trigger: 'axis', ...tooltip() }, |
| | | xAxis: { type: 'category', data: data.value.axis, ...axisStyle() }, |
| | | yAxis: { |
| | | type: 'value', |
| | | splitLine: { lineStyle: { color: splitColor.value, type: 'dashed' } }, |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'line', |
| | | smooth: true, |
| | | showSymbol: false, |
| | | data: trendKind.value === 'people' ? data.value.participateTrend : data.value.deliverTrend, |
| | | itemStyle: { color: primary.value }, |
| | | areaStyle: { color: primary.value, opacity: 0.12 } |
| | | } |
| | | ] |
| | | })); |
| | | |
| | | const rankRows = computed(() => { |
| | | if (rankOrg.value === 'major') return data.value.majorRank; |
| | | if (rankOrg.value === 'dept') return data.value.deptRank; |
| | | return data.value.classRank; |
| | | }); |
| | | |
| | | const rankOption = computed(() => { |
| | | const rows = [...rankRows.value].reverse(); |
| | | return { |
| | | grid: { containLabel: true, left: 8, right: 24, top: 12, bottom: 8 }, |
| | | tooltip: { trigger: 'axis', ...tooltip() }, |
| | | xAxis: { |
| | | type: 'value', |
| | | splitLine: { lineStyle: { color: splitColor.value, type: 'dashed' } }, |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | yAxis: { |
| | | type: 'category', |
| | | data: rows.map(e => e.name), |
| | | axisLabel: { color: textColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | barWidth: 14, |
| | | data: rows.map(e => Number((e as Record<string, number>)[rankMetric.value] || 0)), |
| | | itemStyle: { color: primary.value, borderRadius: [0, 8, 8, 0] } |
| | | } |
| | | ] |
| | | }; |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .screen-page { |
| | | .kpi-row, |
| | | .mid-row { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .kpi-row { |
| | | :deep(.el-col) { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | |
| | | .mid-row { |
| | | :deep(.panel-card) { |
| | | min-height: 360px; |
| | | } |
| | | } |
| | | |
| | | .chart { |
| | | height: 300px; |
| | | width: 100%; |
| | | |
| | | &--rank { |
| | | height: 340px; |
| | | } |
| | | } |
| | | |
| | | .rank-tools { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | gap: 8px; |
| | | justify-content: flex-end; |
| | | } |
| | | |
| | | .flow { |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: stretch; |
| | | justify-content: center; |
| | | height: 300px; |
| | | padding: 8px 16px; |
| | | gap: 8px; |
| | | |
| | | &__node, |
| | | &__split > div { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | padding: 12px 14px; |
| | | border-radius: 10px; |
| | | background: var(--el-fill-color-lighter); |
| | | font-size: 13px; |
| | | color: var(--el-text-color-secondary); |
| | | |
| | | strong { |
| | | font-size: 20px; |
| | | color: var(--el-text-color-primary); |
| | | } |
| | | } |
| | | |
| | | &__node.is-in strong { |
| | | color: var(--el-color-success); |
| | | } |
| | | |
| | | &__node.is-out strong { |
| | | color: var(--el-color-primary); |
| | | } |
| | | |
| | | &__split { |
| | | display: grid; |
| | | grid-template-columns: repeat(3, 1fr); |
| | | gap: 8px; |
| | | } |
| | | |
| | | &__arrow { |
| | | text-align: center; |
| | | color: var(--el-text-color-secondary); |
| | | } |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <div class="screen-page"> |
| | | <el-row :gutter="10" class="kpi-row"> |
| | | <el-col v-for="item in kpis" :key="item.label" :lg="4" :sm="12" :xs="24"> |
| | | <kpi-card v-bind="item" /> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10" class="mid-row"> |
| | | <el-col :lg="10" :xs="24"> |
| | | <panel-card title="可回收物品类占比" sub="同一时间范围,看结构"> |
| | | <v-chart :option="pieOption" autoresize class="chart" /> |
| | | </panel-card> |
| | | </el-col> |
| | | <el-col :lg="14" :xs="24"> |
| | | <panel-card title="各类回收量" sub="横向柱状图更适合长品类名"> |
| | | <v-chart :option="weightOption" autoresize class="chart" /> |
| | | </panel-card> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <el-row :gutter="10"> |
| | | <el-col :span="24"> |
| | | <panel-card title="回收价值分析" sub="学校最关心:什么垃圾最值钱"> |
| | | <v-chart :option="valueOption" autoresize class="chart chart--value" /> |
| | | </panel-card> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </template> |
| | | |
| | | <script lang="ts" setup> |
| | | defineOptions({ |
| | | name: 'report-screen-resource' |
| | | }); |
| | | |
| | | import { computed } from 'vue'; |
| | | import KpiCard from '../../components/kpi-card.vue'; |
| | | import PanelCard from '../../components/panel-card.vue'; |
| | | import { useChartTheme, useScreenData } from '../../hooks/use-screen'; |
| | | |
| | | const { data } = useScreenData(); |
| | | const { textColor, mutedColor, splitColor, primary, tooltip } = useChartTheme(); |
| | | |
| | | const kpis = computed(() => [ |
| | | { label: '回收总量', value: data.value.kpis.periodWeightTon, suffix: '吨', fixed: 2, hint: '全部分类重量合计' }, |
| | | { label: '可回收物', value: data.value.kpis.recyclableTon, suffix: '吨', fixed: 2, hint: 'SW62' }, |
| | | { label: '大件垃圾', value: data.value.kpis.bulkTon, suffix: '吨', fixed: 2, hint: 'SW63' }, |
| | | { label: '电子产品', value: data.value.kpis.elecTon, suffix: '吨', fixed: 2, hint: '可回收子类' }, |
| | | { label: '废旧织物', value: data.value.kpis.fabricTon, suffix: '吨', fixed: 2, hint: '可回收子类' } |
| | | ]); |
| | | |
| | | const pieOption = computed(() => ({ |
| | | tooltip: { trigger: 'item', formatter: '{b}<br/>{c} kg ({d}%)', ...tooltip() }, |
| | | legend: { bottom: 0, textStyle: { color: mutedColor.value } }, |
| | | series: [ |
| | | { |
| | | type: 'pie', |
| | | radius: ['36%', '60%'], |
| | | center: ['50%', '46%'], |
| | | padAngle: 3, |
| | | itemStyle: { borderRadius: 6 }, |
| | | label: { color: textColor.value, formatter: '{b} {d}%' }, |
| | | data: data.value.recycleItems.map(e => ({ |
| | | name: e.name, |
| | | value: e.weight, |
| | | itemStyle: { color: e.color } |
| | | })) |
| | | } |
| | | ] |
| | | })); |
| | | |
| | | const weightOption = computed(() => ({ |
| | | grid: { containLabel: true, left: 8, right: 28, top: 12, bottom: 8 }, |
| | | tooltip: { trigger: 'axis', ...tooltip() }, |
| | | xAxis: { |
| | | type: 'value', |
| | | name: 'kg', |
| | | splitLine: { lineStyle: { color: splitColor.value, type: 'dashed' } }, |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | yAxis: { |
| | | type: 'category', |
| | | data: data.value.recycleItems.map(e => e.name).reverse(), |
| | | axisLabel: { color: textColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | barWidth: 16, |
| | | data: data.value.recycleItems |
| | | .map(e => ({ value: e.weight, itemStyle: { color: e.color, borderRadius: [0, 8, 8, 0] } })) |
| | | .reverse() |
| | | } |
| | | ] |
| | | })); |
| | | |
| | | const valueOption = computed(() => ({ |
| | | grid: { containLabel: true, left: 16, right: 16, top: 28, bottom: 8 }, |
| | | tooltip: { trigger: 'axis', ...tooltip() }, |
| | | xAxis: { |
| | | type: 'category', |
| | | data: data.value.recycleItems.map(e => e.name), |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | name: '元', |
| | | nameTextStyle: { color: mutedColor.value }, |
| | | splitLine: { lineStyle: { color: splitColor.value, type: 'dashed' } }, |
| | | axisLabel: { color: mutedColor.value }, |
| | | axisLine: { show: false }, |
| | | axisTick: { show: false } |
| | | }, |
| | | series: [ |
| | | { |
| | | type: 'bar', |
| | | barWidth: 28, |
| | | data: data.value.recycleItems.map(e => e.value), |
| | | itemStyle: { color: primary.value, borderRadius: [6, 6, 0, 0] } |
| | | } |
| | | ] |
| | | })); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .screen-page { |
| | | .kpi-row, |
| | | .mid-row { |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .kpi-row { |
| | | :deep(.el-col) { |
| | | margin-bottom: 10px; |
| | | } |
| | | } |
| | | |
| | | .mid-row { |
| | | :deep(.panel-card) { |
| | | min-height: 360px; |
| | | } |
| | | } |
| | | |
| | | .chart { |
| | | height: 300px; |
| | | width: 100%; |
| | | |
| | | &--value { |
| | | height: 280px; |
| | | } |
| | | } |
| | | } |
| | | </style> |