Ver código fonte

叫车服务

mym 1 ano atrás
pai
commit
2d7d872e7d

+ 1 - 1
common/http.js

@@ -1,4 +1,4 @@
-const ip = 'http://192.168.88.42:8080'; //线下
+const ip = 'http://192.168.88.34:8080'; //线下
 //const ip = 'http://114.118.9.159:8080/prod-api'; //线上
 /**
  * 封装的http请求

+ 18 - 0
pages.json

@@ -329,6 +329,24 @@
             }
             
         }
+        ,{
+            "path" : "pages/market/one/merchant/address/address",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "选择地址",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        ,{
+            "path" : "pages/market/one/merchant/order/vehice",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "车辆展示界面",
+                "enablePullDownRefresh": false
+            }
+            
+        }
     ],
 	"tabBar": {
 		"color": "#7A7E83",

+ 49 - 23
pages/market/one/car/car.vue

@@ -14,12 +14,16 @@
 					<text class="icon" style="color: #13ce66">&#xe830;</text>
 					<text>已确认</text>
 				</view>
+				<view class="state" v-if="item.driverResult == 2">
+					<text class="icon" style="color: #f44336">&#xe830;</text>
+					<text>已拒绝</text>
+				</view>
 				<!-- <image src="../../../../../static/news.jpg" mode="aspectFill" class="pic"></image> -->
 				<view class="con">
 					<view class="productName omit" style="display: flex;">
-					<uni-icons type="location" size="24"></uni-icons>贸易地点:{{ item.tradeAreaName }}</view>
-					<view class="productName omit"  style="display: flex;">
-						<uni-icons type="circle" size="24"></uni-icons>运送货物:{{ item.goodsName }}
+						<u-icon name="map" color="#2979ff" size="20"></u-icon>贸易地点:{{ item.tradeAreaName }}</view>
+					<view class="productName omit"  style="display: flex; margin-top: 10px;">
+						<u-icon name="bag" color="#FF7F00" size="22"></u-icon>运送货物:{{ item.goodsName }}
 					</view>
 				</view>
 				<view class="clear"></view>
@@ -44,11 +48,11 @@
 				tab: [
 					{ name: '待确认', driverResult: 0},
 					{ name: '已确认', driverResult: 1},
+					{ name: '已拒绝', driverResult: 2},
 				],
 				param: { pageNo: 1, pageSize: 10},
 				loadMore: true,
 				driverList: [],
-				user:this.getUser()
 			}
 		},
 		onLoad() {
@@ -75,46 +79,68 @@
 					}
 				});
 			},
+			//刷新数据
+			refresh() {
+				this.loadMore = true;
+				this.param.pageNo = 1;
+				this.driverList = [];
+				this.getDriverOrderList();
+			},
 			//点击tab切换
 			click(e) {
 				this.param.driverResult = e.driverResult;
-				this.getDriverOrderList()
+				this.refresh()
 			},
 			//司机处理
 			confirm(item, type, content){
-				let params = {
-				  carRecordId: 0,
-				  levelOneOrderId: 0,
-				  orderNo: "",
-				  loadingAddress: "",
-				  unloadingAddress: "",
-				  comment: "",
-				  tradeAreaId: item.tradeAreaId,
-				  tradeAreaName: item.tradeAreaName,
-				  driverId: item.driverId,
-				  driverName: user.name,
-				  driverPhone: user.phone,
-				  vehicleId: item.vehicleId,
-				  vehicleName: 0,
-				  vehicleType: 0
-				}
+				let user = this.getUser()
 				uni.showModal({
 					title: '提示',
 					content: content,
 					success: res => {
 						if (res.confirm) {
 							if(type == 1){
+								let params = {
+								  carRecordId: item.id,
+								  levelOneOrderId: item.orderId,
+								  orderNo: 0,
+								  loadingAddress: "",
+								  unloadingAddress: "",
+								  comment: "",
+								  tradeAreaId: item.tradeAreaId,
+								  tradeAreaName: item.tradeAreaName,
+								  driverId: item.driverId,
+								  driverName: user.name,
+								  driverPhone: user.phone,
+								  vehicleId: item.vehicleId,
+								  vehicleName: 0,
+								  vehicleType: item.vehicleType
+								}
 								this.http.request({
-									url: '/transport-server/app/TbVehicle/driverAgree',
+									url: '/transport-server/app/TbDriver/driverAgree',
 									data: params,
 									method: 'POST',
+									contentType: 'application/json;charset=UTF-8',
 									success: resp => {
 										uni.showToast({ title: '操作成功' });
 										this.refresh();
 									}
 								});
 							}else{
-								
+								let params = {
+								  carRecordId: item.id,
+								  enterpriseId: item.enterpriseId,
+								  enterprisePhone: item.enterprisePhone,
+								  levelOneOrderId: item.orderId
+								}
+								this.http.request({
+									url: '/transport-server/app/TbDriver/driverRefuse',
+									data: params,
+									success: resp => {
+										uni.showToast({ title: '操作成功' });
+										this.refresh();
+									}
+								});
 							}
 						}
 					}

+ 96 - 0
pages/market/one/merchant/address/address.vue

@@ -0,0 +1,96 @@
+<template>
+	<view class="list">
+		<view class="item" v-for="(item, index) in list" :key="index" @click="detail(item)">
+			<view class="address">
+				<view class="con">
+					<view class="title omit">{{ item.address }} </view>
+					<view class="desc">
+						<text>{{item.name}}</text>
+						<text>{{item.phone}}</text>
+					</view>
+				</view>
+				<view class="icon">&#xe8f2;</view>
+				<view class="clear"></view>
+			</view>
+		</view>
+		<view class="loading" v-if="loadMore"><u-loadmore :status="loadMore ? 'loading' : 'nomore'" /></view>
+		<u-empty v-if="!loadMore && list.length == 0"></u-empty>
+	</view>
+</template>
+
+<script>
+export default {
+	data() {
+		return {
+			select: false,
+			list: [],
+			param: { pageNo: 1, pageSize: 10 },
+			loadMore: true
+		};
+	},
+	onLoad(e) {
+		this.select = e.select || false;
+		this.getData();
+		uni.$on('address', res => {
+			this.refresh();
+		});
+	},
+	methods: {
+		getData() {
+			this.http.request({
+				url: '/transport-server/app/TbFavoriteContacts/getAppList',
+				data: this.param,
+				loading: 'false',
+				success: res => {
+					this.loadMore = parseInt(res.data.pageCount) > this.param.pageNo;
+					this.list.push(...res.data.data);
+				}
+			});
+		},
+		detail(item) {
+			uni.$emit('one-address', item);
+			uni.navigateBack();
+		},
+		//刷新数据
+		refresh() {
+			this.loadMore = true;
+			this.param.pageNo = 1;
+			this.list = [];
+			this.getData();
+		}
+	},
+	//下拉刷新
+	onPullDownRefresh() {
+		setTimeout(() => {
+			this.refresh();
+			uni.stopPullDownRefresh();
+		}, 1000);
+	},
+	//上拉加载
+	onReachBottom() {
+		if (this.loadMore) {
+			this.param.pageNo++;
+			this.getData();
+		}
+	},
+	onNavigationBarButtonTap() {
+		uni.navigateTo({ url: 'add' });
+	}
+};
+</script>
+
+<style lang="scss">
+page {
+	background-color: $pg;
+}
+.list {
+	padding: 12px;
+	.item {
+		padding: 5px;
+		color: $font-c;
+		background-color: white;
+		border-radius: 10px;
+		margin-bottom: 10px;
+	}
+}
+</style>

+ 44 - 83
pages/market/one/merchant/order/list.vue

@@ -18,6 +18,10 @@
 					<text class="icon" style="color: #f44336">&#xe622;</text>
 					<text>已拒绝</text>
 				</view>
+				<view class="state" v-if="item.enterpriseConfirm == 3">
+					<text class="icon" style="color: #00BFFF">&#xe622;</text>
+					<text>等待司机确认</text>
+				</view>
 				<image src="../../../../../static/news.jpg" mode="aspectFill" class="pic"></image>
 				<view class="con">
 					<view class="productName omit">{{ item.goodsNames }}</view>
@@ -31,8 +35,10 @@
 				<view class="op">
 					<view class="date">2022-12-12:12:12</view>
 					<template v-if="item.enterpriseConfirm == 0">
-						<view class="an" style="color: #f44336" @click.stop="confirm(item.id, item.goodsId, 2, '确认拒绝?')">拒绝订单</view>
-						<view class="an" style="color: #4581fb" @click.stop="confirm(item.id, item.goodsId, 1, '确认接单?')">确认订单</view>
+						<view class="an" style="color: #f44336"
+							@click.stop="confirm(item.id, item.goodsId, 2, '确认拒绝?')">拒绝订单</view>
+						<view class="an" style="color: #4581fb"
+							@click.stop="confirm(item.id, item.goodsId, 1, '确认接单?')">确认订单</view>
 					</template>
 					<template v-if="item.enterpriseConfirm == 1">
 						<view class="an" style="color: #13ce66" @click.stop="showPop(item)">物流车辆</view>
@@ -41,32 +47,6 @@
 			</view>
 			<view class="loading" v-if="loadMore"><u-loadmore :status="loadMore ? 'loading' : 'nomore'" /></view>
 			<u-empty v-if="!loadMore && list.length == 0"></u-empty>
-			<view>
-				<u-popup :show="show" @close="close">
-					<view class="pop">
-						<view class="search">
-							<u-search placeholder="输入车辆名称" v-model="param.vehiclePlate" bgColor="white"
-								@search="getByVehiclePlate()" :showAction="true"
-								@clear="getByVehiclePlate()"></u-search>
-							<view class="clear"></view>
-						</view>
-						<scroll-view class="goodsList" scroll-y="true" style="height: 450rpx; width: 97%;"
-							:show-scrollbar="true">
-							<view class="item" v-for="(item, index) in vehiceList" :key="index" style="height: 80rpx;">
-								<view class="con">
-									<view class="productName omit">{{ item.vehiclePlate }}</view>
-									<view class="desc omit">{{item.vehicleModel}}</view>
-								</view>
-								<view><button class="btn" @click="vehicleClick(item)">确认绑定</button> </view>
-								<view class="clear"></view>
-							</view>
-							<view class="loading" v-if="loadMore"><u-loadmore
-									:status="loadMore ? 'loading' : 'nomore'" /></view>
-							<u-empty v-if="!loadMore && vehiceList.length == 0"></u-empty>
-						</scroll-view>
-					</view>
-				</u-popup>
-			</view>
 		</view>
 	</view>
 </template>
@@ -75,23 +55,23 @@
 	export default {
 		data() {
 			return {
-				tab: [
-					{ name: '全部', enterpriseConfirm: '', isOrders: ''},
-					{ name: '待确认', enterpriseConfirm: 0, isOrders: 1},
-					{ name: '已确认', enterpriseConfirm: 1, isOrders: 1},
-					{ name: '已拒绝', enterpriseConfirm: 2 ,isOrders: 0}
+				tab: [{ name: '全部', enterpriseConfirm: '', isOrders: '' },
+					  { name: '待确认', enterpriseConfirm: 0, isOrders: 1 },
+					  { name: '已确认', enterpriseConfirm: 1, isOrders: 1 },
+					  { name: '已拒绝', enterpriseConfirm: 2, isOrders: 0 }
 				],
-				param: { pageNo: 1, pageSize: 10},
+				param: {
+					pageNo: 1,
+					pageSize: 10
+				},
 				list: [],
 				loadMore: true,
 				show: false,
-				vehiceList: [],
-				vehice: {},
+				value: 0
 			};
 		},
 		onLoad() {
 			this.getData();
-			this.getByVehiclePlate()
 		},
 		methods: {
 			getData() {
@@ -104,6 +84,11 @@
 						if (res.data.data) {
 							this.list.push(...res.data.data);
 						}
+						this.list.map(item => {
+							if(item.callCarStatus == 1){
+								item.enterpriseConfirm = 3
+							}
+						})
 					}
 				});
 			},
@@ -117,10 +102,16 @@
 						if (res.confirm) {
 							this.http.request({
 								url: '/level-one-server/app/TbOrder/updateEnterpriseConfirm',
-								data: { id: id, goodsId: goodsId, enterpriseConfirm: status },
+								data: {
+									id: id,
+									goodsId: goodsId,
+									enterpriseConfirm: status
+								},
 								method: 'POST',
 								success: resp => {
-									uni.showToast({ title: '操作成功' });
+									uni.showToast({
+										title: '操作成功'
+									});
 									this.refresh();
 								}
 							});
@@ -135,7 +126,9 @@
 				this.refresh();
 			},
 			detail(item) {
-				uni.navigateTo({ url: '/pages/market/one/merchant/order/detail?id=' + item.id });
+				uni.navigateTo({
+					url: '/pages/market/one/merchant/order/detail?id=' + item.id
+				});
 			},
 			//刷新数据
 			refresh() {
@@ -144,38 +137,19 @@
 				this.list = [];
 				this.getData();
 			},
-			// 车牌查询 
-			getByVehiclePlate() {
-				this.vehiceList = []
-				this.param.vehiclePlate = ''
-				this.http.request({
-					url: '/transport-server/app/TbVehicle/getByVehiclePlate',
-					loading: 'false',
-					data: this.param,
-					success: res => {
-						if (res.data.data) {
-							this.vehiceList.push(...res.data.data);
-						}
-					}
-				});
-			},
 			// 弹窗显示司机信息
 			showPop(item) {
-				this.vehice.tradeAreaId = item.tradeAreaId
-				this.vehice.tradeAreaName = item.tradeAreaName
-				this.vehice.enterpriseId = item.enterpriseId
-				this.vehice.orderId = item.id
-				this.getByVehiclePlate()
-				this.show = !this.show
+				// this.show = !this.show
+				uni.navigateTo({
+					url: '/pages/market/one/merchant/order/vehice?item=' + JSON.stringify(item)
+				})
 			},
 			close() {
-			        this.show = false
-			        // console.log('close');
+				this.show = false
+				this.refresh()
 			},
-			// 车辆绑定,通知司机
-			vehicleClick(item) {
-				this.vehice.driverId = item.driverId
-				this.vehice.vehicleId = item.id
+			// 通知司机
+			informDriver() {
 				this.http.request({
 					url: '/transport-server/app/TbVehicle/informDriver',
 					loading: 'false',
@@ -183,10 +157,11 @@
 					contentType: 'application/json;charset=UTF-8',
 					data: this.vehice,
 					success: res => {
-							uni.showToast({ title: '稍等片刻,司机马上就来' })
+						uni.showToast({
+							title: '稍等片刻,司机马上就来'
+						})
 					}
 				});
-				this.show = false
 			},
 		},
 		//下拉刷新
@@ -210,18 +185,4 @@
 	page {
 		background-color: $pg;
 	}
-
-	.pop {
-		padding: 30px;
-		height: 300px;
-		background-color: $pg;
-	}
-
-	.btn {
-		height: 30px;
-		margin: 8px 0px;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-	}
 </style>

+ 94 - 0
pages/market/one/merchant/order/vehice.vue

@@ -0,0 +1,94 @@
+<template>
+	<view>
+		<view class="search">
+			<u-search placeholder="输入车辆名称" v-model="param.vehiclePlate" bgColor="white" @search="getByVehiclePlate()"
+				@custom="getByVehiclePlate()" :showAction="true" @clear="refresh()"></u-search>
+			<view class="clear"></view>
+		</view>
+		<view class="goodsList">
+			<view class="item" v-for="(item, index) in vehiceList" :key="index">
+				<view class="con">
+					<view class="productName omit">{{ item.vehiclePlate }}</view>
+					<view class="desc omit">{{item.vehicleModel}}</view>
+				</view>
+				<view>
+					<button class="btn" @click="vehicleClick(item)">选择地址</button>
+				</view>
+				<view class="clear"></view>
+			</view>
+			<view class="loading" v-if="loadMore"><u-loadmore :status="loadMore ? 'loading' : 'nomore'" /></view>
+			<u-empty v-if="!loadMore && vehiceList.length == 0"></u-empty>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				param: {
+					pageNo: 1,
+					pageSize: 10
+				},
+				vehiceList: [],
+				loadMore: true,
+				vehice: {},
+				address: {},
+			}
+		},
+		onLoad(e) {
+			this.getByVehiclePlate()
+			console.log(e)
+			if(e){
+				this.vehice.tradeAreaId = item.tradeAreaId
+				this.vehice.tradeAreaName = item.tradeAreaName
+				this.vehice.enterpriseId = item.enterpriseId
+				this.vehice.orderId = item.id
+			}
+			uni.$on('one-address', function(res) {
+				this.address = res
+			})
+			this.informDriver()
+		},
+		methods: {
+			// 车牌查询 
+			getByVehiclePlate() {
+				// this.vehiceList = []
+				this.param.vehiclePlate = ''
+				this.http.request({
+					url: '/transport-server/app/TbVehicle/getByVehiclePlate',
+					loading: 'false',
+					data: this.param,
+					success: res => {
+						this.loadMore = parseInt(res.data.pageCount) > this.param.pageNo;
+						if (res.data.data) {
+							// this.vehiceList.push(...r);
+							this.vehiceList = res.data.data
+						}
+					}
+				});
+			},
+			// 车辆绑定
+			vehicleClick(item) {
+				this.vehice.driverId = item.driverId
+				this.vehice.vehicleId = item.id
+				uni.navigateTo({
+					url: '/pages/market/one/merchant/address/address'
+				})
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	page {
+		background-color: $pg;
+	}
+	.btn {
+		height: 30px;
+		margin: 8px 0px;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+	}
+</style>

+ 35 - 0
uni_modules/uni-data-select/changelog.md

@@ -0,0 +1,35 @@
+## 1.0.6(2023-04-12)
+- 修复 微信小程序点击时会改变背景颜色的 bug
+## 1.0.5(2023-02-03)
+- 修复 禁用时会显示清空按钮
+## 1.0.4(2023-02-02)
+- 优化 查询条件短期内多次变更只查询最后一次变更后的结果
+- 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue
+## 1.0.3(2023-01-16)
+- 修复 不关联服务空间报错的问题
+## 1.0.2(2023-01-14)
+- 新增  属性 `format` 可用于格式化显示选项内容
+## 1.0.1(2022-12-06)
+- 修复  当where变化时,数据不会自动更新的问题
+## 0.1.9(2022-09-05)
+- 修复 微信小程序下拉框出现后选择会点击到蒙板后面的输入框
+## 0.1.8(2022-08-29)
+- 修复 点击的位置不准确
+## 0.1.7(2022-08-12)
+- 新增 支持 disabled 属性
+## 0.1.6(2022-07-06)
+- 修复 pc端宽度异常的bug
+## 0.1.5
+- 修复 pc端宽度异常的bug
+## 0.1.4(2022-07-05)
+- 优化 显示样式
+## 0.1.3(2022-06-02)
+- 修复 localdata 赋值不生效的 bug
+- 新增 支持  uni.scss 修改颜色
+- 新增 支持选项禁用(数据选项设置 disabled: true 即禁用)
+## 0.1.2(2022-05-08)
+- 修复 当 value 为 0 时选择不生效的 bug
+## 0.1.1(2022-05-07)
+- 新增 记住上次的选项(仅 collection 存在时有效)
+## 0.1.0(2022-04-22)
+- 初始化

+ 517 - 0
uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue

@@ -0,0 +1,517 @@
+<template>
+	<view class="uni-stat__select">
+		<span v-if="label" class="uni-label-text hide-on-phone">{{label + ':'}}</span>
+		<view class="uni-stat-box" :class="{'uni-stat__actived': current}">
+			<view class="uni-select" :class="{'uni-select--disabled':disabled}">
+				<view class="uni-select__input-box" @click="toggleSelector">
+					<view v-if="current" class="uni-select__input-text">{{current}}</view>
+					<view v-else class="uni-select__input-text uni-select__input-placeholder">{{typePlaceholder}}</view>
+					<view v-if="current && clear && !disabled" @click.stop="clearVal" >
+						<uni-icons type="clear" color="#c0c4cc" size="24"/>
+					</view>
+					<view v-else>
+						<uni-icons :type="showSelector? 'top' : 'bottom'" size="14" color="#999" />
+					</view>
+				</view>
+				<view class="uni-select--mask" v-if="showSelector" @click="toggleSelector" />
+				<view class="uni-select__selector" v-if="showSelector">
+					<view class="uni-popper__arrow"></view>
+					<scroll-view scroll-y="true" class="uni-select__selector-scroll">
+						<view class="uni-select__selector-empty" v-if="mixinDatacomResData.length === 0">
+							<text>{{emptyTips}}</text>
+						</view>
+						<view v-else class="uni-select__selector-item" v-for="(item,index) in mixinDatacomResData" :key="index"
+							@click="change(item)">
+							<text :class="{'uni-select__selector__disabled': item.disable}">{{formatItemName(item)}}</text>
+						</view>
+					</scroll-view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	/**
+	 * DataChecklist 数据选择器
+	 * @description 通过数据渲染的下拉框组件
+	 * @tutorial https://uniapp.dcloud.io/component/uniui/uni-data-select
+	 * @property {String} value 默认值
+	 * @property {Array} localdata 本地数据 ,格式 [{text:'',value:''}]
+	 * @property {Boolean} clear 是否可以清空已选项
+	 * @property {Boolean} emptyText 没有数据时显示的文字 ,本地数据无效
+	 * @property {String} label 左侧标题
+	 * @property {String} placeholder 输入框的提示文字
+	 * @property {Boolean} disabled 是否禁用
+	 * @event {Function} change  选中发生变化触发
+	 */
+
+	export default {
+		name: "uni-data-select",
+		mixins: [uniCloud.mixinDatacom || {}],
+		props: {
+			localdata: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			value: {
+				type: [String, Number],
+				default: ''
+			},
+			modelValue: {
+				type: [String, Number],
+				default: ''
+			},
+			label: {
+				type: String,
+				default: ''
+			},
+			placeholder: {
+				type: String,
+				default: '请选择'
+			},
+			emptyTips: {
+				type: String,
+				default: '无选项'
+			},
+			clear: {
+				type: Boolean,
+				default: true
+			},
+			defItem: {
+				type: Number,
+				default: 0
+			},
+			disabled: {
+				type: Boolean,
+				default: false
+			},
+			// 格式化输出 用法 field="_id as value, version as text, uni_platform as label" format="{label} - {text}"
+			format: {
+				type: String,
+				default: ''
+			},
+		},
+		data() {
+			return {
+				showSelector: false,
+				current: '',
+				mixinDatacomResData: [],
+				apps: [],
+				channels: [],
+				cacheKey: "uni-data-select-lastSelectedValue",
+			};
+		},
+		created() {
+			this.debounceGet = this.debounce(() => {
+				this.query();
+			}, 300);
+			if (this.collection && !this.localdata.length) {
+				this.debounceGet();
+			}
+		},
+		computed: {
+			typePlaceholder() {
+				const text = {
+					'opendb-stat-app-versions': '版本',
+					'opendb-app-channels': '渠道',
+					'opendb-app-list': '应用'
+				}
+				const common = this.placeholder
+				const placeholder = text[this.collection]
+				return placeholder ?
+					common + placeholder :
+					common
+			},
+			valueCom(){
+				// #ifdef VUE3
+				return this.modelValue;
+				// #endif
+				// #ifndef VUE3
+				return this.value;
+				// #endif
+			}
+		},
+		watch: {
+			localdata: {
+				immediate: true,
+				handler(val, old) {
+					if (Array.isArray(val) && old !== val) {
+						this.mixinDatacomResData = val
+					}
+				}
+			},
+			valueCom(val, old) {
+				this.initDefVal()
+			},
+			mixinDatacomResData: {
+				immediate: true,
+				handler(val) {
+					if (val.length) {
+						this.initDefVal()
+					}
+				}
+			}
+		},
+		methods: {
+			debounce(fn, time = 100){
+				let timer = null
+				return function(...args) {
+					if (timer) clearTimeout(timer)
+					timer = setTimeout(() => {
+						fn.apply(this, args)
+					}, time)
+				}
+			},
+			// 执行数据库查询
+			query(){
+				this.mixinDatacomEasyGet();
+			},
+			// 监听查询条件变更事件
+			onMixinDatacomPropsChange(){
+				if (this.collection) {
+					this.debounceGet();
+				}
+			},
+			initDefVal() {
+				let defValue = ''
+				if ((this.valueCom || this.valueCom === 0) && !this.isDisabled(this.valueCom)) {
+					defValue = this.valueCom
+				} else {
+					let strogeValue
+					if (this.collection) {
+						strogeValue = this.getCache()
+					}
+					if (strogeValue || strogeValue === 0) {
+						defValue = strogeValue
+					} else {
+						let defItem = ''
+						if (this.defItem > 0 && this.defItem <= this.mixinDatacomResData.length) {
+							defItem = this.mixinDatacomResData[this.defItem - 1].value
+						}
+						defValue = defItem
+					}
+          if (defValue || defValue === 0) {
+					  this.emit(defValue)
+          }
+				}
+				const def = this.mixinDatacomResData.find(item => item.value === defValue)
+				this.current = def ? this.formatItemName(def) : ''
+			},
+
+			/**
+			 * @param {[String, Number]} value
+			 * 判断用户给的 value 是否同时为禁用状态
+			 */
+			isDisabled(value) {
+				let isDisabled = false;
+
+				this.mixinDatacomResData.forEach(item => {
+					if (item.value === value) {
+						isDisabled = item.disable
+					}
+				})
+
+				return isDisabled;
+			},
+
+			clearVal() {
+				this.emit('')
+				if (this.collection) {
+					this.removeCache()
+				}
+			},
+			change(item) {
+				if (!item.disable) {
+					this.showSelector = false
+					this.current = this.formatItemName(item)
+					this.emit(item.value)
+				}
+			},
+			emit(val) {
+				this.$emit('input', val)
+				this.$emit('update:modelValue', val)
+				this.$emit('change', val)
+				if (this.collection) {
+					this.setCache(val);
+				}
+			},
+			toggleSelector() {
+				if (this.disabled) {
+					return
+				}
+
+				this.showSelector = !this.showSelector
+			},
+			formatItemName(item) {
+				let {
+					text,
+					value,
+					channel_code
+				} = item
+				channel_code = channel_code ? `(${channel_code})` : ''
+
+				if (this.format) {
+					// 格式化输出
+					let str = "";
+					str = this.format;
+					for (let key in item) {
+						str = str.replace(new RegExp(`{${key}}`,"g"),item[key]);
+					}
+					return str;
+				} else {
+					return this.collection.indexOf('app-list') > 0 ?
+						`${text}(${value})` :
+						(
+							text ?
+							text :
+							`未命名${channel_code}`
+						)
+				}
+			},
+			// 获取当前加载的数据
+			getLoadData(){
+				return this.mixinDatacomResData;
+			},
+			// 获取当前缓存key
+			getCurrentCacheKey(){
+				return this.collection;
+			},
+			// 获取缓存
+			getCache(name=this.getCurrentCacheKey()){
+				let cacheData = uni.getStorageSync(this.cacheKey) || {};
+				return cacheData[name];
+			},
+			// 设置缓存
+			setCache(value, name=this.getCurrentCacheKey()){
+				let cacheData = uni.getStorageSync(this.cacheKey) || {};
+				cacheData[name] = value;
+				uni.setStorageSync(this.cacheKey, cacheData);
+			},
+			// 删除缓存
+			removeCache(name=this.getCurrentCacheKey()){
+				let cacheData = uni.getStorageSync(this.cacheKey) || {};
+				delete cacheData[name];
+				uni.setStorageSync(this.cacheKey, cacheData);
+			},
+		}
+	}
+</script>
+
+<style lang="scss">
+	$uni-base-color: #6a6a6a !default;
+	$uni-main-color: #333 !default;
+	$uni-secondary-color: #909399 !default;
+	$uni-border-3: #e5e5e5;
+
+
+	/* #ifndef APP-NVUE */
+	@media screen and (max-width: 500px) {
+		.hide-on-phone {
+			display: none;
+		}
+	}
+
+	/* #endif */
+	.uni-stat__select {
+		display: flex;
+		align-items: center;
+		// padding: 15px;
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+		width: 100%;
+		flex: 1;
+		box-sizing: border-box;
+	}
+
+	.uni-stat-box {
+		width: 100%;
+		flex: 1;
+	}
+
+	.uni-stat__actived {
+		width: 100%;
+		flex: 1;
+		// outline: 1px solid #2979ff;
+	}
+
+	.uni-label-text {
+		font-size: 14px;
+		font-weight: bold;
+		color: $uni-base-color;
+		margin: auto 0;
+		margin-right: 5px;
+	}
+
+	.uni-select {
+		font-size: 14px;
+		border: 1px solid $uni-border-3;
+		box-sizing: border-box;
+		border-radius: 4px;
+		padding: 0 5px;
+		padding-left: 10px;
+		position: relative;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		user-select: none;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		border-bottom: solid 1px $uni-border-3;
+		width: 100%;
+		flex: 1;
+		height: 35px;
+
+		&--disabled {
+			background-color: #f5f7fa;
+			cursor: not-allowed;
+		}
+	}
+
+	.uni-select__label {
+		font-size: 16px;
+		// line-height: 22px;
+		height: 35px;
+		padding-right: 10px;
+		color: $uni-secondary-color;
+	}
+
+	.uni-select__input-box {
+		height: 35px;
+		position: relative;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex: 1;
+		flex-direction: row;
+		align-items: center;
+	}
+
+	.uni-select__input {
+		flex: 1;
+		font-size: 14px;
+		height: 22px;
+		line-height: 22px;
+	}
+
+	.uni-select__input-plac {
+		font-size: 14px;
+		color: $uni-secondary-color;
+	}
+
+	.uni-select__selector {
+		/* #ifndef APP-NVUE */
+		box-sizing: border-box;
+		/* #endif */
+		position: absolute;
+		top: calc(100% + 12px);
+		left: 0;
+		width: 100%;
+		background-color: #FFFFFF;
+		border: 1px solid #EBEEF5;
+		border-radius: 6px;
+		box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+		z-index: 3;
+		padding: 4px 0;
+	}
+
+	.uni-select__selector-scroll {
+		/* #ifndef APP-NVUE */
+		max-height: 200px;
+		box-sizing: border-box;
+		/* #endif */
+	}
+
+	/* #ifdef H5 */
+	@media (min-width: 768px) {
+		.uni-select__selector-scroll {
+			max-height: 600px;
+		}
+	}
+	/* #endif */
+
+	.uni-select__selector-empty,
+	.uni-select__selector-item {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		cursor: pointer;
+		/* #endif */
+		line-height: 35px;
+		font-size: 14px;
+		text-align: center;
+		/* border-bottom: solid 1px $uni-border-3; */
+		padding: 0px 10px;
+	}
+
+	.uni-select__selector-item:hover {
+		background-color: #f9f9f9;
+	}
+
+	.uni-select__selector-empty:last-child,
+	.uni-select__selector-item:last-child {
+		/* #ifndef APP-NVUE */
+		border-bottom: none;
+		/* #endif */
+	}
+
+	.uni-select__selector__disabled {
+		opacity: 0.4;
+		cursor: default;
+	}
+
+	/* picker 弹出层通用的指示小三角 */
+	.uni-popper__arrow,
+	.uni-popper__arrow::after {
+		position: absolute;
+		display: block;
+		width: 0;
+		height: 0;
+		border-color: transparent;
+		border-style: solid;
+		border-width: 6px;
+	}
+
+	.uni-popper__arrow {
+		filter: drop-shadow(0 2px 12px rgba(0, 0, 0, 0.03));
+		top: -6px;
+		left: 10%;
+		margin-right: 3px;
+		border-top-width: 0;
+		border-bottom-color: #EBEEF5;
+	}
+
+	.uni-popper__arrow::after {
+		content: " ";
+		top: 1px;
+		margin-left: -6px;
+		border-top-width: 0;
+		border-bottom-color: #fff;
+	}
+
+	.uni-select__input-text {
+		// width: 280px;
+		width: 100%;
+		color: $uni-main-color;
+		white-space: nowrap;
+		text-overflow: ellipsis;
+		-o-text-overflow: ellipsis;
+		overflow: hidden;
+	}
+
+	.uni-select__input-placeholder {
+		color: $uni-base-color;
+		font-size: 12px;
+	}
+
+	.uni-select--mask {
+		position: fixed;
+		top: 0;
+		bottom: 0;
+		right: 0;
+		left: 0;
+		z-index: 2;
+	}
+</style>

