From 5e756b5a69bcd957f8eafc5f99a4f6413691d6dd Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期三, 19 八月 2026 09:31:51 +0800
Subject: [PATCH] add maps
---
src/modules/maps/components/map-board.vue | 137 +++++
src/modules/maps/components/track-toolbar.vue | 110 ++++
build/cool/eps.d.ts | 87 +++
/dev/null | 84 ---
src/modules/maps/views/site.vue | 296 +++++++++++
src/modules/maps/hooks/use-track.ts | 97 +++
src/modules/maps/config.ts | 29 +
src/modules/maps/hooks/use-map.ts | 92 +++
src/modules/maps/views/vehicle.vue | 285 +++++++++++
build/cool/eps.json | 2
src/modules/maps/views/sorter.vue | 267 ++++++++++
11 files changed, 1,401 insertions(+), 85 deletions(-)
diff --git a/build/cool/eps.d.ts b/build/cool/eps.d.ts
index 59a1301..5fde816 100644
--- a/build/cool/eps.d.ts
+++ b/build/cool/eps.d.ts
@@ -4972,6 +4972,20 @@
type json = any;
+ type DictKey =
+ | "upgradeType"
+ | "complainType"
+ | "feedbackType"
+ | "ratedpayload"
+ | "iottype"
+ | "brand"
+ | "occupation"
+ | "sitetype"
+ | "datachanel"
+ | "vehicletype"
+ | "businesstype"
+ | "appointmentslot";
+
interface PagePagination {
size: number;
page: number;
@@ -7067,6 +7081,78 @@
list: boolean;
page: boolean;
add: boolean;
+ };
+
+ request: Request;
+ }
+
+ interface MapsLive {
+ /**
+ * 鍦ㄧ嚎杞﹁締浣嶇疆
+ */
+ vehicleOnline(data?: any): Promise<any>;
+
+ /**
+ * 杞﹁締鍙告満琛屼负娑堟伅
+ */
+ vehicleEvents(data?: any): Promise<any>;
+
+ /**
+ * 鍦ㄧ嚎鍒嗘嫞鍛樹綅缃�
+ */
+ sorterOnline(data?: any): Promise<any>;
+
+ /**
+ * 鍒嗘嫞鍛樺仴搴蜂笌鍛婅
+ */
+ sorterHealth(data?: any): Promise<any>;
+
+ /**
+ * 杞﹁締鍘嗗彶杞ㄨ抗
+ */
+ vehicleTrack(data?: any): Promise<any>;
+
+ /**
+ * 鍒嗘嫞鍛樺巻鍙茶建杩�
+ */
+ sorterTrack(data?: any): Promise<any>;
+
+ /**
+ * 绔欑偣绉伴噸鍘嗗彶
+ */
+ siteWeight(data?: any): Promise<any>;
+
+ /**
+ * 绔欑偣鍦板浘鐐逛綅
+ */
+ sites(data?: any): Promise<any>;
+
+ /**
+ * 鏉冮檺鏍囪瘑
+ */
+ permission: {
+ vehicleOnline: string;
+ vehicleEvents: string;
+ sorterOnline: string;
+ sorterHealth: string;
+ vehicleTrack: string;
+ sorterTrack: string;
+ siteWeight: string;
+ sites: string;
+ };
+
+ /**
+ * 鏉冮檺鐘舵��
+ */
+ _permission: {
+ vehicleOnline: boolean;
+ vehicleEvents: boolean;
+ sorterOnline: boolean;
+ sorterHealth: boolean;
+ vehicleTrack: boolean;
+ sorterTrack: boolean;
+ siteWeight: boolean;
+ sites: boolean;
};
request: Request;
@@ -9217,6 +9303,7 @@
type: GoodsType;
};
info: { banner: InfoBanner };
+ maps: { live: MapsLive };
market: { coupon: { info: MarketCouponInfo; user: MarketCouponUser } };
monitor: { capturetask: MonitorCapturetask; ys7: MonitorYs7 };
operation: { traderecord: OperationTraderecord; wastesale: OperationWastesale };
diff --git a/build/cool/eps.json b/build/cool/eps.json
index 15f11ec..02e9d6a 100644
--- a/build/cool/eps.json
+++ b/build/cool/eps.json
@@ -1 +1 @@
-[{"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":"浠g爜","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":"鐖禝D","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":"浼樻儬鍒窱D","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":"瀹㈡埛绔疘D","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":["姝e父","杩熷埌","鏃╅��","缂哄崱","鏃峰伐"],"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":"鍒嗘嫞鍛業D","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":"鎿嶄綔浜篒D","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":["绂佺敤","姝e父","宸叉敞閿�"],"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"}]}}]
\ No newline at end of file
+[{"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":"浠g爜","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":"鐖禝D","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/maps/live","name":"","api":[{"method":"post","path":"/vehicleOnline"},{"method":"post","path":"/vehicleEvents"},{"method":"post","path":"/sorterOnline"},{"method":"post","path":"/sorterHealth"},{"method":"post","path":"/vehicleTrack"},{"method":"post","path":"/sorterTrack"},{"method":"post","path":"/siteWeight"},{"method":"post","path":"/sites"}],"search":{"fieldEq":[],"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":"浼樻儬鍒窱D","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":"瀹㈡埛绔疘D","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":["姝e父","杩熷埌","鏃╅��","缂哄崱","鏃峰伐"],"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":"鍒嗘嫞鍛業D","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":"鎿嶄綔浜篒D","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":["绂佺敤","姝e父","宸叉敞閿�"],"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"}]}}]
\ No newline at end of file
diff --git a/src/modules/maps/components/map-board.vue b/src/modules/maps/components/map-board.vue
new file mode 100644
index 0000000..68b7a76
--- /dev/null
+++ b/src/modules/maps/components/map-board.vue
@@ -0,0 +1,137 @@
+<template>
+ <div class="map-board">
+ <aside class="map-board__side">
+ <div class="map-board__side-head">
+ <slot name="side-head" />
+ </div>
+ <div class="map-board__side-body">
+ <slot name="side" />
+ </div>
+ </aside>
+ <div class="map-board__map">
+ <slot name="map" />
+ <div v-if="$slots.legend" class="map-board__legend">
+ <slot name="legend" />
+ </div>
+ </div>
+ <aside v-if="open" class="map-board__panel">
+ <div class="map-board__panel-head">
+ <div>
+ <div class="map-board__panel-title">{{ title }}</div>
+ <div v-if="sub" class="map-board__panel-sub">{{ sub }}</div>
+ </div>
+ <el-button text @click="$emit('close')">鍏抽棴</el-button>
+ </div>
+ <div class="map-board__panel-body">
+ <slot name="panel" />
+ </div>
+ </aside>
+ </div>
+</template>
+
+<script lang="ts" setup>
+defineProps<{
+ open?: boolean;
+ title?: string;
+ sub?: string;
+}>();
+
+defineEmits(['close']);
+</script>
+
+<style lang="scss" scoped>
+.map-board {
+ display: flex;
+ height: 100%;
+ min-height: calc(100vh - 140px);
+ background: var(--el-bg-color-page);
+ gap: 10px;
+
+ &__side {
+ width: 260px;
+ flex-shrink: 0;
+ display: flex;
+ flex-direction: column;
+ border: 1px solid var(--el-border-color-extra-light);
+ border-radius: 10px;
+ background: var(--el-bg-color);
+ overflow: hidden;
+ }
+
+ &__side-head {
+ padding: 12px;
+ border-bottom: 1px solid var(--el-border-color-extra-light);
+ }
+
+ &__side-body {
+ flex: 1;
+ overflow: auto;
+ }
+
+ &__map {
+ flex: 1;
+ min-width: 0;
+ position: relative;
+ border-radius: 10px;
+ overflow: hidden;
+ border: 1px solid var(--el-border-color-extra-light);
+ }
+
+ &__legend {
+ position: absolute;
+ left: 12px;
+ bottom: 12px;
+ z-index: 20;
+ padding: 8px 10px;
+ border-radius: 8px;
+ background: rgba(255, 255, 255, 0.92);
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
+ font-size: 12px;
+ }
+
+ &__panel {
+ width: 420px;
+ flex-shrink: 0;
+ display: flex;
+ flex-direction: column;
+ border: 1px solid var(--el-border-color-extra-light);
+ border-radius: 10px;
+ background: var(--el-bg-color);
+ overflow: hidden;
+ }
+
+ &__panel-head {
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ gap: 8px;
+ padding: 12px 14px;
+ border-bottom: 1px solid var(--el-border-color-extra-light);
+ }
+
+ &__panel-title {
+ font-size: 16px;
+ font-weight: 700;
+ color: var(--el-text-color-primary);
+ }
+
+ &__panel-sub {
+ margin-top: 4px;
+ font-size: 12px;
+ color: var(--el-text-color-secondary);
+ }
+
+ &__panel-body {
+ flex: 1;
+ min-height: 0;
+ overflow: auto;
+ padding: 0 12px 12px;
+ }
+}
+
+:deep(.tdt-container),
+:deep(.mapDiv) {
+ width: 100%;
+ height: 100%;
+}
+</style>
diff --git a/src/modules/maps/components/track-toolbar.vue b/src/modules/maps/components/track-toolbar.vue
new file mode 100644
index 0000000..d6fe8b1
--- /dev/null
+++ b/src/modules/maps/components/track-toolbar.vue
@@ -0,0 +1,110 @@
+<template>
+ <div class="track-bar">
+ <el-popover v-model:visible="open" placement="bottom-start" :width="340" trigger="click">
+ <template #reference>
+ <el-button :icon="Setting" circle size="small" />
+ </template>
+ <div class="track-bar__form">
+ <div class="track-bar__label">鏌ヨ鏃舵</div>
+ <el-date-picker
+ v-model="range"
+ type="datetimerange"
+ start-placeholder="寮�濮嬫椂闂�"
+ end-placeholder="缁撴潫鏃堕棿"
+ format="YYYY-MM-DD HH:mm"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ size="small"
+ />
+ <div class="track-bar__actions">
+ <el-button size="small" @click="open = false">鍙栨秷</el-button>
+ <el-button type="primary" size="small" @click="confirm">鏌ヨ杞ㄨ抗</el-button>
+ </div>
+ </div>
+ </el-popover>
+ <el-button size="small" :disabled="!hasTrack" @click="$emit(playing ? 'pause' : 'play')">
+ {{ playing ? '鏆傚仠' : '鎾斁' }}
+ </el-button>
+ <el-button size="small" :disabled="!hasTrack" @click="$emit('stop')">鍋滄</el-button>
+ <span class="track-bar__speed">{{ speed }}x</span>
+ <el-slider v-model="speedModel" :min="1" :max="30" :step="1" class="track-bar__slider" />
+ <el-progress :percentage="progress" :stroke-width="6" class="track-bar__progress" />
+ </div>
+</template>
+
+<script lang="ts" setup>
+import { computed, ref, watch } from 'vue';
+import { Setting } from '@element-plus/icons-vue';
+
+const props = defineProps<{
+ playing?: boolean;
+ speed?: number;
+ progress?: number;
+ hasTrack?: boolean;
+ startTime?: string;
+ endTime?: string;
+}>();
+
+const emit = defineEmits(['update:speed', 'play', 'pause', 'stop', 'query']);
+
+const open = ref(false);
+const range = ref<[string, string] | null>(null);
+const speedModel = computed({
+ get: () => props.speed || 5,
+ set: v => emit('update:speed', v)
+});
+
+watch(
+ () => [props.startTime, props.endTime],
+ () => {
+ if (props.startTime && props.endTime) range.value = [props.startTime, props.endTime];
+ },
+ { immediate: true }
+);
+
+function confirm() {
+ if (!range.value) return;
+ emit('query', range.value);
+ open.value = false;
+}
+</script>
+
+<style lang="scss" scoped>
+.track-bar {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 8px 0 4px;
+
+ &__slider {
+ width: 96px;
+ }
+
+ &__speed {
+ font-size: 12px;
+ color: var(--el-text-color-secondary);
+ min-width: 28px;
+ }
+
+ &__progress {
+ flex: 1;
+ min-width: 80px;
+ }
+
+ &__form {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+ }
+
+ &__label {
+ font-size: 12px;
+ color: var(--el-text-color-secondary);
+ }
+
+ &__actions {
+ display: flex;
+ justify-content: flex-end;
+ gap: 8px;
+ }
+}
+</style>
diff --git a/src/modules/maps/config.ts b/src/modules/maps/config.ts
new file mode 100644
index 0000000..5951dc7
--- /dev/null
+++ b/src/modules/maps/config.ts
@@ -0,0 +1,29 @@
+import { type ModuleConfig } from '/@/cool';
+
+export default (): ModuleConfig => {
+ return {
+ label: '鍦板浘鐩戞帶',
+ description: '绔欑偣銆佸垎鎷e憳銆佽溅杈嗗疄鏃朵綅缃笌鍘嗗彶杞ㄨ抗',
+ order: 8,
+ views: [
+ {
+ path: '/maps/site',
+ name: 'maps-site',
+ meta: { label: '绔欑偣鍦板浘' },
+ component: () => import('./views/site.vue')
+ },
+ {
+ path: '/maps/sorter',
+ name: 'maps-sorter',
+ meta: { label: '鍒嗘嫞鍛樹綅缃�' },
+ component: () => import('./views/sorter.vue')
+ },
+ {
+ path: '/maps/vehicle',
+ name: 'maps-vehicle',
+ meta: { label: '杞﹁締浣嶇疆' },
+ component: () => import('./views/vehicle.vue')
+ }
+ ]
+ };
+};
diff --git a/src/modules/maps/hooks/use-map.ts b/src/modules/maps/hooks/use-map.ts
new file mode 100644
index 0000000..5f91ca5
--- /dev/null
+++ b/src/modules/maps/hooks/use-map.ts
@@ -0,0 +1,92 @@
+import type { LngLat } from 'vue-tianditu2';
+import { useCool } from '/@/cool';
+
+export const MAP_TK = '51915011aa0997aa2ddd7e38504fa8bc';
+export const MAP_LOAD = { v: '4.0', tk: MAP_TK };
+export const DEFAULT_CENTER: LngLat = [121.280637, 32.125178];
+
+export function pinIcon(color: string) {
+ const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="28" height="40" viewBox="0 0 28 40"><path fill="${color}" stroke="#fff" stroke-width="1.5" d="M14 1C7.4 1 2 6.4 2 13c0 8.8 12 25 12 25s12-16.2 12-25C26 6.4 20.6 1 14 1z"/><circle cx="14" cy="13" r="5" fill="#fff"/></svg>`;
+ return {
+ iconUrl: 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg),
+ iconSize: [28, 40] as [number, number],
+ iconAnchor: [14, 40] as [number, number]
+ };
+}
+
+export const SITE_ICONS = {
+ 鏀堕泦鐐�: pinIcon('#16a34a'),
+ 鍘嬬缉绔�: pinIcon('#f59e0b'),
+ default: pinIcon('#3b82f6')
+};
+
+export function siteIcon(type: string) {
+ if (type === '鍘嬬缉绔�') return SITE_ICONS.鍘嬬缉绔�;
+ if (type === '鏀堕泦鐐�') return SITE_ICONS.鏀堕泦鐐�;
+ return SITE_ICONS.default;
+}
+
+export const SORTER_ICON = pinIcon('#2563eb');
+export const VEHICLE_ICON = pinIcon('#7c3aed');
+export const PLAY_ICON = pinIcon('#ef4444');
+
+export function useMapsApi() {
+ const { service } = useCool();
+
+ function call(name: string, data?: Record<string, any>) {
+ const api = (service as any).maps?.live?.[name];
+ if (typeof api === 'function') {
+ return api.call((service as any).maps.live, data);
+ }
+ return service.request({
+ url: `admin/maps/live/${name}`,
+ method: 'POST',
+ data
+ });
+ }
+
+ return {
+ sites: () => call('sites'),
+ siteWeight: (data: { businessId: string; startTime: string; endTime: string }) => call('siteWeight', data),
+ sorterOnline: () => call('sorterOnline'),
+ sorterTrack: (data: { idCard: string; startTime: string; endTime: string }) => call('sorterTrack', data),
+ sorterHealth: (idCard: string) => call('sorterHealth', { idCard }),
+ vehicleOnline: () => call('vehicleOnline'),
+ vehicleTrack: (data: { vehicleNo: string; startTime: string; endTime: string }) => call('vehicleTrack', data),
+ vehicleEvents: (vehicleNo: string) => call('vehicleEvents', { vehicleNo })
+ };
+}
+
+export async function fetchYsToken(service: any) {
+ const res = await service.base.sys.param.stringbykey({ key: 'ys7.accessToken' });
+ return (res as string) || '';
+}
+
+export function formatTime(v: any) {
+ if (!v) return '-';
+ const d = new Date(v);
+ if (Number.isNaN(d.getTime())) return String(v);
+ const p = (n: number) => String(n).padStart(2, '0');
+ return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`;
+}
+
+export function dayRange(offsetEnd = 0, offsetStart = 0) {
+ const end = new Date();
+ end.setHours(23, 59, 59, 999);
+ if (offsetEnd) end.setTime(end.getTime() + offsetEnd);
+ const start = new Date();
+ start.setHours(0, 0, 0, 0);
+ if (offsetStart) start.setTime(start.getTime() + offsetStart);
+ return { start, end };
+}
+
+export function lastHours(hours = 1) {
+ const end = new Date();
+ const start = new Date(end.getTime() - hours * 3600 * 1000);
+ return { start, end };
+}
+
+export function toStamp(v: any) {
+ const t = new Date(v).getTime();
+ return Number.isFinite(t) ? t : 0;
+}
diff --git a/src/modules/maps/hooks/use-track.ts b/src/modules/maps/hooks/use-track.ts
new file mode 100644
index 0000000..0ce5628
--- /dev/null
+++ b/src/modules/maps/hooks/use-track.ts
@@ -0,0 +1,97 @@
+import { onBeforeUnmount, ref, type Ref } from 'vue';
+import type { LngLat } from 'vue-tianditu2';
+import { toStamp } from '../hooks/use-map';
+
+export type TrackPoint = { longitude: number; latitude: number; time?: any; speed?: number };
+
+export function useTrackPlayback(points: Ref<TrackPoint[]>) {
+ const playing = ref(false);
+ const speed = ref(5);
+ const progress = ref(0);
+ const playPos = ref<LngLat | null>(null);
+ let raf = 0;
+ let startedAt = 0;
+ let elapsed = 0;
+
+ function path(): LngLat[] {
+ return points.value
+ .filter(p => Number(p.longitude) && Number(p.latitude))
+ .map(p => [Number(p.longitude), Number(p.latitude)] as LngLat);
+ }
+
+ function duration() {
+ const list = points.value;
+ if (list.length < 2) return 8000;
+ const t0 = toStamp(list[0].time);
+ const t1 = toStamp(list[list.length - 1].time);
+ const real = t1 > t0 ? t1 - t0 : list.length * 2000;
+ return Math.max(real, 4000);
+ }
+
+ function at(ratio: number): LngLat | null {
+ const list = path();
+ if (!list.length) return null;
+ if (list.length === 1) return list[0];
+ const times = points.value.map((p, i) => toStamp(p.time) || i * 1000);
+ const t0 = times[0];
+ const t1 = times[times.length - 1];
+ const span = Math.max(t1 - t0, 1);
+ const target = t0 + span * ratio;
+ let i = 0;
+ while (i < times.length - 1 && times[i + 1] < target) i += 1;
+ const a = list[i];
+ const b = list[Math.min(i + 1, list.length - 1)];
+ const seg = Math.max(times[Math.min(i + 1, times.length - 1)] - times[i], 1);
+ const k = Math.min(Math.max((target - times[i]) / seg, 0), 1);
+ return [a[0] + (b[0] - a[0]) * k, a[1] + (b[1] - a[1]) * k];
+ }
+
+ function tick(now: number) {
+ if (!playing.value) return;
+ const total = duration() / Math.max(speed.value, 1);
+ elapsed += now - startedAt;
+ startedAt = now;
+ const ratio = Math.min(elapsed / total, 1);
+ progress.value = Math.round(ratio * 100);
+ playPos.value = at(ratio);
+ if (ratio >= 1) {
+ playing.value = false;
+ return;
+ }
+ raf = requestAnimationFrame(tick);
+ }
+
+ function play() {
+ if (!points.value.length) return;
+ if (progress.value >= 100) {
+ progress.value = 0;
+ elapsed = 0;
+ }
+ playing.value = true;
+ startedAt = performance.now();
+ raf = requestAnimationFrame(tick);
+ }
+
+ function pause() {
+ playing.value = false;
+ cancelAnimationFrame(raf);
+ }
+
+ function stop() {
+ pause();
+ elapsed = 0;
+ progress.value = 0;
+ playPos.value = points.value.length
+ ? [Number(points.value[0].longitude), Number(points.value[0].latitude)]
+ : null;
+ }
+
+ function reset() {
+ stop();
+ playPos.value = null;
+ }
+
+ onBeforeUnmount(pause);
+
+ return { playing, speed, progress, playPos, path, play, pause, stop, reset };
+}
diff --git a/src/modules/maps/views/layers.vue b/src/modules/maps/views/layers.vue
deleted file mode 100644
index 5bcbe23..0000000
--- a/src/modules/maps/views/layers.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-<!--App.vue-->
-<template>
- <div :class="state.copyright ? '' : 'hide-copyright'" class="mapDiv">
- <tdt-map :center="state.center" :controls="state.controls" :zoom="state.zoom" :loadConfig="loadConfig">
- <tdt-control :visible="state.visible" position="topright">
- </tdt-control>
- </tdt-map>
- </div>
-</template>
-
-<script lang="ts" setup>
-import { reactive } from "vue";
-import { TdtMap, type LngLat } from "vue-tianditu2";
-
-const loadConfig = { v: "4.0", tk: "51915011aa0997aa2ddd7e38504fa8bc" };
-const state = reactive({
- center: [121.280637, 32.125178] as LngLat,
- zoom: 12,
- visible: true,
- copyright: false,
- controls: [
- "Zoom",
- "Scale",
- {
- name: "MapType",
- position: "topright",
- mapTypes: [
- {
- title: "鍦板浘", //鍦板浘鎺т欢涓婃墍瑕佹樉绀虹殑鍥惧眰鍚嶇О
- icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/vector.png", //鍦板浘鎺т欢涓婃墍瑕佹樉绀虹殑鍥惧眰鍥炬爣锛堥粯璁ゅ浘鏍囧ぇ灏� 80x80锛�
- layer: "TMAP_NORMAL_MAP" //鍦板浘绫诲瀷锛屽湪鍘熷ぉ鍦板浘api涓互window.TMAP_NORMAL_MAP琛ㄧず锛屾澶勪负瀛楃涓�
- },
- {
- title: "鍗槦",
- icon: " https://api.tianditu.gov.cn/v4.0/image/map/maptype/satellite.png",
- layer: "TMAP_SATELLITE_MAP"
- },
- {
- title: "鍗槦娣峰悎",
- icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/satellitepoi.png",
- layer: "TMAP_HYBRID_MAP"
- }
- // {
- // title: "鍦板舰",
- // icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/terrain.png",
- // layer: "TMAP_TERRAIN_MAP"
- // },
- // {
- // title: "鍦板舰娣峰悎",
- // icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/terrainpoi.png",
- // layer: "TMAP_TERRAIN_HYBRID_MAP"
- // }
- ]
- },
- {
- name: "OverviewMap",
- isOpen: true,
- anchor: "bottomright"
- },
- {
- name: "Copyright",
- id: "custom",
- content: `<div style="height:40px"><button class="demo-button">鑷畾涔夌殑鐗堟潈鎺т欢</button></div>`,
- position: "bottomleft",
- bounds: [
- [113.52791, 23.21989],
- [113.03352, 23.03045]
- ]
- }
- ]
-});
-</script>
-
-<style>
-.mapDiv {
- width: 100%;
- height: 100%;
- padding: 0%;
-}
-
-.hide-copyright :deep(.tdt-control-copyright.tdt-control > div:not(.tdt-control-copyright)) {
- display: none;
-}
-</style>
\ No newline at end of file
diff --git a/src/modules/maps/views/site.vue b/src/modules/maps/views/site.vue
new file mode 100644
index 0000000..4a0bd59
--- /dev/null
+++ b/src/modules/maps/views/site.vue
@@ -0,0 +1,296 @@
+<template>
+ <map-board :open="!!current" :title="current?.businessName" :sub="current?.siteType" @close="current = null">
+ <template #side-head>
+ <el-input v-model="keyword" placeholder="鎼滅储绔欑偣" clearable size="small" />
+ <div class="filters">
+ <el-checkbox-group v-model="types" size="small">
+ <el-checkbox value="鏀堕泦鐐�" label="鏀堕泦鐐�">鏀堕泦鐐�</el-checkbox>
+ <el-checkbox value="鍘嬬缉绔�" label="鍘嬬缉绔�">鍘嬬缉绔�</el-checkbox>
+ </el-checkbox-group>
+ </div>
+ </template>
+ <template #side>
+ <div
+ v-for="item in visibleSites"
+ :key="item.id"
+ class="list-item"
+ :class="{ 'is-active': current?.id === item.id }"
+ @click="select(item)"
+ >
+ <i :style="{ background: item.siteType === '鍘嬬缉绔�' ? '#f59e0b' : '#16a34a' }" />
+ <div>
+ <div class="list-item__name">{{ item.businessName }}</div>
+ <div class="list-item__meta">{{ item.siteType }} 路 {{ item.address || '鏃犲湴鍧�' }}</div>
+ </div>
+ </div>
+ <el-empty v-if="!visibleSites.length" description="鏆傛棤绔欑偣" :image-size="64" />
+ </template>
+ <template #legend>
+ <div class="legend"><i style="background:#16a34a" />鏀堕泦鐐�</div>
+ <div class="legend"><i style="background:#f59e0b" />鍘嬬缉绔�</div>
+ </template>
+ <template #map>
+ <div class="mapDiv">
+ <tdt-map :center="center" :zoom="zoom" :controls="controls" :loadConfig="MAP_LOAD">
+ <tdt-marker
+ v-for="item in visibleSites"
+ :key="item.id"
+ :position="pos(item)"
+ :icon="siteIcon(item.siteType)"
+ :title="item.businessName"
+ @click="select(item)"
+ />
+ </tdt-map>
+ </div>
+ </template>
+ <template #panel>
+ <el-tabs v-model="tab">
+ <el-tab-pane label="鍩烘湰灞炴��" name="info">
+ <el-descriptions :column="1" border size="small">
+ <el-descriptions-item label="绔欑偣缂栫爜">{{ current?.businessId }}</el-descriptions-item>
+ <el-descriptions-item label="鍚嶇О">{{ current?.businessName }}</el-descriptions-item>
+ <el-descriptions-item label="绫诲瀷">{{ current?.siteType }}</el-descriptions-item>
+ <el-descriptions-item label="鍦板潃">{{ current?.address || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="璐熻矗浜�">{{ current?.leader || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="缁忕含搴�">{{ current?.longitude }}, {{ current?.latitude }}</el-descriptions-item>
+ <el-descriptions-item label="澶囨敞">{{ current?.remark || '-' }}</el-descriptions-item>
+ </el-descriptions>
+ <cl-image v-if="current?.photo" :src="current.photo" style="margin-top: 10px; width: 100%" />
+ </el-tab-pane>
+ <el-tab-pane label="瀹炴椂鐩戞帶" name="live">
+ <el-empty v-if="!cameras.length" description="璇ョ珯鐐规病鏈夊叧鑱旂洃鎺�" :image-size="72" />
+ <div v-for="dev in cameras" :key="dev.id" class="cam">
+ <div class="cam__name">{{ dev.iotName || dev.iotCode }}</div>
+ <ezuikit-player
+ v-if="ysToken"
+ :key="'p_' + dev.id + '_' + ysToken"
+ :container-id="'site_player_' + dev.id"
+ :access-token="ysToken"
+ :url="`ezopen://open.ys7.com/${dev.iotCode}/1.hd.live`"
+ />
+ </div>
+ </el-tab-pane>
+ <el-tab-pane label="绉伴噸鍘嗗彶" name="weight">
+ <div class="weight-tools">
+ <span>榛樿褰撳ぉ</span>
+ <el-popover v-model:visible="weightOpen" placement="bottom-end" :width="340" trigger="click">
+ <template #reference>
+ <el-button :icon="Setting" circle size="small" />
+ </template>
+ <div class="weight-form">
+ <el-date-picker
+ v-model="weightRange"
+ type="datetimerange"
+ start-placeholder="寮�濮嬫椂闂�"
+ end-placeholder="缁撴潫鏃堕棿"
+ format="YYYY-MM-DD HH:mm"
+ value-format="YYYY-MM-DD HH:mm:ss"
+ size="small"
+ />
+ <div class="weight-form__actions">
+ <el-button size="small" @click="weightOpen = false">鍙栨秷</el-button>
+ <el-button type="primary" size="small" @click="queryWeight()">鏌ヨ</el-button>
+ </div>
+ </div>
+ </el-popover>
+ </div>
+ <el-table :data="weights" size="small" height="360" stripe>
+ <el-table-column prop="uploadTime" label="鏃堕棿" min-width="150">
+ <template #default="{ row }">{{ formatTime(row.uploadTime) }}</template>
+ </el-table-column>
+ <el-table-column prop="garbageName" label="绉嶇被" min-width="90">
+ <template #default="{ row }">{{ row.garbageName || row.garbageType }}</template>
+ </el-table-column>
+ <el-table-column prop="weight" label="閲嶉噺kg" width="80" />
+ <el-table-column prop="deviceNo" label="璁惧" min-width="90" />
+ </el-table>
+ </el-tab-pane>
+ </el-tabs>
+ </template>
+ </map-board>
+</template>
+
+<script lang="ts" setup>
+defineOptions({ name: 'maps-layers' });
+
+import { computed, onMounted, ref } from 'vue';
+import { Setting } from '@element-plus/icons-vue';
+import { TdtMap, TdtMarker, type LngLat } from 'vue-tianditu2';
+import { useCool } from '/@/cool';
+import EzuikitPlayer from '../../ezuikit/components/ezuikit-player.vue';
+import MapBoard from '../components/map-board.vue';
+import {
+ DEFAULT_CENTER,
+ MAP_LOAD,
+ siteIcon,
+ fetchYsToken,
+ formatTime,
+ useMapsApi
+} from '../hooks/use-map';
+
+const { service } = useCool();
+const api = useMapsApi();
+
+const sites = ref<any[]>([]);
+const keyword = ref('');
+const types = ref(['鏀堕泦鐐�', '鍘嬬缉绔�']);
+const current = ref<any>(null);
+const center = ref<LngLat>(DEFAULT_CENTER);
+const zoom = ref(12);
+const tab = ref('info');
+const cameras = ref<any[]>([]);
+const ysToken = ref('');
+const weights = ref<any[]>([]);
+const weightOpen = ref(false);
+const weightRange = ref<[string, string] | null>(null);
+
+const controls = ['Zoom', 'Scale', { name: 'MapType', position: 'topright' }];
+
+const visibleSites = computed(() =>
+ sites.value.filter(e => {
+ if (!types.value.includes(e.siteType)) return false;
+ if (!keyword.value) return true;
+ const k = keyword.value.toLowerCase();
+ return [e.businessName, e.businessId, e.address].some(v => String(v || '').toLowerCase().includes(k));
+ })
+);
+
+function pos(item: any): LngLat {
+ return [Number(item.longitude), Number(item.latitude)];
+}
+
+function todayRange() {
+ const d = new Date();
+ const p = (n: number) => String(n).padStart(2, '0');
+ const day = `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`;
+ return [`${day} 00:00:00`, `${day} 23:59:59`] as [string, string];
+}
+
+async function select(item: any) {
+ current.value = item;
+ center.value = pos(item);
+ zoom.value = 16;
+ tab.value = 'info';
+ cameras.value = [];
+ weights.value = [];
+ weightRange.value = todayRange();
+ if (!ysToken.value) {
+ try {
+ ysToken.value = await fetchYsToken(service);
+ } catch {}
+ }
+ try {
+ cameras.value = (await service.basicdata.iot.getYsDevices({ businessId: item.businessId })) || [];
+ } catch {
+ cameras.value = [];
+ }
+ await queryWeight();
+}
+
+async function queryWeight() {
+ if (!current.value) return;
+ weightOpen.value = false;
+ const range = weightRange.value || todayRange();
+ weights.value = (await api.siteWeight({
+ businessId: current.value.businessId,
+ startTime: range[0],
+ endTime: range[1]
+ })) || [];
+}
+
+onMounted(async () => {
+ sites.value = (await api.sites()) || [];
+ const first = visibleSites.value[0];
+ if (first) {
+ center.value = pos(first);
+ zoom.value = 13;
+ }
+});
+</script>
+
+<style lang="scss" scoped>
+.filters {
+ margin-top: 8px;
+}
+
+.list-item {
+ display: flex;
+ gap: 8px;
+ padding: 10px 12px;
+ cursor: pointer;
+ border-bottom: 1px solid var(--el-border-color-extra-light);
+
+ i {
+ width: 8px;
+ height: 8px;
+ margin-top: 6px;
+ border-radius: 50%;
+ flex-shrink: 0;
+ }
+
+ &:hover,
+ &.is-active {
+ background: var(--el-color-primary-light-9);
+ }
+
+ &__name {
+ font-size: 13px;
+ font-weight: 600;
+ }
+
+ &__meta {
+ margin-top: 2px;
+ font-size: 12px;
+ color: var(--el-text-color-secondary);
+ }
+}
+
+.legend {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ margin: 2px 0;
+
+ i {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ }
+}
+
+.cam {
+ margin-bottom: 12px;
+
+ &__name {
+ margin-bottom: 6px;
+ font-size: 13px;
+ color: var(--el-text-color-regular);
+ }
+}
+
+.weight-tools {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin: 8px 0;
+ font-size: 12px;
+ color: var(--el-text-color-secondary);
+}
+
+.weight-form {
+ display: flex;
+ flex-direction: column;
+ gap: 8px;
+
+ &__actions {
+ display: flex;
+ justify-content: flex-end;
+ gap: 8px;
+ }
+}
+
+.mapDiv {
+ width: 100%;
+ height: 100%;
+}
+</style>
diff --git a/src/modules/maps/views/sorter.vue b/src/modules/maps/views/sorter.vue
new file mode 100644
index 0000000..1b1f845
--- /dev/null
+++ b/src/modules/maps/views/sorter.vue
@@ -0,0 +1,267 @@
+<template>
+ <map-board :open="!!current" :title="current?.name" :sub="current?.idCard" @close="close">
+ <template #side-head>
+ <el-input v-model="keyword" placeholder="鎼滅储鍒嗘嫞鍛�" clearable size="small" />
+ <div class="hint">鏈�杩� 15 鍒嗛挓鏈� GPS 瑙嗕负鍦ㄧ嚎 路 {{ list.length }} 浜�</div>
+ </template>
+ <template #side>
+ <div
+ v-for="item in visibleList"
+ :key="item.idCard"
+ class="list-item"
+ :class="{ 'is-active': current?.idCard === item.idCard }"
+ @click="select(item)"
+ >
+ <i />
+ <div>
+ <div class="list-item__name">{{ item.name || item.idCard }}</div>
+ <div class="list-item__meta">{{ formatTime(item.uploadTime) }} 路 {{ item.speed || 0 }} km/h</div>
+ </div>
+ </div>
+ <el-empty v-if="!visibleList.length" description="褰撳墠娌℃湁鍦ㄧ嚎鍒嗘嫞鍛�" :image-size="64" />
+ </template>
+ <template #legend>
+ <div class="legend"><i style="background:#2563eb" />鍦ㄧ嚎鍒嗘嫞鍛�</div>
+ <div class="legend"><i style="background:#ef4444" />杞ㄨ抗鍥炴斁</div>
+ </template>
+ <template #map>
+ <div class="mapDiv">
+ <tdt-map :center="center" :zoom="zoom" :controls="controls" :loadConfig="MAP_LOAD">
+ <tdt-marker
+ v-for="item in visibleList"
+ :key="item.idCard"
+ :position="pos(item)"
+ :icon="SORTER_ICON"
+ :title="item.name"
+ @click="select(item)"
+ />
+ <tdt-polyline v-if="trackPath.length" :path="trackPath" color="#16a34a" :weight="4" :opacity="0.85" />
+ <tdt-marker v-if="playPos" :position="playPos" :icon="PLAY_ICON" title="鍥炴斁浣嶇疆" />
+ </tdt-map>
+ </div>
+ </template>
+ <template #panel>
+ <el-tabs v-model="tab">
+ <el-tab-pane label="鍩烘湰淇℃伅" name="info">
+ <el-descriptions :column="1" border size="small">
+ <el-descriptions-item label="濮撳悕">{{ current?.name }}</el-descriptions-item>
+ <el-descriptions-item label="韬唤璇�">{{ current?.idCard }}</el-descriptions-item>
+ <el-descriptions-item label="鎵嬫満">{{ current?.phone || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="宸ヤ綔绔欑偣">{{ current?.workSiteId || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="褰撳墠閫熷害">{{ current?.speed || 0 }} km/h</el-descriptions-item>
+ <el-descriptions-item label="瀹氫綅鏃堕棿">{{ formatTime(current?.uploadTime) }}</el-descriptions-item>
+ </el-descriptions>
+ </el-tab-pane>
+ <el-tab-pane label="鍋ュ悍涓婃姤" name="health">
+ <el-table :data="health.recent" size="small" height="220" stripe>
+ <el-table-column label="鏃堕棿" min-width="140">
+ <template #default="{ row }">{{ formatTime(row.uploadTime) }}</template>
+ </el-table-column>
+ <el-table-column prop="temperature" label="浣撴俯" width="64" />
+ <el-table-column prop="heartRate" label="蹇冪巼" width="64" />
+ <el-table-column label="琛�鍘�" width="80">
+ <template #default="{ row }">{{ row.bloodPressureHigh || '-' }}/{{ row.bloodPressureLow || '-' }}</template>
+ </el-table-column>
+ <el-table-column prop="bloodOxygen" label="琛�姘�" width="64" />
+ <el-table-column prop="dataType" label="绫诲瀷" width="64" />
+ </el-table>
+ <div class="block-title">寮傚父涓婃姤</div>
+ <el-table :data="health.abnormal" size="small" height="160" stripe>
+ <el-table-column label="鏃堕棿" min-width="140">
+ <template #default="{ row }">{{ formatTime(row.uploadTime) }}</template>
+ </el-table-column>
+ <el-table-column prop="temperature" label="浣撴俯" width="64" />
+ <el-table-column prop="heartRate" label="蹇冪巼" width="64" />
+ <el-table-column prop="dataType" label="绫诲瀷" width="64" />
+ </el-table>
+ <div class="block-title">鍋ュ悍鍛婅</div>
+ <el-table :data="health.alarms" size="small" height="160" stripe>
+ <el-table-column label="鏃堕棿" min-width="140">
+ <template #default="{ row }">{{ formatTime(row.uploadTime) }}</template>
+ </el-table-column>
+ <el-table-column prop="alarmType" label="绫诲瀷" min-width="80" />
+ <el-table-column prop="alarmLevel" label="绾у埆" width="70" />
+ <el-table-column prop="content" label="鍐呭" min-width="120" show-overflow-tooltip />
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="鍘嗗彶杞ㄨ抗" name="track">
+ <track-toolbar
+ v-model:speed="speed"
+ :playing="playing"
+ :progress="progress"
+ :has-track="trackPoints.length > 1"
+ :start-time="trackStart"
+ :end-time="trackEnd"
+ @play="play"
+ @pause="pause"
+ @stop="stop"
+ @query="onQueryTrack"
+ />
+ <div class="hint">榛樿鏈�杩� 1 灏忔椂锛屽洖鏀鹃粯璁� 5 鍊嶉��</div>
+ </el-tab-pane>
+ </el-tabs>
+ </template>
+ </map-board>
+</template>
+
+<script lang="ts" setup>
+defineOptions({ name: 'maps-sorter' });
+
+import { computed, onBeforeUnmount, onMounted, ref } from 'vue';
+import { TdtMap, TdtMarker, TdtPolyline, type LngLat } from 'vue-tianditu2';
+import MapBoard from '../components/map-board.vue';
+import TrackToolbar from '../components/track-toolbar.vue';
+import { DEFAULT_CENTER, MAP_LOAD, PLAY_ICON, SORTER_ICON, formatTime, lastHours, useMapsApi } from '../hooks/use-map';
+import { useTrackPlayback, type TrackPoint } from '../hooks/use-track';
+
+const api = useMapsApi();
+const list = ref<any[]>([]);
+const keyword = ref('');
+const current = ref<any>(null);
+const center = ref<LngLat>(DEFAULT_CENTER);
+const zoom = ref(12);
+const tab = ref('info');
+const health = ref<{ recent: any[]; abnormal: any[]; alarms: any[] }>({ recent: [], abnormal: [], alarms: [] });
+const trackPoints = ref<TrackPoint[]>([]);
+const trackStart = ref('');
+const trackEnd = ref('');
+const { playing, speed, progress, playPos, path, play, pause, stop, reset } = useTrackPlayback(trackPoints);
+const trackPath = computed(() => path());
+const controls = ['Zoom', 'Scale', { name: 'MapType', position: 'topright' }];
+let timer: number;
+
+const visibleList = computed(() => {
+ if (!keyword.value) return list.value;
+ const k = keyword.value.toLowerCase();
+ return list.value.filter(e => [e.name, e.idCard, e.phone].some(v => String(v || '').toLowerCase().includes(k)));
+});
+
+function pos(item: any): LngLat {
+ return [Number(item.longitude), Number(item.latitude)];
+}
+
+function fmt(d: Date) {
+ const p = (n: number) => String(n).padStart(2, '0');
+ return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`;
+}
+
+async function loadOnline() {
+ list.value = (await api.sorterOnline()) || [];
+ if (!current.value && list.value[0]) {
+ center.value = pos(list.value[0]);
+ zoom.value = 13;
+ }
+}
+
+async function select(item: any) {
+ current.value = item;
+ center.value = pos(item);
+ zoom.value = 16;
+ tab.value = 'info';
+ reset();
+ const { start, end } = lastHours(1);
+ trackStart.value = fmt(start);
+ trackEnd.value = fmt(end);
+ const [h, track] = await Promise.all([
+ api.sorterHealth(item.idCard),
+ api.sorterTrack({ idCard: item.idCard, startTime: trackStart.value, endTime: trackEnd.value })
+ ]);
+ health.value = h || { recent: [], abnormal: [], alarms: [] };
+ trackPoints.value = track || [];
+ if (trackPoints.value.length) {
+ playPos.value = pos(trackPoints.value[0] as any);
+ }
+}
+
+async function onQueryTrack(range: [string, string]) {
+ if (!current.value) return;
+ trackStart.value = range[0];
+ trackEnd.value = range[1];
+ reset();
+ trackPoints.value = (await api.sorterTrack({
+ idCard: current.value.idCard,
+ startTime: range[0],
+ endTime: range[1]
+ })) || [];
+}
+
+function close() {
+ current.value = null;
+ reset();
+ trackPoints.value = [];
+}
+
+onMounted(async () => {
+ await loadOnline();
+ timer = window.setInterval(loadOnline, 30000);
+});
+
+onBeforeUnmount(() => clearInterval(timer));
+</script>
+
+<style lang="scss" scoped>
+.hint {
+ margin-top: 8px;
+ font-size: 12px;
+ color: var(--el-text-color-secondary);
+ line-height: 1.4;
+}
+
+.list-item {
+ display: flex;
+ gap: 8px;
+ padding: 10px 12px;
+ cursor: pointer;
+ border-bottom: 1px solid var(--el-border-color-extra-light);
+
+ i {
+ width: 8px;
+ height: 8px;
+ margin-top: 6px;
+ border-radius: 50%;
+ background: #22c55e;
+ flex-shrink: 0;
+ }
+
+ &:hover,
+ &.is-active {
+ background: var(--el-color-primary-light-9);
+ }
+
+ &__name {
+ font-size: 13px;
+ font-weight: 600;
+ }
+
+ &__meta {
+ margin-top: 2px;
+ font-size: 12px;
+ color: var(--el-text-color-secondary);
+ }
+}
+
+.legend {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ margin: 2px 0;
+ font-size: 12px;
+
+ i {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ }
+}
+
+.block-title {
+ margin: 12px 0 6px;
+ font-size: 13px;
+ font-weight: 600;
+}
+
+.mapDiv {
+ width: 100%;
+ height: 100%;
+}
+</style>
diff --git a/src/modules/maps/views/vehicle.vue b/src/modules/maps/views/vehicle.vue
new file mode 100644
index 0000000..458484b
--- /dev/null
+++ b/src/modules/maps/views/vehicle.vue
@@ -0,0 +1,285 @@
+<template>
+ <map-board :open="!!current" :title="current?.vehicleNo" :sub="current?.vehicleType" @close="close">
+ <template #side-head>
+ <el-input v-model="keyword" placeholder="鎼滅储杞︾墝" clearable size="small" />
+ <div class="hint">鏈�杩� 15 鍒嗛挓鏈� GPS 瑙嗕负鍦ㄧ嚎 路 {{ list.length }} 杈�</div>
+ </template>
+ <template #side>
+ <div
+ v-for="item in visibleList"
+ :key="item.vehicleNo"
+ class="list-item"
+ :class="{ 'is-active': current?.vehicleNo === item.vehicleNo }"
+ @click="select(item)"
+ >
+ <i />
+ <div>
+ <div class="list-item__name">{{ item.vehicleNo }}</div>
+ <div class="list-item__meta">{{ formatTime(item.gpsTime) }} 路 {{ item.speed || 0 }} km/h</div>
+ </div>
+ </div>
+ <el-empty v-if="!visibleList.length" description="褰撳墠娌℃湁鍦ㄧ嚎杞﹁締" :image-size="64" />
+ </template>
+ <template #legend>
+ <div class="legend"><i style="background:#7c3aed" />鍦ㄧ嚎杞﹁締</div>
+ <div class="legend"><i style="background:#ef4444" />杞ㄨ抗鍥炴斁</div>
+ </template>
+ <template #map>
+ <div class="mapDiv">
+ <tdt-map :center="center" :zoom="zoom" :controls="controls" :loadConfig="MAP_LOAD">
+ <tdt-marker
+ v-for="item in visibleList"
+ :key="item.vehicleNo"
+ :position="pos(item)"
+ :icon="VEHICLE_ICON"
+ :title="item.vehicleNo"
+ @click="select(item)"
+ />
+ <tdt-polyline v-if="trackPath.length" :path="trackPath" color="#7c3aed" :weight="4" :opacity="0.85" />
+ <tdt-marker v-if="playPos" :position="playPos" :icon="PLAY_ICON" title="鍥炴斁浣嶇疆" />
+ </tdt-map>
+ </div>
+ </template>
+ <template #panel>
+ <el-tabs v-model="tab">
+ <el-tab-pane label="鍩烘湰淇℃伅" name="info">
+ <el-descriptions :column="1" border size="small">
+ <el-descriptions-item label="杞︾墝">{{ current?.vehicleNo }}</el-descriptions-item>
+ <el-descriptions-item label="杞﹀瀷">{{ current?.vehicleType || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="杞介噸">{{ current?.capacityTon || '-' }} 鍚�</el-descriptions-item>
+ <el-descriptions-item label="璁惧鍙�">{{ current?.sn || '-' }}</el-descriptions-item>
+ <el-descriptions-item label="褰撳墠閫熷害">{{ current?.speed || 0 }} km/h</el-descriptions-item>
+ <el-descriptions-item label="瀹氫綅鏃堕棿">{{ formatTime(current?.gpsTime) }}</el-descriptions-item>
+ </el-descriptions>
+ </el-tab-pane>
+ <el-tab-pane label="鍙告満琛屼负" name="event">
+ <el-table :data="events" size="small" height="280" stripe>
+ <el-table-column label="鏃堕棿" min-width="140">
+ <template #default="{ row }">{{ formatTime(row.alarmTime || row.createTime) }}</template>
+ </el-table-column>
+ <el-table-column prop="alarmType" label="绫诲瀷" min-width="90" />
+ <el-table-column prop="describe" label="鎻忚堪" min-width="120" show-overflow-tooltip />
+ <el-table-column prop="deviceName" label="璁惧" min-width="90" show-overflow-tooltip />
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="杞﹁浇鐩戞帶" name="live">
+ <el-empty v-if="!cameras.length" description="璇ヨ溅杈嗘病鏈夊叧鑱旇溅杞芥憚鍍忓ご" :image-size="72" />
+ <div v-for="dev in cameras" :key="dev.id" class="cam">
+ <div class="cam__name">{{ dev.iotName || dev.iotCode }}</div>
+ <ezuikit-player
+ v-if="ysToken"
+ :key="'v_' + dev.id + '_' + ysToken"
+ :container-id="'vehicle_player_' + dev.id"
+ :access-token="ysToken"
+ :url="`ezopen://open.ys7.com/${dev.iotCode}/1.hd.live`"
+ />
+ </div>
+ </el-tab-pane>
+ <el-tab-pane label="鍘嗗彶杞ㄨ抗" name="track">
+ <track-toolbar
+ v-model:speed="speed"
+ :playing="playing"
+ :progress="progress"
+ :has-track="trackPoints.length > 1"
+ :start-time="trackStart"
+ :end-time="trackEnd"
+ @play="play"
+ @pause="pause"
+ @stop="stop"
+ @query="onQueryTrack"
+ />
+ <div class="hint">榛樿鏈�杩� 1 灏忔椂锛屽洖鏀鹃粯璁� 5 鍊嶉��</div>
+ </el-tab-pane>
+ </el-tabs>
+ </template>
+ </map-board>
+</template>
+
+<script lang="ts" setup>
+defineOptions({ name: 'maps-vehicle' });
+
+import { computed, onBeforeUnmount, onMounted, ref } from 'vue';
+import { TdtMap, TdtMarker, TdtPolyline, type LngLat } from 'vue-tianditu2';
+import { useCool } from '/@/cool';
+import EzuikitPlayer from '../../ezuikit/components/ezuikit-player.vue';
+import MapBoard from '../components/map-board.vue';
+import TrackToolbar from '../components/track-toolbar.vue';
+import {
+ DEFAULT_CENTER,
+ MAP_LOAD,
+ PLAY_ICON,
+ VEHICLE_ICON,
+ fetchYsToken,
+ formatTime,
+ lastHours,
+ useMapsApi
+} from '../hooks/use-map';
+import { useTrackPlayback, type TrackPoint } from '../hooks/use-track';
+
+const { service } = useCool();
+const api = useMapsApi();
+const list = ref<any[]>([]);
+const keyword = ref('');
+const current = ref<any>(null);
+const center = ref<LngLat>(DEFAULT_CENTER);
+const zoom = ref(12);
+const tab = ref('info');
+const events = ref<any[]>([]);
+const cameras = ref<any[]>([]);
+const ysToken = ref('');
+const trackPoints = ref<TrackPoint[]>([]);
+const trackStart = ref('');
+const trackEnd = ref('');
+const { playing, speed, progress, playPos, path, play, pause, stop, reset } = useTrackPlayback(trackPoints);
+const trackPath = computed(() => path());
+const controls = ['Zoom', 'Scale', { name: 'MapType', position: 'topright' }];
+let timer: number;
+
+const visibleList = computed(() => {
+ if (!keyword.value) return list.value;
+ const k = keyword.value.toLowerCase();
+ return list.value.filter(e => String(e.vehicleNo || '').toLowerCase().includes(k));
+});
+
+function pos(item: any): LngLat {
+ return [Number(item.longitude), Number(item.latitude)];
+}
+
+function fmt(d: Date) {
+ const p = (n: number) => String(n).padStart(2, '0');
+ return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`;
+}
+
+async function loadOnline() {
+ list.value = (await api.vehicleOnline()) || [];
+ if (!current.value && list.value[0]) {
+ center.value = pos(list.value[0]);
+ zoom.value = 13;
+ }
+}
+
+async function select(item: any) {
+ current.value = item;
+ center.value = pos(item);
+ zoom.value = 16;
+ tab.value = 'info';
+ reset();
+ cameras.value = [];
+ events.value = [];
+ const { start, end } = lastHours(1);
+ trackStart.value = fmt(start);
+ trackEnd.value = fmt(end);
+ if (!ysToken.value) {
+ try {
+ ysToken.value = await fetchYsToken(service);
+ } catch {}
+ }
+ const [ev, cam, track] = await Promise.all([
+ api.vehicleEvents(item.vehicleNo),
+ service.basicdata.iot.getYsDevices({ businessId: item.vehicleNo }).catch(() => []),
+ api.vehicleTrack({ vehicleNo: item.vehicleNo, startTime: trackStart.value, endTime: trackEnd.value })
+ ]);
+ events.value = ev || [];
+ cameras.value = cam || [];
+ trackPoints.value = track || [];
+ if (trackPoints.value.length) {
+ playPos.value = [Number(trackPoints.value[0].longitude), Number(trackPoints.value[0].latitude)];
+ }
+}
+
+async function onQueryTrack(range: [string, string]) {
+ if (!current.value) return;
+ trackStart.value = range[0];
+ trackEnd.value = range[1];
+ reset();
+ trackPoints.value = (await api.vehicleTrack({
+ vehicleNo: current.value.vehicleNo,
+ startTime: range[0],
+ endTime: range[1]
+ })) || [];
+}
+
+function close() {
+ current.value = null;
+ reset();
+ trackPoints.value = [];
+}
+
+onMounted(async () => {
+ await loadOnline();
+ timer = window.setInterval(loadOnline, 30000);
+});
+
+onBeforeUnmount(() => clearInterval(timer));
+</script>
+
+<style lang="scss" scoped>
+.hint {
+ margin-top: 8px;
+ font-size: 12px;
+ color: var(--el-text-color-secondary);
+ line-height: 1.4;
+}
+
+.list-item {
+ display: flex;
+ gap: 8px;
+ padding: 10px 12px;
+ cursor: pointer;
+ border-bottom: 1px solid var(--el-border-color-extra-light);
+
+ i {
+ width: 8px;
+ height: 8px;
+ margin-top: 6px;
+ border-radius: 50%;
+ background: #7c3aed;
+ flex-shrink: 0;
+ }
+
+ &:hover,
+ &.is-active {
+ background: var(--el-color-primary-light-9);
+ }
+
+ &__name {
+ font-size: 13px;
+ font-weight: 600;
+ }
+
+ &__meta {
+ margin-top: 2px;
+ font-size: 12px;
+ color: var(--el-text-color-secondary);
+ }
+}
+
+.legend {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+ margin: 2px 0;
+ font-size: 12px;
+
+ i {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ }
+}
+
+.cam {
+ margin-bottom: 12px;
+
+ &__name {
+ margin-bottom: 6px;
+ font-size: 13px;
+ color: var(--el-text-color-regular);
+ }
+}
+
+.mapDiv {
+ width: 100%;
+ height: 100%;
+}
+</style>
--
Gitblit v1.9.1