From 125a07cbf18d4edd5f795edf846db38beb47d116 Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期五, 17 七月 2026 16:26:18 +0800
Subject: [PATCH] 可回收物销售

---
 build/cool/eps.d.ts                       |  410 +++++++++++++++++++---
 src/modules/operation/views/wastesale.vue |  319 +++++++++++++++++
 src/modules/basicdata/locales/zh-cn.json  |    8 
 src/modules/operation/locales/en.json     |   55 +++
 src/modules/operation/locales/zh-tw.json  |   55 +++
 src/modules/operation/locales/zh-cn.json  |   55 +++
 build/cool/eps.json                       |    2 
 src/modules/basicdata/locales/en.json     |    8 
 src/modules/basicdata/locales/zh-tw.json  |    8 
 src/modules/basicdata/views/buyer.vue     |  146 ++++++++
 10 files changed, 998 insertions(+), 68 deletions(-)

diff --git a/build/cool/eps.d.ts b/build/cool/eps.d.ts
index de6bf9f..38775c0 100644
--- a/build/cool/eps.d.ts
+++ b/build/cool/eps.d.ts
@@ -351,6 +351,68 @@
 		[key: string]: any;
 	}
 
+	interface BasicdataBuyerEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 閮ㄩ棬ID
+		 */
+		departmentId?: BigInt;
+
+		/**
+		 * 浠g爜
+		 */
+		code?: string;
+
+		/**
+		 * 鍚嶇О
+		 */
+		name?: string;
+
+		/**
+		 * 鍦板潃
+		 */
+		address?: string;
+
+		/**
+		 * 鑱旂郴浜�
+		 */
+		contact?: string;
+
+		/**
+		 * 鑱旂郴鐢佃瘽
+		 */
+		phone?: string;
+
+		/**
+		 * 澶囨敞
+		 */
+		remark?: string;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
 	interface BasicdataDriverEntity {
 		/**
 		 * ID
@@ -1002,6 +1064,98 @@
 		 * 鏇存柊鏃堕棿
 		 */
 		updateTime?: string;
+
+		/**
+		 * 浠绘剰閿��
+		 */
+		[key: string]: any;
+	}
+
+	interface OperationWastesaleEntity {
+		/**
+		 * ID
+		 */
+		id?: number;
+
+		/**
+		 * 閮ㄩ棬ID
+		 */
+		departmentId?: BigInt;
+
+		/**
+		 * 鏀堕泦鐐笽D
+		 */
+		siteId?: string;
+
+		/**
+		 * 鍨冨溇绉嶇被
+		 */
+		wasteCode?: string;
+
+		/**
+		 * 鏃ユ湡鏃堕棿
+		 */
+		dateTime?: Date;
+
+		/**
+		 * 閲嶉噺
+		 */
+		weight?: number;
+
+		/**
+		 * 鍗曚环
+		 */
+		unitPrice?: number;
+
+		/**
+		 * 鎬讳环
+		 */
+		totalPrice?: number;
+
+		/**
+		 * 缁忔墜浜篒D
+		 */
+		handlerId?: BigInt;
+
+		/**
+		 * 鏀惰喘鏂逛唬鐮�
+		 */
+		buyerCode?: string;
+
+		/**
+		 * 鍒涘缓鏃堕棿
+		 */
+		createTime?: string;
+
+		/**
+		 * 鏇存柊鏃堕棿
+		 */
+		updateTime?: string;
+
+		/**
+		 * 閮ㄩ棬鍚嶇О
+		 */
+		departmentName?: string;
+
+		/**
+		 * 鍚嶇О
+		 */
+		siteName?: string;
+
+		/**
+		 * 鍚嶇О
+		 */
+		wasteName?: string;
+
+		/**
+		 * 濮撳悕
+		 */
+		handlerName?: string;
+
+		/**
+		 * 鍚嶇О
+		 */
+		buyerName?: string;
 
 		/**
 		 * 浠绘剰閿��
@@ -1960,6 +2114,11 @@
 		list: BasicdataWastetypeEntity[];
 	}
 
+	interface BasicdataBuyerPageResponse {
+		pagination: PagePagination;
+		list: BasicdataBuyerEntity[];
+	}
+
 	interface DemoGoodsPageResponse {
 		pagination: PagePagination;
 		list: DemoGoodsEntity[];
@@ -1990,6 +2149,11 @@
 		list: PushCameraGpsEntity[];
 	}
 
+	interface PushDeviceonoffPageResponse {
+		pagination: PagePagination;
+		list: PushDeviceOnoffEntity[];
+	}
+
 	interface PushSiteweightPageResponse {
 		pagination: PagePagination;
 		list: PushSiteweightEntity[];
@@ -2003,11 +2167,6 @@
 	interface PushWeightPageResponse {
 		pagination: PagePagination;
 		list: PushWeightEntity[];
-	}
-
-	interface PushDeviceonoffPageResponse {
-		pagination: PagePagination;
-		list: PushDeviceOnoffEntity[];
 	}
 
 	interface RecycleDataPageResponse {
@@ -2038,6 +2197,11 @@
 	interface UserInfoPageResponse {
 		pagination: PagePagination;
 		list: UserInfoEntity[];
+	}
+
+	interface OperationWastesalePageResponse {
+		pagination: PagePagination;
+		list: OperationWastesaleEntity[];
 	}
 
 	interface BaseCoding {
@@ -2874,6 +3038,64 @@
 		request: Request;
 	}
 
+	interface BasicdataBuyer {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<BasicdataBuyerEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<BasicdataBuyerEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<BasicdataBuyerPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
 	interface DemoGoods {
 		/**
 		 * 鍒犻櫎
@@ -3272,6 +3494,64 @@
 		request: Request;
 	}
 
+	interface PushDeviceonoff {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<PushDeviceOnoffEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<PushDeviceOnoffEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<PushDeviceonoffPageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
 	interface PushSiteweight {
 		/**
 		 * 鍒犻櫎
@@ -3413,64 +3693,6 @@
 		 * 鍒嗛〉鏌ヨ
 		 */
 		page(data?: any): Promise<PushWeightPageResponse>;
-
-		/**
-		 * 鏂板
-		 */
-		add(data?: any): Promise<any>;
-
-		/**
-		 * 鏉冮檺鏍囪瘑
-		 */
-		permission: {
-			delete: string;
-			update: string;
-			info: string;
-			list: string;
-			page: string;
-			add: string;
-		};
-
-		/**
-		 * 鏉冮檺鐘舵��
-		 */
-		_permission: {
-			delete: boolean;
-			update: boolean;
-			info: boolean;
-			list: boolean;
-			page: boolean;
-			add: boolean;
-		};
-
-		request: Request;
-	}
-
-	interface PushDeviceonoff {
-		/**
-		 * 鍒犻櫎
-		 */
-		delete(data?: any): Promise<any>;
-
-		/**
-		 * 淇敼
-		 */
-		update(data?: any): Promise<any>;
-
-		/**
-		 * 鍗曚釜淇℃伅
-		 */
-		info(data?: any): Promise<PushDeviceOnoffEntity>;
-
-		/**
-		 * 鍒楄〃鏌ヨ
-		 */
-		list(data?: any): Promise<PushDeviceOnoffEntity[]>;
-
-		/**
-		 * 鍒嗛〉鏌ヨ
-		 */
-		page(data?: any): Promise<PushDeviceonoffPageResponse>;
 
 		/**
 		 * 鏂板
@@ -3844,6 +4066,64 @@
 		request: Request;
 	}
 
+	interface OperationWastesale {
+		/**
+		 * 鍒犻櫎
+		 */
+		delete(data?: any): Promise<any>;
+
+		/**
+		 * 淇敼
+		 */
+		update(data?: any): Promise<any>;
+
+		/**
+		 * 鍗曚釜淇℃伅
+		 */
+		info(data?: any): Promise<OperationWastesaleEntity>;
+
+		/**
+		 * 鍒楄〃鏌ヨ
+		 */
+		list(data?: any): Promise<OperationWastesaleEntity[]>;
+
+		/**
+		 * 鍒嗛〉鏌ヨ
+		 */
+		page(data?: any): Promise<OperationWastesalePageResponse>;
+
+		/**
+		 * 鏂板
+		 */
+		add(data?: any): Promise<any>;
+
+		/**
+		 * 鏉冮檺鏍囪瘑
+		 */
+		permission: {
+			delete: string;
+			update: string;
+			info: string;
+			list: string;
+			page: string;
+			add: string;
+		};
+
+		/**
+		 * 鏉冮檺鐘舵��
+		 */
+		_permission: {
+			delete: boolean;
+			update: boolean;
+			info: boolean;
+			list: boolean;
+			page: boolean;
+			add: boolean;
+		};
+
+		request: Request;
+	}
+
 	interface RequestOptions {
 		url: string;
 		method?: "OPTIONS" | "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "TRACE" | "CONNECT";
@@ -3887,6 +4167,7 @@
 			sorter: BasicdataSorter;
 			vehicle: BasicdataVehicle;
 			wastetype: BasicdataWastetype;
+			buyer: BasicdataBuyer;
 		};
 		demo: { goods: DemoGoods; tenant: DemoTenant };
 		dict: { info: DictInfo; type: DictType };