+ 85 - 0
uni_modules/uni-data-select/package.json

@@ -0,0 +1,85 @@
+{
+  "id": "uni-data-select",
+  "displayName": "uni-data-select 下拉框选择器",
+  "version": "1.0.6",
+  "description": "通过数据驱动的下拉框选择器",
+  "keywords": [
+    "uni-ui",
+    "select",
+    "uni-data-select",
+    "下拉框",
+    "下拉选"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": "^3.1.1"
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-load-more"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "u",
+          "app-nvue": "n"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "u",
+          "百度": "u",
+          "字节跳动": "u",
+        "QQ": "u",
+        "京东": "u"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 8 - 0
uni_modules/uni-data-select/readme.md

@@ -0,0 +1,8 @@
+## DataSelect 下拉框选择器
+> **组件名:uni-data-select**
+> 代码块: `uDataSelect`
+
+当选项过多时,使用下拉菜单展示并选择内容
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-select)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 6 - 0
uni_modules/uni-load-more/changelog.md

@@ -1,3 +1,9 @@
+## 1.3.3(2022-01-20)
+- 新增 showText属性 ,是否显示文本
+## 1.3.2(2022-01-19)
+- 修复 nvue 平台下不显示文本的bug
+## 1.3.1(2022-01-19)
+- 修复 微信小程序平台样式选择器报警告的问题
 ## 1.3.0(2021-11-19)
 - 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
 - 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more)