@@ -3894,14 +4175,15 @@
 		push: {
 			auditlog: PushAuditlog;
 			cameragps: PushCameragps;
+			deviceonoff: PushDeviceonoff;
 			siteweight: PushSiteweight;
 			vehiclegps: PushVehiclegps;
 			weight: PushWeight;
-			deviceonoff: PushDeviceonoff;
 		};
 		recycle: { data: RecycleData };
 		space: { info: SpaceInfo; type: SpaceType };
 		task: { info: TaskInfo };
 		user: { address: UserAddress; info: UserInfo };
+		operation: { wastesale: OperationWastesale };
 	};
 }
diff --git a/build/cool/eps.json b/build/cool/eps.json
index 3f21739..2001f6b 100644
--- a/build/cool/eps.json
+++ b/build/cool/eps.json
@@ -1 +1 @@
-[{"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":"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/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":"/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":[{"propertyName":"departmentId","type":"number","length":"","comment":"褰掑睘鍗曚綅","nullable":false,"source":"a.departmentId"},{"propertyName":"siteType","type":"string","length":"","comment":"绔欑偣绫诲瀷","nullable":false,"defaultValue":"鏀堕泦鐐�","dict":"sitetype","source":"a.siteType"},{"propertyName":"status","type":"number","length":"","comment":"鏄惁鍚敤","nullable":false,"defaultValue":1,"dict":["绂佺敤","鍚敤"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"address","type":"string","length":"","comment":"鍦板潃","nullable":false,"source":"a.address"},{"propertyName":"leader","type":"string","length":"","comment":"璐熻矗浜�","nullable":false,"source":"a.leader"}]}},{"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":true,"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/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/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/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/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/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/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":"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":"/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":[{"propertyName":"departmentId","type":"number","length":"","comment":"褰掑睘鍗曚綅","nullable":false,"source":"a.departmentId"},{"propertyName":"siteType","type":"string","length":"","comment":"绔欑偣绫诲瀷","nullable":false,"defaultValue":"鏀堕泦鐐�","dict":"sitetype","source":"a.siteType"},{"propertyName":"status","type":"number","length":"","comment":"鏄惁鍚敤","nullable":false,"defaultValue":1,"dict":["绂佺敤","鍚敤"],"source":"a.status"}],"fieldLike":[],"keyWordLikeFields":[{"propertyName":"address","type":"string","length":"","comment":"鍦板潃","nullable":false,"source":"a.address"},{"propertyName":"leader","type":"string","length":"","comment":"璐熻矗浜�","nullable":false,"source":"a.leader"}]}},{"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":true,"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/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/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/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/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/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/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/basicdata/locales/en.json b/src/modules/basicdata/locales/en.json
index 38ec459..1a38a0c 100644
--- a/src/modules/basicdata/locales/en.json
+++ b/src/modules/basicdata/locales/en.json
@@ -64,5 +64,11 @@
 "鍦ㄨ亴":"鍦ㄨ亴",
 "绂昏亴":"绂昏亴",
 "涓氬姟琛�":"涓氬姟琛�",
-"涓氬姟琛↖D":"涓氬姟琛↖D"
+"涓氬姟琛↖D":"涓氬姟琛↖D",
+"鎵�灞為儴闂�":"鎵�灞為儴闂�",
+"閮ㄩ棬ID":"閮ㄩ棬ID",
+"鍗曚綅缂栫爜":"鍗曚綅缂栫爜",
+"鍚嶇О":"鍚嶇О",
+"鑱旂郴浜�":"鑱旂郴浜�",
+"鑱旂郴鐢佃瘽":"鑱旂郴鐢佃瘽"
 }
\ No newline at end of file
diff --git a/src/modules/basicdata/locales/zh-cn.json b/src/modules/basicdata/locales/zh-cn.json
index 38ec459..1a38a0c 100644
--- a/src/modules/basicdata/locales/zh-cn.json
+++ b/src/modules/basicdata/locales/zh-cn.json
@@ -64,5 +64,11 @@
 "鍦ㄨ亴":"鍦ㄨ亴",
 "绂昏亴":"绂昏亴",
 "涓氬姟琛�":"涓氬姟琛�",
-"涓氬姟琛↖D":"涓氬姟琛↖D"
+"涓氬姟琛↖D":"涓氬姟琛↖D",
+"鎵�灞為儴闂�":"鎵�灞為儴闂�",
+"閮ㄩ棬ID":"閮ㄩ棬ID",
+"鍗曚綅缂栫爜":"鍗曚綅缂栫爜",
+"鍚嶇О":"鍚嶇О",
+"鑱旂郴浜�":"鑱旂郴浜�",
+"鑱旂郴鐢佃瘽":"鑱旂郴鐢佃瘽"
 }
\ No newline at end of file
diff --git a/src/modules/basicdata/locales/zh-tw.json b/src/modules/basicdata/locales/zh-tw.json
index 38ec459..1a38a0c 100644
--- a/src/modules/basicdata/locales/zh-tw.json
+++ b/src/modules/basicdata/locales/zh-tw.json
@@ -64,5 +64,11 @@
 "鍦ㄨ亴":"鍦ㄨ亴",
 "绂昏亴":"绂昏亴",
 "涓氬姟琛�":"涓氬姟琛�",
-"涓氬姟琛↖D":"涓氬姟琛↖D"
+"涓氬姟琛↖D":"涓氬姟琛↖D",
+"鎵�灞為儴闂�":"鎵�灞為儴闂�",
+"閮ㄩ棬ID":"閮ㄩ棬ID",
+"鍗曚綅缂栫爜":"鍗曚綅缂栫爜",
+"鍚嶇О":"鍚嶇О",
+"鑱旂郴浜�":"鑱旂郴浜�",
+"鑱旂郴鐢佃瘽":"鑱旂郴鐢佃瘽"
 }
\ No newline at end of file
diff --git a/src/modules/basicdata/views/buyer.vue b/src/modules/basicdata/views/buyer.vue
new file mode 100644
index 0000000..de7d32f
--- /dev/null
+++ b/src/modules/basicdata/views/buyer.vue
@@ -0,0 +1,146 @@
+<template>
+    <cl-crud ref="Crud">
+        <cl-row>
+            <!-- 鍒锋柊鎸夐挳 -->
+            <cl-refresh-btn />
+            <!-- 鏂板鎸夐挳 -->
+            <cl-add-btn />
+            <!-- 鍒犻櫎鎸夐挳 -->
+            <cl-multi-delete-btn />
+            <cl-flex1 />
+            <!-- 鏉′欢鎼滅储 -->
+            <cl-search ref="Search" />
+        </cl-row>
+
+        <cl-row>
+            <!-- 鏁版嵁琛ㄦ牸 -->
+            <cl-table ref="Table" />
+        </cl-row>
+
+        <cl-row>
+            <cl-flex1 />
+            <!-- 鍒嗛〉鎺т欢 -->
+            <cl-pagination />
+        </cl-row>
+
+        <!-- 鏂板銆佺紪杈� -->
+        <cl-upsert ref="Upsert" />
+    </cl-crud>
+</template>
+
+<script lang="ts" setup>
+defineOptions({
+    name: "basicdata-buyer"
+});
+
+import { useCrud, useTable, useUpsert, useSearch } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { useI18n } from "vue-i18n";
+
+const { service } = useCool();
+const { t } = useI18n();
+
+// cl-upsert
+const Upsert = useUpsert({
+    items: [
+        {
+            label: t("閫夋嫨閮ㄩ棬"),
+            prop: "departmentId",
+            component: {
+                name: 'cl-dept-select',
+                props: {
+                    multiple: false,      // 鍗曢�� / true 澶氶��
+                    placeholder: "璇烽�夋嫨閮ㄩ棬",
+                    checkStrictly: true,  // 鐖跺瓙鑺傜偣涓嶈仈鍔�
+                    immediate: true       // 绔嬪嵆鍔犺浇閮ㄩ棬鏍�
+                }
+            },
+            required: true,
+        },
+        {
+            label: t('浠g爜'),
+            prop: "code",
+            component: { name: "el-input", props: { clearable: true } },
+            span: 12,
+            required: true
+        },
+        {
+            label: t('鍚嶇О'),
+            prop: "name",
+            component: { name: "el-input", props: { clearable: true } },
+            span: 12,
+            required: true
+        },
+        {
+            label: t('鍦板潃'),
+            prop: "address",
+            component: { name: "el-input", props: { clearable: true } },
+            span: 12
+        },
+        {
+            label: t('鑱旂郴浜�'),
+            prop: "contact",
+            component: { name: "el-input", props: { clearable: true } },
+            span: 12
+        },
+        {
+            label: t('鑱旂郴鐢佃瘽'),
+            prop: "phone",
+            component: { name: "el-input", props: { clearable: true } },
+            span: 12
+        },
+        {
+            label: t('澶囨敞'),
+            prop: "remark",
+            component: { name: "el-input", props: { type: "textarea", rows: 4 } }
+        }
+    ]
+});
+
+// cl-table
+const Table = useTable({
+    columns: [
+        { type: "selection" },
+        { label: t('鎵�灞為儴闂�'), prop: "departmentName", minWidth: 120 },
+        { label: t('鍗曚綅缂栫爜'), prop: "code", minWidth: 140 },
+        { label: t('鍚嶇О'), prop: "name", minWidth: 140 },
+        { label: t('鍦板潃'), prop: "address", minWidth: 120 },
+        { label: t('鑱旂郴浜�'), prop: "contact", minWidth: 140 },
+        { label: t('鑱旂郴鐢佃瘽'), prop: "phone", minWidth: 140 },
+        { label: t('澶囨敞'), prop: "remark", showOverflowTooltip: true, minWidth: 200 },
+        {
+            label: t('鍒涘缓鏃堕棿'),
+            prop: "createTime",
+            minWidth: 170,
+            sortable: "desc",
+            component: { name: "cl-date-text" }
+        },
+        {
+            label: t('鏇存柊鏃堕棿'),
+            prop: "updateTime",
+            minWidth: 170,
+            sortable: "custom",
+            component: { name: "cl-date-text" }
+        },
+        { type: "op", buttons: ["edit", "delete"] }
+    ]
+});
+
+// cl-search
+const Search = useSearch();
+
+// cl-crud
+const Crud = useCrud(
+    {
+        service: service.basicdata.buyer
+    },
+    (app) => {
+        app.refresh();
+    }
+);
+
+// 鍒锋柊
+function refresh(params?: any) {
+    Crud.value?.refresh(params);
+}
+</script>
diff --git a/src/modules/operation/locales/en.json b/src/modules/operation/locales/en.json
new file mode 100644
index 0000000..a085c36
--- /dev/null
+++ b/src/modules/operation/locales/en.json
@@ -0,0 +1,55 @@
+{
+"璁惧鍙�":"璁惧鍙�",
+"璁惧鍚嶇О":"璁惧鍚嶇О",
+"涓婁紶鏃堕棿":"涓婁紶鏃堕棿",
+"鍨冨溇绫诲瀷":"鍨冨溇绫诲瀷",
+"鍨冨溇鍚嶇О":"鍨冨溇鍚嶇О",
+"鍨冨溇閲嶉噺":"鍨冨溇閲嶉噺KG",
+"鍏朵粬鏁版嵁":"鍏朵粬鏁版嵁",
+"绔欑偣缂栧彿":"绔欑偣缂栧彿",
+"绔欑偣鍚嶇О":"绔欑偣鍚嶇О",
+"绔欑偣绫诲瀷":"绔欑偣绫诲瀷",
+"绉伴噸璁惧":"绉伴噸璁惧",
+"weight":"weight",
+"health_gps":"health_gps",
+"vehicle_gps":"vehicle_gps",
+"driver_anomaly":"driver_anomaly",
+"others":"others",
+"鏃ュ織鏃堕棿":"鏃ュ織鏃堕棿",
+"鎺ㄩ�佺被鍨�":"鎺ㄩ�佺被鍨�",
+"瀹㈡埛绔疘D":"瀹㈡埛绔疘D",
+"鍘熷璇锋眰鍐呭":"鍘熷璇锋眰鍐呭",
+"閿欒杩斿洖淇℃伅":"閿欒杩斿洖淇℃伅",
+"鍒涘缓鏃堕棿":"鍒涘缓鏃堕棿",
+"鏇存柊鏃堕棿":"鏇存柊鏃堕棿",
+"璁惧搴忓垪鍙�":"璁惧搴忓垪鍙�",
+"娑堟伅搴忓垪鍙�":"娑堟伅搴忓垪鍙�",
+"娑堟伅鍒涘缓鏃堕棿":"娑堟伅鍒涘缓鏃堕棿",
+"GPS瀹氫綅鏃堕棿":"GPS瀹氫綅鏃堕棿",
+"閫熷害":"閫熷害",
+"鏂瑰悜瑙�":"鏂瑰悜瑙�",
+"娴锋嫈楂樺害":"娴锋嫈楂樺害",
+"瀹氫綅绮惧害":"瀹氫綅绮惧害",
+"鏈夋晥瀹氫綅":"鏈夋晥瀹氫綅",
+"鏃犳晥瀹氫綅":"鏃犳晥瀹氫綅",
+"璁惧ID":"璁惧ID",
+"閫氶亾鍙�":"閫氶亾鍙�",
+"娑堟伅鍞竴ID":"娑堟伅鍞竴ID",
+"娑堟伅鏃堕棿":"娑堟伅鏃堕棿",
+"娑堟伅绫诲瀷":"娑堟伅绫诲瀷",
+"璁惧绫诲瀷":"璁惧绫诲瀷",
+"瀛愬簭鍒楀彿":"瀛愬簭鍒楀彿",
+"婧愮ID":"婧愮ID",
+"NAT鐨処P":"NAT鐨処P",
+"浜嬩欢鍙戠敓鏃堕棿":"浜嬩欢鍙戠敓鏃堕棿",
+"娉ㄥ唽鏃堕棿":"娉ㄥ唽鏃堕棿",
+"閲嶉噺":"閲嶉噺",
+"鍗曚环(鍏�/Kg)":"鍗曚环(鍏�/Kg)",
+"鎬讳环(鍏�)":"鎬讳环(鍏�)",
+"缁忔墜浜篒D":"缁忔墜浜篒D",
+"缁忔墜浜�":"缁忔墜浜�",
+"鏀惰喘鏂�":"鏀惰喘鏂�",
+"鏀堕泦鐐�":"鏀堕泦鐐�",
+"鏃ユ湡鏃堕棿":"鏃ユ湡鏃堕棿",
+"鎬讳环":"鎬讳环"
+}
\ No newline at end of file
diff --git a/src/modules/operation/locales/zh-cn.json b/src/modules/operation/locales/zh-cn.json
new file mode 100644
index 0000000..a085c36
--- /dev/null
+++ b/src/modules/operation/locales/zh-cn.json
@@ -0,0 +1,55 @@
+{
+"璁惧鍙�":"璁惧鍙�",
+"璁惧鍚嶇О":"璁惧鍚嶇О",
+"涓婁紶鏃堕棿":"涓婁紶鏃堕棿",
+"鍨冨溇绫诲瀷":"鍨冨溇绫诲瀷",
+"鍨冨溇鍚嶇О":"鍨冨溇鍚嶇О",
+"鍨冨溇閲嶉噺":"鍨冨溇閲嶉噺KG",
+"鍏朵粬鏁版嵁":"鍏朵粬鏁版嵁",
+"绔欑偣缂栧彿":"绔欑偣缂栧彿",
+"绔欑偣鍚嶇О":"绔欑偣鍚嶇О",
+"绔欑偣绫诲瀷":"绔欑偣绫诲瀷",
+"绉伴噸璁惧":"绉伴噸璁惧",
+"weight":"weight",
+"health_gps":"health_gps",
+"vehicle_gps":"vehicle_gps",
+"driver_anomaly":"driver_anomaly",
+"others":"others",
+"鏃ュ織鏃堕棿":"鏃ュ織鏃堕棿",
+"鎺ㄩ�佺被鍨�":"鎺ㄩ�佺被鍨�",
+"瀹㈡埛绔疘D":"瀹㈡埛绔疘D",
+"鍘熷璇锋眰鍐呭":"鍘熷璇锋眰鍐呭",
+"閿欒杩斿洖淇℃伅":"閿欒杩斿洖淇℃伅",
+"鍒涘缓鏃堕棿":"鍒涘缓鏃堕棿",
+"鏇存柊鏃堕棿":"鏇存柊鏃堕棿",
+"璁惧搴忓垪鍙�":"璁惧搴忓垪鍙�",
+"娑堟伅搴忓垪鍙�":"娑堟伅搴忓垪鍙�",
+"娑堟伅鍒涘缓鏃堕棿":"娑堟伅鍒涘缓鏃堕棿",
+"GPS瀹氫綅鏃堕棿":"GPS瀹氫綅鏃堕棿",
+"閫熷害":"閫熷害",
+"鏂瑰悜瑙�":"鏂瑰悜瑙�",
+"娴锋嫈楂樺害":"娴锋嫈楂樺害",
+"瀹氫綅绮惧害":"瀹氫綅绮惧害",
+"鏈夋晥瀹氫綅":"鏈夋晥瀹氫綅",
+"鏃犳晥瀹氫綅":"鏃犳晥瀹氫綅",
+"璁惧ID":"璁惧ID",
+"閫氶亾鍙�":"閫氶亾鍙�",
+"娑堟伅鍞竴ID":"娑堟伅鍞竴ID",
+"娑堟伅鏃堕棿":"娑堟伅鏃堕棿",
+"娑堟伅绫诲瀷":"娑堟伅绫诲瀷",
+"璁惧绫诲瀷":"璁惧绫诲瀷",
+"瀛愬簭鍒楀彿":"瀛愬簭鍒楀彿",
+"婧愮ID":"婧愮ID",
+"NAT鐨処P":"NAT鐨処P",
+"浜嬩欢鍙戠敓鏃堕棿":"浜嬩欢鍙戠敓鏃堕棿",
+"娉ㄥ唽鏃堕棿":"娉ㄥ唽鏃堕棿",
+"閲嶉噺":"閲嶉噺",
+"鍗曚环(鍏�/Kg)":"鍗曚环(鍏�/Kg)",
+"鎬讳环(鍏�)":"鎬讳环(鍏�)",
+"缁忔墜浜篒D":"缁忔墜浜篒D",
+"缁忔墜浜�":"缁忔墜浜�",
+"鏀惰喘鏂�":"鏀惰喘鏂�",
+"鏀堕泦鐐�":"鏀堕泦鐐�",
+"鏃ユ湡鏃堕棿":"鏃ユ湡鏃堕棿",
+"鎬讳环":"鎬讳环"
+}
\ No newline at end of file
diff --git a/src/modules/operation/locales/zh-tw.json b/src/modules/operation/locales/zh-tw.json
new file mode 100644
index 0000000..a085c36
--- /dev/null
+++ b/src/modules/operation/locales/zh-tw.json
@@ -0,0 +1,55 @@
+{
+"璁惧鍙�":"璁惧鍙�",
+"璁惧鍚嶇О":"璁惧鍚嶇О",
+"涓婁紶鏃堕棿":"涓婁紶鏃堕棿",
+"鍨冨溇绫诲瀷":"鍨冨溇绫诲瀷",
+"鍨冨溇鍚嶇О":"鍨冨溇鍚嶇О",
+"鍨冨溇閲嶉噺":"鍨冨溇閲嶉噺KG",
+"鍏朵粬鏁版嵁":"鍏朵粬鏁版嵁",
+"绔欑偣缂栧彿":"绔欑偣缂栧彿",
+"绔欑偣鍚嶇О":"绔欑偣鍚嶇О",
+"绔欑偣绫诲瀷":"绔欑偣绫诲瀷",
+"绉伴噸璁惧":"绉伴噸璁惧",
+"weight":"weight",
+"health_gps":"health_gps",
+"vehicle_gps":"vehicle_gps",
+"driver_anomaly":"driver_anomaly",
+"others":"others",
+"鏃ュ織鏃堕棿":"鏃ュ織鏃堕棿",
+"鎺ㄩ�佺被鍨�":"鎺ㄩ�佺被鍨�",
+"瀹㈡埛绔疘D":"瀹㈡埛绔疘D",
+"鍘熷璇锋眰鍐呭":"鍘熷璇锋眰鍐呭",
+"閿欒杩斿洖淇℃伅":"閿欒杩斿洖淇℃伅",
+"鍒涘缓鏃堕棿":"鍒涘缓鏃堕棿",
+"鏇存柊鏃堕棿":"鏇存柊鏃堕棿",
+"璁惧搴忓垪鍙�":"璁惧搴忓垪鍙�",
+"娑堟伅搴忓垪鍙�":"娑堟伅搴忓垪鍙�",
+"娑堟伅鍒涘缓鏃堕棿":"娑堟伅鍒涘缓鏃堕棿",
+"GPS瀹氫綅鏃堕棿":"GPS瀹氫綅鏃堕棿",
+"閫熷害":"閫熷害",
+"鏂瑰悜瑙�":"鏂瑰悜瑙�",
+"娴锋嫈楂樺害":"娴锋嫈楂樺害",
+"瀹氫綅绮惧害":"瀹氫綅绮惧害",
+"鏈夋晥瀹氫綅":"鏈夋晥瀹氫綅",
+"鏃犳晥瀹氫綅":"鏃犳晥瀹氫綅",
+"璁惧ID":"璁惧ID",
+"閫氶亾鍙�":"閫氶亾鍙�",
+"娑堟伅鍞竴ID":"娑堟伅鍞竴ID",
+"娑堟伅鏃堕棿":"娑堟伅鏃堕棿",
+"娑堟伅绫诲瀷":"娑堟伅绫诲瀷",
+"璁惧绫诲瀷":"璁惧绫诲瀷",
+"瀛愬簭鍒楀彿":"瀛愬簭鍒楀彿",
+"婧愮ID":"婧愮ID",
+"NAT鐨処P":"NAT鐨処P",
+"浜嬩欢鍙戠敓鏃堕棿":"浜嬩欢鍙戠敓鏃堕棿",
+"娉ㄥ唽鏃堕棿":"娉ㄥ唽鏃堕棿",
+"閲嶉噺":"閲嶉噺",
+"鍗曚环(鍏�/Kg)":"鍗曚环(鍏�/Kg)",
+"鎬讳环(鍏�)":"鎬讳环(鍏�)",
+"缁忔墜浜篒D":"缁忔墜浜篒D",
+"缁忔墜浜�":"缁忔墜浜�",
+"鏀惰喘鏂�":"鏀惰喘鏂�",
+"鏀堕泦鐐�":"鏀堕泦鐐�",
+"鏃ユ湡鏃堕棿":"鏃ユ湡鏃堕棿",
+"鎬讳环":"鎬讳环"
+}
\ No newline at end of file
diff --git a/src/modules/operation/views/wastesale.vue b/src/modules/operation/views/wastesale.vue
new file mode 100644
index 0000000..dd787cc
--- /dev/null
+++ b/src/modules/operation/views/wastesale.vue
@@ -0,0 +1,319 @@
+<template>
+    <cl-crud ref="Crud">
+        <cl-row>
+            <!-- 鍒锋柊鎸夐挳 -->
+            <cl-refresh-btn />
+            <!-- 鏂板鎸夐挳 -->
+            <cl-add-btn />
+            <!-- 鍒犻櫎鎸夐挳 -->
+            <cl-multi-delete-btn />
+            <cl-flex1 />
+            <!-- 鏉′欢鎼滅储 -->
+            <cl-search ref="Search" />
+        </cl-row>
+
+        <cl-row>
+            <!-- 鏁版嵁琛ㄦ牸 -->
+            <cl-table ref="Table" />
+        </cl-row>
+
+        <cl-row>
+            <cl-flex1 />
+            <!-- 鍒嗛〉鎺т欢 -->
+            <cl-pagination />
+        </cl-row>
+
+        <!-- 鏂板銆佺紪杈� -->
+        <cl-upsert ref="Upsert" />
+    </cl-crud>
+</template>
+
+<script lang="ts" setup>
+defineOptions({
+    name: "operation-wastesale"
+});
+import { ref, watch } from 'vue';
+import { useCrud, useTable, useUpsert, useSearch } from "@cool-vue/crud";
+import { useCool } from "/@/cool";
+import { useI18n } from "vue-i18n";
+import { useUserStore } from "/@/modules/base/store/user"; // 璺緞浠ヤ綘椤圭洰涓哄噯
+import dayjs from "dayjs";
+import { size } from 'lodash-es';
+
+const { service } = useCool();
+const { t } = useI18n();
+
+
+const userStore = useUserStore();
+console.log(userStore.info?.id, userStore.info?.name);
+const loginedUserId = userStore.info?.id ?? 1;
+const loginedUserName = userStore.info?.name ?? 'admin';
+
+
+
+
+// 瀛樺偍绔欑偣涓嬫媺妗嗙殑鍔ㄦ�佹暟鎹簮
+const siteOptions = ref<{ label: string; value: any }[]>([]);
+const buyerOptions = ref<{ label: string; value: any }[]>([]);
+
+const garbageTypeOptions = ref<{ label: string; value: any; price: any }[]>([]);
+
+
+
+// cl-upsert
+const Upsert = useUpsert({
+    items: [
+        {
+            label: t("閫夋嫨閮ㄩ棬"),
+            prop: "departmentId",
+            component: {
+                name: 'cl-dept-select',
+                props: {
+                    multiple: false,      // 鍗曢�� / true 澶氶��
+                    placeholder: "璇烽�夋嫨閮ㄩ棬",
+                    checkStrictly: true,  // 鐖跺瓙鑺傜偣涓嶈仈鍔�
+                    immediate: true       // 绔嬪嵆鍔犺浇閮ㄩ棬鏍�
+                }
+            },
+            required: true,
+        },
+        {
+            label: t("鏀堕泦鐐圭紪鍙�"),
+            prop: "siteId",
+            component: {
+                name: 'el-select',
+                props: {
+                    placeholder: "璇烽�夋嫨",
+                    filterable: true,
+                    clearable: true
+                },
+                options: siteOptions
+            },
+            span: 12,
+        },
+        {
+            label: t("鍨冨溇绫诲瀷"),
+            prop: "wasteCode",
+            component: {
+                name: 'el-select',
+                props: {
+                    placeholder: "璇烽�夋嫨",
+                    filterable: true,
+                    clearable: true,
+                    onChange: (val: string) => {
+                        const item = garbageTypeOptions.value.find(opt => opt.value === val);
+                        // 缂栬緫妯″紡锛氬彧鏈夋柊澧炴垨鐢ㄦ埛涓诲姩鍒囨崲鎵嶅洖濉�
+                        console.log(item);
+                        console.log(Upsert.value.mode)
+                        if (!Upsert.value.mode || Upsert.value.mode === "add") {
+
+                            const price = item?.price != null
+                                ? Number(item.price)
+                                : 0;
+                            console.log(price)
+                            Upsert.value.form.unitPrice = isNaN(price) ? undefined : price;
+                            Upsert.value.form.totalPrice = Number(
+                                (Upsert.value.form.unitPrice * Upsert.value.form.weight).toFixed(2)
+                            );
+
+                        }
+                    }
+                },
+                options: garbageTypeOptions
+            },
+            span: 12,
+            required: true,
+        },
+        {
+            label: t('鏃ユ湡鏃堕棿'),
+            prop: "dateTime",
+            component: {
+                name: "el-date-picker",
+                props: { type: "datetime", valueFormat: "YYYY-MM-DD HH:mm:ss" }
+            },
+            span: 12,
+            value: dayjs().format("YYYY-MM-DD HH:mm:ss"), // 鉁� 褰撳墠鏃堕棿
+            required: true
+        },
+        {
+            label: t('閲嶉噺'),
+            prop: "weight",
+            hook: "number",
+            component: {
+                name: "el-input-number", props: {
+                    min: 0,
+                    onChange: (val: string) => {
+                        Upsert.value.form.totalPrice = Number(
+                            (Upsert.value.form.unitPrice * Upsert.value.form.weight).toFixed(2)
+                        );
+                    }
+                }
+            },
+            span: 12,
+            required: true
+        },
+        {
+            label: t('鍗曚环(鍏�/Kg)'),
+            prop: "unitPrice",
+            hook: "number",
+            component: {
+                name: "el-input-number",
+                props: {
+                    min: 0,
+                    onChange: (val: string) => {
+                        Upsert.value.form.totalPrice = Number(
+                            (Upsert.value.form.unitPrice * Upsert.value.form.weight).toFixed(2)
+                        );
+                    }
+                }
+
+            },
+            span: 12,
+            required: true
+        },
+        {
+            label: t('鎬讳环(鍏�)'),
+            prop: "totalPrice",
+            hook: "number",
+            component: { name: "el-input-number", props: { min: 0, disabled: true } },
+            span: 12,
+            required: true
+        },
+        {
+            label: t('缁忔墜浜篒D'),
+            prop: "handlerId",
+            hidden: true, // 闅愯棌
+            component: { name: "el-input", props: { clearable: true } },
+            span: 12,
+            value: loginedUserId,
+            required: true
+        },
+        {
+            label: t('缁忔墜浜�'),
+            prop: "handlerName",
+            component: { name: "el-input", props: { clearable: true, disabled: true } },
+            span: 12,
+            value: loginedUserName,
+        },
+        {
+            label: t("鏀惰喘鏂�"),
+            prop: "buyerCode",
+            component: {
+                name: 'el-select',
+                props: {
+                    placeholder: "璇烽�夋嫨",
+                    filterable: true,
+                    clearable: true
+                },
+                options: buyerOptions
+            },
+            span: 12,
+            required: true,
+        },
+    ]
+});
+
+// cl-table
+const Table = useTable({
+    columns: [
+        { type: "selection" },
+        { label: t('鎵�灞為儴闂�'), prop: "departmentName", minWidth: 120 },
+        { label: t('鏀堕泦鐐�'), prop: "siteName", minWidth: 120 },
+        { label: t('鍨冨溇绫诲瀷'), prop: "wasteCode", minWidth: 120 },
+        { label: t('鍨冨溇鍚嶇О'), prop: "wasteName", minWidth: 120 },
+        { label: t('鏀惰喘鏂�'), prop: "buyerName", minWidth: 140 },
+        { label: t('缁忔墜浜�'), prop: "handlerName", minWidth: 140 },
+        {
+            label: t('鏃ユ湡鏃堕棿'),
+            prop: "dateTime",
+            minWidth: 170,
+            sortable: "custom",
+            component: { name: "cl-date-text" }
+        },
+        { label: t('閲嶉噺'), prop: "weight", minWidth: 140, sortable: "custom" },
+        { label: t('鍗曚环'), prop: "unitPrice", minWidth: 140, sortable: "custom" },
+        { label: t('鎬讳环'), prop: "totalPrice", minWidth: 140, sortable: "custom" },
+        {
+            label: t('鍒涘缓鏃堕棿'),
+            prop: "createTime",
+            minWidth: 170,
+            sortable: "desc",
+            component: { name: "cl-date-text" }
+        },
+        {
+            label: t('鏇存柊鏃堕棿'),
+            prop: "updateTime",
+            minWidth: 170,
+            sortable: "custom",
+            component: { name: "cl-date-text" }
+        },
+        { type: "op", buttons: ["edit", "delete"] }
+    ]
+});
+
+// cl-search
+const Search = useSearch();
+
+// cl-crud
+const Crud = useCrud(
+    {
+        service: service.operation.wastesale
+    },
+    (app) => {
+        service.basicdata.wastetype.page({ isRecyclable: 1, size: 1000 }).then((res) => {
+            garbageTypeOptions.value = (res.list || []).map((item: any) => ({
+                label: item.name,
+                value: item.code,
+                price: item.price,
+            }));
+        });
+        app.refresh();
+    }
+);
+
+// 鍒锋柊
+function refresh(params?: any) {
+    Crud.value?.refresh(params);
+}
+
+/**
+ * 鏍稿績閫昏緫锛氱洃鍚儴闂� ID 鐨勫彉鍖�
+ */
+watch(
+    () => Upsert.value?.form.departmentId,
+    async (newDeptId, oldDeptId) => {
+        if (!Upsert.value?.form) return;
+
+        siteOptions.value = [];
+        buyerOptions.value = [];
+
+        if (oldDeptId !== undefined) {
+            Upsert.value.form.siteId = undefined;
+            Upsert.value.form.buyerCode = undefined;
+        }
+
+        // 濡傛灉娌℃湁閫夋嫨浠讳綍閮ㄩ棬锛屽垯涓璇锋眰
+        if (!newDeptId) return;
+
+        try {
+            const res1 = await service.basicdata.site.page({ departmentId: newDeptId, siteType: "鏀堕泦鐐�", size: 1000 });
+            // 杞崲涓� el-select 闇�瑕佺殑 { label, value } 鏍煎紡
+            siteOptions.value = res1.list.map((item: any) => ({
+                label: item.businessName,      // 绔欑偣鐨勫悕绉�
+                value: item.businessId         // 绔欑偣鐨処D
+            }));
+            const res2 = await service.basicdata.buyer.page({ departmentId: newDeptId, size: 1000 });
+            // 杞崲涓� el-select 闇�瑕佺殑 { label, value } 鏍煎紡
+            buyerOptions.value = res2.list.map((item: any) => ({
+                label: item.name,      // 绔欑偣鐨勫悕绉�
+                value: item.code         // 绔欑偣鐨処D
+            }));
+
+
+        } catch (err) {
+            console.error("鍔犺浇绔欑偣鍒楄〃澶辫触", err);
+        }
+    }
+);
+
+</script>

--
Gitblit v1.9.1