Diferenças do arquivo suprimidas por serem muito extensas
+ 8 - 4
uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue


+ 1 - 1
uni_modules/uni-load-more/package.json

@@ -1,7 +1,7 @@
 {
   "id": "uni-load-more",
   "displayName": "uni-load-more 加载更多",
-  "version": "1.3.0",
+  "version": "1.3.3",
   "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。",
   "keywords": [
     "uni-ui",

+ 2 - 0
uni_modules/uni-scss/changelog.md

@@ -1,3 +1,5 @@
+## 1.0.3(2022-01-21)
+- 优化 组件示例
 ## 1.0.2(2021-11-22)
 - 修复 / 符号在 vue 不同版本兼容问题引起的报错问题
 ## 1.0.1(2021-11-22)

+ 3 - 3
uni_modules/uni-scss/package.json

@@ -1,7 +1,7 @@
 {
   "id": "uni-scss",
   "displayName": "uni-scss 辅助样式",
-  "version": "1.0.2",
+  "version": "1.0.3",
   "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。",
   "keywords": [
     "uni-scss",
@@ -14,8 +14,8 @@
   },
   "dcloudext": {
     "category": [
-        "uni-app前端模板",
-        "前端页面模板"
+        "JS SDK",
+        "通用 SDK"
     ],
     "sale": {
       "regular": {

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff