高敬炎 2 years ago
parent
commit
f8b32c5f01
100 changed files with 4635 additions and 1613 deletions
  1. 2 0
      .gitignore
  2. 1 1
      uni_applet/pageA/find/createLifeService.vue
  3. 0 0
      uni_applet/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.js.map
  4. 6 6
      uni_applet/unpackage/dist/dev/mp-weixin/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.js
  5. 38 1
      uni_merchants_enter/App.vue
  6. 87 0
      uni_merchants_enter/common/helper.js
  7. 13 0
      uni_merchants_enter/config/index.js
  8. 141 0
      uni_merchants_enter/js_sdk/district.js
  9. 52 0
      uni_merchants_enter/js_sdk/filterCity.js
  10. 0 0
      uni_merchants_enter/js_sdk/js-amap/__MACOSX/amap-wx.130.js
  11. 31 0
      uni_merchants_enter/js_sdk/js-amap/amap-wx.130.js
  12. 1122 0
      uni_merchants_enter/js_sdk/qqmap-wx-jssdk.js
  13. 0 0
      uni_merchants_enter/js_sdk/qqmap-wx-jssdk.min.js
  14. 50 0
      uni_merchants_enter/js_sdk/share.js
  15. 272 0
      uni_merchants_enter/js_sdk/wa-permission/permission.js
  16. 594 0
      uni_merchants_enter/js_sdk/xfl-DateFormat/DateFormat.js
  17. 19 3
      uni_merchants_enter/main.js
  18. 277 4
      uni_merchants_enter/pageA/enter/cateringindustry.vue
  19. 104 0
      uni_merchants_enter/pages.json
  20. BIN
      uni_merchants_enter/static/image/enter/jingyingxukezheng.png
  21. BIN
      uni_merchants_enter/static/image/yjt.png
  22. 109 0
      uni_merchants_enter/store/index.js
  23. 19 0
      uni_merchants_enter/style/icon/iconfont.css
  24. 3 1
      uni_merchants_enter/uni.scss
  25. 6 0
      uni_merchants_enter/uni_modules/smh-time-range/changelog.md
  26. 190 0
      uni_merchants_enter/uni_modules/smh-time-range/components/smh-time-range/smh-time-range.vue
  27. 40 0
      uni_merchants_enter/uni_modules/smh-time-range/readme.md
  28. 0 2
      uni_merchants_enter/uni_modules/uni-badge/changelog.md
  29. 3 3
      uni_merchants_enter/uni_modules/uni-badge/components/uni-badge/uni-badge.vue
  30. 6 0
      uni_merchants_enter/uni_modules/uni-breadcrumb/changelog.md
  31. 121 0
      uni_merchants_enter/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue
  32. 41 0
      uni_merchants_enter/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue
  33. 66 0
      uni_merchants_enter/uni_modules/uni-breadcrumb/readme.md
  34. 1 1
      uni_merchants_enter/uni_modules/uni-combox/components/uni-combox/uni-combox.vue
  35. 0 9
      uni_merchants_enter/uni_modules/uni-data-picker/changelog.md
  36. 6 10
      uni_merchants_enter/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue
  37. 15 17
      uni_merchants_enter/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue
  38. 0 13
      uni_merchants_enter/uni_modules/uni-data-select/changelog.md
  39. 55 132
      uni_merchants_enter/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
  40. 33 70
      uni_merchants_enter/uni_modules/uni-datetime-picker/changelog.md
  41. 13 3
      uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue
  42. 125 130
      uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue
  43. 45 0
      uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js
  44. 28 16
      uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue
  45. 301 337
      uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue
  46. 195 238
      uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js
  47. 1 1
      uni_merchants_enter/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue
  48. 1 12
      uni_merchants_enter/uni_modules/uni-easyinput/changelog.md
  49. 137 115
      uni_merchants_enter/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue
  50. 0 2
      uni_merchants_enter/uni_modules/uni-fab/changelog.md
  51. 2 3
      uni_merchants_enter/uni_modules/uni-fab/components/uni-fab/uni-fab.vue
  52. 0 4
      uni_merchants_enter/uni_modules/uni-file-picker/changelog.md
  53. 2 2
      uni_merchants_enter/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js
  54. 1 12
      uni_merchants_enter/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue
  55. 0 2
      uni_merchants_enter/uni_modules/uni-forms/changelog.md
  56. 6 2
      uni_merchants_enter/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue
  57. 1 1
      uni_merchants_enter/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue
  58. 1 1
      uni_merchants_enter/uni_modules/uni-grid/components/uni-grid/uni-grid.vue
  59. 1 1
      uni_merchants_enter/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue
  60. 2 2
      uni_merchants_enter/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue
  61. 0 26
      uni_merchants_enter/uni_modules/uni-list/changelog.md
  62. 7 62
      uni_merchants_enter/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue
  63. 14 94
      uni_merchants_enter/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue
  64. 85 100
      uni_merchants_enter/uni_modules/uni-list/components/uni-list/uni-list.vue
  65. 0 4
      uni_merchants_enter/uni_modules/uni-nav-bar/changelog.md
  66. 1 1
      uni_merchants_enter/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue
  67. 4 1
      uni_merchants_enter/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue
  68. 0 4
      uni_merchants_enter/uni_modules/uni-number-box/changelog.md
  69. 2 2
      uni_merchants_enter/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue
  70. 0 8
      uni_merchants_enter/uni_modules/uni-popup/changelog.md
  71. 1 5
      uni_merchants_enter/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
  72. 9 3
      uni_merchants_enter/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
  73. 1 1
      uni_merchants_enter/uni_modules/uni-row/components/uni-col/uni-col.vue
  74. 1 1
      uni_merchants_enter/uni_modules/uni-row/components/uni-row/uni-row.vue
  75. 0 2
      uni_merchants_enter/uni_modules/uni-search-bar/changelog.md
  76. 1 1
      uni_merchants_enter/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue
  77. 1 1
      uni_merchants_enter/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue
  78. 0 2
      uni_merchants_enter/uni_modules/uni-swipe-action/changelog.md
  79. 2 2
      uni_merchants_enter/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js
  80. 2 4
      uni_merchants_enter/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js
  81. 3 4
      uni_merchants_enter/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js
  82. 3 4
      uni_merchants_enter/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js
  83. 1 1
      uni_merchants_enter/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue
  84. 0 4
      uni_merchants_enter/uni_modules/uni-table/changelog.md
  85. 3 3
      uni_merchants_enter/uni_modules/uni-table/components/uni-table/uni-table.vue
  86. 8 16
      uni_merchants_enter/uni_modules/uni-table/components/uni-th/filter-dropdown.vue
  87. 3 10
      uni_merchants_enter/uni_modules/uni-table/components/uni-th/uni-th.vue
  88. 6 6
      uni_merchants_enter/uni_modules/uni-table/components/uni-tr/table-checkbox.vue
  89. 1 1
      uni_merchants_enter/uni_modules/uni-tag/components/uni-tag/uni-tag.vue
  90. 39 0
      uni_merchants_enter/uni_modules/uni-test/changelog.md
  91. 26 0
      uni_merchants_enter/uni_modules/uni-test/components/uni-test/uni-test.vue
  92. 10 0
      uni_merchants_enter/uni_modules/uni-test/readme.md
  93. 0 2
      uni_merchants_enter/uni_modules/uni-transition/changelog.md
  94. 1 4
      uni_merchants_enter/uni_modules/uni-transition/components/uni-transition/createAnimation.js
  95. 1 6
      uni_merchants_enter/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
  96. 0 68
      uni_merchants_enter/uni_modules/uni-ui/changelog.md
  97. 2 2
      uni_merchants_enter/uni_modules/uview-ui/components/u-form-item/u-form-item.vue
  98. 5 0
      uni_merchants_enter/uni_modules/uview-ui/components/u-picker/props.js
  99. 1 0
      uni_merchants_enter/uni_modules/uview-ui/components/u-picker/u-picker.vue
  100. 6 1
      uni_merchants_enter/uni_modules/uview-ui/components/u-toolbar/props.js

+ 2 - 0
.gitignore

@@ -49,6 +49,8 @@ mvnw.cmd
 /unimall-launcher/target/
 /unimall-plugin-core/target/
 /unimall-app/unpackage/dist/
+/uni_merchants_enter/unpackage/dist/
+/uni_applet/unpackage/dist/
 /unimall-app/unpackage/resources/
 /unimall-app/unpackage/debug/
 /unimall-admin/dist.zip

+ 1 - 1
uni_applet/pageA/find/createLifeService.vue

@@ -21,7 +21,7 @@
 				
 				<u-form-item labelWidth='80' labelPosition='left' @click='placeSelect(),hideKeyboard()' label="店铺位置">
 					<view style='text-align:right;' v-if="form.province">{{ form.province }}{{ form.city }}{{ form.area }}</view>
-					<view class="" v-else>
+					<view style='text-align:right;' v-else>
 						<text style='text-align:right;'>选择位置 </text>
 						<image src="@/static/image/find/yjt.png" mode=""
 							style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image>

File diff suppressed because it is too large
+ 0 - 0
uni_applet/unpackage/dist/dev/.sourcemap/mp-weixin/uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.js.map


File diff suppressed because it is too large
+ 6 - 6
uni_applet/unpackage/dist/dev/mp-weixin/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.js


+ 38 - 1
uni_merchants_enter/App.vue

@@ -12,9 +12,46 @@
 	}
 </script>
 
-<style>
+<style lang='scss'>
 	/*每个页面公共css */
+	@import "@/uni_modules/uview-ui/index.scss";
+	@import '@/uni_modules/uni-scss/index.scss';
 		@import "colorui/main.css";
 		@import "colorui/icon.css";
 		@import '@/style/icon/iconfont_colors.css';
+		@import '@/style/icon/iconfont.css';
+		.content{
+			padding-bottom:150rpx;
+		}
+		.wrap{
+			background:#fff;
+			border-radius:20rpx;
+			margin:20rpx;
+		}
+		.caution{
+			color:red;
+		}
+		.footer{
+			position:fixed;
+			bottom:0;
+			left:0;
+			background:#fff;
+			width:100%;
+			z-index:10;
+			padding:30rpx 0;
+			.submit{
+				background:#5F7DE9;
+				color:#fff;
+				width:90%;
+			}
+		}
+		.flex{
+			display:flex;
+		}
+		.justify-space-between{
+			justify-content: space-between;
+		}
+		.align-item-center{
+			align-items: center;
+		}
 </style>

+ 87 - 0
uni_merchants_enter/common/helper.js

@@ -0,0 +1,87 @@
+import * as config from '../config'
+const ossUploadUrl = 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/';
+
+const contactCustomerService = (item) => {
+	console.log(item)
+	if (!item) {
+		item = '110'
+	}
+	console.log("联系客服")
+	uni.makePhoneCall({
+		phoneNumber: item,
+		success: (res) => {
+			console.log('调用成功!')
+		},
+		// 失败回调
+		fail: (res) => {
+			console.log('调用失败!')
+			contactCustomerService(item)
+		}
+	});
+}
+
+const logout = () => {
+	uni.removeStorage({
+		key: 'userInfo'
+	})
+}
+const formatLocation = (str) => {
+	let area = {}
+	let index11 = 0
+	let index1 = str.indexOf("省")
+	if (index1 == -1) {
+		index11 = str.indexOf("自治区")
+		if (index11 != -1) {
+			area.Province = str.substring(0, index11 + 3)
+		} else {
+			area.Province = str.substring(0, 0)
+		}
+	} else {
+		area.Province = str.substring(0, index1 + 1)
+	}
+
+	let index2 = str.indexOf("市")
+	if (index11 == -1) {
+		area.City = str.substring(index11 + 1, index2 + 1)
+	} else {
+		if (index11 == 0) {
+			area.City = str.substring(index1 + 1, index2 + 1)
+		} else {
+			area.City = str.substring(index11 + 3, index2 + 1)
+		}
+	}
+
+	let index3 = str.indexOf("区")
+	if (index3 == -1) {
+		index3 = str.indexOf("县")
+		if (index3 == -1) {
+			index3 = str.lastIndexOf("市")
+			if (index3 == -1) {
+				index3 = str.indexOf("镇")
+				if (index3 == -1) {
+
+				} else {
+					area.Country = str.substring(index2 + 1, index3 + 1)
+
+				}
+			} else {
+				area.Country = str.substring(index2 + 1, index3 + 1)
+			}
+		} else {
+			area.Country = str.substring(index2 + 1, index3 + 1)
+		}
+
+	} else {
+		area.Country = str.substring(index2 + 1, index3 + 1)
+	}
+	area.Village = str.substring(index3 + 1, str.length)
+	return area;
+}
+
+
+
+export default {
+logout,
+contactCustomerService,
+formatLocation
+}

+ 13 - 0
uni_merchants_enter/config/index.js

@@ -0,0 +1,13 @@
+const dev = {
+	// baseUrlNew: 'http://192.168.110.72:8182',
+	baseUrlNew: 'http://192.168.110.138:8182',
+	baseUrlNew: 'http://192.168.110.138:8183',
+	// baseUrlNew: 'http://192.168.110.82:8182',
+	// baseUrlNew: 'https://cardapi.eliangeyun.com',
+	h5Appid: 'wxb66b599f7f61b46f',
+	debug: false
+}
+
+export function def() {
+	return dev
+}

+ 141 - 0
uni_merchants_enter/js_sdk/district.js

@@ -0,0 +1,141 @@
+import twData from './taiwan.json'
+import { formatCity } from './filterCity'
+export default {
+	/**
+	 * 按省的城市编码排序
+	 */
+	orderByCityCode(a, b) {
+	  return parseInt(a.value) - parseInt(b.value)
+	},
+	/**
+	 * 自定义app数据格式
+	 * @param {Array} addressList 高德地图api返回的城市数据
+	 * @param {boolean} noFilter 是否过滤省市区
+	 * @param {boolean} allProvice 是否显示全省
+	 * @param {boolean} allCity 是否显示全市
+	 * @param {boolean} allCountry 是否显示全国
+	 */
+	buildAppJSONData({
+		addressList, 
+		noFilter = false,
+		allProvince = false,
+		allCity = false,
+		allCountry = false,
+	}) {
+	  let array = []
+	  get(addressList, array, noFilter)
+		
+		array.forEach(item => {
+		  if (item.value === '710000') {
+		    if (item.children.length === 0) {
+		      item.children = twData
+		    }
+		  }
+		})
+		array.sort(this.orderByCityCode) // 加入台湾区域,并按省份城市代码排序
+		
+		const specialCitys = ['北京', '上海', '天津', '重庆', '香港', '澳门']
+		if (array.length > 0) {
+			array.forEach(item => {
+				if (allCity) {
+					item.children.forEach(city => {
+						city.children.unshift({
+							value: '0', label: '全市', children: []
+						})
+					})
+				}
+				if (allProvince) {
+		      if (specialCitys.indexOf(item.label) === -1) {
+		        item.children.unshift({
+		        	value: '0', label: '全省', children: [
+		        		{value: '0', label: '全省', children: []}
+		        	]
+		        })
+		      }
+				}
+			})
+			if (allCountry) {
+				array.unshift({
+					value: '0', label: '全国', children: [
+						{value: '0', label: '全国', children: [
+							{value: '0', label: '全国', children: []}
+						]}
+					]
+				})
+			}
+		}
+	  return array
+		
+	  function get(districts, children, noFilter) {
+	    districts.forEach((item, index) => {
+	      children.push({
+	        value: noFilter === true ? item.adcode : item.name,
+	        label: noFilter === true ? formatCity(item.name) : item.name
+	      })
+	      if (item.districts.length != 0) {
+	        children[children.length - 1].children = []
+	        if (item.adcode === item.districts[0].adcode) {
+	          children[children.length - 1].children = [
+	            {
+	              value: noFilter === true ? item.adcode : item.name,
+	              label: noFilter === true ? formatCity(item.name) : item.name
+	            }
+	          ]      
+	        } else {
+	          get(item.districts, children[children.length - 1].children, noFilter)
+	        }
+	      } else {
+	        // 特别处理香港,市区统一
+	        if (parseInt(item.adcode) > 810000 && parseInt(item.adcode) < 820000) {
+	          children[children.length - 1].children = [
+	            {
+	             value: noFilter === true ? item.adcode : item.name,
+	             label: noFilter === true ? formatCity(item.name) : item.name
+	            }
+	          ]
+	        }
+	        // 特别处理澳门,市区统一
+	        if (parseInt(item.adcode) > 820000 && parseInt(item.adcode) < 830000) {
+	          children[children.length - 1].children = [
+	            {
+	              value: noFilter === true ? item.adcode : item.name,
+	              label: noFilter === true ? formatCity(item.name) : item.name
+	            }
+	          ]
+	        }
+	        // 特别处理台湾
+	        if (parseInt(item.adcode) === 710000) {
+	          children[children.length - 1].children = []
+	        }
+	      }
+	    })
+	  }
+	},
+	getGaoDeData(key) {
+		if (key) {
+			return new Promise((resolve, reject) => {
+				uni.request({
+					method: 'get',
+					url: `https://restapi.amap.com/v3/config/district?subdistrict=3&key=${key}`,
+					success: res => {
+						if (res.statusCode === 200) {
+							// 构造匹配app,otms框架的城市JSON文件
+							// const data = this.buildAppJSONData(, false, false)
+							resolve(res.data.districts[0].districts)
+						} else {
+							reject(res)
+						}
+					},
+					fail: res => {
+						reject(res)
+					}
+				})
+			})
+		} else {
+			uni.showModal({
+				title: '提示',
+				content: '请输入高德key'
+			})
+		}
+	}
+}

+ 52 - 0
uni_merchants_enter/js_sdk/filterCity.js

@@ -0,0 +1,52 @@
+/**
+ * 过滤城市字段
+ * 去掉省市区自治区等文字,匹配tms的地址库,兼容老数据 
+ */
+
+const cityReg = /省|市|自治区|自治州|自治县|特别行政区|壮族|回族|维吾尔/g
+
+const areaReg = /回族自治县|满族自治县|满族蒙古族自治县|蒙古族自治县|蒙古自治州|朝鲜族自治州|朝鲜族自治县|畲族自治县|土家族自治县|土家族苗族自治州|侗族自治县|苗族侗族自治县|苗族侗族自治州|苗族自治县|瑶族自治县|壮族瑶族自治县|各族自治县|毛南族自治县|仫佬族自治县|黎族自治县|黎族苗族自治县|苗族土家族自治县|土家族苗族自治县|羌族自治县|彝族自治县|彝族自治州|藏族自治县|藏族羌族自治州|仡佬族苗族自治县|布依族苗族自治州|苗族布依族自治县|布依族苗族自治县|布依族苗族自治州|水族自治县|彝族回族苗族自治县|傈僳族自治州|独龙族怒族自治县|白族普米族自治县|哈尼族彝族自治州|苗族瑶族傣族自治县|傣族自治州|彝族傣族自治县|哈尼族彝族傣族自治县|白族自治州|彝族自治县|彝族回族自治县|彝族自治县|彝族自治州|藏族自治州|傈僳族自治县|纳西族自治县|壮族苗族自治州|彝族哈尼族拉祜族自治县|哈尼族彝族自治县|傣族彝族自治县|哈尼族彝族自治县|哈尼族自治县|拉祜族自治县|傣族拉祜族佤族自治县|佤族自治县|傣族佤族自治县|拉祜族佤族布朗族傣族自治县|回族彝族自治县|彝族苗族自治县|傣族景颇族自治州|哈萨克族自治县|裕固族自治县|保安族东乡族撒拉族自治县|回族土族自治县|撒拉族自治县|土族自治县|蒙古族藏族自治州|蒙古族藏族自治州直辖|哈萨克自治县|哈萨克自治州|锡伯自治县|塔吉克自治县|柯尔克孜自治州/g
+
+const countyReg = /区|县|经济开发区/g
+
+export const formatCity = (name) => {
+  var tempName = name
+  if (tempName.length > 3) {
+    if (tempName.indexOf('城区') > -1) {
+      tempName = tempName.replace('城区', '')
+    }
+    if (tempName.indexOf('地区') > -1) {
+      tempName = tempName.replace('地区', '')
+    }
+  }
+  if (tempName.length > 2) {
+    if (tempName.indexOf('和田') === -1) {
+      tempName = tempName.replace(areaReg, "")
+      if (tempName.indexOf('市') > -1 && tempName.indexOf('市') !== tempName.length - 1) { // 市不是出现在最后一位,不过滤
+        if (tempName.indexOf('市市') > -1) { // 如果出现两个市,如津市市,只去掉第一个市字
+          tempName = tempName.replace('市', "")
+        } else {
+          console.log('保留市字:' + tempName)
+        }
+      } else {
+        tempName = tempName.replace(cityReg, "")
+      }
+      // 过滤剩余的x族自治县
+      tempName = tempName.replace('族自治县', "")
+      // 过滤区县
+      if (tempName.length > 2) {
+        if (tempName.indexOf('县区') > -1) {
+          tempName = tempName.replace('区', "")
+        } else {
+          if (tempName.length > 3 && tempName.indexOf('新区') > -1) {
+            console.log('保留新区:' + tempName)
+          } else {
+            tempName = tempName.replace(countyReg, "")
+          }
+        }
+        // tempName = tempName.replace(countyReg, "")
+      }
+    }
+  }
+  return tempName
+}

+ 0 - 0
uni_merchants_enter/js_sdk/js-amap/__MACOSX/amap-wx.130.js


+ 31 - 0
uni_merchants_enter/js_sdk/js-amap/amap-wx.130.js

@@ -0,0 +1,31 @@
+function AMapWX(a){this.key=a.key;this.requestConfig={key:a.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};this.MeRequestConfig={key:a.key,serviceName:"https://restapi.amap.com/rest/me"}}
+AMapWX.prototype.getWxLocation=function(a,b){wx.getLocation({type:"gcj02",success:function(c){c=c.longitude+","+c.latitude;wx.setStorage({key:"userLocation",data:c});b(c)},fail:function(c){wx.getStorage({key:"userLocation",success:function(d){d.data&&b(d.data)}});a.fail({errCode:"0",errMsg:c.errMsg||""})}})};
+AMapWX.prototype.getMEKeywordsSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.keywords&&(d.keywords=b.keywords);b.city&&(d.city=b.city);b.filter&&(d.filter=b.filter);b.sortrule&&(d.sortrule=b.sortrule);b.pageNum&&(d.pageNum=b.pageNum);b.pageSize&&(d.pageSize=b.pageSize);b.sig&&(d.sig=
+b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/local",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})};
+AMapWX.prototype.getMEIdSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.id&&(d.id=b.id);b.sig&&(d.sig=b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/id",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&
+0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})};
+AMapWX.prototype.getMEPolygonSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.keywords&&(d.keywords=b.keywords);b.polygon&&(d.polygon=b.polygon);b.filter&&(d.filter=b.filter);b.sortrule&&(d.sortrule=b.sortrule);b.pageNum&&(d.pageNum=b.pageNum);b.pageSize&&(d.pageSize=b.pageSize);
+b.sig&&(d.sig=b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/polygon",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})};
+AMapWX.prototype.getMEaroundSearch=function(a){if(!a.options)return a.fail({errCode:"0",errMsg:"\u7f3a\u5c11\u5fc5\u8981\u53c2\u6570"});var b=a.options,c=this.MeRequestConfig,d={key:c.key,s:"rsx",platform:"WXJS",appname:a.key,sdkversion:"1.2.0",logversion:"2.0"};b.layerId&&(d.layerId=b.layerId);b.keywords&&(d.keywords=b.keywords);b.center&&(d.center=b.center);b.radius&&(d.radius=b.radius);b.filter&&(d.filter=b.filter);b.sortrule&&(d.sortrule=b.sortrule);b.pageNum&&(d.pageNum=b.pageNum);b.pageSize&&
+(d.pageSize=b.pageSize);b.sig&&(d.sig=b.sig);wx.request({url:c.serviceName+"/cpoint/datasearch/around",data:d,method:"GET",header:{"content-type":"application/json"},success:function(e){(e=e.data)&&e.status&&"1"===e.status&&0===e.code?a.success(e.data):a.fail({errCode:"0",errMsg:e})},fail:function(e){a.fail({errCode:"0",errMsg:e.errMsg||""})}})};
+AMapWX.prototype.getGeo=function(a){var b=this.requestConfig,c=a.options;b={key:this.key,extensions:"all",s:b.s,platform:b.platform,appname:this.key,sdkversion:b.sdkversion,logversion:b.logversion};c.address&&(b.address=c.address);c.city&&(b.city=c.city);c.batch&&(b.batch=c.batch);c.sig&&(b.sig=c.sig);wx.request({url:"https://restapi.amap.com/v3/geocode/geo",data:b,method:"GET",header:{"content-type":"application/json"},success:function(d){(d=d.data)&&d.status&&"1"===d.status?a.success(d):a.fail({errCode:"0",
+errMsg:d})},fail:function(d){a.fail({errCode:"0",errMsg:d.errMsg||""})}})};
+AMapWX.prototype.getRegeo=function(a){function b(d){var e=c.requestConfig;wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:c.key,location:d,extensions:"all",s:e.s,platform:e.platform,appname:c.key,sdkversion:e.sdkversion,logversion:e.logversion},method:"GET",header:{"content-type":"application/json"},success:function(g){if(g.data.status&&"1"==g.data.status){g=g.data.regeocode;var h=g.addressComponent,f=[],k=g.roads[0].name+"\u9644\u8fd1",m=d.split(",")[0],n=d.split(",")[1];if(g.pois&&
+g.pois[0]){k=g.pois[0].name+"\u9644\u8fd1";var l=g.pois[0].location;l&&(m=parseFloat(l.split(",")[0]),n=parseFloat(l.split(",")[1]))}h.provice&&f.push(h.provice);h.city&&f.push(h.city);h.district&&f.push(h.district);h.streetNumber&&h.streetNumber.street&&h.streetNumber.number?(f.push(h.streetNumber.street),f.push(h.streetNumber.number)):f.push(g.roads[0].name);f=f.join("");a.success([{iconPath:a.iconPath,width:a.iconWidth,height:a.iconHeight,name:f,desc:k,longitude:m,latitude:n,id:0,regeocodeData:g}])}else a.fail({errCode:g.data.infocode,
+errMsg:g.data.info})},fail:function(g){a.fail({errCode:"0",errMsg:g.errMsg||""})}})}var c=this;a.location?b(a.location):c.getWxLocation(a,function(d){b(d)})};
+AMapWX.prototype.getWeather=function(a){function b(g){var h="base";a.type&&"forecast"==a.type&&(h="all");wx.request({url:"https://restapi.amap.com/v3/weather/weatherInfo",data:{key:d.key,city:g,extensions:h,s:e.s,platform:e.platform,appname:d.key,sdkversion:e.sdkversion,logversion:e.logversion},method:"GET",header:{"content-type":"application/json"},success:function(f){if(f.data.status&&"1"==f.data.status)if(f.data.lives){if((f=f.data.lives)&&0<f.length){f=f[0];var k={city:{text:"\u57ce\u5e02",data:f.city},
+weather:{text:"\u5929\u6c14",data:f.weather},temperature:{text:"\u6e29\u5ea6",data:f.temperature},winddirection:{text:"\u98ce\u5411",data:f.winddirection+"\u98ce"},windpower:{text:"\u98ce\u529b",data:f.windpower+"\u7ea7"},humidity:{text:"\u6e7f\u5ea6",data:f.humidity+"%"}};k.liveData=f;a.success(k)}}else f.data.forecasts&&f.data.forecasts[0]&&a.success({forecast:f.data.forecasts[0]});else a.fail({errCode:f.data.infocode,errMsg:f.data.info})},fail:function(f){a.fail({errCode:"0",errMsg:f.errMsg||""})}})}
+function c(g){wx.request({url:"https://restapi.amap.com/v3/geocode/regeo",data:{key:d.key,location:g,extensions:"all",s:e.s,platform:e.platform,appname:d.key,sdkversion:e.sdkversion,logversion:e.logversion},method:"GET",header:{"content-type":"application/json"},success:function(h){if(h.data.status&&"1"==h.data.status){h=h.data.regeocode;if(h.addressComponent)var f=h.addressComponent.adcode;else h.aois&&0<h.aois.length&&(f=h.aois[0].adcode);b(f)}else a.fail({errCode:h.data.infocode,errMsg:h.data.info})},
+fail:function(h){a.fail({errCode:"0",errMsg:h.errMsg||""})}})}var d=this,e=d.requestConfig;a.city?b(a.city):d.getWxLocation(a,function(g){c(g)})};
+AMapWX.prototype.getPoiAround=function(a){function b(e){e={key:c.key,location:e,s:d.s,platform:d.platform,appname:c.key,sdkversion:d.sdkversion,logversion:d.logversion};a.querytypes&&(e.types=a.querytypes);a.querykeywords&&(e.keywords=a.querykeywords);wx.request({url:"https://restapi.amap.com/v3/place/around",data:e,method:"GET",header:{"content-type":"application/json"},success:function(g){if(g.data.status&&"1"==g.data.status){if((g=g.data)&&g.pois){for(var h=[],f=0;f<g.pois.length;f++){var k=0==
+f?a.iconPathSelected:a.iconPath;h.push({latitude:parseFloat(g.pois[f].location.split(",")[1]),longitude:parseFloat(g.pois[f].location.split(",")[0]),iconPath:k,width:22,height:32,id:f,name:g.pois[f].name,address:g.pois[f].address})}a.success({markers:h,poisData:g.pois})}}else a.fail({errCode:g.data.infocode,errMsg:g.data.info})},fail:function(g){a.fail({errCode:"0",errMsg:g.errMsg||""})}})}var c=this,d=c.requestConfig;a.location?b(a.location):c.getWxLocation(a,function(e){b(e)})};
+AMapWX.prototype.getStaticmap=function(a){function b(e){c.push("location="+e);a.zoom&&c.push("zoom="+a.zoom);a.size&&c.push("size="+a.size);a.scale&&c.push("scale="+a.scale);a.markers&&c.push("markers="+a.markers);a.labels&&c.push("labels="+a.labels);a.paths&&c.push("paths="+a.paths);a.traffic&&c.push("traffic="+a.traffic);e="https://restapi.amap.com/v3/staticmap?"+c.join("&");a.success({url:e})}var c=[];c.push("key="+this.key);var d=this.requestConfig;c.push("s="+d.s);c.push("platform="+d.platform);
+c.push("appname="+d.appname);c.push("sdkversion="+d.sdkversion);c.push("logversion="+d.logversion);a.location?b(a.location):this.getWxLocation(a,function(e){b(e)})};
+AMapWX.prototype.getInputtips=function(a){var b=Object.assign({},this.requestConfig);a.location&&(b.location=a.location);a.keywords&&(b.keywords=a.keywords);a.type&&(b.type=a.type);a.city&&(b.city=a.city);a.citylimit&&(b.citylimit=a.citylimit);wx.request({url:"https://restapi.amap.com/v3/assistant/inputtips",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.tips&&a.success({tips:c.data.tips})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||
+""})}})};
+AMapWX.prototype.getDrivingRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);a.strategy&&(b.strategy=a.strategy);a.waypoints&&(b.waypoints=a.waypoints);a.avoidpolygons&&(b.avoidpolygons=a.avoidpolygons);a.avoidroad&&(b.avoidroad=a.avoidroad);wx.request({url:"https://restapi.amap.com/v3/direction/driving",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&a.success({paths:c.data.route.paths,
+taxi_cost:c.data.route.taxi_cost||""})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})};
+AMapWX.prototype.getWalkingRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);wx.request({url:"https://restapi.amap.com/v3/direction/walking",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&a.success({paths:c.data.route.paths})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})};
+AMapWX.prototype.getTransitRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);a.strategy&&(b.strategy=a.strategy);a.city&&(b.city=a.city);a.cityd&&(b.cityd=a.cityd);wx.request({url:"https://restapi.amap.com/v3/direction/transit/integrated",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&(c=c.data.route,a.success({distance:c.distance||"",taxi_cost:c.taxi_cost||
+"",transits:c.transits}))},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})};
+AMapWX.prototype.getRidingRoute=function(a){var b=Object.assign({},this.requestConfig);a.origin&&(b.origin=a.origin);a.destination&&(b.destination=a.destination);wx.request({url:"https://restapi.amap.com/v3/direction/riding",data:b,method:"GET",header:{"content-type":"application/json"},success:function(c){c&&c.data&&c.data.route&&a.success({paths:c.data.route.paths})},fail:function(c){a.fail({errCode:"0",errMsg:c.errMsg||""})}})};module.exports.AMapWX=AMapWX;

+ 1122 - 0
uni_merchants_enter/js_sdk/qqmap-wx-jssdk.js

@@ -0,0 +1,1122 @@
+/**
+ * 微信小程序JavaScriptSDK
+ * 
+ * @version 1.2
+ * @date 2019-03-06
+ */
+
+var ERROR_CONF = {
+    KEY_ERR: 311,
+    KEY_ERR_MSG: 'key格式错误',
+    PARAM_ERR: 310,
+    PARAM_ERR_MSG: '请求参数信息有误',
+    SYSTEM_ERR: 600,
+    SYSTEM_ERR_MSG: '系统错误',
+    WX_ERR_CODE: 1000,
+    WX_OK_CODE: 200
+};
+var BASE_URL = 'https://apis.map.qq.com/ws/';
+var URL_SEARCH = BASE_URL + 'place/v1/search';
+var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion';
+var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/';
+var URL_CITY_LIST = BASE_URL + 'district/v1/list';
+var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren';
+var URL_DISTANCE = BASE_URL + 'distance/v1/';
+var URL_DIRECTION = BASE_URL + 'direction/v1/';
+var MODE = {
+  driving: 'driving',
+  transit: 'transit'
+};
+var EARTH_RADIUS = 6378136.49;
+var Utils = {
+  /**
+  * md5加密方法
+  * 版权所有©2011 Sebastian Tschan,https://blueimp.net
+  */
+  safeAdd(x, y) {
+    var lsw = (x & 0xffff) + (y & 0xffff);
+    var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+    return (msw << 16) | (lsw & 0xffff);
+  },
+  bitRotateLeft(num, cnt) {
+    return (num << cnt) | (num >>> (32 - cnt));
+  },
+  md5cmn(q, a, b, x, s, t) {
+    return this.safeAdd(this.bitRotateLeft(this.safeAdd(this.safeAdd(a, q), this.safeAdd(x, t)), s), b);
+  },
+  md5ff(a, b, c, d, x, s, t) {
+    return this.md5cmn((b & c) | (~b & d), a, b, x, s, t);
+  },
+  md5gg(a, b, c, d, x, s, t) {
+    return this.md5cmn((b & d) | (c & ~d), a, b, x, s, t);
+  },
+  md5hh(a, b, c, d, x, s, t) {
+    return this.md5cmn(b ^ c ^ d, a, b, x, s, t);
+  },
+  md5ii(a, b, c, d, x, s, t) {
+    return this.md5cmn(c ^ (b | ~d), a, b, x, s, t);
+  },
+  binlMD5(x, len) {
+    /* append padding */
+    x[len >> 5] |= 0x80 << (len % 32);
+    x[((len + 64) >>> 9 << 4) + 14] = len;
+
+    var i;
+    var olda;
+    var oldb;
+    var oldc;
+    var oldd;
+    var a = 1732584193;
+    var b = -271733879;
+    var c = -1732584194;
+    var d = 271733878;
+
+    for (i = 0; i < x.length; i += 16) {
+      olda = a;
+      oldb = b;
+      oldc = c;
+      oldd = d;
+
+      a = this.md5ff(a, b, c, d, x[i], 7, -680876936);
+      d = this.md5ff(d, a, b, c, x[i + 1], 12, -389564586);
+      c = this.md5ff(c, d, a, b, x[i + 2], 17, 606105819);
+      b = this.md5ff(b, c, d, a, x[i + 3], 22, -1044525330);
+      a = this.md5ff(a, b, c, d, x[i + 4], 7, -176418897);
+      d = this.md5ff(d, a, b, c, x[i + 5], 12, 1200080426);
+      c = this.md5ff(c, d, a, b, x[i + 6], 17, -1473231341);
+      b = this.md5ff(b, c, d, a, x[i + 7], 22, -45705983);
+      a = this.md5ff(a, b, c, d, x[i + 8], 7, 1770035416);
+      d = this.md5ff(d, a, b, c, x[i + 9], 12, -1958414417);
+      c = this.md5ff(c, d, a, b, x[i + 10], 17, -42063);
+      b = this.md5ff(b, c, d, a, x[i + 11], 22, -1990404162);
+      a = this.md5ff(a, b, c, d, x[i + 12], 7, 1804603682);
+      d = this.md5ff(d, a, b, c, x[i + 13], 12, -40341101);
+      c = this.md5ff(c, d, a, b, x[i + 14], 17, -1502002290);
+      b = this.md5ff(b, c, d, a, x[i + 15], 22, 1236535329);
+
+      a = this.md5gg(a, b, c, d, x[i + 1], 5, -165796510);
+      d = this.md5gg(d, a, b, c, x[i + 6], 9, -1069501632);
+      c = this.md5gg(c, d, a, b, x[i + 11], 14, 643717713);
+      b = this.md5gg(b, c, d, a, x[i], 20, -373897302);
+      a = this.md5gg(a, b, c, d, x[i + 5], 5, -701558691);
+      d = this.md5gg(d, a, b, c, x[i + 10], 9, 38016083);
+      c = this.md5gg(c, d, a, b, x[i + 15], 14, -660478335);
+      b = this.md5gg(b, c, d, a, x[i + 4], 20, -405537848);
+      a = this.md5gg(a, b, c, d, x[i + 9], 5, 568446438);
+      d = this.md5gg(d, a, b, c, x[i + 14], 9, -1019803690);
+      c = this.md5gg(c, d, a, b, x[i + 3], 14, -187363961);
+      b = this.md5gg(b, c, d, a, x[i + 8], 20, 1163531501);
+      a = this.md5gg(a, b, c, d, x[i + 13], 5, -1444681467);
+      d = this.md5gg(d, a, b, c, x[i + 2], 9, -51403784);
+      c = this.md5gg(c, d, a, b, x[i + 7], 14, 1735328473);
+      b = this.md5gg(b, c, d, a, x[i + 12], 20, -1926607734);
+
+      a = this.md5hh(a, b, c, d, x[i + 5], 4, -378558);
+      d = this.md5hh(d, a, b, c, x[i + 8], 11, -2022574463);
+      c = this.md5hh(c, d, a, b, x[i + 11], 16, 1839030562);
+      b = this.md5hh(b, c, d, a, x[i + 14], 23, -35309556);
+      a = this.md5hh(a, b, c, d, x[i + 1], 4, -1530992060);
+      d = this.md5hh(d, a, b, c, x[i + 4], 11, 1272893353);
+      c = this.md5hh(c, d, a, b, x[i + 7], 16, -155497632);
+      b = this.md5hh(b, c, d, a, x[i + 10], 23, -1094730640);
+      a = this.md5hh(a, b, c, d, x[i + 13], 4, 681279174);
+      d = this.md5hh(d, a, b, c, x[i], 11, -358537222);
+      c = this.md5hh(c, d, a, b, x[i + 3], 16, -722521979);
+      b = this.md5hh(b, c, d, a, x[i + 6], 23, 76029189);
+      a = this.md5hh(a, b, c, d, x[i + 9], 4, -640364487);
+      d = this.md5hh(d, a, b, c, x[i + 12], 11, -421815835);
+      c = this.md5hh(c, d, a, b, x[i + 15], 16, 530742520);
+      b = this.md5hh(b, c, d, a, x[i + 2], 23, -995338651);
+
+      a = this.md5ii(a, b, c, d, x[i], 6, -198630844);
+      d = this.md5ii(d, a, b, c, x[i + 7], 10, 1126891415);
+      c = this.md5ii(c, d, a, b, x[i + 14], 15, -1416354905);
+      b = this.md5ii(b, c, d, a, x[i + 5], 21, -57434055);
+      a = this.md5ii(a, b, c, d, x[i + 12], 6, 1700485571);
+      d = this.md5ii(d, a, b, c, x[i + 3], 10, -1894986606);
+      c = this.md5ii(c, d, a, b, x[i + 10], 15, -1051523);
+      b = this.md5ii(b, c, d, a, x[i + 1], 21, -2054922799);
+      a = this.md5ii(a, b, c, d, x[i + 8], 6, 1873313359);
+      d = this.md5ii(d, a, b, c, x[i + 15], 10, -30611744);
+      c = this.md5ii(c, d, a, b, x[i + 6], 15, -1560198380);
+      b = this.md5ii(b, c, d, a, x[i + 13], 21, 1309151649);
+      a = this.md5ii(a, b, c, d, x[i + 4], 6, -145523070);
+      d = this.md5ii(d, a, b, c, x[i + 11], 10, -1120210379);
+      c = this.md5ii(c, d, a, b, x[i + 2], 15, 718787259);
+      b = this.md5ii(b, c, d, a, x[i + 9], 21, -343485551);
+
+      a = this.safeAdd(a, olda);
+      b = this.safeAdd(b, oldb);
+      c = this.safeAdd(c, oldc);
+      d = this.safeAdd(d, oldd);
+    }
+    return [a, b, c, d];
+  },
+  binl2rstr(input) {
+    var i;
+    var output = '';
+    var length32 = input.length * 32;
+    for (i = 0; i < length32; i += 8) {
+      output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);
+    }
+    return output;
+  },
+  rstr2binl(input) {
+    var i;
+    var output = [];
+    output[(input.length >> 2) - 1] = undefined;
+    for (i = 0; i < output.length; i += 1) {
+      output[i] = 0;
+    }
+    var length8 = input.length * 8;
+    for (i = 0; i < length8; i += 8) {
+      output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);
+    }
+    return output;
+  },
+  rstrMD5(s) {
+    return this.binl2rstr(this.binlMD5(this.rstr2binl(s), s.length * 8));
+  },
+  rstrHMACMD5(key, data) {
+    var i;
+    var bkey = this.rstr2binl(key);
+    var ipad = [];
+    var opad = [];
+    var hash;
+    ipad[15] = opad[15] = undefined;
+    if (bkey.length > 16) {
+      bkey = this.binlMD5(bkey, key.length * 8);
+    }
+    for (i = 0; i < 16; i += 1) {
+      ipad[i] = bkey[i] ^ 0x36363636;
+      opad[i] = bkey[i] ^ 0x5c5c5c5c;
+    }
+    hash = this.binlMD5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
+    return this.binl2rstr(this.binlMD5(opad.concat(hash), 512 + 128));
+  },
+  rstr2hex(input) {
+    var hexTab = '0123456789abcdef';
+    var output = '';
+    var x;
+    var i;
+    for (i = 0; i < input.length; i += 1) {
+      x = input.charCodeAt(i);
+      output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);
+    }
+    return output;
+  },
+  str2rstrUTF8(input) {
+    return unescape(encodeURIComponent(input));
+  },
+  rawMD5(s) {
+    return this.rstrMD5(this.str2rstrUTF8(s));
+  },
+  hexMD5(s) {
+    return this.rstr2hex(this.rawMD5(s));
+  },
+  rawHMACMD5(k, d) {
+    return this.rstrHMACMD5(this.str2rstrUTF8(k), str2rstrUTF8(d));
+  },
+  hexHMACMD5(k, d) {
+    return this.rstr2hex(this.rawHMACMD5(k, d));
+  },
+
+  md5(string, key, raw) {
+    if (!key) {
+      if (!raw) {
+        return this.hexMD5(string);
+      }
+      return this.rawMD5(string);
+    }
+    if (!raw) {
+      return this.hexHMACMD5(key, string);
+    }
+    return this.rawHMACMD5(key, string);
+  },
+  /**
+   * 得到md5加密后的sig参数
+   * @param {Object} requestParam 接口参数
+   * @param {String} sk签名字符串
+   * @param {String} featrue 方法名
+   * @return 返回加密后的sig参数
+   */
+  getSig(requestParam, sk, feature, mode) {
+    var sig = null;
+    var requestArr = [];
+    Object.keys(requestParam).sort().forEach(function(key){
+      requestArr.push(key + '=' + requestParam[key]);
+    });
+    if (feature == 'search') {
+      sig = '/ws/place/v1/search?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'suggest') {
+      sig = '/ws/place/v1/suggestion?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'reverseGeocoder') {
+      sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'geocoder') {
+      sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'getCityList') {
+      sig = '/ws/district/v1/list?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'getDistrictByCityId') {
+      sig = '/ws/district/v1/getchildren?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'calculateDistance') {
+      sig = '/ws/distance/v1/?' + requestArr.join('&') + sk;
+    }
+    if (feature == 'direction') {
+      sig = '/ws/direction/v1/' + mode + '?' + requestArr.join('&') + sk;
+    }
+    sig = this.md5(sig);
+    return sig;
+  },
+    /**
+     * 得到终点query字符串
+     * @param {Array|String} 检索数据
+     */
+    location2query(data) {
+        if (typeof data == 'string') {
+            return data;
+        }
+        var query = '';
+        for (var i = 0; i < data.length; i++) {
+            var d = data[i];
+            if (!!query) {
+                query += ';';
+            }
+            if (d.location) {
+                query = query + d.location.lat + ',' + d.location.lng;
+            }
+            if (d.latitude && d.longitude) {
+                query = query + d.latitude + ',' + d.longitude;
+            }
+        }
+        return query;
+    },
+
+    /**
+     * 计算角度
+     */
+    rad(d) {
+      return d * Math.PI / 180.0;
+    },  
+    /**
+     * 处理终点location数组
+     * @return 返回终点数组
+     */
+    getEndLocation(location){
+      var to = location.split(';');
+      var endLocation = [];
+      for (var i = 0; i < to.length; i++) {
+        endLocation.push({
+          lat: parseFloat(to[i].split(',')[0]),
+          lng: parseFloat(to[i].split(',')[1])
+        })
+      }
+      return endLocation;
+    },
+
+    /**
+     * 计算两点间直线距离
+     * @param a 表示纬度差
+     * @param b 表示经度差
+     * @return 返回的是距离,单位m
+     */
+    getDistance(latFrom, lngFrom, latTo, lngTo) {
+      var radLatFrom = this.rad(latFrom);
+      var radLatTo = this.rad(latTo);
+      var a = radLatFrom - radLatTo;
+      var b = this.rad(lngFrom) - this.rad(lngTo);
+      var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(radLatTo) * Math.pow(Math.sin(b / 2), 2)));
+      distance = distance * EARTH_RADIUS;
+      distance = Math.round(distance * 10000) / 10000;
+      return parseFloat(distance.toFixed(0));
+    },
+    /**
+     * 使用微信接口进行定位
+     */
+    getWXLocation(success, fail, complete) {
+        wx.getLocation({
+            type: 'gcj02',
+            success: success,
+            fail: fail,
+            complete: complete
+        });
+    },
+
+    /**
+     * 获取location参数
+     */
+    getLocationParam(location) {
+        if (typeof location == 'string') {
+            var locationArr = location.split(',');
+            if (locationArr.length === 2) {
+                location = {
+                    latitude: location.split(',')[0],
+                    longitude: location.split(',')[1]
+                };
+            } else {
+                location = {};
+            }
+        }
+        return location;
+    },
+
+    /**
+     * 回调函数默认处理
+     */
+    polyfillParam(param) {
+        param.success = param.success || function () { };
+        param.fail = param.fail || function () { };
+        param.complete = param.complete || function () { };
+    },
+
+    /**
+     * 验证param对应的key值是否为空
+     * 
+     * @param {Object} param 接口参数
+     * @param {String} key 对应参数的key
+     */
+    checkParamKeyEmpty(param, key) {
+        if (!param[key]) {
+            var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key +'参数格式有误');
+            param.fail(errconf);
+            param.complete(errconf);
+            return true;
+        }
+        return false;
+    },
+
+    /**
+     * 验证参数中是否存在检索词keyword
+     * 
+     * @param {Object} param 接口参数
+     */
+    checkKeyword(param){
+        return !this.checkParamKeyEmpty(param, 'keyword');
+    },
+
+    /**
+     * 验证location值
+     * 
+     * @param {Object} param 接口参数
+     */
+    checkLocation(param) {
+        var location = this.getLocationParam(param.location);
+        if (!location || !location.latitude || !location.longitude) {
+            var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误');
+            param.fail(errconf);
+            param.complete(errconf);
+            return false;
+        }
+        return true;
+    },
+
+    /**
+     * 构造错误数据结构
+     * @param {Number} errCode 错误码
+     * @param {Number} errMsg 错误描述
+     */
+    buildErrorConfig(errCode, errMsg) {
+        return {
+            status: errCode,
+            message: errMsg
+        };
+    },
+
+    /**
+     * 
+     * 数据处理函数
+     * 根据传入参数不同处理不同数据
+     * @param {String} feature 功能名称
+     * search 地点搜索
+     * suggest关键词提示
+     * reverseGeocoder逆地址解析
+     * geocoder地址解析
+     * getCityList获取城市列表:父集
+     * getDistrictByCityId获取区县列表:子集
+     * calculateDistance距离计算
+     * @param {Object} param 接口参数
+     * @param {Object} data 数据
+     */
+    handleData(param,data,feature){
+      if (feature == 'search') {
+        var searchResult = data.data;
+        var searchSimplify = [];
+        for (var i = 0; i < searchResult.length; i++) {
+          searchSimplify.push({
+            id: searchResult[i].id || null,
+            title: searchResult[i].title || null,
+            latitude: searchResult[i].location && searchResult[i].location.lat || null,
+            longitude: searchResult[i].location && searchResult[i].location.lng || null,
+            address: searchResult[i].address || null,
+            category: searchResult[i].category || null,
+            tel: searchResult[i].tel || null,
+            adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null,
+            city: searchResult[i].ad_info && searchResult[i].ad_info.city || null,
+            district: searchResult[i].ad_info && searchResult[i].ad_info.district || null,
+            province: searchResult[i].ad_info && searchResult[i].ad_info.province || null
+          })
+        }
+        param.success(data, {
+          searchResult: searchResult,
+          searchSimplify: searchSimplify
+        })
+      } else if (feature == 'suggest') {
+        var suggestResult = data.data;
+        var suggestSimplify = [];
+        for (var i = 0; i < suggestResult.length; i++) {
+          suggestSimplify.push({
+            adcode: suggestResult[i].adcode || null,
+            address: suggestResult[i].address || null,
+            category: suggestResult[i].category || null,
+            city: suggestResult[i].city || null,
+            district: suggestResult[i].district || null,
+            id: suggestResult[i].id || null,
+            latitude: suggestResult[i].location && suggestResult[i].location.lat || null,
+            longitude: suggestResult[i].location && suggestResult[i].location.lng || null,
+            province: suggestResult[i].province || null,
+            title: suggestResult[i].title || null,
+            type: suggestResult[i].type || null
+          })
+        }
+        param.success(data, {
+          suggestResult: suggestResult,
+          suggestSimplify: suggestSimplify
+          })
+      } else if (feature == 'reverseGeocoder') {
+        var reverseGeocoderResult = data.result;
+        var reverseGeocoderSimplify = {
+          address: reverseGeocoderResult.address || null,
+          latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null,
+          longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null,
+          adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null,
+          city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || null,
+          district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.district || null,
+          nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.nation || null,
+          province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.province || null,
+          street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street || null,
+          street_number: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street_number || null,
+          recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.recommend || null,
+          rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.rough || null
+        };
+        if (reverseGeocoderResult.pois) {//判断是否返回周边poi
+          var pois = reverseGeocoderResult.pois;
+          var poisSimplify = [];
+          for (var i = 0;i < pois.length;i++) {
+            poisSimplify.push({
+              id: pois[i].id || null,
+              title: pois[i].title || null,
+              latitude: pois[i].location && pois[i].location.lat || null,
+              longitude: pois[i].location && pois[i].location.lng || null,
+              address: pois[i].address || null,
+              category: pois[i].category || null,
+              adcode: pois[i].ad_info && pois[i].ad_info.adcode || null,
+              city: pois[i].ad_info && pois[i].ad_info.city || null,
+              district: pois[i].ad_info && pois[i].ad_info.district || null,
+              province: pois[i].ad_info && pois[i].ad_info.province || null
+            })
+          }
+          param.success(data,{
+            reverseGeocoderResult: reverseGeocoderResult,
+            reverseGeocoderSimplify: reverseGeocoderSimplify,
+            pois: pois,
+            poisSimplify: poisSimplify
+          })
+        } else {
+          param.success(data, {
+            reverseGeocoderResult: reverseGeocoderResult,
+            reverseGeocoderSimplify: reverseGeocoderSimplify
+          })
+        }
+      } else if (feature == 'geocoder') {
+        var geocoderResult = data.result;
+        var geocoderSimplify = {
+          title: geocoderResult.title || null,
+          latitude: geocoderResult.location && geocoderResult.location.lat || null,
+          longitude: geocoderResult.location && geocoderResult.location.lng || null,
+          adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null,
+          province: geocoderResult.address_components && geocoderResult.address_components.province || null,
+          city: geocoderResult.address_components && geocoderResult.address_components.city || null,
+          district: geocoderResult.address_components && geocoderResult.address_components.district || null,
+          street: geocoderResult.address_components && geocoderResult.address_components.street || null,
+          street_number: geocoderResult.address_components && geocoderResult.address_components.street_number || null,
+          level: geocoderResult.level || null
+        };
+        param.success(data,{
+          geocoderResult: geocoderResult,
+          geocoderSimplify: geocoderSimplify
+        });
+      } else if (feature == 'getCityList') {
+        var provinceResult = data.result[0];
+        var cityResult = data.result[1];
+        var districtResult = data.result[2];
+        param.success(data,{
+          provinceResult: provinceResult,
+          cityResult: cityResult,
+          districtResult: districtResult
+        });
+      } else if (feature == 'getDistrictByCityId') {
+        var districtByCity = data.result[0];
+        param.success(data, districtByCity);
+      } else if (feature == 'calculateDistance') {
+        var calculateDistanceResult = data.result.elements;  
+        var distance = [];
+        for (var i = 0; i < calculateDistanceResult.length; i++){
+          distance.push(calculateDistanceResult[i].distance);
+        }   
+        param.success(data, {
+          calculateDistanceResult: calculateDistanceResult,
+          distance: distance
+          });
+      } else if (feature == 'direction') {
+        var direction = data.result.routes;
+        param.success(data,direction);
+      } else {
+        param.success(data);
+      }
+    },
+
+    /**
+     * 构造微信请求参数,公共属性处理
+     * 
+     * @param {Object} param 接口参数
+     * @param {Object} param 配置项
+     * @param {String} feature 方法名
+     */
+    buildWxRequestConfig(param, options, feature) {
+        var that = this;
+        options.header = { "content-type": "application/json" };
+        options.method = 'GET';
+        options.success = function (res) {
+            var data = res.data;
+            if (data.status === 0) {
+              that.handleData(param, data, feature);
+            } else {
+                param.fail(data);
+            }
+        };
+        options.fail = function (res) {
+            res.statusCode = ERROR_CONF.WX_ERR_CODE;
+            param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+        };
+        options.complete = function (res) {
+            var statusCode = +res.statusCode;
+            switch(statusCode) {
+                case ERROR_CONF.WX_ERR_CODE: {
+                    param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+                    break;
+                }
+                case ERROR_CONF.WX_OK_CODE: {
+                    var data = res.data;
+                    if (data.status === 0) {
+                        param.complete(data);
+                    } else {
+                        param.complete(that.buildErrorConfig(data.status, data.message));
+                    }
+                    break;
+                }
+                default:{
+                    param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG));
+                }
+
+            }
+        };
+        return options;
+    },
+
+    /**
+     * 处理用户参数是否传入坐标进行不同的处理
+     */
+    locationProcess(param, locationsuccess, locationfail, locationcomplete) {
+        var that = this;
+        locationfail = locationfail || function (res) {
+            res.statusCode = ERROR_CONF.WX_ERR_CODE;
+            param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+        };
+        locationcomplete = locationcomplete || function (res) {
+            if (res.statusCode == ERROR_CONF.WX_ERR_CODE) {
+                param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg));
+            }
+        };
+        if (!param.location) {
+            that.getWXLocation(locationsuccess, locationfail, locationcomplete);
+        } else if (that.checkLocation(param)) {
+            var location = Utils.getLocationParam(param.location);
+            locationsuccess(location);
+        }
+    }
+};
+
+
+class QQMapWX {
+
+    /**
+     * 构造函数
+     * 
+     * @param {Object} options 接口参数,key 为必选参数
+     */
+    constructor(options) {
+        if (!options.key) {
+            throw Error('key值不能为空');
+        }
+        this.key = options.key;
+    };
+
+    /**
+     * POI周边检索
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 参数对象结构可以参考
+     * @see http://lbs.qq.com/webservice_v1/guide-search.html
+     */
+    search(options) {
+        var that = this;
+        options = options || {};
+
+        Utils.polyfillParam(options);
+
+        if (!Utils.checkKeyword(options)) {
+            return;
+        }
+
+        var requestParam = {
+            keyword: options.keyword,
+            orderby: options.orderby || '_distance',
+            page_size: options.page_size || 10,
+            page_index: options.page_index || 1,
+            output: 'json',
+            key: that.key
+        };
+
+        if (options.address_format) {
+            requestParam.address_format = options.address_format;
+        }
+
+        if (options.filter) {
+            requestParam.filter = options.filter;
+        }
+
+        var distance = options.distance || "1000";
+        var auto_extend = options.auto_extend || 1;
+        var region = null;
+        var rectangle = null;
+
+        //判断城市限定参数
+        if (options.region) {
+          region = options.region;
+        }
+
+        //矩形限定坐标(暂时只支持字符串格式)
+        if (options.rectangle) {
+          rectangle = options.rectangle;
+        }
+
+        var locationsuccess = function (result) {        
+          if (region && !rectangle) {
+            //城市限定参数拼接
+            requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + result.longitude + ")";
+            if (options.sig) {
+              requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
+            }
+          } else if (rectangle && !region) {
+            //矩形搜索
+            requestParam.boundary = "rectangle(" + rectangle + ")";
+            if (options.sig) {
+              requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
+            }
+            } else {
+              requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")";
+            if (options.sig) {
+              requestParam.sig = Utils.getSig(requestParam, options.sig, 'search');
+            }
+            }            
+            wx.request(Utils.buildWxRequestConfig(options, {
+                url: URL_SEARCH,
+                data: requestParam
+            }, 'search'));
+        };
+        Utils.locationProcess(options, locationsuccess);
+    };
+
+    /**
+     * sug模糊检索
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 参数对象结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-suggestion.html
+     */
+    getSuggestion(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+
+        if (!Utils.checkKeyword(options)) {
+            return;
+        }
+
+        var requestParam = {
+            keyword: options.keyword,
+            region: options.region || '全国',
+            region_fix: options.region_fix || 0,
+            policy: options.policy || 0,
+            page_size: options.page_size || 10,//控制显示条数
+            page_index: options.page_index || 1,//控制页数
+            get_subpois : options.get_subpois || 0,//返回子地点
+            output: 'json',
+            key: that.key
+        };
+        //长地址
+        if (options.address_format) {
+          requestParam.address_format = options.address_format;
+        }
+        //过滤
+        if (options.filter) {
+          requestParam.filter = options.filter;
+        }
+        //排序
+        if (options.location) {
+          var locationsuccess = function (result) {
+            requestParam.location = result.latitude + ',' + result.longitude;
+            if (options.sig) {
+              requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest');
+            }
+            wx.request(Utils.buildWxRequestConfig(options, {
+              url: URL_SUGGESTION,
+              data: requestParam
+            }, "suggest"));      
+          };
+          Utils.locationProcess(options, locationsuccess);
+        } else {
+          if (options.sig) {
+            requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest');
+          }
+          wx.request(Utils.buildWxRequestConfig(options, {
+            url: URL_SUGGESTION,
+            data: requestParam
+          }, "suggest"));      
+        }        
+    };
+
+    /**
+     * 逆地址解析
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 请求参数结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-gcoder.html
+     */
+    reverseGeocoder(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+        var requestParam = {
+            coord_type: options.coord_type || 5,
+            get_poi: options.get_poi || 0,
+            output: 'json',
+            key: that.key
+        };
+        if (options.poi_options) {
+            requestParam.poi_options = options.poi_options
+        }
+
+        var locationsuccess = function (result) {
+            requestParam.location = result.latitude + ',' + result.longitude;
+          if (options.sig) {
+            requestParam.sig = Utils.getSig(requestParam, options.sig, 'reverseGeocoder');
+          }
+            wx.request(Utils.buildWxRequestConfig(options, {
+                url: URL_GET_GEOCODER,
+                data: requestParam
+            }, 'reverseGeocoder'));
+        };
+        Utils.locationProcess(options, locationsuccess);
+    };
+
+    /**
+     * 地址解析
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 请求参数结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-geocoder.html
+     */
+    geocoder(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+
+        if (Utils.checkParamKeyEmpty(options, 'address')) {
+            return;
+        }
+
+        var requestParam = {
+            address: options.address,
+            output: 'json',
+            key: that.key
+        };
+
+        //城市限定
+        if (options.region) {
+          requestParam.region = options.region;
+        }
+
+        if (options.sig) {
+          requestParam.sig = Utils.getSig(requestParam, options.sig, 'geocoder');
+        }
+
+        wx.request(Utils.buildWxRequestConfig(options, {
+            url: URL_GET_GEOCODER,
+            data: requestParam
+        },'geocoder'));
+    };
+
+
+    /**
+     * 获取城市列表
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 请求参数结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-region.html
+     */
+    getCityList(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+        var requestParam = {
+            output: 'json',
+            key: that.key
+        };
+
+        if (options.sig) {
+          requestParam.sig = Utils.getSig(requestParam, options.sig, 'getCityList');
+        }
+
+        wx.request(Utils.buildWxRequestConfig(options, {
+            url: URL_CITY_LIST,
+            data: requestParam
+        },'getCityList'));
+    };
+
+    /**
+     * 获取对应城市ID的区县列表
+     *
+     * @param {Object} options 接口参数对象
+     * 
+     * 请求参数结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-region.html
+     */
+    getDistrictByCityId(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+
+        if (Utils.checkParamKeyEmpty(options, 'id')) {
+            return;
+        }
+
+        var requestParam = {
+            id: options.id || '',
+            output: 'json',
+            key: that.key
+        };
+
+        if (options.sig) {
+          requestParam.sig = Utils.getSig(requestParam, options.sig, 'getDistrictByCityId');
+        }
+
+        wx.request(Utils.buildWxRequestConfig(options, {
+            url: URL_AREA_LIST,
+            data: requestParam
+        },'getDistrictByCityId'));
+    };
+
+    /**
+     * 用于单起点到多终点的路线距离(非直线距离)计算:
+     * 支持两种距离计算方式:步行和驾车。
+     * 起点到终点最大限制直线距离10公里。
+     *
+     * 新增直线距离计算。
+     * 
+     * @param {Object} options 接口参数对象
+     * 
+     * 请求参数结构可以参考
+     * http://lbs.qq.com/webservice_v1/guide-distance.html
+     */
+    calculateDistance(options) {
+        var that = this;
+        options = options || {};
+        Utils.polyfillParam(options);
+
+        if (Utils.checkParamKeyEmpty(options, 'to')) {
+            return;
+        }
+
+        var requestParam = {
+            mode: options.mode || 'walking',
+            to: Utils.location2query(options.to),
+            output: 'json',
+            key: that.key
+        };
+
+        if (options.from) {
+          options.location = options.from;
+        }
+
+        //计算直线距离
+        if(requestParam.mode == 'straight'){        
+          var locationsuccess = function (result) {
+            var locationTo = Utils.getEndLocation(requestParam.to);//处理终点坐标
+            var data = {
+              message:"query ok",
+              result:{
+                elements:[]
+              },
+              status:0
+            };
+            for (var i = 0; i < locationTo.length; i++) {
+              data.result.elements.push({//将坐标存入
+                distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i].lat, locationTo[i].lng),
+                duration:0,
+                from:{
+                  lat: result.latitude,
+                  lng:result.longitude
+                },
+                to:{
+                  lat: locationTo[i].lat,
+                  lng: locationTo[i].lng
+                }
+              });            
+            }
+            var calculateResult = data.result.elements;
+            var distanceResult = [];
+            for (var i = 0; i < calculateResult.length; i++) {
+              distanceResult.push(calculateResult[i].distance);
+            }  
+            return options.success(data,{
+              calculateResult: calculateResult,
+              distanceResult: distanceResult
+            });
+          };
+          
+          Utils.locationProcess(options, locationsuccess);
+        } else {
+          var locationsuccess = function (result) {
+            requestParam.from = result.latitude + ',' + result.longitude;
+            if (options.sig) {
+              requestParam.sig = Utils.getSig(requestParam, options.sig, 'calculateDistance');
+            }
+            wx.request(Utils.buildWxRequestConfig(options, {
+              url: URL_DISTANCE,
+              data: requestParam
+            },'calculateDistance'));
+          };
+
+          Utils.locationProcess(options, locationsuccess);
+        }      
+    };
+
+  /**
+   * 路线规划:
+   * 
+   * @param {Object} options 接口参数对象
+   * 
+   * 请求参数结构可以参考
+   * https://lbs.qq.com/webservice_v1/guide-road.html
+   */
+  direction(options) {
+    var that = this;
+    options = options || {};
+    Utils.polyfillParam(options);
+
+    if (Utils.checkParamKeyEmpty(options, 'to')) {
+      return;
+    }
+
+    var requestParam = {
+      output: 'json',
+      key: that.key
+    };
+
+    //to格式处理
+    if (typeof options.to == 'string') {
+      requestParam.to = options.to;
+    } else {
+      requestParam.to = options.to.latitude + ',' + options.to.longitude;
+    }
+    //初始化局部请求域名
+    var SET_URL_DIRECTION = null;
+    //设置默认mode属性
+    options.mode = options.mode || MODE.driving;
+
+    //设置请求域名
+    SET_URL_DIRECTION = URL_DIRECTION + options.mode;
+
+    if (options.from) {
+      options.location = options.from;
+    }
+
+    if (options.mode == MODE.driving) {
+      if (options.from_poi) {
+        requestParam.from_poi = options.from_poi;
+      }
+      if (options.heading) {
+        requestParam.heading = options.heading;
+      }
+      if (options.speed) {
+        requestParam.speed = options.speed;
+      }
+      if (options.accuracy) {
+        requestParam.accuracy = options.accuracy;
+      }
+      if (options.road_type) {
+        requestParam.road_type = options.road_type;
+      }
+      if (options.to_poi) {
+        requestParam.to_poi = options.to_poi;
+      }
+      if (options.from_track) {
+        requestParam.from_track = options.from_track;
+      }
+      if (options.waypoints) {
+        requestParam.waypoints = options.waypoints;
+      }
+      if (options.policy) {
+        requestParam.policy = options.policy;
+      }
+      if (options.plate_number) {
+        requestParam.plate_number = options.plate_number;
+      }
+    }
+
+    if (options.mode == MODE.transit) {
+      if (options.departure_time) {
+        requestParam.departure_time = options.departure_time;
+      }
+      if (options.policy) {
+        requestParam.policy = options.policy;
+      }
+    } 
+
+    var locationsuccess = function (result) {
+      requestParam.from = result.latitude + ',' + result.longitude;
+      if (options.sig) {
+        requestParam.sig = Utils.getSig(requestParam, options.sig, 'direction',options.mode);
+      }
+      wx.request(Utils.buildWxRequestConfig(options, {
+        url: SET_URL_DIRECTION,
+        data: requestParam
+      }, 'direction'));
+    };
+
+    Utils.locationProcess(options, locationsuccess);
+  }
+};
+
+module.exports = QQMapWX;

File diff suppressed because it is too large
+ 0 - 0
uni_merchants_enter/js_sdk/qqmap-wx-jssdk.min.js


+ 50 - 0
uni_merchants_enter/js_sdk/share.js

@@ -0,0 +1,50 @@
+export default {
+	data() {
+		return {
+
+		}
+	},
+	onLoad: function() {
+		wx.showShareMenu({
+			withShareTicket: true,
+			menus: ["shareAppMessage", "shareTimeline"]
+		})
+	},
+	onShareAppMessage(res) {
+		console.log(1111)
+		let that = this;
+		// let imageUrl = that.shareUrl || '';
+		let imageUrl = 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/min1.png'
+		if (res.from === 'button') {
+			console.log(2222)
+		//这块需要传参,不然链接地址进去获取不到数据
+			// let path = `/` + that.$scope.route + `?item=` + that.$scope.options.item;
+			let path = `/pages/cardHolder/scanCodeAddCard`
+			return {
+				title: '商品分享~',
+				path: path,
+				imageUrl: imageUrl,
+				content:'这里是分享内容啊!',
+				desc:"这里是自定义描述啊!"
+			};
+		}
+		if (res.from === 'menu') {
+			return {
+				title: '商通线上商城',
+				path: '/pages/tabBarPro/index/index',
+				imageUrl: imageUrl
+			};
+		}
+	},
+	// 分享到朋友圈
+	onShareTimeline() {
+		return {
+			title: '名片box',
+			path: '/pages/cardHolder/cardHolder',
+			imageUrl: 'https://taohaoliang.oss-cn-beijing.aliyuncs.com/pcfiles/%E5%90%8D%E7%89%87box.png'
+		};
+	},
+	methods: {
+
+	}
+}

+ 272 - 0
uni_merchants_enter/js_sdk/wa-permission/permission.js

@@ -0,0 +1,272 @@
+/**
+ * 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启
+ */
+
+var isIos
+// #ifdef APP-PLUS
+isIos = (plus.os.name == "iOS")
+// #endif
+
+// 判断推送权限是否开启
+function judgeIosPermissionPush() {
+	var result = false;
+	var UIApplication = plus.ios.import("UIApplication");
+	var app = UIApplication.sharedApplication();
+	var enabledTypes = 0;
+	if (app.currentUserNotificationSettings) {
+		var settings = app.currentUserNotificationSettings();
+		enabledTypes = settings.plusGetAttribute("types");
+		console.log("enabledTypes1:" + enabledTypes);
+		if (enabledTypes == 0) {
+			console.log("推送权限没有开启");
+		} else {
+			result = true;
+			console.log("已经开启推送功能!")
+		}
+		plus.ios.deleteObject(settings);
+	} else {
+		enabledTypes = app.enabledRemoteNotificationTypes();
+		if (enabledTypes == 0) {
+			console.log("推送权限没有开启!");
+		} else {
+			result = true;
+			console.log("已经开启推送功能!")
+		}
+		console.log("enabledTypes2:" + enabledTypes);
+	}
+	plus.ios.deleteObject(app);
+	plus.ios.deleteObject(UIApplication);
+	return result;
+}
+
+// 判断定位权限是否开启
+function judgeIosPermissionLocation() {
+	var result = false;
+	var cllocationManger = plus.ios.import("CLLocationManager");
+	var status = cllocationManger.authorizationStatus();
+	result = (status != 2)
+	console.log("定位权限开启:" + result);
+	// 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation
+	/* var enable = cllocationManger.locationServicesEnabled();
+	var status = cllocationManger.authorizationStatus();
+	console.log("enable:" + enable);
+	console.log("status:" + status);
+	if (enable && status != 2) {
+		result = true;
+		console.log("手机定位服务已开启且已授予定位权限");
+	} else {
+		console.log("手机系统的定位没有打开或未给予定位权限");
+	} */
+	plus.ios.deleteObject(cllocationManger);
+	return result;
+}
+
+// 判断麦克风权限是否开启
+function judgeIosPermissionRecord() {
+	var result = false;
+	var avaudiosession = plus.ios.import("AVAudioSession");
+	var avaudio = avaudiosession.sharedInstance();
+	var permissionStatus = avaudio.recordPermission();
+	console.log("permissionStatus:" + permissionStatus);
+	if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {
+		console.log("麦克风权限没有开启");
+	} else {
+		result = true;
+		console.log("麦克风权限已经开启");
+	}
+	plus.ios.deleteObject(avaudiosession);
+	return result;
+}
+
+// 判断相机权限是否开启
+function judgeIosPermissionCamera() {
+	var result = false;
+	var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
+	var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
+	console.log("authStatus:" + authStatus);
+	if (authStatus == 3) {
+		result = true;
+		console.log("相机权限已经开启");
+	} else {
+		console.log("相机权限没有开启");
+	}
+	plus.ios.deleteObject(AVCaptureDevice);
+	return result;
+}
+
+// 判断相册权限是否开启
+function judgeIosPermissionPhotoLibrary() {
+	var result = false;
+	var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
+	var authStatus = PHPhotoLibrary.authorizationStatus();
+	console.log("authStatus:" + authStatus);
+	if (authStatus == 3) {
+		result = true;
+		console.log("相册权限已经开启");
+	} else {
+		console.log("相册权限没有开启");
+	}
+	plus.ios.deleteObject(PHPhotoLibrary);
+	return result;
+}
+
+// 判断通讯录权限是否开启
+function judgeIosPermissionContact() {
+	var result = false;
+	var CNContactStore = plus.ios.import("CNContactStore");
+	var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
+	if (cnAuthStatus == 3) {
+		result = true;
+		console.log("通讯录权限已经开启");
+	} else {
+		console.log("通讯录权限没有开启");
+	}
+	plus.ios.deleteObject(CNContactStore);
+	return result;
+}
+
+// 判断日历权限是否开启
+function judgeIosPermissionCalendar() {
+	var result = false;
+	var EKEventStore = plus.ios.import("EKEventStore");
+	var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
+	if (ekAuthStatus == 3) {
+		result = true;
+		console.log("日历权限已经开启");
+	} else {
+		console.log("日历权限没有开启");
+	}
+	plus.ios.deleteObject(EKEventStore);
+	return result;
+}
+
+// 判断备忘录权限是否开启
+function judgeIosPermissionMemo() {
+	var result = false;
+	var EKEventStore = plus.ios.import("EKEventStore");
+	var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
+	if (ekAuthStatus == 3) {
+		result = true;
+		console.log("备忘录权限已经开启");
+	} else {
+		console.log("备忘录权限没有开启");
+	}
+	plus.ios.deleteObject(EKEventStore);
+	return result;
+}
+
+// Android权限查询
+function requestAndroidPermission(permissionID) {
+	return new Promise((resolve, reject) => {
+		plus.android.requestPermissions(
+			[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
+			function(resultObj) {
+				var result = 0;
+				for (var i = 0; i < resultObj.granted.length; i++) {
+					var grantedPermission = resultObj.granted[i];
+					console.log('已获取的权限:' + grantedPermission);
+					result = 1
+				}
+				for (var i = 0; i < resultObj.deniedPresent.length; i++) {
+					var deniedPresentPermission = resultObj.deniedPresent[i];
+					console.log('拒绝本次申请的权限:' + deniedPresentPermission);
+					result = 0
+				}
+				for (var i = 0; i < resultObj.deniedAlways.length; i++) {
+					var deniedAlwaysPermission = resultObj.deniedAlways[i];
+					console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
+					result = -1
+				}
+				resolve(result);
+				// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
+				// if (result != 1) {
+				// gotoAppPermissionSetting()
+				// }
+			},
+			function(error) {
+				console.log('申请权限错误:' + error.code + " = " + error.message);
+				resolve({
+					code: error.code,
+					message: error.message
+				});
+			}
+		);
+	});
+}
+
+// 使用一个方法,根据参数判断权限
+function judgeIosPermission(permissionID) {
+	if (permissionID == "location") {
+		return judgeIosPermissionLocation()
+	} else if (permissionID == "camera") {
+		return judgeIosPermissionCamera()
+	} else if (permissionID == "photoLibrary") {
+		return judgeIosPermissionPhotoLibrary()
+	} else if (permissionID == "record") {
+		return judgeIosPermissionRecord()
+	} else if (permissionID == "push") {
+		return judgeIosPermissionPush()
+	} else if (permissionID == "contact") {
+		return judgeIosPermissionContact()
+	} else if (permissionID == "calendar") {
+		return judgeIosPermissionCalendar()
+	} else if (permissionID == "memo") {
+		return judgeIosPermissionMemo()
+	}
+	return false;
+}
+
+// 跳转到**应用**的权限页面
+function gotoAppPermissionSetting() {
+	if (isIos) {
+		var UIApplication = plus.ios.import("UIApplication");
+		var application2 = UIApplication.sharedApplication();
+		var NSURL2 = plus.ios.import("NSURL");
+		// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");		
+		var setting2 = NSURL2.URLWithString("app-settings:");
+		application2.openURL(setting2);
+
+		plus.ios.deleteObject(setting2);
+		plus.ios.deleteObject(NSURL2);
+		plus.ios.deleteObject(application2);
+	} else {
+		// console.log(plus.device.vendor);
+		var Intent = plus.android.importClass("android.content.Intent");
+		var Settings = plus.android.importClass("android.provider.Settings");
+		var Uri = plus.android.importClass("android.net.Uri");
+		var mainActivity = plus.android.runtimeMainActivity();
+		var intent = new Intent();
+		intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
+		var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
+		intent.setData(uri);
+		mainActivity.startActivity(intent);
+	}
+}
+
+// 检查系统的设备服务是否开启
+// var checkSystemEnableLocation = async function () {
+function checkSystemEnableLocation() {
+	if (isIos) {
+		var result = false;
+		var cllocationManger = plus.ios.import("CLLocationManager");
+		var result = cllocationManger.locationServicesEnabled();
+		console.log("系统定位开启:" + result);
+		plus.ios.deleteObject(cllocationManger);
+		return result;
+	} else {
+		var context = plus.android.importClass("android.content.Context");
+		var locationManager = plus.android.importClass("android.location.LocationManager");
+		var main = plus.android.runtimeMainActivity();
+		var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
+		var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
+		console.log("系统定位开启:" + result);
+		return result
+	}
+}
+
+module.exports = {
+	judgeIosPermission: judgeIosPermission,
+	requestAndroidPermission: requestAndroidPermission,
+	checkSystemEnableLocation: checkSystemEnableLocation,
+	gotoAppPermissionSetting: gotoAppPermissionSetting
+}

+ 594 - 0
uni_merchants_enter/js_sdk/xfl-DateFormat/DateFormat.js

@@ -0,0 +1,594 @@
+
+
+/**
+ * 日期格式转换模块,还可以从字符串中提取日期,同时提供了几个数字格式转换函数。 
+ * 2019.5.12  v1.0.0
+ * 
+## 背景
+当需要将日期转换为指定的格式时,或者需要从某个字符串中按照指定的格式提取日期,均可使用本模块。
+
+## 使用说明  
+格式标记的含意:   
+yyyy-四位阿拉伯数字的年份,如: 2018  
+YYYY-四位中文数字的年份,如: 二零一八  
+yy-两位阿拉伯数字的年份,如: 18  
+YY-两位中文数字的年份,如: 一八  
+mm-一位或两位阿拉伯数字的月数,如: 3 、 12   
+0m-两位阿拉伯数字的月数,如: 03 、 12  
+MM-一位或两位中文数字的月数,如:  三、 十二   
+dd-一位或两位阿拉伯数字的日数,如: 3 、 12   
+0d-两位阿拉伯数字的日数,如: 03 、 12、28   
+DD-中文数字的日数,如:  三、 十二、二十八   
+hh-一位或两位阿拉伯数字的小时数,如: 3 、 12   
+0h-两位阿拉伯数字的小时数,如: 03 、 12   
+HH-中文数字的小时数,如:  三、 十二、二十三   
+ff-一位或两位阿拉伯数字的分钟数,如: 3 、 12、56  
+0f-两位阿拉伯数字的分钟数,如: 03 、 12  
+0F-中文数字的分钟,如:  零三、 十二、二十三  
+FF-中文数字的分钟,如:  三、 十二、二十三   
+ss-一位或两位阿拉伯数字的秒数,如: 3 、 12   
+0s-两位阿拉伯数字的秒数,如: 03 、 12   
+0S-中文数字的秒数,如:  零三、 十二、二十三   
+SS-中文数字的秒数,如:  三、 十二、二十三   
+w-阿拉伯数字的星期数,如:  1、6、7  
+W-中文数字的星期数,如:  一、三、六、日   
+WT-中文数字的星期数,如:  一、三、六、天   
+  
+### 属性  
+这些属性是可读可写的,如果直接更改,则会自动计算其关联的其它值。  
+dataformat.year; //年 [1000, 3000]  
+dataformat.moth; //月 [1, 12]  
+dataformat.day; //日 [1, 31]  
+dataformat.hour; //时 [0, 23]  
+dataformat.minute; //分 [0, 59]  
+dataformat.second; //秒 [0, 59]  
+dataformat.mscond; //毫秒 [0, 999]  
+dataformat.week; //星期 [1, 7]  
+dataformat.timestamp; //时间戳  
+
+### 构造函数
+构造函数内部直接调用的 setTime(ms, formatStr);
+  
+### toString(formatStr)  
+  
+使用举例:   
+1. toString() //结果: '2014-11-7 03:08:01'  
+2. toString('yyyy-mm-dd hh:ff:ss') //结果: '2014-11-11 13:12:34'  
+3. toString('yyyy年mm月dd日') //结果: '2014年11月11日'  
+4. toString('yy年mm月dd日') //结果: '14年11月11日'  
+5. toString('YY年MM月DD日') //结果: '一四年十一月八日'  
+6. toString('星期W') //结果: '星期日'  或 '星期三'
+7. toString('星期WT')  //结果: '星期天'  或 '星期三'
+8. toString('星期w') //结果: '星期1'   或 '星期7'
+9. toString('hh:0f:ss') //结果: '3:04:5'  
+10. toString('date') //结果: '2014-11-7'  
+11. toString('time') //结果: '03:08:01'  
+  
+### setTime(ms, formtStr)  
+设置时间。如果存在 formatStr, 则表示从字符串 ms 中按 formatStr中的规则提取时间。  
+  
+使用举例:  
+1. setTime( new Date() ); //传入一个时间对象  
+2. setTime( new Date().getTime() ); //传入一个毫秒数  
+3. setTime( new Date().getTime() ); //传入一个毫秒数  
+4. setTime( new Date().getTime() + '' ); //传入一个毫秒数的字符串  
+5. setTime(); //传入其它的值或不传入,则创建当前时间  
+6. setTime(str, formatStr); //传入两个参数,第一个为字符串,第二个为格式规则,表示按照规则从字符串中提取时间  
+7. setTime('今天是2014年8月9号,天气特别好,但明天是2014年8月10号,....', '明天是yyyy年mm月dd号');  // 得到  2014.8.10 0:0:0
+  
+### fillChar(num, len, char)  
+字符填充  
+  
+使用举例:   
+1. fillChar(44, 5, '*'); //结果: '***44'   
+2. fillChar(44, 5); //结果: '00044'   
+3. fillChar('44', 5); //结果: '   44'   
+4. fillChar('aaa', 5); //结果: '   aa'   
+5. fillChar('aaa', 5, '$'); //结果: '$$aaa'   
+5. fillChar('aaa', 1, '$'); //结果: 'aaa'  //指定的长度太小,不做任何操作。  
+  
+### perNumToChinese(num)  
+将阿拉伯数字每一位对应转换为中文的格式。  
+  
+使用举例:   
+1. perNumToChinese(34); //结果: '三四'  
+2. perNumToChinese(3874); //结果: '三八七四'  
+3. perNumToChinese('3874'); //结果: '三八七四'  
+4. perNumToChinese('404'); //结果: '四零四'    
+5. perNumToChinese('0  04   '); //结果: '零零四'  
+6. perNumToChinese('  '); //结果: ''  
+  
+### perChineseToNum(numStr)
+将中文的格式的数字每一位对应转换为阿拉伯数字。 是perNumToChinese(num)的逆操作。  
+  
+使用举例:   
+1. perChineseToNum('三四'); //结果: 34  
+2. perChineseToNum('三八七四'); //结果: 3874  
+3. perChineseToNum('四零四'); //结果: 404  
+4. perChineseToNum('零零四'); //结果: 4  
+5. perChineseToNum('  '); //结果: NaN  
+  
+### numToChinese(num)  
+将阿拉伯数字转换为中文的格式 , 最多只能处理13位数(万亿)  
+  
+使用举例:   
+1. numToChinese(0); //结果: '零'  
+2. numToChinese(5); //结果: '五'  
+3. numToChinese(16); //结果: '十六'  
+4. numToChinese(34); //结果: '三十四'  
+5. numToChinese(106); //结果: '一百零六'  
+6. numToChinese(886); //结果: '八百八十六'  
+7. numToChinese(1004); //结果: '一千零四'  
+8. numToChinese(1000); //结果: '一千'  
+9. numToChinese(9904); //结果: '九千九百零四'  
+10. numToChinese(19904); //结果: '一万九千九百零四'  
+11. numToChinese(10004); //结果: '一万零四'  
+12. numToChinese(10000); //结果: '一万'  
+13. numToChinese(100404); //结果: '十万零四百零四'  
+14. numToChinese(9000000); //结果: '九百万'  
+15. numToChinese(90000000); //结果: '九千万'  
+16. numToChinese(900000000); //结果: '九亿'  
+17. numToChinese(9000000000); //结果: '九十亿'  
+18. numToChinese(9020030401); //结果: '九十亿零二千零三万零四百零一'  
+19. numToChinese(90000000000); //结果: '九百亿'  
+20. numToChinese(900000000000); //结果: '九千亿'  
+21. numToChinese(9000000000000); //结果: '九万亿'  
+22. numToChinese(90000000000000); //结果: undefined  
+  
+  
+### chineseToNum (numStr)
+将中文的格式的数字转换为阿拉伯数字, 最多只能处理13位数(万亿)。 是 numToChinese(num) 函数的逆操作。  
+  
+使用举例:   
+1. chineseToNum('十六'); //结果: 16  
+2. chineseToNum('一万九千九百零四'); //结果: 19904  
+3. chineseToNum('十万零四百零四'); //结果: 100404   
+4. chineseToNum('九十亿零二千零三万零四百零一'); //结果: 9020030401  
+ */
+export default class DateFormat{
+    constructor(ms, formatStr){
+        this.setTime(ms, formatStr);
+    }
+
+    set year(y){ if(this.y !== y){ this.__date.setFullYear(y); this.setTime(this.__date); }  }
+    get year(){ return this.y; }
+
+    set month(y){ if(this.m !== y){ this.__date.setMonth(y-1); this.setTime(this.__date); }  }
+    get month(){ return this.m; }
+
+    set day(y){ if(this.d !== y){ this.__date.setDate(y); this.setTime(this.__date); }  }
+    get day(){ return this.d; }
+
+    set hour(y){ if(this.h !== y){ this.__date.setHours(y); this.setTime(this.__date); }  }
+    get hour(){ return this.h; }
+
+    set minute(y){ if(this.f !== y){ this.__date.setMinutes(y); this.setTime(this.__date); }  }
+    get minute(){ return this.f; }
+
+    set second(y){ if(this.s !== y){ this.__date.setSeconds(y); this.setTime(this.__date); }  }
+    get second(){ return this.s; }
+
+    set msecond(y){ if(this.ms !== y){ this.__date.setMilliseconds(y); this.setTime(this.__date); }  }
+    get msecond(){ return this.ms; }
+
+    get week(){ return this.w; }
+
+     setTime(ms, formatStr){  //切换时间
+        if(formatStr && typeof ms === 'string'){
+            let result;
+            if(this.__analysis){
+                result = this.__analysis(ms, formatStr);
+            }
+            if(!result){
+                console.log('匹配时间失败,默认设置为当前时间');
+                ms = '';
+            }else{
+                ms = result;
+            }
+        }
+        let date;
+        if(ms instanceof Date){
+            date = ms;
+        }else if(typeof ms === 'number'){
+            date = new Date(ms);
+        }else if( parseInt(ms) > 0 ){
+            date = new Date(parseInt(ms));
+        }else{
+            if(typeof ms === 'object' && ms.y && ms.m && ms.d){
+                date = new Date(ms.y, ms.m-1, ms.d, ms.h || 0, ms.f || 0, ms.s || 0, ms.ms || 0);
+            }else{
+                date = new Date();
+            }
+        }
+
+        this.y = date.getFullYear(), //年 [1000, 3000]
+        this.m = date.getMonth() + 1, //月 [1, 12]
+        this.d = date.getDate(), //日 [1, 31]
+        this.h = date.getHours(), //时 [0, 23]
+        this.f = date.getMinutes(), //分 [0, 59]
+        this.s = date.getSeconds(), //秒 [0, 59]
+        this.ms = date.getMilliseconds(), //秒 [0, 9999]
+        this.w = date.getDay(); //星期 [1, 7]
+        if(this.w === 0){  //0表示星期天
+            this.w = 7;
+        }
+        this.timestamp = date.getTime(); //时间戳
+
+        this.__date = date;
+        
+        return this;
+     }
+
+/***************************************************** 时间格式化 *********************************************** */
+     toString(formatStr){  //将时间转换为格式的字符串
+         if(formatStr){
+            if(formatStr === 'time'){
+                //03:00:01
+                return this.fillChar(this.h, 2) + ':' + this.fillChar(this.f, 2) + ':' + this.fillChar(this.s, 2);
+            }else if(formatStr === 'date'){
+                //2014-11-7
+                return this.y + '-' + this.m + '-' + this.d;
+            }else{
+               return this.__replaceTime(formatStr);
+            }
+            
+        }else{
+            //2014-11-7 03:00:01
+            return this.y + '-' + this.m + '-' + this.d + ' ' + this.fillChar(this.h, 2) + ':' + this.fillChar(this.f, 2) + ':' + this.fillChar(this.s, 2);
+        }
+     }
+
+     valueOf(){
+         return this.toString();
+     }
+ 
+     __replaceTime(format){
+        var str = 
+        'y{4}|Y{4}|y{2}|Y{2}|mm|MM|0m|dd|DD|0d|hh|HH|0h|ff|FF|0F|0f|ss|SS|0S|0s|w|WT|W';
+        var reg = new RegExp(str, 'g');
+
+
+        format = format.replace(reg, (mstr)=>{
+           switch(mstr){
+              case 'yyyy': return this.y;                        // [0000, 9999]
+              case 'YYYY': return this.perNumToChinese(this.y);  // [零零零零-九九九九]   
+              case 'yy': return ('' + this.y).slice(-2);         // [00, 99]
+              case 'YY': return this.perNumToChinese( +('' + this.y).slice(-2) ); // [零零-九九]    
+              case 'mm': return this.m;                          // [1, 12]
+              case 'MM': return this.numToChinese(this.m);       // [一-十二]    
+              case '0m': return this.m < 10 ? '0'+ this.m : this.m; // [01, 12]
+              case 'dd': return this.d;                          // [1, 31]
+              case 'DD': return this.numToChinese(this.d);       // [一-三十一]  
+              case '0d': return this.d < 10 ? '0' + this.d : this.d; // [01, 31]
+              case 'hh': return this.h;                          // [0, 24]
+              case 'HH': return this.numToChinese(this.h);       // [零-二十四]  
+              case '0h': return this.h < 10 ? '0' + this.h : this.h; // [00, 24]
+              case 'ff': return this.f;                          // [0, 60]
+              case 'FF': return this.numToChinese(this.f);       // [零-六十]
+              case '0F': return this.f<10&&this.f>0 ? ('零' + this.numToChinese(this.f) ):this.numToChinese(this.f); // [零零-六十]   
+              case '0f': return this.f < 10 ? '0' + this.f : this.f; // [00, 60]
+              case 'ss': return this.s;                          // [0, 60]
+              case 'SS': return this.numToChinese(this.s);       // [零-六十]
+              case '0S': return this.s<10&&this.s>0 ? ('零' + this.numToChinese(this.s) ):this.numToChinese(this.s); // [零零-六十]    
+              case '0s': return this.s < 10 ? '0' + this.s : this.s;  // [00, 60]
+              case 'w': return this.w;                           // [7]
+              case 'W': return this.w == 7 ? '日' : this.numToChinese(this.w);  // [天|日]
+              case 'WT': return this.w == 7 ? '天' : this.numToChinese(this.w);  // [天|日]
+           }
+        });
+         return format;
+     }
+
+/***************************************************** 时间提取 *********************************************** */
+     __analysis(str, rule){  //从指定的字符串中根据规则提取日期和时间。
+         let resultObj;
+        if(typeof rule === 'function'){
+            resultObj = rule(str);
+            if(!resultObj){
+                return null;
+            }
+        }else{
+            resultObj = {};
+            var str11 = 
+            'y{4}|Y{4}|y{2}|Y{2}|mm|MM|0m|dd|DD|0d|hh|HH|0h|ff|FF|0F|0f|ss|SS|0S|0s|w|WT|W';
+            var reg = new RegExp(str11, 'g');
+
+            // rule = 'yyyy年mm月'
+            var namesArr = [null];   // [null, 'yyyy', 'mm']
+            rule = rule.replace(reg, (mstr)=>{
+                var result = this.__ANALYREGSTR[mstr];
+                if(result){
+                    namesArr.push(mstr);
+                    return `(${result})`;
+                }
+             });
+            //  rule = '(\\d{4})年([1-9]|1[012])月'
+
+            var resultArr = str.match( new RegExp(rule) );
+             if(resultArr){
+                for(let i=1,val; i<namesArr.length; i++){
+                    val = resultArr[i];
+                    if(val == null){
+                        continue;
+                    }
+                    switch(namesArr[i]){
+                        case 'yyyy': resultObj.y = +val; break;                        // [0000, 9999]
+                        case 'YYYY': resultObj.y = this.perChineseToNum(val); break;   // [零零零零-九九九九]   
+                        case 'yy': resultObj.y = +val + 2000; break;          // [00, 99]
+                        case 'YY': resultObj.y = this.perChineseToNum(val) + 2000; break;  // [零零-九九]    
+                        case 'mm': resultObj.m = +val;    break;                        // [1, 12]
+                        case 'MM': resultObj.m = this.chineseToNum(val);  break;       // [一-十二]    
+                        case '0m': resultObj.m = +val;  break; // [01, 12]
+                        case 'dd': resultObj.d = +val; break;                           // [1, 31]
+                        case 'DD': resultObj.d = this.chineseToNum(val); break;        // [一-三十一]  
+                        case '0d': resultObj.d = +val; break;  // [01, 31]
+                        case 'hh': resultObj.h = +val;  break;                           // [0, 24]
+                        case 'HH': resultObj.h = this.chineseToNum(val); break;        // [零-二十四]  
+                        case '0h': resultObj.h = +val; break;  // [00, 24]
+                        case 'ff': resultObj.f = +val;   break;                         // [0, 60]
+                        case 'FF': resultObj.f = this.chineseToNum(val); break;        // [零-六十]
+                        case '0F': resultObj.f = this.chineseToNum(val); break;  // [零零-六十]   
+                        case '0f': resultObj.f = +val; break;   // [00, 60]
+                        case 'ss': resultObj.s = +val;   break;                         // [0, 60]
+                        case 'SS': resultObj.s = this.chineseToNum(val);  break;       // [零-六十]
+                        case '0S': resultObj.s = this.chineseToNum(val); break;  // [零零-六十]    
+                        case '0s': resultObj.s = +val; break;    // [00, 60]
+                        case 'w': resultObj.w = 7; break;                             // [7]
+                        case 'W': resultObj.w = 7; break;      // [天|日]
+                        case 'WT': resultObj.w = 7; break;      // [天|日]
+                    }
+                }
+             }else{
+                return null;
+             }
+             
+        }
+        //   'yyyy年mm月'  '(\\d{4})年([1-9]|1[012])月'
+        return resultObj;
+     }
+
+     __ANALYREGSTR = {
+         'yyyy': '\\d{4}',                   // [0000, 9999]
+         'YYYY': '[零一二三四五六七八九]{4}',              // [零零零零-九九九九]    
+         'yy': '\\d{2}',                     // [00, 99]
+         'YY': '[零一二三四五六七八九]{2}',                // [零零-九九]    
+         'mm': '[1-9]|1[012]',               // [1, 12]
+         'MM': '十[一二]?|[一二三四五六七八九]',// [一-十二]    
+         '0m': '[0][1-9]|1[012]',             // [01, 12]
+         'dd': '3[01]|[12]0|[12]?[1-9]',            //  [1, 31]
+         'DD': '三十[一]?|二?十[一二三四五六七八九]|[零一二三四五六七八九十]',     // [一-三十一]  
+         '0d': '[012][0-9]|3[01]',            //  [01, 31]
+         'hh': '2[0-4]|[1]?[0-9]',            //  [0, 24]
+         'HH': '二十[一二三]?|十[一二三四五六七八九]|[零一二三四五六七八九十]',   // [零-二十四]  
+         '0h': '[01][0-9]|2[0-4]',             // [00, 24]
+         'ff': '60|[1-5]?[0-9]',               // [0, 60]
+         'FF': '[二三四五]十[一二三四五六七八九]|十[一二三四五六七八九]|[二三四五六]十|[零一二三四五六七八九十]',    // [零-六十]
+         '0F': '零[零一二三四五六七八九]|十[一二三四五六七八九]|[二三四五]十[一二三四五六七八九]|[二三四五六]十|十', // [零零-六十]     
+         '0f': '[0-5][0-9]|60',               // [00, 60]
+         'ss': '60|[1-5]?[0-9]',              // [0, 60]
+         'SS': '[二三四五]十[一二三四五六七八九]|十[一二三四五六七八九]|[二三四五六]十|[零一二三四五六七八九十]',    // [零-六十] 
+         '0S': '零[零一二三四五六七八九]|十[一二三四五六七八九]|[二三四五]十[一二三四五六七八九]|[二三四五六]十|十', // [零零-六十]    
+         '0s': '[0-5][0-9]|60',               // [00, 60]
+         'w': '7',                            // [7]
+         'W': '日',                        //[天|日]
+         'WT': '天',                        //[天|日]
+     }
+
+/***************************************************** 字符填充部分 *********************************************** */
+      /**
+     * 在一个字符前面补充指定个数的字符。
+     * <br><font color="red">ref: null</font> <br>
+     * @public
+     * @param {string|number} num -  要操作的数字或字符串。
+     * @param {number} len -  要保留的最大长度。如果指定的长度不比传入的参数的本身的长度大,则不做任何操作。
+     * @param {string} [char=' '|'0'] -  当长度不足时,要在最前面补足的字符。第一个参数为数字时,默认为0,否则默认为' '。
+     * @example
+       1. fillChar(44, 5, '*'); //结果: '***44' 
+       2. fillChar(44, 5); //结果: '00044' 
+       3. fillChar('44', 5); //结果: '   44' 
+       4. fillChar('aaa', 5); //结果: '   aa' 
+       5. fillChar('aaa', 5, '$'); //结果: '$$aaa' 
+       5. fillChar('aaa', 1, '$'); //结果: 'aaa'  //指定的长度太小,不做任何操作。
+     */
+    fillChar(num, len, char){
+        if(typeof num === 'number'){
+            char = char || '0';
+        }else{
+            char = char || ' ';
+        }
+        let str = '' + num, charStr = '';
+
+        if(str.length < len){
+            for(let i=0, len1=len-str.length; i<len1; i++){
+                charStr += char;
+            }
+            return charStr + str;
+        }
+
+        return str;
+    }
+
+/***************************************************** 数字转换部分 *********************************************** */
+
+    __SIZEPOW = {'十': 1, '百': 2, '千': 3, '万': 4, '亿': 8};
+    /** 
+     * 将中文的格式的数字转换为阿拉伯数字, 最多只能处理13位数(万亿)。 是 numToChinese(num) 函数的逆操作。 
+     *  @example
+        1. chineseToNum('十六'); //结果: 16  
+        2. chineseToNum('一万九千九百零四'); //结果: 19904  
+        3. chineseToNum('十万零四百零四'); //结果: 100404   
+        4. chineseToNum('九十亿零二千零三万零四百零一'); //结果: 9020030401  
+     */
+    chineseToNum (numStr){   //目前只能处理万亿以下的数据
+        if(numStr.length === 1){
+            return this.perChineseToNum(numStr);
+        }
+        if(numStr.length === 2 && numStr[0] === '十'){
+            return this.perChineseToNum(numStr[1]) + 10;
+        }
+
+        let arr;
+        if(!numStr.match(/[亿万]/)){
+            arr = numStr.split('零'); 
+            let num = 0, val = 0;
+            for(let i=0, str=''; i<arr.length; i++){
+                str = arr[i];
+                for(let j=0; j<str.length; j++){
+                    if(str[j].match(/[一二三四五六七八九]/)){
+                        num += val;
+                        val = 1;
+                        val *= this.perChineseToNum(str[j]);
+                    }else{
+                        val *= Math.pow(10, this.__SIZEPOW[str[j]] )
+                    }
+                }
+            }
+            num += val;
+            return num;
+        }else{
+            arr = numStr.split('亿');
+            if(arr.length > 1){
+                var arr1 = arr[1].split('万');
+                return this.chineseToNum(arr[0])*Math.pow(10, 8) + this.chineseToNum(arr1[0])*10000 + this.chineseToNum(arr1[1]);
+            }else{
+                return this.chineseToNum(arr[0])*Math.pow(10, 8) + this.chineseToNum(arr[1]);
+            }
+        }
+    }
+
+     /** 
+     * 将中文的格式的数字每一位对应转换为阿拉伯数字。 是perNumToChinese(num)的逆操作。  
+     *  @example
+    1. perChineseToNum('三四'); //结果: 34  
+    2. perChineseToNum('三八七四'); //结果: 3874  
+    3. perChineseToNum('四零四'); //结果: 404  
+    4. perChineseToNum('零零四'); //结果: 4  
+    5. perChineseToNum('  '); //结果: NaN  
+     */
+    perChineseToNum(numStr){
+        return +numStr.replace(/[零一二三四五六七八九十\s]/g, (str)=>{
+            var index =  this.__CHINANUM.indexOf(str);
+            return index == null ? '' : index;
+        });
+    }
+
+    /**
+    * 将阿拉伯数字转换为对应的汉字, 最多只能处理13位数(万亿)。
+    * <br><font color="red">ref: this.numToChina()、 this.weiNum() </font> <br>
+    * @public
+    * @param {number} num - 要转换的数字
+    * @example
+        1. numToChinese(0); //结果: '零'  
+        2. numToChinese(5); //结果: '五'  
+        3. numToChinese(16); //结果: '十六'  
+        4. numToChinese(34); //结果: '三十四'  
+        5. numToChinese(106); //结果: '一百零六'  
+        6. numToChinese(886); //结果: '八百八十六'  
+        7. numToChinese(1004); //结果: '一千零四'  
+        8. numToChinese(1000); //结果: '一千'  
+        9. numToChinese(9904); //结果: '九千九百零四'  
+        10. numToChinese(19904); //结果: '一万九千九百零四'  
+        11. numToChinese(10004); //结果: '一万零四'  
+        12. numToChinese(10000); //结果: '一万'  
+        13. numToChinese(100404); //结果: '十万零四百零四'  
+        14. numToChinese(9000000); //结果: '九百万'  
+        15. numToChinese(90000000); //结果: '九千万'  
+        16. numToChinese(900000000); //结果: '九亿'  
+        17. numToChinese(9000000000); //结果: '九十亿'  
+        18. numToChinese(9020030401); //结果: '九十亿零二千零三万零四百零一'  
+        19. numToChinese(90000000000); //结果: '九百亿'  
+        20. numToChinese(900000000000); //结果: '九千亿'  
+        21. numToChinese(9000000000000); //结果: '九万亿'  
+        22. numToChinese(90000000000000); //结果: undefined  
+    */
+    numToChinese (num){
+        let numStr = '' + num;
+        let len = numStr.length, result;
+        if(num <= 10){ //处理0~9
+            return this.__CHINANUM[num]; 
+        }else if(num < 20){ //处理10~20
+            return '十' + this.__CHINANUM[numStr[1]]; 
+        }else if(len < 6){ //处理5位数(万)及以下
+            if(!this.__WEIARR){
+                this.__WEIARR = this.__WEISTR.split(', ');
+            }
+            let lastStr, resultStr = '', index;
+            for(let i=0; i<len; i++){
+                lastStr = this.__CHINANUM[numStr[i]];
+                if(numStr[i] === '0'){
+                    index = null;
+                    for(let j=i+1; j<len; j++){
+                        if( numStr[j] !== '0' ){
+                            index = j - 1;
+                            break;
+                        }
+                    }
+                    if(index === null){
+                        break;
+                    }else{
+                        i = index;
+                        resultStr += '零';
+                    }
+                }else{
+                    resultStr += ( lastStr + this.__WEIARR[len - i - 1] );
+                }
+            }
+            return resultStr;
+        }else if(len < 9){ //处理8位数(千万)及以下
+            let low4Str = numStr.slice(-4), heigh4Str = numStr.slice(0, -4), isZero = '';
+            isZero = heigh4Str.slice(-1) === '0' ? '零' : ''; //必须用这个,如504000,应该是 五十万零四千 而不是 五十万四千
+            if(isZero){
+                low4Str = +low4Str;
+                if(low4Str === 0){
+                    isZero = '';
+                }
+            }
+            if(+heigh4Str !== 0){
+                isZero = '万' + isZero;
+            }
+            result = this.numToChinese( +heigh4Str ) + isZero  + this.numToChinese( +low4Str );
+            return result.slice(-1) === '零' ? result.slice(0, -1) : result;
+
+        }else if(len < 14){ //处理13位数(万亿)及以下
+            let low8Str = numStr.slice(-8), heigh4Str = numStr.slice(0, -8),  isZero = '';
+            isZero = heigh4Str.slice(-1) === '0' ? '零' : ''; //必须用这个
+            if(isZero){
+                low8Str = +low8Str;
+                if(low8Str === 0){
+                    isZero = '';
+                }
+            }
+            if(+heigh4Str !== 0){
+                isZero = '亿' + isZero;
+            }
+            result = this.numToChinese( +heigh4Str ) + isZero  + this.numToChinese( +low8Str );
+            return result.slice(-1) === '零' ? result.slice(0, -1) : result;
+        }
+    }
+
+    /**
+     * 按数字的位数将每一位数字转换为中文(注意,可以转换多位数字)
+     * <br><font color="red">ref: this.numToChina() </font> <br>
+     * @public
+     * @param {number|string} num - 要转换的数字
+     * @example
+    1. perNumToChinese(34); //结果: '三四'
+    2. perNumToChinese(3874); //结果: '三八七四'
+    3. perNumToChinese('3874'); //结果: '三八七四'
+    4. perNumToChinese('404'); //结果: '四零四'
+    5. perNumToChinese('0  04   '); //结果: '零零四'
+    6. perNumToChinese('  '); //结果: ''
+    */
+    perNumToChinese(num){
+        return ('' + num).replace(/[\d\s]/g, (index)=>{
+            var result = this.__CHINANUM[index];
+            return result ? result : '';
+        });
+    }
+    __CHINANUM =  '零一二三四五六七八九十'; 
+    __WEISTR =', 十, 百, 千, 万, 十万, 百万, 千万, 亿, 十亿, 百亿, 千亿, 万亿, 十万亿, 百万亿, 千万亿, 亿亿, 十亿亿, 百亿亿, 千亿亿, 万亿亿';
+    __WEIARR = null;
+ 
+ }
+
+

+ 19 - 3
uni_merchants_enter/main.js

@@ -1,18 +1,34 @@
-import App from './App'
 
 // #ifndef VUE3
 import Vue from 'vue'
-import './uni.promisify.adaptor'
+import App from './App'
+
 Vue.config.productionTip = false
+import request from '@/util/request.js'
+import helper from '@/common/helper.js'
+import WXBizDataCrypt from '@/util/WXBizDataCrypt.js'
+import uView from '@/uni_modules/uview-ui'
+import store from './store'
+import share from '@/js_sdk/share.js'
+Vue.mixin(share)
+Vue.use(uView)
+import {parseTime} from '@/util/util'
+Vue.prototype.$request = request
+Vue.prototype.$helper = helper
+Vue.prototype.$store = store
+Vue.prototype.parseTime = parseTime
+Vue.prototype.$WXBizDataCrypt = WXBizDataCrypt
 App.mpType = 'app'
+
 const app = new Vue({
-  ...App
+    ...App
 })
 app.$mount()
 // #endif
 
 // #ifdef VUE3
 import { createSSRApp } from 'vue'
+import App from './App.vue'
 export function createApp() {
   const app = createSSRApp(App)
   return {

+ 277 - 4
uni_merchants_enter/pageA/enter/cateringindustry.vue

@@ -1,22 +1,295 @@
 <template>
-	<view>
-		
+	<view class='content'>
+		<view class='wrap'>
+			<u--form  ref="uForm">
+				<u-form-item labelWidth='80' labelPosition='top' label="营业执照">
+					<u-upload height='208' width='320' :fileList="fileList2" @afterRead="afterRead($event,1)" @delete="deletePic" name="2" multiple
+						:maxCount="1">
+						<image style='width:680rpx;height:417rpx;' src="../../static/image/enter/yingyezhizhao.png" mode=""></image>
+					</u-upload>
+				</u-form-item>
+				<u-form-item labelWidth='80' labelPosition='top' label="经营许可证">
+					<u-upload height='208' width='320' :fileList="fileList3" @afterRead="afterRead($event,2)" @delete="deletePic" name="3" multiple
+						:maxCount="1">
+						<image style='width:680rpx;height:417rpx;' src="../../static/image/enter/jingyingxukezheng.png" mode=""></image>
+					</u-upload>
+				</u-form-item>
+				<u-form-item  labelWidth='150' labelPosition='left' label="经营许可证有效期">
+					<view style='text-align:right;' @click='openjyxkz'>选择日期<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image></view>
+				</u-form-item>
+				<uni-calendar
+				   :insert="false"
+				   :lunar="true" 
+					ref="calendar"
+				   :start-date="startDate"
+				   @confirm="confirm"
+				    />
+					<u-form-item  labelWidth='150' labelPosition='left' label="店铺名称">
+						<u-input inputAlign='right' border='none' placeholder='输入店铺名称' v-model="form.shopNames" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="经营者">
+						<u-input inputAlign='right' border='none' placeholder='输入经营者姓名' v-model="form.operater" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="经营者手机号">
+						<u-input inputAlign='right' border='none' placeholder='输入经营者手机号' v-model="form.operaterPhone" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="验证码">
+						<u-input inputAlign='right' border='none' placeholder='输入验证码' v-model="form.verifyCode" >
+							<template slot="suffix">
+								<u-code ref="uCode"
+									@change="codeChange"
+									seconds="60"
+									changeText="X秒重新获取"
+								></u-code>
+
+								<view class='get_code' @click='getCode'>{{tips}}</view>
+							</template>
+						</u-input>
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="业务联系人(选填)">
+						<u-input inputAlign='right' border='none' placeholder='输入联系人姓名' v-model="form.contacts" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="业务联系电话(选填)">
+						<u-input inputAlign='right' border='none' placeholder='输入联系电话' v-model="form.contactsPhone" />
+					</u-form-item>
+					<u-form-item labelWidth='80' labelPosition='left' @click='placeSelect(),hideKeyboard()' label="店铺位置">
+						<view style='text-align:right;' v-if="form.province">{{ form.province }}{{ form.city }}{{ form.area }}</view>
+						<view style='text-align:right;' v-else>
+							<text style='text-align:right;'>选择位置 </text>
+							<image src="@/static/image/yjt.png" mode=""
+								style="margin-left:10rpx;width:12rpx;height: 21rpx;"></image>
+						</view>
+					</u-form-item>
+					<u-form-item labelWidth='80' labelPosition='left' label="详细地址">
+						<u-input inputAlign='right' border='none' placeholder='输入详细地址,不超过15个字' v-model="form.detailedAddress" />
+					</u-form-item>
+					<u-form-item  labelWidth='150' labelPosition='left' label="营业时间">
+						<view @click='selectTime'>111111{{}}</view>
+					</u-form-item>
+					<smh-time-range :is-under='show' :time="['12','30','0','17','30']" @confrim="confrim" @cancel="cancel"></smh-time-range>
+					<!-- label -->
+					<view class='flex justify-space-between align-item-center'>
+						<view>标签(2-4个,最多5个字)</view> 
+						<view class='add_label' @click='addLabel'>新增</view>
+					</view>
+					<view style='flex-wrap: wrap;' class='flex'>
+						<view style='margin:10rpx;width:47%;' class='flex align-item-center' v-for='item in labelList'>
+							<u-input inputAlign='right' placeholder='输入标签文字' v-model="item.value" />
+							<view class="iconfont_no icon_merchants_enterjian1"></view>
+						</view>
+					</view>
+					
+				<u-form-item labelWidth='120' labelPosition='top' label="门面及门头照片(1张,店名文字清晰)">
+					<u-upload :fileList="fileList4" @afterRead="afterRead($event,3)" @delete="deletePic" name="4" multiple
+						:maxCount="1">
+						
+					</u-upload>
+				</u-form-item>
+				<u-form-item labelWidth='120' labelPosition='top' label="室内照片(1-6张)">
+					<u-upload :fileList="fileList5" @afterRead="afterRead($event,4)" @delete="deletePic" name="5" multiple
+						:maxCount="6">
+						
+					</u-upload>
+				</u-form-item>
+			</u--form>
+			<view class="footer">
+				<button @click='submit' class="submit">提交</button>
+			</view>
+		</view>
 	</view>
 </template>
 
 <script>
+	var that
 	export default {
 		data() {
 			return {
+				form:{
+					mainBody:'商铺',
+					lookFlag:0,
+					startDate:'',
+					city: '',
+					area: '',
+					province: '',
+					location: '',
+					detailedAddress: '',
+					businessLicense:'',
+					operateCertificate:'',
+					coverImage:'',
+					indoorImage:''
+				},
+				tips:'发送验证码',
+				startDate:'',
+				show:false,
+				labelList:[{value:''},{value:''}],
+				fileList2:[],
+				fileList3:[],
+				fileList4:[],
+				fileList5:[],
 				
 			}
 		},
-		methods: {
+		onLoad() {
+			that = this
+		},
+		onShow(){
+			var date = new Date().toISOString().slice(0, 10)
+			this.startDate=date
+			console.log(date)
 			
+		},
+		methods: {
+			selectTime(){
+				this.show=true
+			},
+			addLabel(){
+				if(this.labelList.length>=4){
+					uni.showToast({
+						icon: "success",
+						title: '最多4个标签!',
+						duration: 2000
+					});
+					return
+				}
+				this.labelList.push({value:''})
+			},
+			codeChange(text) {
+			    this.tips = text;
+			},
+			getCode() {
+				if(!this.form.operaterPhone){
+					uni.showToast({
+						icon: "none",
+						title: '请输入手机号再获取验证码!',
+						duration: 2000
+					});
+					return
+				}
+			    if (this.$refs.uCode.canGetCode) {
+			         // 模拟向后端请求验证码
+			        uni.showLoading({
+			        title: '正在获取验证码'
+			        })
+					this.$request.baseRequest('user', 'sendVerifyCode', {
+						phone: this.form.operaterPhone
+					}, failres => {
+						uni.showToast({
+							icon: "none",
+							title: failres.errmsg,
+							duration: 3000
+						});
+						uni.hideLoading()
+					}).then(res => {
+						
+								
+					})
+			        setTimeout(() => {
+			            uni.hideLoading();
+			            // 这里此提示会被this.start()方法中的提示覆盖
+			         
+			            // 通知验证码组件内部开始倒计时
+			            this.$refs.uCode.start();
+			        }, 2000);
+			    } else {
+			        uni.showToast({
+			        	icon: "success",
+			        	title: '提交成功!',
+			        	duration: 2000
+			        });
+			    }
+			},
+			confirm(e){
+				this.form.operateCertificateDate = e.fulldate
+				console.log(e)
+			},
+			openjyxkz(){
+				  this.$refs.calendar.open();
+			},
+			placeSelect() {
+				uni.chooseLocation({
+					success: function(res) {
+						console.log(res);
+						that.form.location = res.latitude + ',' + res.longitude
+						let _address = that.$helper.formatLocation(res.address)
+						console.log(_address)
+						that.form.province = _address.Province
+						that.form.city = _address.City
+						that.form.area = _address.Country
+						that.form.detailedAddress = _address.Village
+						that.$forceUpdate()
+					}
+				});
+			},
+			hideKeyboard() {
+				uni.hideKeyboard()
+			},
+			// 删除图片
+			deletePic(event,status) {
+				this[`fileList${event.name}`].splice(event.index, 1)
+			},
+			// 新增图片
+			async afterRead(event,status) {
+				// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
+				let lists = [].concat(event.file)
+				let fileListLen = this[`fileList${event.name}`].length
+				lists.map((item) => {
+					this[`fileList${event.name}`].push({
+						...item,
+						status: 'uploading',
+						message: '上传中'
+					})
+				})
+				for (let i = 0; i < lists.length; i++) {
+					const result = await this.uploadFilePromise(lists[i].url,status)
+					
+					let item = this[`fileList${event.name}`][fileListLen]
+					this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
+						status: 'success',
+						message: '',
+						url: result
+					}))
+					fileListLen++
+					console.log(that.form, this[`fileList${event.name}`])
+					
+				}
+			},
+			uploadFilePromise(res,status) {
+				return new Promise((resolve, reject) => {
+					uploadImage(res, 'cardImages/',
+						result => {
+							if(status==0){
+								that.form.businessLicense = result
+							}else if(status==1){
+								that.form.operateCertificate = result
+							}else if(status==2){
+								that.form.coverImage = result
+							}else if(status==3){
+								that.form.indoorImage = result
+							}
+							resolve(res)
+						}
+					)
+				})
+			},
 		}
 	}
 </script>
 
-<style>
+<style lang='scss' scoped>
+ .wrap{
+	 padding:20rpx;
+ }
+ .icon_merchants_enterjian1{
+	 margin-left:10rpx;
+	 font-size:50rpx;
+ }
+ .add_label,.get_code{
 
+	background: #5F7DE9;
+	color: #fff;
+	padding: 10rpx 20rpx;
+	border-radius: 10rpx;
+	font-size: 26rpx;
+ }
 </style>

+ 104 - 0
uni_merchants_enter/pages.json

@@ -0,0 +1,104 @@
+{
+	"easycom": {
+		"^u-(.*)": "@/uni_modules/uview-ui/components/u-$1/u-$1.vue"
+	},
+	"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+		{
+            "path" : "pages/enter/enter",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "入驻",
+                "enablePullDownRefresh": false
+            }
+            
+        } ,{
+			"path": "pages/notice/index",
+			"style": {
+				"navigationBarTitleText": "通知",
+				"enablePullDownRefresh": false
+			}
+		},{
+            "path" : "pages/my/my",
+            "style" :                                                                                    
+            {
+                "navigationBarTitleText": "我的",
+                "enablePullDownRefresh": false
+            }
+            
+        }
+        
+    ],
+	"globalStyle": {
+		"navigationBarTextStyle": "white",
+		"navigationBarTitleText": "uni-app",
+		"navigationBarBackgroundColor": "#5F7DE9",
+		"backgroundColor": "#F8F8F8"
+	},
+	"tabBar": {
+		"custom": false,
+		"color": "#000",
+		"selectedColor": "#5F7DE9",
+		"borderStyle": "white",
+		"backgroundColor": "#ffffff",
+		"list": [{
+				"pagePath": "pages/enter/enter",
+				"iconPath": "static/image/nav-icon/antOutline-team.png",
+				"selectedIconPath": "static/image/nav-icon/antOutline-team Copy.png",
+				"text": "入驻"
+			},
+			{
+				"pagePath": "pages/notice/index",
+				"iconPath": "static/image/nav-icon/antOutline-user.png",
+				"selectedIconPath": "static/image/nav-icon/antOutline-user Copy.png",
+				"text": "通知"
+			},
+			{
+				"pagePath": "pages/my/my",
+				"iconPath": "static/image/nav-icon/md-notifications_none.png",
+				"selectedIconPath": "static/image/nav-icon/md-notifications_none Copy.png",
+				"text": "我的"
+			}
+		]
+	},
+	"uniIdRouter": {},
+	"subPackages": [
+		{
+			"root":"pageA",
+			"pages": [
+				{
+				    "path" : "enter/cateringindustry",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "餐饮",
+				        "enablePullDownRefresh": false
+				    }
+				    
+				}
+				,{
+				    "path" : "enter/hotel",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "酒店",
+				        "enablePullDownRefresh": false
+				    }
+				    
+				}
+				,{
+				    "path" : "enter/homestay",
+				    "style" :                                                                                    
+				    {
+				        "navigationBarTitleText": "民宿",
+				        "enablePullDownRefresh": false
+				    }
+				    
+				}
+	        ]
+		}
+	],
+	"preloadRule": {
+			"pages/enter/enter": {
+				"network": "all",
+				"packages": ["pageA"]
+			}
+	}
+}

BIN
uni_merchants_enter/static/image/enter/jingyingxukezheng.png


BIN
uni_merchants_enter/static/image/yjt.png


+ 109 - 0
uni_merchants_enter/store/index.js

@@ -0,0 +1,109 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+Vue.use(Vuex)
+let lifeData = {};
+
+try {
+	// 尝试获取本地是否存在lifeData变量,第一次启动APP时是不存在的
+	lifeData = uni.getStorageSync('lifeData');
+} catch (e) {}
+
+// 需要永久存储,且下次APP启动需要取出的,在state中的变量名
+let saveStateKeys = ['userInfo', 'goods',
+	'isHaveService'
+];
+
+// 保存变量到本地存储中
+const saveLifeData = function(key, value) {
+	// 判断变量名是否在需要存储的数组中
+	if (saveStateKeys.indexOf(key) != -1) {
+		// 获取本地存储的lifeData对象,将变量添加到对象中
+		let tmp = uni.getStorageSync('lifeData');
+		// 第一次打开APP,不存在lifeData变量,故放一个{}空对象
+		tmp = tmp ? tmp : {};
+		// if(key == 'contractTip' && tmp[key] < value){
+		// 	uni.vibrateLong({
+		// 	    success: function () {
+		// 	        console.log('震动成功');
+		// 	    }
+		// 	});
+		// }
+		// if(key == 'taskTip' && tmp[key] < value){
+		// 	uni.vibrateLong({
+		// 	    success: function () {
+		// 	        console.log('震动成功');
+		// 	    }
+		// 	});
+		// }
+		tmp[key] = value;
+		// 执行这一步后,所有需要存储的变量,都挂载在本地的lifeData对象中
+		uni.setStorageSync('lifeData', tmp);
+	}
+}
+
+
+const store = new Vuex.Store({
+	modules: {},
+	state: {
+		sysinfo: uni.getSystemInfoSync(), //系统信息
+		hasLogin: false,
+		isHaveService: false,
+		goods: []
+	},
+	mutations: {
+		$uStore(state, payload) {
+			// 判断是否多层级调用,state中为对象存在的情况,诸如user.info.score = 1
+			let nameArr = payload.name.split('.');
+			let saveKey = '';
+			let len = nameArr.length;
+			if (nameArr.length >= 2) {
+				let obj = state[nameArr[0]];
+				for (let i = 1; i < len - 1; i++) {
+					obj = obj[nameArr[i]];
+				}
+				obj[nameArr[len - 1]] = payload.value;
+				saveKey = nameArr[0];
+			} else {
+				// 单层级变量,在state就是一个普通变量的情况
+				state[payload.name] = payload.value;
+				saveKey = payload.name;
+			}
+			// 保存变量到本地,见顶部函数定义
+			saveLifeData(saveKey, state[saveKey])
+		},
+		login(state, provider) {
+			state.hasLogin = true;
+			state.userInfo = provider;
+			uni.setStorageSync('userInfo', provider)
+		},
+
+		logout(state) {
+			state.hasLogin = false;
+			state.userInfo = {};
+			uni.removeStorageSync('userInfo')
+		},
+
+		goodCar(state, provider) {
+			
+			state.goods = provider;
+			uni.setStorageSync('goods', provider)
+		},
+		goodService(state, provider) {
+			state.isHaveService = provider;
+			uni.setStorageSync('isHaveService', provider)
+		},
+
+
+
+	},
+	actions: {
+
+	},
+	getters: {
+		getUserInfo(state) {
+			return state.userInfo
+		}
+	}
+})
+
+export default store

+ 19 - 0
uni_merchants_enter/style/icon/iconfont.css

@@ -0,0 +1,19 @@
+@font-face {
+  font-family: "iconfont_no"; /* Project id 4108869 */
+  src: url('//at.alicdn.com/t/c/font_4108869_h2yk92nghsb.woff2?t=1686115283298') format('woff2'),
+       url('//at.alicdn.com/t/c/font_4108869_h2yk92nghsb.woff?t=1686115283298') format('woff'),
+       url('//at.alicdn.com/t/c/font_4108869_h2yk92nghsb.ttf?t=1686115283298') format('truetype'),
+       url('//at.alicdn.com/t/c/font_4108869_h2yk92nghsb.svg?t=1686115283298#iconfont_no') format('svg');
+}
+
+.iconfont_no {
+  font-family: "iconfont_no" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon_merchants_enterjian1:before {
+  content: "\e600";
+}

+ 3 - 1
uni_merchants_enter/uni.scss

@@ -11,7 +11,8 @@
  *
  * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
  */
-
+@import '@/uni_modules/uni-scss/variables.scss';
+@import '@/uni_modules/uview-ui/theme.scss';
 /* 颜色变量 */
 
 /* 行为相关颜色 */
@@ -74,3 +75,4 @@ $uni-color-subtitle: #555555; // 二级标题颜色
 $uni-font-size-subtitle:26px;
 $uni-color-paragraph: #3F536E; // 文章段落颜色
 $uni-font-size-paragraph:15px;
+

+ 6 - 0
uni_merchants_enter/uni_modules/smh-time-range/changelog.md

@@ -0,0 +1,6 @@
+## 1.0.3(2021-06-10)
+修改了由接口返回的数据,然后渲染数据无效的bug
+## 1.0.2(2021-05-21)
+修改了一些样式的小bug
+## 1.0.1(2021-05-21)
+更新了属性和时间的详细说明

+ 190 - 0
uni_merchants_enter/uni_modules/smh-time-range/components/smh-time-range/smh-time-range.vue

@@ -0,0 +1,190 @@
+<template >
+	<view v-if="isUnder">
+		<view class='shade'>
+		
+		</view>
+		<view  class="time1">
+			<view class="top flex justify-between align-center">
+				<text  @tap="cancel">取消</text>
+				<text @tap="confirm">确定</text>
+			</view>
+			<picker-view class="picker" :value="value" @change="getime" indicator-style="height:30px;">
+				<picker-view-column>
+					<view class="hours" style="line-height:30px; text-align: center;" v-for="(item,index) in hoursList" :key="index">{{item}}</view>
+				</picker-view-column>
+				<picker-view-column>
+					<view style="line-height:30px; text-align: center;">-</view>
+				</picker-view-column>
+				<picker-view-column>
+					<view class="hours" style="line-height:30px; text-align: center;" v-for="(item,index) in hoursList" :key="index">{{item}}</view>
+				</picker-view-column>
+			</picker-view>
+		</view>
+	</view>
+</template>
+<script>
+	let minutes=['00','30']
+	// for (let i = 0; i <= 59; i++) {
+	// 	if(i<10){
+	// 		i="0"+i
+	// 	}
+	//   minutes.push(i)
+	// }
+	export default{
+		props:{
+			time:{
+				type: Array,
+				default() {
+					return ['15','0','0','18','0'];
+				}
+			},
+			isUnder: {
+			    type: Boolean,
+			    default: false
+			}
+		},
+		watch:{
+			time:function(){
+				this.value=this.time
+			},
+			
+		},
+		created(){
+			console.log(this.isUnder)
+		},
+		data(){
+			return{
+				value:this.time,//默认结束开始时间
+				hoursList:[
+					'00:00',
+					'00:30',
+					'01:00',
+					'01:30',
+					'02:00',
+					'02:30',
+					'03:00',
+					'03:30',
+					'04:00',
+					'04:30',
+					'05:00',
+					'05:30',
+					'06:00',
+					'06:30',
+					'07:00',
+					'07:30',
+					'08:00',
+					'08:30',
+					'09:00',
+					'09:30',
+					'10:00',
+					'10:00',
+					'11:00',
+					'11:30',
+					'12:00',
+					'12:30',
+					'13:00',
+					'13:30',
+					'14:00',
+					'14:30',
+					'15:00',
+					'15:30',
+					'16:00',
+					'16:30',
+					'17:00',
+					'17:30',
+					'18:00',
+					'18:30',
+					'19:00',
+					'19:30',
+					'20:00',
+					'20:30',
+					'21:00',
+					'21:30',
+					'22:00',
+					'22:30',
+					'23:00',
+					'23:30'],
+				minutes,
+			}
+		},
+		methods:{
+			confirm(){
+				let time = this.value[0]+"-"+this.value[1]
+				this.$emit("confrim",{time:time})
+			},
+			cancel(){
+				let time = this.value[0]+"-"+this.value[1]
+				this.$emit("cancel",{time:time})
+			},
+			getime(e){
+				let val = e.detail.value
+				this.value[0] = this.hoursList[val[0]] 
+				this.value[1] = this.hoursList[val[1]] 
+				this.value[2] = val[2]
+			},
+		}
+	}
+</script>
+<style lang="scss" scoped>
+.shade{
+	position: fixed;
+	    bottom: 0;
+	    top: 0;
+	    left: 0;
+	    right: 0;
+	    background-color: rgba(0, 0, 0, 0.4);
+	    transition-property: opacity;
+	    transition-duration: 0.3s;
+	    opacity: 0;
+	    z-index: 99;
+}
+.time1{
+	width:100%;
+	margin: 0 auto;
+	background-color:#FFFFFF;
+	color: #000;
+	height: 450rpx;
+	.top{
+		width: 690rpx;
+		margin: 0 auto;
+		height: 100rpx;
+		line-height: 100rpx;
+		text{
+			font-weight: bold;
+			&:nth-child(1){
+				font-size: 28rpx;
+				color: #999;
+			}
+			&:nth-child(2){
+				font-size: 28rpx;
+				color: #0A84FF;
+			}
+		}
+	}
+	.tip12{
+		width: 100%;
+		height: 100rpx;
+		view{
+			width: 50%;
+			text-align: center;
+			line-height: 100rpx;
+			font-size: 40rpx;
+			color: #000000;
+		}
+	}
+	.hours{
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #000;
+	}
+	.minutes{
+		font-size: 30rpx;
+		font-weight: bold;
+		color: #000;
+	}
+}
+.picker{
+	width: 100%;
+	height: 300rpx;
+}
+</style>

+ 40 - 0
uni_merchants_enter/uni_modules/smh-time-range/readme.md

@@ -0,0 +1,40 @@
+# smh-time-range
+
+用于时间范围的选择组件
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+### 基本用法
+
+在 ``template`` 中使用组件
+
+```html
+<smh-time-range :time="['12','30','0','17','30']" @confrim="confrim" @cancel="cancel"></smh-time-range>
+
+methods: {
+	confrim(e){
+		console.log(e.time)//确定事件 =>12:30-17:30
+	},
+	cancel(e){
+		console.log(e.time)//取消事件 =>12:30-17:30
+	}
+}
+```
+
+
+## API
+
+### smh-time-range  Props
+
+|属性名	|类型		|默认值	|说明				|
+|:-:	|:-:		|:-:	|:-:				|
+|time	|Array		|['15','0','0','18','0']		|设置默认时间,前两个参数为第一个时间(15:00),后两个参数为第二个时间(18:00),第三个参数为固定参数,不用修改		|
+
+
+### smh-time-range Events
+|事件名	|说明			|返回值|
+|:-:	|:-:			|:-:  |
+|@confrim|点击确定按钮事件|{time:15:00-18:00}|
+|@cancel|点击取消按钮事件|{time:15:00-18:00}|

+ 0 - 2
uni_merchants_enter/uni_modules/uni-badge/changelog.md

@@ -1,5 +1,3 @@
-## 1.2.2(2023-01-28)
-- 修复 运行/打包 控制台警告问题
 ## 1.2.1(2022-09-05)
 - 修复 当 text 超过 max-num 时,badge 的宽度计算是根据 text 的长度计算,更改为 css 计算实际展示宽度,详见:[https://ask.dcloud.net.cn/question/150473](https://ask.dcloud.net.cn/question/150473)
 ## 1.2.0(2021-11-19)

+ 3 - 3
uni_merchants_enter/uni_modules/uni-badge/components/uni-badge/uni-badge.vue

@@ -21,7 +21,7 @@
 	 * 	@value error 红色
 	 * @property {String} inverted = [true|false] 是否无需背景颜色
 	 * @property {Number} maxNum 展示封顶的数字值,超过 99 显示 99+
-	 * @property {String} absolute = [rightTop|rightBottom|leftBottom|leftTop] 开启绝对定位, 角标将定位到其包裹的标签的四角上
+	 * @property {String} absolute = [rightTop|rightBottom|leftBottom|leftTop] 开启绝对定位, 角标将定位到其包裹的标签的四角上		
 	 * 	@value rightTop 右上
 	 * 	@value rightBottom 右下
 	 * 	@value leftTop 左上
@@ -192,12 +192,11 @@
 		display: flex;
 		overflow: hidden;
 		box-sizing: border-box;
-		font-feature-settings: "tnum";
-		min-width: 20px;
 		/* #endif */
 		justify-content: center;
 		flex-direction: row;
 		height: 20px;
+		min-width: 20px;
 		padding: 0 4px;
 		line-height: 18px;
 		color: #fff;
@@ -207,6 +206,7 @@
 		border: 1px solid #fff;
 		text-align: center;
 		font-family: 'Helvetica Neue', Helvetica, sans-serif;
+		font-feature-settings: "tnum";
 		font-size: $bage-size;
 		/* #ifdef H5 */
 		z-index: 999;

+ 6 - 0
uni_merchants_enter/uni_modules/uni-breadcrumb/changelog.md

@@ -0,0 +1,6 @@
+## 0.1.2(2022-06-08)
+- 修复 微信小程序 separator 不显示问题
+## 0.1.1(2022-06-02)
+- 新增 支持 uni.scss 修改颜色
+## 0.1.0(2022-04-21)
+- 初始化

+ 121 - 0
uni_merchants_enter/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue

@@ -0,0 +1,121 @@
+<template>
+	<view class="uni-breadcrumb-item">
+		<view :class="{
+			'uni-breadcrumb-item--slot': true,
+			'uni-breadcrumb-item--slot-link': to && currentPage !== to
+			}" @click="navTo">
+			<slot />
+		</view>
+		<i v-if="separatorClass" class="uni-breadcrumb-item--separator" :class="separatorClass" />
+		<text v-else class="uni-breadcrumb-item--separator">{{ separator }}</text>
+	</view>
+</template>
+<script>
+	/**
+	 * BreadcrumbItem 面包屑导航子组件
+	 * @property {String/Object} to 路由跳转页面路径/对象
+	 * @property {Boolean} replace 在使用 to 进行路由跳转时,启用 replace 将不会向 history 添加新记录(仅 h5 支持)
+	 */
+	export default {
+		data() {
+			return {
+				currentPage: ""
+			}
+		},
+		options: {
+			virtualHost: true
+		},
+		props: {
+			to: {
+				type: String,
+				default: ''
+			},
+			replace:{
+				type: Boolean,
+				default: false
+			}
+		},
+		inject: {
+			uniBreadcrumb: {
+				from: "uniBreadcrumb",
+				default: null
+			}
+		},
+		created(){
+			const pages = getCurrentPages()
+			const page = pages[pages.length-1]
+
+			if(page){
+				this.currentPage = `/${page.route}`
+			}
+		},
+		computed: {
+			separator() {
+				return this.uniBreadcrumb.separator
+			},
+			separatorClass() {
+				return this.uniBreadcrumb.separatorClass
+			}
+		},
+		methods: {
+			navTo() {
+				const { to } = this
+
+				if (!to || this.currentPage === to){
+					return
+				}
+
+				if(this.replace){
+					uni.redirectTo({
+						url:to
+					})
+				}else{
+					uni.navigateTo({
+						url:to
+					})
+				}
+			}
+		}
+	}
+</script>
+<style lang="scss">
+	$uni-primary: #2979ff !default;
+	$uni-base-color: #6a6a6a !default;
+	$uni-main-color: #3a3a3a !default;
+	.uni-breadcrumb-item {
+		display: flex;
+		align-items: center;
+		white-space: nowrap;
+		font-size: 14px;
+
+		&--slot {
+			color: $uni-base-color;
+			padding: 0 10px;
+
+			&-link {
+				color: $uni-main-color;
+				font-weight: bold;
+				/* #ifndef APP-NVUE */
+				cursor: pointer;
+				/* #endif */
+
+				&:hover {
+					color: $uni-primary;
+				}
+			}
+		}
+
+		&--separator {
+			font-size: 12px;
+			color: $uni-base-color;
+		}
+
+		&:first-child &--slot {
+			padding-left: 0;
+		}
+		
+		&:last-child &--separator {
+			display: none;
+		}
+	}
+</style>

+ 41 - 0
uni_merchants_enter/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue

@@ -0,0 +1,41 @@
+<template>
+	<view class="uni-breadcrumb">
+		<slot />
+	</view>
+</template>
+<script>
+	/**
+	 * Breadcrumb 面包屑导航父组件
+	 * @description 显示当前页面的路径,快速返回之前的任意页面
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=xxx
+	 * @property {String} separator 分隔符,默认为斜杠'/'
+	 * @property {String} separatorClass 图标分隔符 class
+	 */
+	export default {
+		options: {
+			virtualHost: true
+		},
+		props: {
+			separator: {
+				type: String,
+				default: '/'
+			},
+			separatorClass: {
+				type: String,
+				default: ''
+			}
+		},
+
+		provide() {
+			return {
+				uniBreadcrumb: this
+			}
+		}
+
+	}
+</script>
+<style lang="scss">
+	.uni-breadcrumb {
+		display: flex;
+	}
+</style>

+ 66 - 0
uni_merchants_enter/uni_modules/uni-breadcrumb/readme.md

@@ -0,0 +1,66 @@
+
+## breadcrumb 面包屑导航
+> **组件名:uni-breadcrumb**
+> 代码块: `ubreadcrumb`
+
+显示当前页面的路径,快速返回之前的任意页面。
+
+### 安装方式
+
+本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。
+
+如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55)
+
+### 基本用法
+
+在 ``template`` 中使用组件
+
+```html
+<uni-breadcrumb separator="/">
+	<uni-breadcrumb-item v-for="(route,index) in routes" :key="index" :to="route.to">{{route.name}}</uni-breadcrumb-item>
+</uni-breadcrumb>
+```
+
+```js
+export default {
+		name: "uni-stat-breadcrumb",
+		data() {
+			return {
+				routes: [{
+					to: '/A',
+					name: 'A页面'
+				}, {
+					to: '/B',
+					name: 'B页面'
+				}, {
+					to: '/C',
+					name: 'C页面'
+				}]
+			};
+		}
+	}
+```
+
+
+## API
+
+### Breadcrumb Props
+
+|属性名			|类型	|默认值	|说明				|
+|:-:			|:-:	|:-:	|:-:				|
+|separator		|String	|斜杠'/' |分隔符				|
+|separatorClass	|String	|		|图标分隔符 class	    |
+
+### Breadcrumb Item Props
+
+|属性名	|类型			|默认值	|说明																			|
+|:-:	|:-:			|:-:	|:-:																			|
+|to		|String     	|		|路由跳转页面路径           														|
+|replace|Boolean		|		|在使用 to 进行路由跳转时,启用 replace 将不会向 history 添加新记录(仅 h5 支持)         |
+
+
+
+
+## 组件示例
+
+点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/breadcrumb/breadcrumb](https://hellouniapp.dcloud.net.cn/pages/extUI/breadcrumb/breadcrumb)

+ 1 - 1
uni_merchants_enter/uni_modules/uni-combox/components/uni-combox/uni-combox.vue

@@ -148,7 +148,7 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 	.uni-combox {
 		font-size: 14px;
 		border: 1px solid #DCDFE6;

+ 0 - 9
uni_merchants_enter/uni_modules/uni-data-picker/changelog.md

@@ -1,12 +1,3 @@
-## 1.1.2(2023-04-11)
-- 修复 更改 modelValue 报错的 bug
-- 修复 v-for 未使用 key 值控制台 warning
-## 1.1.1(2023-02-21)
-- 修复代码合并时引发 value 属性为空时不渲染数据的问题
-## 1.1.0(2023-02-15)
-- 修复 localdata 不支持动态更新的bug
-## 1.0.9(2023-02-15)
-- 修复 localdata 不支持动态更新的bug
 ## 1.0.8(2022-09-16)
 - 可以使用 uni-scss 控制主题色
 ## 1.0.7(2022-07-06)

+ 6 - 10
uni_merchants_enter/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue

@@ -75,7 +75,7 @@
    */
   export default {
     name: 'UniDataPicker',
-    emits: ['popupopened', 'popupclosed', 'nodeclick', 'input', 'change', 'update:modelValue','inputclick'],
+    emits: ['popupopened', 'popupclosed', 'nodeclick', 'input', 'change', 'update:modelValue'],
     mixins: [dataPicker],
     components: {
       DataPickerView
@@ -131,16 +131,9 @@
         this.load();
       })
     },
-    watch: {
-			localdata: {
-				handler() {
-					this.load()
-				},
-        deep: true
-			},
-    },
     methods: {
       clear() {
+        this.modelValue = null;
         this._dispatchEvent([]);
       },
       onPropsChange() {
@@ -155,6 +148,10 @@
           return;
         }
 
+        if (!this.hasValue) {
+          return;
+        }
+
         // 回显本地数据
         if (this.isLocalData) {
           this.loadData();
@@ -187,7 +184,6 @@
       },
       handleInput() {
         if (this.readonly) {
-					this.$emit('inputclick')
           return
         }
         this.show()

+ 15 - 17
uni_merchants_enter/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue

@@ -2,27 +2,25 @@
   <view class="uni-data-pickerview">
     <scroll-view v-if="!isCloudDataList" class="selected-area" scroll-x="true">
       <view class="selected-list">
-          <view 
-            class="selected-item"
-            v-for="(item,index) in selected"
-            :key="index"
-            :class="{
-              'selected-item-active':index == selectedIndex
-            }"
-            @click="handleSelect(index)"
-          >
-            <text>{{item.text || ''}}</text>
+        <template v-for="(item,index) in selected">
+          <view class="selected-item"
+            :class="{'selected-item-active':index==selectedIndex}"
+            v-if="item.text" @click="handleSelect(index)">
+            <text>{{item.text}}</text>
           </view>
+        </template>
       </view>
     </scroll-view>
     <view class="tab-c">
-      <scroll-view class="list" :scroll-y="true">
-        <view class="item" :class="{'is-disabled': !!item.disable}" v-for="(item, j) in dataList[selectedIndex]" :key="j"
-          @click="handleNodeClick(item, selectedIndex, j)">
-          <text class="item-text">{{item[map.text]}}</text>
-          <view class="check" v-if="selected.length > selectedIndex && item[map.value] == selected[selectedIndex].value"></view>
-        </view>
-      </scroll-view>
+      <template v-for="(child, i) in dataList">
+        <scroll-view class="list" :key="i" v-if="i==selectedIndex" :scroll-y="true">
+          <view class="item" :class="{'is-disabled': !!item.disable}" v-for="(item, j) in child"
+            @click="handleNodeClick(item, i, j)">
+            <text class="item-text">{{item[map.text]}}</text>
+            <view class="check" v-if="selected.length > i && item[map.value] == selected[i].value"></view>
+          </view>
+        </scroll-view>
+      </template>
 
       <view class="loading-cover" v-if="loading">
         <uni-load-more class="load-more" :contentText="loadMore" status="loading"></uni-load-more>

+ 0 - 13
uni_merchants_enter/uni_modules/uni-data-select/changelog.md

@@ -1,16 +1,3 @@
-## 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)

+ 55 - 132
uni_merchants_enter/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue

@@ -2,16 +2,12 @@
 	<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"  :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>
+					<uni-icons v-if="current && clear" type="clear" color="#c0c4cc" size="24" @click="clearVal" />
+					<uni-icons v-else :type="showSelector? 'top' : 'bottom'" size="14" color="#999" />
 				</view>
 				<view class="uni-select--mask" v-if="showSelector" @click="toggleSelector" />
 				<view class="uni-select__selector" v-if="showSelector">
@@ -20,9 +16,10 @@
 						<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 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>
@@ -47,8 +44,17 @@
 	 */
 
 	export default {
-		name: "uni-data-select",
+		name: "uni-stat-select",
 		mixins: [uniCloud.mixinDatacom || {}],
+		data() {
+			return {
+				showSelector: false,
+				current: '',
+				mixinDatacomResData: [],
+				apps: [],
+				channels: []
+			};
+		},
 		props: {
 			localdata: {
 				type: Array,
@@ -84,32 +90,15 @@
 				type: Number,
 				default: 0
 			},
-			disabled: {
+      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);
+			this.last = `${this.collection}_last_selected_option_value`
 			if (this.collection && !this.localdata.length) {
-				this.debounceGet();
+				this.mixinDatacomEasyGet()
 			}
 		},
 		computed: {
@@ -124,14 +113,6 @@
 				return placeholder ?
 					common + placeholder :
 					common
-			},
-			valueCom(){
-				// #ifdef VUE3
-				return this.modelValue;
-				// #endif
-				// #ifndef VUE3
-				return this.value;
-				// #endif
 			}
 		},
 		watch: {
@@ -143,9 +124,16 @@
 					}
 				}
 			},
-			valueCom(val, old) {
+			// #ifndef VUE3
+			value() {
+				this.initDefVal()
+			},
+			// #endif
+			// #ifdef VUE3
+			modelValue() {
 				this.initDefVal()
 			},
+			// #endif
 			mixinDatacomResData: {
 				immediate: true,
 				handler(val) {
@@ -156,46 +144,27 @@
 			}
 		},
 		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
+				if ((this.value || this.value === 0) && !this.isDisabled(this.value)) {
+					defValue = this.value
+				} else if ((this.modelValue || this.modelValue === 0) && !this.isDisabled(this.modelValue)) {
+					defValue = this.modelValue
 				} else {
 					let strogeValue
 					if (this.collection) {
-						strogeValue = this.getCache()
+						strogeValue = uni.getStorageSync(this.last)
 					}
 					if (strogeValue || strogeValue === 0) {
 						defValue = strogeValue
 					} else {
 						let defItem = ''
-						if (this.defItem > 0 && this.defItem <= this.mixinDatacomResData.length) {
+						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)
-          }
+					this.emit(defValue)
 				}
 				const def = this.mixinDatacomResData.find(item => item.value === defValue)
 				this.current = def ? this.formatItemName(def) : ''
@@ -220,7 +189,7 @@
 			clearVal() {
 				this.emit('')
 				if (this.collection) {
-					this.removeCache()
+					uni.removeStorageSync(this.last)
 				}
 			},
 			change(item) {
@@ -231,17 +200,18 @@
 				}
 			},
 			emit(val) {
+				this.$emit('change', val)
 				this.$emit('input', val)
 				this.$emit('update:modelValue', val)
-				this.$emit('change', val)
 				if (this.collection) {
-					this.setCache(val);
+					uni.setStorageSync(this.last, val)
 				}
 			},
+
 			toggleSelector() {
-				if (this.disabled) {
-					return
-				}
+        if(this.disabled){
+          return
+        }
 
 				this.showSelector = !this.showSelector
 			},
@@ -252,50 +222,14 @@
 					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);
-			},
+				return this.collection.indexOf('app-list') > 0 ?
+					`${text}(${value})` :
+					(
+						text ?
+						text :
+						`未命名${channel_code}`
+					)
+			}
 		}
 	}
 </script>
@@ -319,9 +253,7 @@
 		display: flex;
 		align-items: center;
 		// padding: 15px;
-		/* #ifdef H5 */
 		cursor: pointer;
-		/* #endif */
 		width: 100%;
 		flex: 1;
 		box-sizing: border-box;
@@ -365,10 +297,10 @@
 		flex: 1;
 		height: 35px;
 
-		&--disabled {
-			background-color: #f5f7fa;
-			cursor: not-allowed;
-		}
+    &--disabled{
+      background-color: #f5f7fa;
+      cursor: not-allowed;
+    }
 	}
 
 	.uni-select__label {
@@ -425,14 +357,6 @@
 		/* #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 */
@@ -512,6 +436,5 @@
 		bottom: 0;
 		right: 0;
 		left: 0;
-		z-index: 2;
 	}
 </style>

+ 33 - 70
uni_merchants_enter/uni_modules/uni-datetime-picker/changelog.md

@@ -1,78 +1,41 @@
-## 2.2.24(2023-06-02)
-- 修复 部分情况修改时间,开始、结束时间显示异常的Bug [详情](https://ask.dcloud.net.cn/question/171146)
-- 优化 当前月可以选择上月、下月的日期
-## 2.2.23(2023-05-02)
-- 修复 部分情况修改时间,开始时间未更新 [详情](https://github.com/dcloudio/uni-ui/issues/737)
-- 修复 部分平台及设备第一次点击无法显示弹框
-- 修复 ios 日期格式未补零显示及使用异常 [详情](https://ask.dcloud.net.cn/question/162979)
-## 2.2.22(2023-03-30)
-- 修复 日历 picker 修改年月后,自动选中当月1日 [详情](https://ask.dcloud.net.cn/question/165937)
-- 修复 小程序端 低版本 ios NaN [详情](https://ask.dcloud.net.cn/question/162979)
-## 2.2.21(2023-02-20)
-- 修复 firefox 浏览器显示区域点击无法拉起日历弹框的Bug [详情](https://ask.dcloud.net.cn/question/163362)
-## 2.2.20(2023-02-17)
-- 优化 值为空依然选中当天问题
-- 优化 提供 default-value 属性支持配置选择器打开时默认显示的时间
-- 优化 非范围选择未选择日期时间,点击确认按钮选中当前日期时间
-- 优化 字节小程序日期时间范围选择,底部日期换行问题
-## 2.2.19(2023-02-09)
-- 修复 2.2.18 引起范围选择配置 end 选择无效的Bug [详情](https://github.com/dcloudio/uni-ui/issues/686)
-## 2.2.18(2023-02-08)
-- 修复 移动端范围选择change事件触发异常的Bug [详情](https://github.com/dcloudio/uni-ui/issues/684)
-- 优化 PC端输入日期格式错误时返回当前日期时间
-- 优化 PC端输入日期时间超出 start、end 限制的Bug
-- 优化 移动端日期时间范围用法时间展示不完整问题
-## 2.2.17(2023-02-04)
-- 修复 小程序端绑定 Date 类型报错的Bug [详情](https://github.com/dcloudio/uni-ui/issues/679)
-- 修复 vue3 time-picker 无法显示绑定时分秒的Bug
-## 2.2.16(2023-02-02)
-- 修复 字节小程序报错的Bug
-## 2.2.15(2023-02-02)
-- 修复 某些情况切换月份错误的Bug
-## 2.2.14(2023-01-30)
-- 修复 某些情况切换月份错误的Bug [详情](https://ask.dcloud.net.cn/question/162033)
-## 2.2.13(2023-01-10)
-- 修复 多次加载组件造成内存占用的Bug
-## 2.2.12(2022-12-01)
-- 修复 vue3 下 i18n 国际化初始值不正确的Bug
 ## 2.2.11(2022-09-19)
-- 修复 支付宝小程序样式错乱的Bug [详情](https://github.com/dcloudio/uni-app/issues/3861)
+- 修复,支付宝小程序样式错乱,[详情](https://github.com/dcloudio/uni-app/issues/3861)
 ## 2.2.10(2022-09-19)
-- 修复 反向选择日期范围,日期显示异常的Bug [详情](https://ask.dcloud.net.cn/question/153401?item_id=212892&rf=false)
+- 修复,反向选择日期范围,日期显示异常,[详情](https://ask.dcloud.net.cn/question/153401?item_id=212892&rf=false)
 ## 2.2.9(2022-09-16)
 - 可以使用 uni-scss 控制主题色
 ## 2.2.8(2022-09-08)
-- 修复 close事件无效的Bug
+- 修复 close事件无效的 bug
 ## 2.2.7(2022-09-05)
-- 修复 移动端 maskClick 无效的Bug [详情](https://ask.dcloud.net.cn/question/140824)
+- 修复 移动端 maskClick 无效的 bug,详见:[https://ask.dcloud.net.cn/question/140824?item_id=209458&rf=false](https://ask.dcloud.net.cn/question/140824?item_id=209458&rf=false)
 ## 2.2.6(2022-06-30)
 - 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致
 ## 2.2.5(2022-06-24)
-- 修复 日历顶部年月及底部确认未国际化的Bug
+- 修复 日历顶部年月及底部确认未国际化 bug
 ## 2.2.4(2022-03-31)
-- 修复 Vue3 下动态赋值,单选类型未响应的Bug
+- 修复 Vue3 下动态赋值,单选类型未响应的 bug
 ## 2.2.3(2022-03-28)
-- 修复 Vue3 下动态赋值未响应的Bug
+- 修复 Vue3 下动态赋值未响应的 bug
 ## 2.2.2(2021-12-10)
-- 修复 clear-icon 属性在小程序平台不生效的Bug
+- 修复 clear-icon 属性在小程序平台不生效的 bug
 ## 2.2.1(2021-12-10)
-- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的Bug
+- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的 bug
 ## 2.2.0(2021-11-19)
-- 优化 组件UI,并提供设计资源 [详情](https://uniapp.dcloud.io/component/uniui/resource)
-- 文档迁移 [https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker)
-## 2.1.5(2021-11-09)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker)
+## 2.1.5(2021-11-09) 
 - 新增 提供组件设计资源,组件样式调整
 ## 2.1.4(2021-09-10)
-- 修复 hide-second 在移动端的Bug
-- 修复 单选赋默认值时,赋值日期未高亮的Bug
-- 修复 赋默认值时,移动端未正确显示时间的Bug
+- 修复 hide-second 在移动端的 bug
+- 修复 单选赋默认值时,赋值日期未高亮的 bug
+- 修复 赋默认值时,移动端未正确显示时间的 bug
 ## 2.1.3(2021-09-09)
 - 新增 hide-second 属性,支持只使用时分,隐藏秒
 ## 2.1.2(2021-09-03)
 - 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次
 - 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法
 - 优化 调整字号大小,美化日历界面
-- 修复 因国际化导致的 placeholder 失效的Bug
+- 修复 因国际化导致的 placeholder 失效的 bug
 ## 2.1.1(2021-08-24)
 - 新增 支持国际化
 - 优化 范围选择器在 pc 端过宽的问题
@@ -80,50 +43,50 @@
 - 新增 适配 vue3
 ## 2.0.19(2021-08-09)
 - 新增 支持作为 uni-forms 子组件相关功能
-- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的Bug
+- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug
 ## 2.0.18(2021-08-05)
-- 修复 type 属性动态赋值无效的Bug
+- 修复 type 属性动态赋值无效的 bug
 - 修复 ‘确认’按钮被 tabbar 遮盖 bug
-- 修复 组件未赋值时范围选左、右日历相同的Bug
+- 修复 组件未赋值时范围选左、右日历相同的 bug
 ## 2.0.17(2021-08-04)
-- 修复 范围选未正确显示当前值的Bug
-- 修复 h5 平台(移动端)报错 'cale' of undefined 的Bug
+- 修复 范围选未正确显示当前值的 bug
+- 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug
 ## 2.0.16(2021-07-21)
 - 新增 return-type 属性支持返回 date 日期对象
 ## 2.0.15(2021-07-14)
-- 修复 单选日期类型,初始赋值后不在当前日历的Bug
+- 修复 单选日期类型,初始赋值后不在当前日历的 bug
 - 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效)
 - 优化 移动端移除显示框的清空按钮,无实际用途
 ## 2.0.14(2021-07-14)
-- 修复 组件赋值为空,界面未更新的Bug
-- 修复 start 和 end 不能动态赋值的Bug
-- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的Bug
+- 修复 组件赋值为空,界面未更新的 bug
+- 修复 start 和 end 不能动态赋值的 bug
+- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的 bug
 ## 2.0.13(2021-07-08)
-- 修复 范围选择不能动态赋值的Bug
+- 修复 范围选择不能动态赋值的 bug
 ## 2.0.12(2021-07-08)
 - 修复 范围选择的初始时间在一个月内时,造成无法选择的bug
 ## 2.0.11(2021-07-08)
 - 优化 弹出层在超出视窗边缘定位不准确的问题
 ## 2.0.10(2021-07-08)
-- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的Bug
+- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的 bug
 - 优化 弹出层在超出视窗边缘被遮盖的问题
 ## 2.0.9(2021-07-07)
 - 新增 maskClick 事件
-- 修复 特殊情况日历 rpx 布局错误的Bug,rpx -> px
+- 修复 特殊情况日历 rpx 布局错误的 bug,rpx -> px
 - 修复 范围选择时清空返回值不合理的bug,['', ''] -> []
 ## 2.0.8(2021-07-07)
 - 新增 日期时间显示框支持插槽
 ## 2.0.7(2021-07-01)
 - 优化 添加 uni-icons 依赖
 ## 2.0.6(2021-05-22)
-- 修复 图标在小程序上不显示的Bug
+- 修复 图标在小程序上不显示的 bug
 - 优化 重命名引用组件,避免潜在组件命名冲突
 ## 2.0.5(2021-05-20)
 - 优化 代码目录扁平化
 ## 2.0.4(2021-05-12)
 - 新增 组件示例地址
 ## 2.0.3(2021-05-10)
-- 修复 ios 下不识别 '-' 日期格式的Bug
+- 修复 ios 下不识别 '-' 日期格式的 bug
 - 优化 pc 下弹出层添加边框和阴影
 ## 2.0.2(2021-05-08)
 - 修复 在 admin 中获取弹出层定位错误的bug
@@ -134,7 +97,7 @@
  > 注意:此版本不向后兼容,不再支持单独时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker)
 ## 1.0.6(2021-03-18)
 - 新增 hide-second 属性,时间支持仅选择时、分
-- 修复 选择跟显示的日期不一样的Bug
-- 修复 chang事件触发2次的Bug
-- 修复 分、秒 end 范围错误的Bug
+- 修复 选择跟显示的日期不一样的 bug
+- 修复 chang事件触发2次的 bug
+- 修复 分、秒 end 范围错误的 bug
 - 优化 更好的 nvue 适配

+ 13 - 3
uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue

@@ -13,10 +13,10 @@
 				'uni-calendar-item--after-checked':weeks.afterMultiple,
 				'uni-calendar-item--disable':weeks.disable,
 				}">
-			<text v-if="selected && weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text>
+			<text v-if="selected&&weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text>
 			<text class="uni-calendar-item__weeks-box-text uni-calendar-item__weeks-box-text-disable uni-calendar-item--checked-text">{{weeks.date}}</text>
 		</view>
-		<view :class="{'uni-calendar-item--today': weeks.isToday}"></view>
+		<view :class="{'uni-calendar-item--isDay': weeks.isDay}"></view>
 	</view>
 </template>
 
@@ -41,6 +41,10 @@
 					return []
 				}
 			},
+			lunar: {
+				type: Boolean,
+				default: false
+			},
 			checkHover: {
 				type: Boolean,
 				default: false
@@ -79,6 +83,11 @@
 		color: darken($color: $uni-primary, $amount: 40%);
 	}
 
+	.uni-calendar-item__weeks-lunar-text {
+		font-size: 12px;
+		color: #333;
+	}
+
 	.uni-calendar-item__weeks-box-item {
 		position: relative;
 		/* #ifndef APP-NVUE */
@@ -107,6 +116,7 @@
 	}
 
 	.uni-calendar-item__weeks-box .uni-calendar-item--disable {
+		// background-color: rgba(249, 249, 249, $uni-opacity-disabled);
 		cursor: default;
 	}
 
@@ -114,7 +124,7 @@
 		color: #D1D1D1;
 	}
 
-	.uni-calendar-item--today {
+	.uni-calendar-item--isDay {
 		position: absolute;
 		top: 10px;
 		right: 17%;

+ 125 - 130
uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue

@@ -1,37 +1,31 @@
 <template>
 	<view class="uni-calendar" @mouseleave="leaveCale">
-
-		<view v-if="!insert && show" class="uni-calendar__mask" :class="{'uni-calendar--mask-show':aniMaskShow}"
-			@click="maskClick"></view>
-
+		<view v-if="!insert&&show" class="uni-calendar__mask" :class="{'uni-calendar--mask-show':aniMaskShow}"
+			@click="clean();maskClick()"></view>
 		<view v-if="insert || show" class="uni-calendar__content"
 			:class="{'uni-calendar--fixed':!insert,'uni-calendar--ani-show':aniMaskShow, 'uni-calendar__content-mobile': aniMaskShow}">
 			<view class="uni-calendar__header" :class="{'uni-calendar__header-mobile' :!insert}">
-
-				<view class="uni-calendar__header-btn-box" @click.stop="changeMonth('pre')">
+				<view v-if="left" class="uni-calendar__header-btn-box" @click.stop="pre">
 					<view class="uni-calendar__header-btn uni-calendar--left"></view>
 				</view>
-
 				<picker mode="date" :value="date" fields="month" @change="bindDateChange">
 					<text
 						class="uni-calendar__header-text">{{ (nowDate.year||'') + yearText + ( nowDate.month||'') + monthText}}</text>
 				</picker>
-
-				<view class="uni-calendar__header-btn-box" @click.stop="changeMonth('next')">
+				<view v-if="right" class="uni-calendar__header-btn-box" @click.stop="next">
 					<view class="uni-calendar__header-btn uni-calendar--right"></view>
 				</view>
-
-				<view v-if="!insert" class="dialog-close" @click="close">
+				<view v-if="!insert" class="dialog-close" @click="clean">
 					<view class="dialog-close-plus" data-id="close"></view>
 					<view class="dialog-close-plus dialog-close-rotate" data-id="close"></view>
 				</view>
+
+				<!-- <text class="uni-calendar__backtoday" @click="backtoday">回到今天</text> -->
 			</view>
 			<view class="uni-calendar__box">
-
 				<view v-if="showMonth" class="uni-calendar__box-bg">
 					<text class="uni-calendar__box-bg-text">{{nowDate.month}}</text>
 				</view>
-
 				<view class="uni-calendar__weeks" style="padding-bottom: 7px;">
 					<view class="uni-calendar__weeks-day">
 						<text class="uni-calendar__weeks-day-text">{{SUNText}}</text>
@@ -55,30 +49,28 @@
 						<text class="uni-calendar__weeks-day-text">{{SATText}}</text>
 					</view>
 				</view>
-
 				<view class="uni-calendar__weeks" v-for="(item,weekIndex) in weeks" :key="weekIndex">
 					<view class="uni-calendar__weeks-item" v-for="(weeks,weeksIndex) in item" :key="weeksIndex">
 						<calendar-item class="uni-calendar-item--hook" :weeks="weeks" :calendar="calendar"
-							:selected="selected" :checkHover="range" @change="choiceDate"
+							:selected="selected" :lunar="lunar" :checkHover="range" @change="choiceDate"
 							@handleMouse="handleMouse">
 						</calendar-item>
 					</view>
 				</view>
 			</view>
-
-			<view v-if="!insert && !range && hasTime" class="uni-date-changed uni-calendar--fixed-top"
+			<view v-if="!insert && !range && typeHasTime" class="uni-date-changed uni-calendar--fixed-top"
 				style="padding: 0 80px;">
 				<view class="uni-date-changed--time-date">{{tempSingleDate ? tempSingleDate : selectDateText}}</view>
-				<time-picker type="time" :start="timepickerStartTime" :end="timepickerEndTime" v-model="time"
+				<time-picker type="time" :start="reactStartTime" :end="reactEndTime" v-model="time"
 					:disabled="!tempSingleDate" :border="false" :hide-second="hideSecond" class="time-picker-style">
 				</time-picker>
 			</view>
 
-			<view v-if="!insert && range && hasTime" class="uni-date-changed uni-calendar--fixed-top">
+			<view v-if="!insert && range && typeHasTime" class="uni-date-changed uni-calendar--fixed-top">
 				<view class="uni-date-changed--time-start">
 					<view class="uni-date-changed--time-date">{{tempRange.before ? tempRange.before : startDateText}}
 					</view>
-					<time-picker type="time" :start="timepickerStartTime" v-model="timeRange.startTime" :border="false"
+					<time-picker type="time" :start="reactStartTime" v-model="timeRange.startTime" :border="false"
 						:hide-second="hideSecond" :disabled="!tempRange.before" class="time-picker-style">
 					</time-picker>
 				</view>
@@ -87,13 +79,15 @@
 				</view>
 				<view class="uni-date-changed--time-end">
 					<view class="uni-date-changed--time-date">{{tempRange.after ? tempRange.after : endDateText}}</view>
-					<time-picker type="time" :end="timepickerEndTime" v-model="timeRange.endTime" :border="false"
+					<time-picker type="time" :end="reactEndTime" v-model="timeRange.endTime" :border="false"
 						:hide-second="hideSecond" :disabled="!tempRange.after" class="time-picker-style">
 					</time-picker>
 				</view>
 			</view>
-
 			<view v-if="!insert" class="uni-date-changed uni-date-btn--ok">
+				<!-- <view class="uni-calendar__header-btn-box">
+					<text class="uni-calendar__button-text uni-calendar--fixed-width">{{okText}}</text>
+				</view> -->
 				<view class="uni-datetime-picker--btn" @click="confirm">{{confirmText}}</view>
 			</view>
 		</view>
@@ -101,19 +95,22 @@
 </template>
 
 <script>
-	import { Calendar, getDate, getTime } from './util.js';
+	import Calendar from './util.js';
 	import calendarItem from './calendar-item.vue'
 	import timePicker from './time-picker.vue'
-
-	import { initVueI18n } from '@dcloudio/uni-i18n'
-	import i18nMessages from './i18n/index.js'
-	const { t } = initVueI18n(i18nMessages)
-
+	import {
+		initVueI18n
+	} from '@dcloudio/uni-i18n'
+	import messages from './i18n/index.js'
+	const {
+		t
+	} = initVueI18n(messages)
 	/**
 	 * Calendar 日历
 	 * @description 日历组件可以查看日期,选择任意范围内的日期,打点操作。常用场景如:酒店日期预订、火车机票选择购买日期、上下班打卡等
 	 * @tutorial https://ext.dcloud.net.cn/plugin?id=56
 	 * @property {String} date 自定义当前时间,默认为今天
+	 * @property {Boolean} lunar 显示农历
 	 * @property {String} startDate 日期选择范围-开始日期
 	 * @property {String} endDate 日期选择范围-结束日期
 	 * @property {Boolean} range 范围选择
@@ -123,11 +120,10 @@
 	 * @property {Boolean} clearDate = [true|false] 弹窗模式是否清空上次选择内容
 	 * @property {Array} selected 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}]
 	 * @property {Boolean} showMonth 是否选择月份为背景
-	 * @property {[String} defaultValue 选择器打开时默认显示的时间
 	 * @event {Function} change 日期改变,`insert :ture` 时生效
 	 * @event {Function} confirm 确认选择`insert :false` 时生效
 	 * @event {Function} monthSwitch 切换月份时触发
-	 * @example <uni-calendar :insert="true" :start-date="'2019-3-2'":end-date="'2019-5-20'"@change="change" />
+	 * @example <uni-calendar :insert="true":lunar="true" :start-date="'2019-3-2'":end-date="'2019-5-20'"@change="change" />
 	 */
 	export default {
 		components: {
@@ -155,6 +151,10 @@
 					return []
 				}
 			},
+			lunar: {
+				type: Boolean,
+				default: false
+			},
 			startDate: {
 				type: String,
 				default: ''
@@ -163,19 +163,11 @@
 				type: String,
 				default: ''
 			},
-      startPlaceholder: {
-        type: String,
-				default: ''
-			},
-			endPlaceholder: {
-				type: String,
-				default: ''
-			},
 			range: {
 				type: Boolean,
 				default: false
 			},
-			hasTime: {
+			typeHasTime: {
 				type: Boolean,
 				default: false
 			},
@@ -191,6 +183,14 @@
 				type: Boolean,
 				default: true
 			},
+			left: {
+				type: Boolean,
+				default: true
+			},
+			right: {
+				type: Boolean,
+				default: true
+			},
 			checkHover: {
 				type: Boolean,
 				default: true
@@ -209,18 +209,14 @@
 						fulldate: ''
 					}
 				}
-			},
-      defaultValue: {
-        type: [String, Object, Array],
-        default: ''
-      }
+			}
 		},
 		data() {
 			return {
 				show: false,
 				weeks: [],
 				calendar: {},
-				nowDate: {},
+				nowDate: '',
 				aniMaskShow: false,
 				firstEnter: true,
 				time: '',
@@ -238,7 +234,7 @@
 		watch: {
 			date: {
 				immediate: true,
-				handler(newVal) {
+				handler(newVal, oldVal) {
 					if (!this.range) {
 						this.tempSingleDate = newVal
 						setTimeout(() => {
@@ -249,44 +245,33 @@
 			},
 			defTime: {
 				immediate: true,
-				handler(newVal) {
+				handler(newVal, oldVal) {
 					if (!this.range) {
 						this.time = newVal
 					} else {
+						// console.log('-----', newVal);
 						this.timeRange.startTime = newVal.start
 						this.timeRange.endTime = newVal.end
 					}
 				}
 			},
 			startDate(val) {
-				// 字节小程序 watch 早于 created
-				if(!this.cale){
-					return
-				}
-				this.cale.setStartDate(val)
+				this.cale.resetSatrtDate(val)
 				this.cale.setDate(this.nowDate.fullDate)
 				this.weeks = this.cale.weeks
 			},
 			endDate(val) {
-				// 字节小程序 watch 早于 created
-				if(!this.cale){
-					return
-				}
-				this.cale.setEndDate(val)
+				this.cale.resetEndDate(val)
 				this.cale.setDate(this.nowDate.fullDate)
 				this.weeks = this.cale.weeks
 			},
 			selected(newVal) {
-				// 字节小程序 watch 早于 created
-				if(!this.cale){
-					return
-				}
 				this.cale.setSelectInfo(this.nowDate.fullDate, newVal)
 				this.weeks = this.cale.weeks
 			},
 			pleStatus: {
 				immediate: true,
-				handler(newVal) {
+				handler(newVal, oldVal) {
 					const {
 						before,
 						after,
@@ -309,16 +294,11 @@
 								this.cale.lastHover = false
 							}
 						} else {
-              // 字节小程序 watch 早于 created
-              if(!this.cale){
-                return
-              }
-
 							this.cale.setDefaultMultiple(before, after)
-							if (which === 'left' && before) {
+							if (which === 'left') {
 								this.setDate(before)
 								this.weeks = this.cale.weeks
-							} else if(after) {
+							} else {
 								this.setDate(after)
 								this.weeks = this.cale.weeks
 							}
@@ -329,13 +309,15 @@
 			}
 		},
 		computed: {
-			timepickerStartTime() {
+			reactStartTime() {
 				const activeDate = this.range ? this.tempRange.before : this.calendar.fullDate
-				return activeDate === this.startDate ? this.selectableTimes.start : ''
+				const res = activeDate === this.startDate ? this.selectableTimes.start : ''
+				return res
 			},
-			timepickerEndTime() {
+			reactEndTime() {
 				const activeDate = this.range ? this.tempRange.after : this.calendar.fullDate
-				return activeDate === this.endDate ? this.selectableTimes.end : ''
+				const res = activeDate === this.endDate ? this.selectableTimes.end : ''
+				return res
 			},
 			/**
 			 * for i18n
@@ -386,13 +368,17 @@
 		created() {
 			// 获取日历方法实例
 			this.cale = new Calendar({
+				// date: new Date(),
 				selected: this.selected,
 				startDate: this.startDate,
 				endDate: this.endDate,
 				range: this.range,
+				// multipleStatus: this.pleStatus
 			})
 			// 选中某一天
+			// this.cale.setDate(this.date)
 			this.init(this.date)
+			// this.setDay
 		},
 		methods: {
 			leaveCale() {
@@ -421,9 +407,14 @@
 				const [yearB, monthB] = B.split('-')
 				return yearA === yearB && monthA === monthB
 			},
+
+			// 取消穿透
+			clean() {
+				this.close()
+			},
+
 			// 蒙版点击事件
 			maskClick() {
-        this.close()
 				this.$emit('maskClose')
 			},
 
@@ -442,49 +433,33 @@
 					this.tempSingleDate = ''
 				}
 				this.calendar.fullDate = ''
-				this.setDate(new Date())
+				this.setDate()
 			},
 
 			bindDateChange(e) {
 				const value = e.detail.value + '-1'
-				this.setDate(value)
+				this.init(value)
 			},
 			/**
 			 * 初始化日期显示
 			 * @param {Object} date
 			 */
 			init(date) {
-        // 字节小程序 watch 早于 created
-				if(!this.cale){
-					return
-				}
-				this.cale.setDate(date || new Date())
+				this.cale.setDate(date)
 				this.weeks = this.cale.weeks
-				this.nowDate = this.cale.getInfo(date)
-        this.calendar = {...this.nowDate}
-        if(!date){
-          // 优化date为空默认不选中今天
-          this.calendar.fullDate = ''
-          if(this.defaultValue && !this.range){
-            // 暂时只支持移动端非范围选择
-            const defaultDate = new Date(this.defaultValue)
-            const fullDate = getDate(defaultDate)
-            const year = defaultDate.getFullYear()
-            const month = defaultDate.getMonth()+1
-            const date = defaultDate.getDate()
-            const day = defaultDate.getDay()
-            this.calendar = {
-              fullDate,
-              year,
-              month,
-              date,
-              day
-            },
-            this.tempSingleDate = fullDate
-            this.time = getTime(defaultDate, this.hideSecond)
-          }
-        }
-			},
+				this.nowDate = this.calendar = this.cale.getInfo(date)
+			},
+			// choiceDate(weeks) {
+			// 	if (weeks.disable) return
+			// 	this.calendar = weeks
+			// 	// 设置多选
+			// 	this.cale.setMultiple(this.calendar.fullDate, true)
+			// 	this.weeks = this.cale.weeks
+			// 	this.tempSingleDate = this.calendar.fullDate
+			// 	this.tempRange.before = this.cale.multipleStatus.before
+			// 	this.tempRange.after = this.cale.multipleStatus.after
+			// 	this.change()
+			// },
 			/**
 			 * 打开日历弹窗
 			 */
@@ -492,6 +467,7 @@
 				// 弹窗模式并且清理数据
 				if (this.clearDate && !this.insert) {
 					this.cale.cleanMultipleStatus()
+					// this.cale.setDate(this.date)
 					this.init(this.date)
 				}
 				this.show = true
@@ -545,20 +521,12 @@
 			 * @param {Object} name
 			 */
 			setEmit(name) {
-        if(!this.range){
-					if(!this.calendar.fullDate){
-					  this.calendar = this.cale.getInfo(new Date())
-					  this.tempSingleDate = this.calendar.fullDate
-					}
-					if(this.hasTime && !this.time) {
-					  this.time = getTime(new Date(), this.hideSecond)
-					}
-				}
 				let {
 					year,
 					month,
 					date,
 					fullDate,
+					lunar,
 					extraInfo
 				} = this.calendar
 				this.$emit(name, {
@@ -569,6 +537,7 @@
 					time: this.time,
 					timeRange: this.timeRange,
 					fulldate: fullDate,
+					lunar,
 					extraInfo: extraInfo || {}
 				})
 			},
@@ -584,9 +553,9 @@
 				this.cale.setMultiple(this.calendar.fullDate, true)
 				this.weeks = this.cale.weeks
 				this.tempSingleDate = this.calendar.fullDate
+				const beforeStatus = this.cale.multipleStatus.before
 				const beforeDate = new Date(this.cale.multipleStatus.before).getTime()
 				const afterDate = new Date(this.cale.multipleStatus.after).getTime()
-        // 如果先选择结束日期,后选择开始日期,需要交换
 				if (beforeDate > afterDate && afterDate) {
 					this.tempRange.before = this.cale.multipleStatus.after
 					this.tempRange.after = this.cale.multipleStatus.before
@@ -596,17 +565,46 @@
 				}
 				this.change()
 			},
-      changeMonth(type) {
-        let newDate
-        if(type === 'pre') {
-          newDate = this.cale.getPreMonthObj(this.nowDate.fullDate).fullDate
-        } else if(type === 'next') {
-          newDate = this.cale.getNextMonthObj(this.nowDate.fullDate).fullDate
-        }
+			/**
+			 * 回到今天
+			 */
+			backtoday() {
+				let date = this.cale.getDate(new Date()).fullDate
+				// this.cale.setDate(date)
+				this.init(date)
+				this.change()
+			},
+			/**
+			 * 比较时间大小
+			 */
+			dateCompare(startDate, endDate) {
+				// 计算截止时间
+				startDate = new Date(startDate.replace('-', '/').replace('-', '/'))
+				// 计算详细项的截止时间
+				endDate = new Date(endDate.replace('-', '/').replace('-', '/'))
+				if (startDate <= endDate) {
+					return true
+				} else {
+					return false
+				}
+			},
+			/**
+			 * 上个月
+			 */
+			pre() {
+				const preDate = this.cale.getDate(this.nowDate.fullDate, -1, 'month').fullDate
+				this.setDate(preDate)
+				this.monthSwitch()
 
-        this.setDate(newDate)
+			},
+			/**
+			 * 下个月
+			 */
+			next() {
+				const nextDate = this.cale.getDate(this.nowDate.fullDate, +1, 'month').fullDate
+				this.setDate(nextDate)
 				this.monthSwitch()
-      },
+			},
 			/**
 			 * 设置日期
 			 * @param {Object} date
@@ -856,17 +854,14 @@
 
 	.uni-date-changed--time-end {
 		/* #ifndef APP-NVUE */
-    display: flex;
+		display: flex;
 		/* #endif */
 		align-items: center;
 	}
 
 	.uni-date-changed--time-date {
-    color: #999;
+		color: #999;
 		line-height: 50px;
-    /* #ifdef MP-TOUTIAO */
-    font-size: 16px;
-    /* #endif */
 		margin-right: 5px;
 		// opacity: 0.6;
 	}

+ 45 - 0
uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js

@@ -0,0 +1,45 @@
+// #ifdef H5
+export default {
+  name: 'Keypress',
+  props: {
+    disable: {
+      type: Boolean,
+      default: false
+    }
+  },
+  mounted () {
+    const keyNames = {
+      esc: ['Esc', 'Escape'],
+      tab: 'Tab',
+      enter: 'Enter',
+      space: [' ', 'Spacebar'],
+      up: ['Up', 'ArrowUp'],
+      left: ['Left', 'ArrowLeft'],
+      right: ['Right', 'ArrowRight'],
+      down: ['Down', 'ArrowDown'],
+      delete: ['Backspace', 'Delete', 'Del']
+    }
+    const listener = ($event) => {
+      if (this.disable) {
+        return
+      }
+      const keyName = Object.keys(keyNames).find(key => {
+        const keyName = $event.key
+        const value = keyNames[key]
+        return value === keyName || (Array.isArray(value) && value.includes(keyName))
+      })
+      if (keyName) {
+        // 避免和其他按键事件冲突
+        setTimeout(() => {
+          this.$emit(keyName, {})
+        }, 0)
+      }
+    }
+    document.addEventListener('keyup', listener)
+    this.$once('hook:beforeDestroy', () => {
+      document.removeEventListener('keyup', listener)
+    })
+  },
+	render: () => {}
+}
+// #endif

+ 28 - 16
uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue

@@ -77,14 +77,21 @@
 				</view>
 			</view>
 		</view>
+		<!-- #ifdef H5 -->
+		<!-- <keypress v-if="visible" @esc="tiggerTimePicker" @enter="setTime" /> -->
+		<!-- #endif -->
 	</view>
 </template>
 
 <script>
-	import { initVueI18n } from '@dcloudio/uni-i18n'
-	import i18nMessages from './i18n/index.js'
-	const {	t	} = initVueI18n(i18nMessages)
-  import { fixIosDateFormat } from './util'
+	// #ifdef H5
+	import keypress from './keypress'
+	// #endif
+	import {
+		initVueI18n
+	} from '@dcloudio/uni-i18n'
+	import messages from './i18n/index.js'
+	const {	t	} = initVueI18n(messages)
 
 	/**
 	 * DatetimePicker 时间选择器
@@ -101,6 +108,11 @@
 
 	export default {
 		name: 'UniDatetimePicker',
+		components: {
+			// #ifdef H5
+			keypress
+			// #endif
+		},
 		data() {
 			return {
 				indicatorStyle: `height: 50px;`,
@@ -175,12 +187,12 @@
 		watch: {
 			// #ifndef VUE3
 			value: {
-				handler(newVal) {
-          if (newVal) {
-            this.parseValue(fixIosDateFormat(newVal))
+				handler(newVal, oldVal) {
+					if (newVal) {
+						this.parseValue(this.fixIosDateFormat(newVal)) //兼容 iOS、safari 日期格式
 						this.initTime(false)
 					} else {
-            this.time = ''
+						this.time = ''
 						this.parseValue(Date.now())
 					}
 				},
@@ -189,9 +201,9 @@
 			// #endif
 			// #ifdef VUE3
 			modelValue: {
-        handler(newVal) {
-          if (newVal) {
-						this.parseValue(fixIosDateFormat(newVal))
+				handler(newVal, oldVal) {
+					if (newVal) {
+						this.parseValue(this.fixIosDateFormat(newVal)) //兼容 iOS、safari 日期格式
 						this.initTime(false)
 					} else {
 						this.time = ''
@@ -221,13 +233,13 @@
 			},
 			start: {
 				handler(newVal) {
-					this.parseDatetimeRange(fixIosDateFormat(newVal), 'start')
+					this.parseDatetimeRange(this.fixIosDateFormat(newVal), 'start') //兼容 iOS、safari 日期格式
 				},
 				immediate: true
 			},
 			end: {
 				handler(newVal) {
-					this.parseDatetimeRange(fixIosDateFormat(newVal), 'end')
+					this.parseDatetimeRange(this.fixIosDateFormat(newVal), 'end') //兼容 iOS、safari 日期格式
 				},
 				immediate: true
 			},
@@ -531,7 +543,7 @@
 					const day = now.getDate()
 					dateBase = year + '/' + month + '/' + day + ' '
 				}
-				if (Number(value)) {
+				if (Number(value) && typeof value !== NaN) {
 					value = parseInt(value)
 					dateBase = 0
 				}
@@ -602,7 +614,7 @@
 						pointType === 'start' ? this.startYear = this.year - 60 : this.endYear = this.year + 60
 						return
 					}
-					if (Number(point)) {
+					if (Number(point) && Number(point) !== NaN) {
 						point = parseInt(point)
 					}
 					// datetime 的 end 没有时分秒, 则不限制
@@ -740,7 +752,7 @@
 			 */
 			initTimePicker() {
 				if (this.disabled) return
-				const value = fixIosDateFormat(this.time)
+				const value = this.fixIosDateFormat(this.value)
 				this.initPickerValue(value)
 				this.visible = !this.visible
 			},

File diff suppressed because it is too large
+ 301 - 337
uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue


+ 195 - 238
uni_merchants_enter/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js

@@ -1,24 +1,27 @@
 class Calendar {
 	constructor({
+		date,
 		selected,
 		startDate,
 		endDate,
 		range,
+		// multipleStatus
 	} = {}) {
 		// 当前日期
-		this.date = this.getDateObj(new Date()) // 当前初入日期
+		this.date = this.getDate(new Date()) // 当前初入日期
 		// 打点信息
 		this.selected = selected || [];
-		// 起始时间
+		// 范围开始
 		this.startDate = startDate
-		// 终止时间
+		// 范围结束
 		this.endDate = endDate
-    // 是否范围选择
 		this.range = range
 		// 多选状态
 		this.cleanMultipleStatus()
 		// 每周日期
 		this.weeks = {}
+		// this._getWeek(this.date.fullDate)
+		// this.multipleStatus = multipleStatus
 		this.lastHover = false
 	}
 	/**
@@ -26,8 +29,8 @@ class Calendar {
 	 * @param {Object} date
 	 */
 	setDate(date) {
-		const selectDate = this.getDateObj(date)
-		this.getWeeks(selectDate.fullDate)
+		this.selectDate = this.getDate(date)
+		this._getWeek(this.selectDate.fullDate)
 	}
 
 	/**
@@ -41,107 +44,93 @@ class Calendar {
 		}
 	}
 
-	setStartDate(startDate) {
+	/**
+	 * 重置开始日期
+	 */
+	resetSatrtDate(startDate) {
+		// 范围开始
 		this.startDate = startDate
+
 	}
 
-	setEndDate(endDate) {
+	/**
+	 * 重置结束日期
+	 */
+	resetEndDate(endDate) {
+		// 范围结束
 		this.endDate = endDate
 	}
 
-  getPreMonthObj(date){
-    date = fixIosDateFormat(date)
-    date = new Date(date)
-
-    const oldMonth = date.getMonth()
-    date.setMonth(oldMonth - 1)
-    const newMonth = date.getMonth()
-    if(oldMonth !== 0 && newMonth - oldMonth === 0){
-      date.setMonth(newMonth - 1)
-    }
-    return this.getDateObj(date)
-  }
-  getNextMonthObj(date){
-    date = fixIosDateFormat(date)
-    date = new Date(date)
-
-    const oldMonth = date.getMonth()
-    date.setMonth(oldMonth + 1)
-    const newMonth = date.getMonth()
-    if(newMonth - oldMonth > 1){
-      date.setMonth(newMonth - 1)
-    }
-    return this.getDateObj(date)
-  }
-
 	/**
-	 * 获取指定格式Date对象
+	 * 获取任意时间
 	 */
-	getDateObj(date) {
-    date = fixIosDateFormat(date)
-    date = new Date(date)
-
+	getDate(date, AddDayCount = 0, str = 'day') {
+		if (!date) {
+			date = new Date()
+		}
+		if (typeof date !== 'object') {
+			date = date.replace(/-/g, '/')
+		}
+		const dd = new Date(date)
+		switch (str) {
+			case 'day':
+				dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期
+				break
+			case 'month':
+				if (dd.getDate() === 31) {
+					dd.setDate(dd.getDate() + AddDayCount)
+				} else {
+					dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期
+				}
+				break
+			case 'year':
+				dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期
+				break
+		}
+		const y = dd.getFullYear()
+		const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0
+		const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0
 		return {
-			fullDate: getDate(date),
-      year: date.getFullYear(),
-      month: addZero(date.getMonth() + 1),
-      date: addZero(date.getDate()),
-      day: date.getDay()
+			fullDate: y + '-' + m + '-' + d,
+			year: y,
+			month: m,
+			date: d,
+			day: dd.getDay()
 		}
 	}
 
+
 	/**
-	 * 获取上一个月日期集合
+	 * 获取上月剩余天数
 	 */
-	getPreMonthDays(amount, dateObj) {
-		const result = []
-		for (let i = amount - 1; i >= 0; i--) {
-      const month = dateObj.month > 1 ? dateObj.month -1 : 12
-			const year = month === 12 ? dateObj.year - 1 : dateObj.year
-			const date = new Date(year,month,-i).getDate()
-			const fullDate = `${year}-${addZero(month)}-${addZero(date)}`
-			let multiples = this.multipleStatus.data
-			let multiplesStatus = -1
-			if (this.range && multiples) {
-			  multiplesStatus = multiples.findIndex((item) => {
-			    return this.dateEqual(item, fullDate)
-			  })
-			}
-			const checked = multiplesStatus !== -1
-			// 获取打点信息
-			const extraInfo = this.selected && this.selected.find((item) => {
-				if (this.dateEqual(fullDate, item.date)) {
-					return item
-				}
-			})
-			result.push({
-				fullDate,
-				year,
-				month,
-				date,
-				multiple: this.range ? checked : false,
-				beforeMultiple: this.isLogicBefore(fullDate, this.multipleStatus.before, this.multipleStatus.after),
-				afterMultiple: this.isLogicAfter(fullDate, this.multipleStatus.before, this.multipleStatus.after),
-				disable: (this.startDate && !dateCompare(this.startDate, fullDate)) || (this.endDate && !dateCompare(fullDate,this.endDate)),
-				isToday: fullDate === this.date.fullDate,
-				userChecked: false,
-				extraInfo
+	_getLastMonthDays(firstDay, full) {
+		let dateArr = []
+		for (let i = firstDay; i > 0; i--) {
+			const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate()
+			dateArr.push({
+				date: beforeDate,
+				month: full.month - 1,
+				disable: true
 			})
 		}
-		return result
+		return dateArr
 	}
 	/**
-	 * 获取本月日期集合
+	 * 获取本月天数
 	 */
-	getCurrentMonthDays(amount, dateObj) {
-		const result = []
-		const fullDate = this.date.fullDate
-		for (let i = 1; i <= amount; i++) {
-			const currentDate = `${dateObj.year}-${dateObj.month}-${addZero(i)}`
-			const isToday = fullDate === currentDate
+	_currentMonthDys(dateData, full) {
+		let dateArr = []
+		let fullDate = this.date.fullDate
+		for (let i = 1; i <= dateData; i++) {
+			let isinfo = false
+			let nowDate = full.year + '-' + (full.month < 10 ?
+				full.month : full.month) + '-' + (i < 10 ?
+				'0' + i : i)
+			// 是否今天
+			let isDay = fullDate === nowDate
 			// 获取打点信息
-			const extraInfo = this.selected && this.selected.find((item) => {
-				if (this.dateEqual(currentDate, item.date)) {
+			let info = this.selected && this.selected.find((item) => {
+				if (this.dateEqual(nowDate, item.date)) {
 					return item
 				}
 			})
@@ -150,77 +139,62 @@ class Calendar {
 			let disableBefore = true
 			let disableAfter = true
 			if (this.startDate) {
-				disableBefore = dateCompare(this.startDate, currentDate)
+				// let dateCompBefore = this.dateCompare(this.startDate, fullDate)
+				// disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate)
+				disableBefore = this.dateCompare(this.startDate, nowDate)
 			}
 
 			if (this.endDate) {
-				disableAfter = dateCompare(currentDate, this.endDate)
+				// let dateCompAfter = this.dateCompare(fullDate, this.endDate)
+				// disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate)
+				disableAfter = this.dateCompare(nowDate, this.endDate)
 			}
-
 			let multiples = this.multipleStatus.data
+			let checked = false
 			let multiplesStatus = -1
-			if (this.range && multiples) {
-        multiplesStatus = multiples.findIndex((item) => {
-          return this.dateEqual(item, currentDate)
-        })
+			if (this.range) {
+				if (multiples) {
+					multiplesStatus = multiples.findIndex((item) => {
+						return this.dateEqual(item, nowDate)
+					})
+				}
+				if (multiplesStatus !== -1) {
+					checked = true
+				}
 			}
-      const checked = multiplesStatus !== -1
-
-			result.push({
-				fullDate: currentDate,
-				year: dateObj.year,
-				month: dateObj.month,
+			let data = {
+				fullDate: nowDate,
+				year: full.year,
 				date: i,
 				multiple: this.range ? checked : false,
-				beforeMultiple: this.isLogicBefore(currentDate, this.multipleStatus.before, this.multipleStatus.after),
-				afterMultiple: this.isLogicAfter(currentDate, this.multipleStatus.before, this.multipleStatus.after),
-				disable: (this.startDate && !dateCompare(this.startDate, currentDate)) || (this.endDate && !dateCompare(currentDate,this.endDate)),
-				isToday,
-				userChecked: false,
-        extraInfo
-			})
+				beforeMultiple: this.isLogicBefore(nowDate, this.multipleStatus.before, this.multipleStatus.after),
+				afterMultiple: this.isLogicAfter(nowDate, this.multipleStatus.before, this.multipleStatus.after),
+				month: full.month,
+				disable: !(disableBefore && disableAfter),
+				isDay,
+				userChecked: false
+			}
+			if (info) {
+				data.extraInfo = info
+			}
+
+			dateArr.push(data)
 		}
-		return result
+		return dateArr
 	}
 	/**
-	 * 获取下一个月日期集合
+	 * 获取下月天数
 	 */
-	_getNextMonthDays(amount, dateObj) {
-		const result = []
-    const month = dateObj.month + 1
-		for (let i = 1; i <= amount; i++) {
-			const month = dateObj.month === 12 ? 1 : dateObj.month*1 + 1
-			const year = month === 1 ? dateObj.year + 1 : dateObj.year
-			const fullDate = `${year}-${addZero(month)}-${addZero(i)}`
-			let multiples = this.multipleStatus.data
-			let multiplesStatus = -1
-			if (this.range && multiples) {
-			  multiplesStatus = multiples.findIndex((item) => {
-			    return this.dateEqual(item, fullDate)
-			  })
-			}
-			const checked = multiplesStatus !== -1
-			// 获取打点信息
-			const extraInfo = this.selected && this.selected.find((item) => {
-				if (this.dateEqual(fullDate, item.date)) {
-					return item
-				}
-			})
-			result.push({
-				fullDate,
-				year,
+	_getNextMonthDays(surplus, full) {
+		let dateArr = []
+		for (let i = 1; i < surplus + 1; i++) {
+			dateArr.push({
 				date: i,
-				month,
-				multiple: this.range ? checked : false,
-				beforeMultiple: this.isLogicBefore(fullDate, this.multipleStatus.before, this.multipleStatus.after),
-				afterMultiple: this.isLogicAfter(fullDate, this.multipleStatus.before, this.multipleStatus.after),
-				disable: (this.startDate && !dateCompare(this.startDate, fullDate)) || (this.endDate && !dateCompare(fullDate,this.endDate)),
-				isToday: fullDate === this.date.fullDate,
-				userChecked: false,
-				extraInfo
+				month: Number(full.month) + 1,
+				disable: true
 			})
 		}
-		return result
+		return dateArr
 	}
 
 	/**
@@ -231,37 +205,58 @@ class Calendar {
 		if (!date) {
 			date = new Date()
 		}
+		const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate)
+		return dateInfo
+	}
 
-		return this.calendar.find(item => item.fullDate === this.getDateObj(date).fullDate)
+	/**
+	 * 比较时间大小
+	 */
+	dateCompare(startDate, endDate) {
+		// 计算截止时间
+		startDate = new Date(startDate.replace('-', '/').replace('-', '/'))
+		// 计算详细项的截止时间
+		endDate = new Date(endDate.replace('-', '/').replace('-', '/'))
+		if (startDate <= endDate) {
+			return true
+		} else {
+			return false
+		}
 	}
 
 	/**
 	 * 比较时间是否相等
 	 */
 	dateEqual(before, after) {
-		before = new Date(fixIosDateFormat(before))
-		after = new Date(fixIosDateFormat(after))
-		return before.valueOf() === after.valueOf()
+		// 计算截止时间
+		before = new Date(before.replace('-', '/').replace('-', '/'))
+		// 计算详细项的截止时间
+		after = new Date(after.replace('-', '/').replace('-', '/'))
+		if (before.getTime() - after.getTime() === 0) {
+			return true
+		} else {
+			return false
+		}
 	}
 
 	/**
 	 *  比较真实起始日期
 	 */
 
-	isLogicBefore(currentDate, before, after) {
+	isLogicBefore(currentDay, before, after) {
 		let logicBefore = before
 		if (before && after) {
-			logicBefore = dateCompare(before, after) ? before : after
+			logicBefore = this.dateCompare(before, after) ? before : after
 		}
-		return this.dateEqual(logicBefore, currentDate)
+		return this.dateEqual(logicBefore, currentDay)
 	}
 
-	isLogicAfter(currentDate, before, after) {
+	isLogicAfter(currentDay, before, after) {
 		let logicAfter = after
 		if (before && after) {
-			logicAfter = dateCompare(before, after) ? after : before
+			logicAfter = this.dateCompare(before, after) ? after : before
 		}
-		return this.dateEqual(logicAfter, currentDate)
+		return this.dateEqual(logicAfter, currentDay)
 	}
 
 	/**
@@ -281,7 +276,7 @@ class Calendar {
 		var unixDe = de.getTime() - 24 * 60 * 60 * 1000
 		for (var k = unixDb; k <= unixDe;) {
 			k = k + 24 * 60 * 60 * 1000
-			arr.push(this.getDateObj(new Date(parseInt(k))).fullDate)
+			arr.push(this.getDate(new Date(parseInt(k))).fullDate)
 		}
 		return arr
 	}
@@ -290,12 +285,11 @@ class Calendar {
 	 *  获取多选状态
 	 */
 	setMultiple(fullDate) {
-    if (!this.range) return
-
 		let {
 			before,
 			after
 		} = this.multipleStatus
+		if (!this.range) return
 		if (before && after) {
 			if (!this.lastHover) {
 				this.lastHover = true
@@ -312,7 +306,7 @@ class Calendar {
 				this.lastHover = false
 			} else {
 				this.multipleStatus.after = fullDate
-				if (dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
+				if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
 					this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus
 						.after);
 				} else {
@@ -322,28 +316,32 @@ class Calendar {
 				this.lastHover = true
 			}
 		}
-		this.getWeeks(fullDate)
+		this._getWeek(fullDate)
 	}
 
 	/**
 	 *  鼠标 hover 更新多选状态
 	 */
 	setHoverMultiple(fullDate) {
-    if (!this.range || this.lastHover) return
+		let {
+			before,
+			after
+		} = this.multipleStatus
 
-		const { before } = this.multipleStatus
+		if (!this.range) return
+		if (this.lastHover) return
 
 		if (!before) {
 			this.multipleStatus.before = fullDate
 		} else {
 			this.multipleStatus.after = fullDate
-			if (dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
+			if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) {
 				this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after);
 			} else {
 				this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before);
 			}
 		}
-		this.getWeeks(fullDate)
+		this._getWeek(fullDate)
 	}
 
 	/**
@@ -353,12 +351,12 @@ class Calendar {
 		this.multipleStatus.before = before
 		this.multipleStatus.after = after
 		if (before && after) {
-			if (dateCompare(before, after)) {
+			if (this.dateCompare(before, after)) {
 				this.multipleStatus.data = this.geDateAll(before, after);
-				this.getWeeks(after)
+				this._getWeek(after)
 			} else {
 				this.multipleStatus.data = this.geDateAll(after, before);
-				this.getWeeks(before)
+				this._getWeek(before)
 			}
 		}
 	}
@@ -367,87 +365,46 @@ class Calendar {
 	 * 获取每周数据
 	 * @param {Object} dateData
 	 */
-	getWeeks(dateData) {
+	_getWeek(dateData) {
 		const {
+			fullDate,
 			year,
 			month,
-		} = this.getDateObj(dateData)
-
-		const preMonthDayAmount = new Date(year, month - 1, 1).getDay()
-    const preMonthDays = this.getPreMonthDays(preMonthDayAmount, this.getDateObj(dateData))
-
-		const currentMonthDayAmount = new Date(year, month, 0).getDate()
-    const currentMonthDays = this.getCurrentMonthDays(currentMonthDayAmount, this.getDateObj(dateData))
-
-    const nextMonthDayAmount = 42 - preMonthDayAmount - currentMonthDayAmount
-    const nextMonthDays = this._getNextMonthDays(nextMonthDayAmount, this.getDateObj(dateData))
-
-		const calendarDays = [...preMonthDays, ...currentMonthDays, ...nextMonthDays]
-
-		const weeks = new Array(6)
-		for (let i = 0; i < calendarDays.length; i++) {
-      const index = Math.floor(i / 7)
-      if(!weeks[index]){
-        weeks[index] = new Array(7)
-      }
-			weeks[index][i % 7] = calendarDays[i]
+			date,
+			day
+		} = this.getDate(dateData)
+		let firstDay = new Date(year, month - 1, 1).getDay()
+		let currentDay = new Date(year, month, 0).getDate()
+		let dates = {
+			lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天
+			currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数
+			nextMonthDays: [], // 下个月开始几天
+			weeks: []
 		}
-
-		this.calendar = calendarDays
+		let canlender = []
+		const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length)
+		dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData))
+		canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays)
+		let weeks = {}
+		// 拼接数组  上个月开始几天 + 本月天数+ 下个月开始几天
+		for (let i = 0; i < canlender.length; i++) {
+			if (i % 7 === 0) {
+				weeks[parseInt(i / 7)] = new Array(7)
+			}
+			weeks[parseInt(i / 7)][i % 7] = canlender[i]
+		}
+		this.canlender = canlender
 		this.weeks = weeks
 	}
-}
-
-function getDateTime(date, hideSecond){
-  return `${getDate(date)} ${getTime(date, hideSecond)}`
-}
-
-function getDate(date) {
-  date = fixIosDateFormat(date)
-  date = new Date(date)
-  const year = date.getFullYear()
-  const month = date.getMonth()+1
-  const day = date.getDate()
-  return `${year}-${addZero(month)}-${addZero(day)}`
-}
 
-function getTime(date, hideSecond){
-  date = fixIosDateFormat(date)
-  date = new Date(date)
-  const hour = date.getHours()
-  const minute = date.getMinutes()
-  const second = date.getSeconds()
-  return hideSecond ? `${addZero(hour)}:${addZero(minute)}` : `${addZero(hour)}:${addZero(minute)}:${addZero(second)}`
+	//静态方法
+	// static init(date) {
+	// 	if (!this.instance) {
+	// 		this.instance = new Calendar(date);
+	// 	}
+	// 	return this.instance;
+	// }
 }
 
-function addZero(num) {
-  if(num < 10){
-    num = `0${num}`
-  }
-  return num
-}
-
-function getDefaultSecond(hideSecond) {
-  return hideSecond ? '00:00' : '00:00:00'
-}
-
-function dateCompare(startDate, endDate) {
-  startDate = new Date(fixIosDateFormat(startDate))
-  endDate = new Date(fixIosDateFormat(endDate))
-  return startDate <= endDate
-}
-
-function checkDate(date){
-  const dateReg = /((19|20)\d{2})(-|\/)\d{1,2}(-|\/)\d{1,2}/g
-  return date.match(dateReg)
-}
-
-const dateTimeReg = /^\d{4}-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01])( [0-5]?[0-9]:[0-5]?[0-9]:[0-5]?[0-9])?$/
-function fixIosDateFormat(value) {
-  if (typeof value === 'string' && dateTimeReg.test(value)) {
-    value = value.replace(/-/g, '/')
-  }
-  return value
-}
 
-export {Calendar, getDateTime, getDate, getTime, addZero, getDefaultSecond, dateCompare, checkDate, fixIosDateFormat}
+export default Calendar

+ 1 - 1
uni_merchants_enter/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue

@@ -105,7 +105,7 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 	$uni-mask: rgba($color: #000000, $alpha: 0.4) ;
 	// 抽屉宽度
 	$drawer-width: 220px;

+ 1 - 12
uni_merchants_enter/uni_modules/uni-easyinput/changelog.md

@@ -1,21 +1,10 @@
-## 1.1.9(2023-04-11)
-- 修复 vue3 下 keyboardheightchange 事件报错的bug
-## 1.1.8(2023-03-29)
-- 优化 trim 属性默认值
-## 1.1.7(2023-03-29)
-- 新增 cursor-spacing 属性
-## 1.1.6(2023-01-28)
-- 新增 keyboardheightchange 事件,可监听键盘高度变化
-## 1.1.5(2022-11-29)
-- 优化 主题样式
-## 1.1.4(2022-10-27)
-- 修复 props 中背景颜色无默认值的bug
 ## 1.1.0(2022-06-30)
 
 - 新增 在 uni-forms 1.4.0 中使用可以在 blur 时校验内容
 - 新增 clear 事件,点击右侧叉号图标触发
 - 新增 change 事件 ,仅在输入框失去焦点或用户按下回车时触发
 - 优化 组件样式,组件获取焦点时高亮显示,图标颜色调整等
+-
 
 ## 1.0.5(2022-06-07)
 

+ 137 - 115
uni_merchants_enter/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue

@@ -1,7 +1,24 @@
 <template>
-	<view class="uni-easyinput" :class="{ 'uni-easyinput-error': msg }" :style="boxStyle">
-		<view class="uni-easyinput__content" :class="inputContentClass" :style="inputContentStyle">
-			<uni-icons v-if="prefixIcon" class="content-clear-icon" :type="prefixIcon" color="#c0c4cc" @click="onClickIcon('prefix')" size="22"></uni-icons>
+	<view
+		class="uni-easyinput"
+		:class="{ 'uni-easyinput-error': msg }"
+		:style="boxStyle"
+	>
+		<view
+			class="uni-easyinput__content"
+			:class="inputContentClass"
+			:style="inputContentStyle"
+		>
+			<slot name="prefixIcon">
+				<uni-icons
+					v-if="prefixIcon"
+					class="content-clear-icon"
+					:type="prefixIcon"
+					color="#c0c4cc"
+					@click="onClickIcon('prefix')"
+					size="22"
+				></uni-icons>
+			</slot>
 			<textarea
 				v-if="type === 'textarea'"
 				class="uni-easyinput__content-textarea"
@@ -15,12 +32,10 @@
 				:maxlength="inputMaxlength"
 				:focus="focused"
 				:autoHeight="autoHeight"
-				:cursor-spacing="cursorSpacing"
 				@input="onInput"
 				@blur="_Blur"
 				@focus="_Focus"
 				@confirm="onConfirm"
-        @keyboardheightchange="onkeyboardheightchange"
 			></textarea>
 			<input
 				v-else
@@ -37,12 +52,10 @@
 				:maxlength="inputMaxlength"
 				:focus="focused"
 				:confirmType="confirmType"
-				:cursor-spacing="cursorSpacing"
 				@focus="_Focus"
 				@blur="_Blur"
 				@input="onInput"
 				@confirm="onConfirm"
-        @keyboardheightchange="onkeyboardheightchange"
 			/>
 			<template v-if="type === 'password' && passwordIcon">
 				<!-- 开启密码时显示小眼睛 -->
@@ -54,10 +67,20 @@
 					:size="22"
 					:color="focusShow ? primaryColor : '#c0c4cc'"
 					@click="onEyes"
-				></uni-icons>
+				>
+				</uni-icons>
 			</template>
-			<template v-else-if="suffixIcon">
-				<uni-icons v-if="suffixIcon" class="content-clear-icon" :type="suffixIcon" color="#c0c4cc" @click="onClickIcon('suffix')" size="22"></uni-icons>
+			<template v-else-if="suffixIcon || $slots.suffixIcon">
+				<slot name="suffixIcon">
+					<uni-icons
+						v-if="suffixIcon"
+						class="content-clear-icon"
+						:type="suffixIcon"
+						color="#c0c4cc"
+						@click="onClickIcon('suffix')"
+						size="22"
+					></uni-icons>
+				</slot>
 			</template>
 			<template v-else>
 				<uni-icons
@@ -101,7 +124,6 @@
  * @property {String}	suffixIcon	输入框尾部图标
  * @property {String}	primaryColor	设置主题色(默认#2979ff)
  * @property {Boolean}	trim	是否自动去除两端的空格
- * @property {Boolean}	cursorSpacing	指定光标与键盘的距离,单位 px
  * @value both	去除两端空格
  * @value left	去除左侧空格
  * @value right	去除右侧空格
@@ -117,10 +139,12 @@
  * @event {Function}	blur	输入框失去焦点时触发
  * @event {Function}	confirm	点击完成按钮时触发
  * @event {Function}	iconClick	点击图标时触发
+ * @slot prefixIcon 输入框头部插槽
+ * @slot suffixIcon 输入框尾部插槽
  * @example <uni-easyinput v-model="mobile"></uni-easyinput>
  */
 function obj2strClass(obj) {
-	let classess = '';
+	let classess = "";
 	for (let key in obj) {
 		const val = obj[key];
 		if (val) {
@@ -131,7 +155,7 @@ function obj2strClass(obj) {
 }
 
 function obj2strStyle(obj) {
-	let style = '';
+	let style = "";
 	for (let key in obj) {
 		const val = obj[key];
 		style += `${key}:${val};`;
@@ -139,24 +163,35 @@ function obj2strStyle(obj) {
 	return style;
 }
 export default {
-	name: 'uni-easyinput',
-	emits: ['click', 'iconClick', 'update:modelValue', 'input', 'focus', 'blur', 'confirm', 'clear', 'eyes', 'change', 'keyboardheightchange'],
+	name: "uni-easyinput",
+	emits: [
+		"click",
+		"iconClick",
+		"update:modelValue",
+		"input",
+		"focus",
+		"blur",
+		"confirm",
+		"clear",
+		"eyes",
+		"change",
+	],
 	model: {
-		prop: 'modelValue',
-		event: 'update:modelValue'
+		prop: "modelValue",
+		event: "update:modelValue",
 	},
 	options: {
-		virtualHost: true
+		virtualHost: true,
 	},
 	inject: {
 		form: {
-			from: 'uniForm',
-			default: null
+			from: "uniForm",
+			default: null,
 		},
 		formItem: {
-			from: 'uniFormItem',
-			default: null
-		}
+			from: "uniFormItem",
+			default: null,
+		},
 	},
 	props: {
 		name: String,
@@ -164,97 +199,91 @@ export default {
 		modelValue: [Number, String],
 		type: {
 			type: String,
-			default: 'text'
+			default: "text",
 		},
 		clearable: {
 			type: Boolean,
-			default: true
+			default: true,
 		},
 		autoHeight: {
 			type: Boolean,
-			default: false
+			default: false,
 		},
 		placeholder: {
 			type: String,
-			default: ' '
+			default: " ",
 		},
 		placeholderStyle: String,
 		focus: {
 			type: Boolean,
-			default: false
+			default: false,
 		},
 		disabled: {
 			type: Boolean,
-			default: false
+			default: false,
 		},
 		maxlength: {
 			type: [Number, String],
-			default: 140
+			default: 140,
 		},
 		confirmType: {
 			type: String,
-			default: 'done'
+			default: "done",
 		},
 		clearSize: {
 			type: [Number, String],
-			default: 24
+			default: 24,
 		},
 		inputBorder: {
 			type: Boolean,
-			default: true
+			default: true,
 		},
 		prefixIcon: {
 			type: String,
-			default: ''
+			default: "",
 		},
 		suffixIcon: {
 			type: String,
-			default: ''
+			default: "",
 		},
 		trim: {
 			type: [Boolean, String],
-			default: false
-		},
-		cursorSpacing: {
-			type: Number,
-			default: 0
+			default: true,
 		},
 		passwordIcon: {
 			type: Boolean,
-			default: true
+			default: true,
 		},
 		primaryColor: {
 			type: String,
-			default: '#2979ff'
+			default: "#2979ff",
 		},
 		styles: {
 			type: Object,
 			default() {
 				return {
-					color: '#333',
-					backgroundColor: '#fff',
-					disableColor: '#F7F6F6',
-					borderColor: '#e5e5e5'
+					color: "#333",
+					disableColor: "#F7F6F6",
+					borderColor: "#e5e5e5",
 				};
-			}
+			},
 		},
 		errorMessage: {
 			type: [String, Boolean],
-			default: ''
-		}
+			default: "",
+		},
 	},
 	data() {
 		return {
 			focused: false,
-			val: '',
-			showMsg: '',
+			val: "",
+			showMsg: "",
 			border: false,
 			isFirstBorder: false,
 			showClearIcon: false,
 			showPassword: false,
 			focusShow: false,
-			localMsg: '',
-			isEnter: false // 用于判断当前是否是使用回车操作
+			localMsg: "",
 		};
 	},
 	computed: {
@@ -283,34 +312,42 @@ export default {
 
 		// 处理外层样式的style
 		boxStyle() {
-			return `color:${this.inputBorder && this.msg ? '#e43d33' : this.styles.color};`;
+			return `color:${
+				this.inputBorder && this.msg ? "#e43d33" : this.styles.color
+			};`;
 		},
 		// input 内容的类和样式处理
 		inputContentClass() {
 			return obj2strClass({
-				'is-input-border': this.inputBorder,
-				'is-input-error-border': this.inputBorder && this.msg,
-				'is-textarea': this.type === 'textarea',
-				'is-disabled': this.disabled,
-				'is-focused': this.focusShow
+				"is-input-border": this.inputBorder,
+				"is-input-error-border": this.inputBorder && this.msg,
+				"is-textarea": this.type === "textarea",
+				"is-disabled": this.disabled,
 			});
 		},
 		inputContentStyle() {
-			const focusColor = this.focusShow ? this.primaryColor : this.styles.borderColor;
-			const borderColor = this.inputBorder && this.msg ? '#dd524d' : focusColor;
+			const focusColor = this.focusShow
+				? this.primaryColor
+				: this.styles.borderColor;
+			const borderColor = this.inputBorder && this.msg ? "#dd524d" : focusColor;
 			return obj2strStyle({
-				'border-color': borderColor || '#e5e5e5',
-				'background-color': this.disabled ? this.styles.disableColor : this.styles.backgroundColor
+				"border-color": borderColor || "#e5e5e5",
+				"background-color": this.disabled
+					? this.styles.disableColor
+					: this.styles.backgroundColor,
 			});
 		},
 		// input右侧样式
 		inputStyle() {
-			const paddingRight = this.type === 'password' || this.clearable || this.prefixIcon ? '' : '10px';
+			const paddingRight =
+				this.type === "password" || this.clearable || this.prefixIcon
+					? ""
+					: "10px";
 			return obj2strStyle({
-				'padding-right': paddingRight,
-				'padding-left': this.prefixIcon ? '' : '10px'
+				"padding-right": paddingRight,
+				"padding-left": this.prefixIcon ? "" : "10px",
 			});
-		}
+		},
 	},
 	watch: {
 		value(newVal) {
@@ -324,13 +361,13 @@ export default {
 				this.focused = this.focus;
 				this.focusShow = this.focus;
 			});
-		}
+		},
 	},
 	created() {
 		this.init();
 		// TODO 处理头条vue3 computed 不监听 inject 更改的问题(formItem.errMsg)
 		if (this.form && this.formItem) {
-			this.$watch('formItem.errMsg', newVal => {
+			this.$watch("formItem.errMsg", (newVal) => {
 				this.localMsg = newVal;
 			});
 		}
@@ -348,7 +385,7 @@ export default {
 		init() {
 			if (this.value || this.value === 0) {
 				this.val = this.value;
-			} else if (this.modelValue || this.modelValue === 0 || this.modelValue === '') {
+			} else if (this.modelValue || this.modelValue === 0) {
 				this.val = this.modelValue;
 			} else {
 				this.val = null;
@@ -360,7 +397,7 @@ export default {
 		 * @param {Object} type
 		 */
 		onClickIcon(type) {
-			this.$emit('iconClick', type);
+			this.$emit("iconClick", type);
 		},
 
 		/**
@@ -368,7 +405,7 @@ export default {
 		 */
 		onEyes() {
 			this.showPassword = !this.showPassword;
-			this.$emit('eyes', this.showPassword);
+			this.$emit("eyes", this.showPassword);
 		},
 
 		/**
@@ -379,19 +416,19 @@ export default {
 			let value = event.detail.value;
 			// 判断是否去除空格
 			if (this.trim) {
-				if (typeof this.trim === 'boolean' && this.trim) {
+				if (typeof this.trim === "boolean" && this.trim) {
 					value = this.trimStr(value);
 				}
-				if (typeof this.trim === 'string') {
+				if (typeof this.trim === "string") {
 					value = this.trimStr(value, this.trim);
 				}
 			}
-			if (this.errMsg) this.errMsg = '';
+			if (this.errMsg) this.errMsg = "";
 			this.val = value;
 			// TODO 兼容 vue2
-			this.$emit('input', value);
+			this.$emit("input", value);
 			// TODO 兼容 vue3
-			this.$emit('update:modelValue', value);
+			this.$emit("update:modelValue", value);
 		},
 
 		/**
@@ -403,12 +440,12 @@ export default {
 			this.$nextTick(() => {
 				this.focused = true;
 			});
-			this.$emit('focus', null);
+			this.$emit("focus", null);
 		},
 
 		_Focus(event) {
 			this.focusShow = true;
-			this.$emit('focus', event);
+			this.$emit("focus", event);
 		},
 
 		/**
@@ -418,20 +455,18 @@ export default {
 		 */
 		onBlur() {
 			this.focused = false;
-			this.$emit('focus', null);
+			this.$emit("focus", null);
 		},
 		_Blur(event) {
 			let value = event.detail.value;
 			this.focusShow = false;
-			this.$emit('blur', event);
+			this.$emit("blur", event);
 			// 根据类型返回值,在event中获取的值理论上讲都是string
-			if (this.isEnter === false) {
-				this.$emit('change', this.val);
-			}
+			this.$emit("change", this.val);
 			// 失去焦点时参与表单校验
 			if (this.form && this.formItem) {
 				const { validateTrigger } = this.form;
-				if (validateTrigger === 'blur') {
+				if (validateTrigger === "blur") {
 					this.formItem.onFieldChange();
 				}
 			}
@@ -442,12 +477,8 @@ export default {
 		 * @param {Object} e
 		 */
 		onConfirm(e) {
-			this.$emit('confirm', this.val);
-			this.isEnter = true;
-			this.$emit('change', this.val);
-			this.$nextTick(() => {
-				this.isEnter = false;
-			});
+			this.$emit("confirm", this.val);
+			this.$emit("change", this.val);
 		},
 
 		/**
@@ -455,47 +486,38 @@ export default {
 		 * @param {Object} event
 		 */
 		onClear(event) {
-			this.val = '';
+			this.val = "";
 			// TODO 兼容 vue2
-			this.$emit('input', '');
+			this.$emit("input", "");
 			// TODO 兼容 vue2
 			// TODO 兼容 vue3
-			this.$emit('update:modelValue', '');
+			this.$emit("update:modelValue", "");
 			// 点击叉号触发
-			this.$emit('clear');
+			this.$emit("clear");
 		},
 
-    /**
-     * 键盘高度发生变化的时候触发此事件
-     * 兼容性:微信小程序2.7.0+、App 3.1.0+
-     * @param {Object} event
-     */
-    onkeyboardheightchange(event) {
-      this.$emit("keyboardheightchange",event);
-    },
-
 		/**
 		 * 去除空格
 		 */
-		trimStr(str, pos = 'both') {
-			if (pos === 'both') {
+		trimStr(str, pos = "both") {
+			if (pos === "both") {
 				return str.trim();
-			} else if (pos === 'left') {
+			} else if (pos === "left") {
 				return str.trimLeft();
-			} else if (pos === 'right') {
+			} else if (pos === "right") {
 				return str.trimRight();
-			} else if (pos === 'start') {
+			} else if (pos === "start") {
 				return str.trimStart();
-			} else if (pos === 'end') {
+			} else if (pos === "end") {
 				return str.trimEnd();
-			} else if (pos === 'all') {
-				return str.replace(/\s+/g, '');
-			} else if (pos === 'none') {
+			} else if (pos === "all") {
+				return str.replace(/\s+/g, "");
+			} else if (pos === "none") {
 				return str;
 			}
 			return str;
-		}
-	}
+		},
+	},
 };
 </script>
 

+ 0 - 2
uni_merchants_enter/uni_modules/uni-fab/changelog.md

@@ -1,5 +1,3 @@
-## 1.2.5(2023-03-29)
-- 新增 pattern.icon 属性,可自定义图标
 ## 1.2.4(2022-09-07)
 小程序端由于 style 使用了对象导致报错,[详情](https://ask.dcloud.net.cn/question/152790?item_id=211778&rf=false)
 ## 1.2.3(2022-09-05)

+ 2 - 3
uni_merchants_enter/uni_modules/uni-fab/components/uni-fab/uni-fab.vue

@@ -35,7 +35,7 @@
 		  'uni-fab__circle--rightTop': rightTop,
 		  'uni-fab__content--other-platform': !isAndroidNvue
 		}" class="uni-fab__circle uni-fab__plus" :style="{ 'background-color': styles.buttonColor, 'bottom': nvueBottom }" @click="_onClick">
-			<uni-icons class="fab-circle-icon" :type="styles.icon" :color="styles.iconColor" size="32"
+			<uni-icons class="fab-circle-icon" type="plusempty" :color="styles.iconColor" size="32"
 				:class="{'uni-fab__plus--active': isShow && content.length > 0}"></uni-icons>
 			<!-- <view class="fab-circle-v"  :class="{'uni-fab__plus--active': isShow && content.length > 0}"></view>
 			<view class="fab-circle-h" :class="{'uni-fab__plus--active': isShow  && content.length > 0}"></view> -->
@@ -115,8 +115,7 @@
 					selectedColor: '#007AFF',
 					backgroundColor: '#fff',
 					buttonColor: '#007AFF',
-					iconColor: '#fff',
-					icon: 'plusempty'
+					iconColor: '#fff'
 				}
 			}
 		},

+ 0 - 4
uni_merchants_enter/uni_modules/uni-file-picker/changelog.md

@@ -1,7 +1,3 @@
-## 1.0.4(2023-03-29)
-- 修复 手动上传删除一个文件后不能再上传的bug
-## 1.0.3(2022-12-19)
-- 新增 sourceType 属性, 可以自定义图片和视频选择的来源
 ## 1.0.2(2022-07-04)
 - 修复 在uni-forms下样式不生效的bug
 ## 1.0.1(2021-11-23)

+ 2 - 2
uni_merchants_enter/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js

@@ -7,7 +7,7 @@ function chooseImage(opts) {
 	const {
 		count,
 		sizeType = ['original', 'compressed'],
-		sourceType,
+		sourceType = ['album', 'camera'],
 		extension
 	} = opts
 	return new Promise((resolve, reject) => {
@@ -33,7 +33,7 @@ function chooseVideo(opts) {
 		camera,
 		compressed,
 		maxDuration,
-		sourceType,
+		sourceType = ['album', 'camera'],
 		extension
 	} = opts;
 	return new Promise((resolve, reject) => {

+ 1 - 12
uni_merchants_enter/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue

@@ -185,12 +185,6 @@
 				default () {
 					return ['original', 'compressed']
 				}
-			},
-			sourceType: {
-				type: Array,
-				default () {
-					return  ['album', 'camera']
-				}
 			}
 		},
 		data() {
@@ -355,7 +349,6 @@
 						type: this.fileMediatype,
 						compressed: false,
 						sizeType: this.sizeType,
-						sourceType: this.sourceType,
 						// TODO 如果为空,video 有问题
 						extension: _extname.length > 0 ? _extname : undefined,
 						count: this.limitLength - this.files.length, //默认9
@@ -583,11 +576,7 @@
 						path: v.path,
 						size: v.size,
 						fileID:v.fileID,
-						url: v.url,
-						// 修改删除一个文件后不能再上传的bug, #694
-            uuid: v.uuid,
-            status: v.status,
-            cloudPath: v.cloudPath
+						url: v.url
 					})
 				})
 				return newFilesData

+ 0 - 2
uni_merchants_enter/uni_modules/uni-forms/changelog.md

@@ -1,5 +1,3 @@
-## 1.4.9(2023-02-10)
-- 修复 required 参数无法动态绑定
 ## 1.4.8(2022-08-23)
 - 优化 根据 rules 自动添加 required 的问题
 ## 1.4.7(2022-08-22)

+ 6 - 2
uni_merchants_enter/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue

@@ -2,9 +2,9 @@
 	<view class="uni-forms-item"
 		:class="['is-direction-' + localLabelPos ,border?'uni-forms-item--border':'' ,border && isFirstBorder?'is-first-border':'']">
 		<slot name="label">
-			<view class="uni-forms-item__label" :class="{'no-label':!label && !required}"
+			<view class="uni-forms-item__label" :class="{'no-label':!label && !isRequired}"
 				:style="{width:localLabelWidth,justifyContent: localLabelAlign}">
-				<text v-if="required" class="is-required">*</text>
+				<text v-if="isRequired" class="is-required">*</text>
 				<text>{{label}}</text>
 			</view>
 		</slot>
@@ -126,6 +126,7 @@
 		data() {
 			return {
 				errMsg: '',
+				isRequired: false,
 				userRules: null,
 				localLabelAlign: 'left',
 				localLabelWidth: '65px',
@@ -314,6 +315,7 @@
 				this.localLabelWidth = this._labelWidthUnit(labelWidth)
 				// 标签位置
 				this.localLabelPos = this._labelPosition()
+				this.isRequired = this.required
 				// 将需要校验的子组件加入form 队列
 				this.form && type && childrens.push(this)
 
@@ -349,6 +351,8 @@
 				this.validator = validator
 				// 默认值赋予
 				this.itemSetValue(_getDataValue(this.name, localData))
+				this.isRequired = this._isRequired()
+
 			},
 			unInit() {
 				if (this.form) {

+ 1 - 1
uni_merchants_enter/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue

@@ -68,7 +68,7 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 	.uni-grid-item {
 		/* #ifndef APP-NVUE */
 		height: 100%;

+ 1 - 1
uni_merchants_enter/uni_modules/uni-grid/components/uni-grid/uni-grid.vue

@@ -106,7 +106,7 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 	.uni-grid-wrap {
 		/* #ifndef APP-NVUE */
 		display: flex;

+ 1 - 1
uni_merchants_enter/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue

@@ -53,7 +53,7 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 	.uni-indexed-list__list {
 		background-color: $uni-bg-color;
 		/* #ifndef APP-NVUE */

+ 2 - 2
uni_merchants_enter/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue

@@ -140,7 +140,7 @@
 			setList() {
 				let index = 0;
 				this.lists = []
-				this.options.forEach((value, index) => {
+				this.options.forEach((value) => {
 					if (value.data.length === 0) {
 						return
 					}
@@ -282,7 +282,7 @@
 		}
 	}
 </script>
-<style lang="scss" scoped>
+<style lang="scss" >
 	.uni-indexed-list {
 		position: absolute;
 		left: 0;

+ 0 - 26
uni_merchants_enter/uni_modules/uni-list/changelog.md

@@ -1,29 +1,3 @@
-## 1.2.14(2023-04-14)
-- 优化 uni-list-chat 具名插槽`header` 非app端套一层元素,方便使用时通过外层元素定位实现样式修改
-## 1.2.13(2023-03-03)
-- uni-list-chat 新增 支持具名插槽`header`
-## 1.2.12(2023-02-01)
-- 新增 列表图标新增 customPrefix 属性 ,用法 [详见](https://uniapp.dcloud.net.cn/component/uniui/uni-icons.html#icons-props)
-## 1.2.11(2023-01-31)
-- 修复 无反馈效果呈现的bug
-## 1.2.9(2022-11-22)
-- 修复 uni-list-chat 在vue3下跳转报错的bug
-## 1.2.8(2022-11-21)
-- 修复 uni-list-chat avatar属性 值为本地路径时错误的问题
-## 1.2.7(2022-11-21)
-- 修复 uni-list-chat avatar属性 在腾讯云版uniCloud下错误的问题
-## 1.2.6(2022-11-18)
-- 修复 uni-list-chat note属性 支持:“草稿”字样功能 文本少1位的问题
-## 1.2.5(2022-11-15)
-- 修复 uni-list-item 的 customStyle 属性 padding值在 H5端 无效的bug
-## 1.2.4(2022-11-15)
-- 修复 uni-list-item 的 customStyle 属性 padding值在nvue(vue2)下无效的bug
-## 1.2.3(2022-11-14)
-- uni-list-chat 新增 avatar 支持 fileId
-## 1.2.2(2022-11-11)
-- uni-list 新增属性 render-reverse 详情参考:[https://uniapp.dcloud.net.cn/component/list.html](https://uniapp.dcloud.net.cn/component/list.html)
-- uni-list-chat note属性 支持:“草稿”字样 加红显示 详情参考uni-im:[https://ext.dcloud.net.cn/plugin?name=uni-im](https://ext.dcloud.net.cn/plugin?name=uni-im)
-- uni-list-item 新增属性 customStyle 支持设置padding、backgroundColor
 ## 1.2.1(2022-03-30)
 - 删除无用文件
 ## 1.2.0(2021-11-23)

+ 7 - 62
uni_merchants_enter/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue

@@ -7,7 +7,7 @@
 			<view class="uni-list-chat__container">
 				<view class="uni-list-chat__header-warp">
 					<view v-if="avatarCircle || avatarList.length === 0" class="uni-list-chat__header" :class="{ 'header--circle': avatarCircle }">
-						<image class="uni-list-chat__header-image" :class="{ 'header--circle': avatarCircle }" :src="avatarUrl" mode="aspectFill"></image>
+						<image class="uni-list-chat__header-image" :class="{ 'header--circle': avatarCircle }" :src="avatar" mode="aspectFill"></image>
 					</view>
 					<!-- 头像组 -->
 					<view v-else class="uni-list-chat__header">
@@ -18,23 +18,13 @@
 						</view>
 					</view>
 				</view>
-				<!-- #ifndef APP -->
-				<view class="slot-header">
-				<!-- #endif -->
-					<slot name="header"></slot>
-				<!-- #ifndef APP -->
-				</view>
-				<!-- #endif -->
 				<view v-if="badgeText && badgePositon === 'left'" class="uni-list-chat__badge uni-list-chat__badge-pos" :class="[isSingle]">
 					<text class="uni-list-chat__badge-text">{{ badgeText === 'dot' ? '' : badgeText }}</text>
 				</view>
 				<view class="uni-list-chat__content">
 					<view class="uni-list-chat__content-main">
 						<text class="uni-list-chat__content-title uni-ellipsis">{{ title }}</text>
-						<view style="flex-direction: row;">
-							<text class="draft" v-if="isDraft">[草稿]</text>
-							<text class="uni-list-chat__content-note uni-ellipsis">{{isDraft?note.slice(14):note}}</text>
-						</view>
+						<text class="uni-list-chat__content-note uni-ellipsis">{{ note }}</text>
 					</view>
 					<view class="uni-list-chat__content-extra">
 						<slot>
@@ -131,9 +121,6 @@
 		},
 		// inject: ['list'],
 		computed: {
-			isDraft(){
-				return this.note.slice(0,14) == '[uni-im-draft]'
-			},
 			isSingle() {
 				if (this.badgeText === 'dot') {
 					return 'uni-badge--dot';
@@ -159,32 +146,12 @@
 				}
 			}
 		},
-		watch: {
-			avatar:{
-				handler(avatar) {
-					if(avatar.substr(0,8) == 'cloud://'){
-						uniCloud.getTempFileURL({
-							fileList: [avatar]
-						}).then(res=>{
-							// console.log(res);
-							// 兼容uniCloud私有化部署
-							let fileList = res.fileList || res.result.fileList
-							this.avatarUrl = fileList[0].tempFileURL
-						})
-					}else{
-						this.avatarUrl = avatar
-					}
-				},
-				immediate: true
-			}
-		},
 		data() {
 			return {
 				isFirstChild: false,
 				border: true,
 				// avatarList: 3,
-				imageWidth: 50,
-				avatarUrl:''
+				imageWidth: 50
 			};
 		},
 		mounted() {
@@ -231,7 +198,7 @@
 				}
 			},
 			pageApi(api) {
-				let callback = {
+				uni[api]({
 					url: this.to,
 					success: res => {
 						this.$emit('click', {
@@ -242,24 +209,9 @@
 						this.$emit('click', {
 							data: err
 						});
+						console.error(err.errMsg);
 					}
-				}
-				switch (api) {
-					case 'navigateTo':
-						uni.navigateTo(callback)
-						break
-					case 'redirectTo':
-						uni.redirectTo(callback)
-						break
-					case 'reLaunch':
-						uni.reLaunch(callback)
-						break
-					case 'switchTab':
-						uni.switchTab(callback)
-						break
-					default:
-					uni.navigateTo(callback)
-				}
+				});
 			}
 		}
 	};
@@ -493,20 +445,13 @@
 		overflow: hidden;
 	}
 
-	.draft ,.uni-list-chat__content-note {
+	.uni-list-chat__content-note {
 		margin-top: 3px;
 		color: $note-color;
 		font-size: $note-size;
 		font-weight: $title-weight;
 		overflow: hidden;
 	}
-	.draft{
-		color: #eb3a41;
-		/* #ifndef APP-NVUE */
-		flex-shrink: 0;
-		/* #endif */
-		padding-right: 3px;
-	}
 
 	.uni-list-chat__content-extra {
 		/* #ifndef APP-NVUE */

+ 14 - 94
uni_merchants_enter/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue

@@ -1,21 +1,21 @@
 <template>
 	<!-- #ifdef APP-NVUE -->
-	<cell :keep-scroll-position="keepScrollPosition">
+	<cell>
 		<!-- #endif -->
-		<view :class="{ 'uni-list-item--disabled': disabled }" :style="{'background-color':customStyle.backgroundColor}"
+
+		<view :class="{ 'uni-list-item--disabled': disabled }"
 			:hover-class="(!clickable && !link) || disabled || showSwitch ? '' : 'uni-list-item--hover'"
 			class="uni-list-item" @click="onClick">
 			<view v-if="!isFirstChild" class="border--left" :class="{ 'uni-list--border': border }"></view>
 			<view class="uni-list-item__container"
-				:class="{ 'container--right': showArrow || link, 'flex--direction': direction === 'column'}"
-				:style="{paddingTop:padding.top,paddingLeft:padding.left,paddingRight:padding.right,paddingBottom:padding.bottom}">
+				:class="{ 'container--right': showArrow || link, 'flex--direction': direction === 'column' }">
 				<slot name="header">
 					<view class="uni-list-item__header">
 						<view v-if="thumb" class="uni-list-item__icon">
 							<image :src="thumb" class="uni-list-item__icon-img" :class="['uni-list--' + thumbSize]" />
 						</view>
 						<view v-else-if="showExtraIcon" class="uni-list-item__icon">
-							<uni-icons :customPrefix="extraIcon.customPrefix" :color="extraIcon.color" :size="extraIcon.size" :type="extraIcon.type" />
+							<uni-icons :color="extraIcon.color" :size="extraIcon.size" :type="extraIcon.type" />
 						</view>
 					</view>
 				</slot>
@@ -96,7 +96,7 @@
 				default: ''
 			},
 			ellipsis: {
-				type: [Number, String],
+				type: [Number,String],
 				default: 0
 			},
 			disabled: {
@@ -139,7 +139,7 @@
 				type: String,
 				default: 'success'
 			},
-			badgeStyle: {
+			badgeStyle:{
 				type: Object,
 				default () {
 					return {}
@@ -167,75 +167,19 @@
 					return {
 						type: '',
 						color: '#000000',
-						size: 20,
-						customPrefix: ''
+						size: 20
 					};
 				}
 			},
 			border: {
 				type: Boolean,
 				default: true
-			},
-			customStyle: {
-				type: Object,
-				default () {
-					return {
-						padding: '',
-						backgroundColor: '#FFFFFF'
-					}
-				}
-			},
-			keepScrollPosition: {
-				type: Boolean,
-				default: false
-			}
-		},
-		watch: {
-			'customStyle.padding': {
-				handler(padding) {
-					if(typeof padding == 'number'){
-						padding += ''
-					}
-					let paddingArr = padding.split(' ')
-					if (paddingArr.length === 1) {
-						const allPadding = paddingArr[0]
-						this.padding = {
-							"top": allPadding,
-							"right": allPadding,
-							"bottom": allPadding,
-							"left": allPadding
-						}
-					} else if (paddingArr.length === 2) {
-						const [verticalPadding, horizontalPadding] = paddingArr;
-						this.padding = {
-							"top": verticalPadding,
-							"right": horizontalPadding,
-							"bottom": verticalPadding,
-							"left": horizontalPadding
-						}
-					} else if (paddingArr.length === 4) {
-							const [topPadding, rightPadding, bottomPadding, leftPadding] = paddingArr;
-							this.padding = {
-								"top": topPadding,
-								"right": rightPadding,
-								"bottom": bottomPadding,
-								"left": leftPadding
-							}
-					}
-				},
-				immediate: true
 			}
 		},
 		// inject: ['list'],
 		data() {
 			return {
-				isFirstChild: false,
-				padding: {
-					top: "",
-					right: "",
-					bottom: "",
-					left: ""
-				}
+				isFirstChild: false
 			};
 		},
 		mounted() {
@@ -311,7 +255,7 @@
 						uni.switchTab(callback)
 						break
 					default:
-						uni.navigateTo(callback)
+					uni.navigateTo(callback)
 				}
 			}
 		}
@@ -331,7 +275,6 @@
 	$uni-bg-color-hover:#f1f1f1;
 	$uni-text-color-grey:#999;
 	$list-item-pd: $uni-spacing-col-lg $uni-spacing-row-lg;
-
 	.uni-list-item {
 		/* #ifndef APP-NVUE */
 		display: flex;
@@ -346,15 +289,12 @@
 		cursor: pointer;
 		/* #endif */
 	}
-
 	.uni-list-item--disabled {
 		opacity: 0.3;
 	}
-
 	.uni-list-item--hover {
-		background-color: $uni-bg-color-hover !important;
+		background-color: $uni-bg-color-hover;
 	}
-
 	.uni-list-item__container {
 		position: relative;
 		/* #ifndef APP-NVUE */
@@ -367,11 +307,9 @@
 		overflow: hidden;
 		// align-items: center;
 	}
-
 	.container--right {
 		padding-right: 0;
 	}
-
 	// .border--left {
 	// 	margin-left: $uni-spacing-row-lg;
 	// }
@@ -386,7 +324,6 @@
 		border-top-width: 0.5px;
 		/* #endif */
 	}
-
 	/* #ifndef APP-NVUE */
 	.uni-list--border:after {
 		position: absolute;
@@ -399,7 +336,6 @@
 		transform: scaleY(0.5);
 		background-color: $uni-border-color;
 	}
-
 	/* #endif */
 	.uni-list-item__content {
 		/* #ifndef APP-NVUE */
@@ -413,24 +349,20 @@
 		justify-content: space-between;
 		overflow: hidden;
 	}
-
 	.uni-list-item__content--center {
 		justify-content: center;
 	}
-
 	.uni-list-item__content-title {
 		font-size: $uni-font-size-base;
 		color: #3b4144;
 		overflow: hidden;
 	}
-
 	.uni-list-item__content-note {
 		margin-top: 6rpx;
 		color: $uni-text-color-grey;
 		font-size: $uni-font-size-sm;
 		overflow: hidden;
 	}
-
 	.uni-list-item__extra {
 		// width: 25%;
 		/* #ifndef APP-NVUE */
@@ -440,7 +372,6 @@
 		justify-content: flex-end;
 		align-items: center;
 	}
-
 	.uni-list-item__header {
 		/* #ifndef APP-NVUE */
 		display: flex;
@@ -448,14 +379,12 @@
 		flex-direction: row;
 		align-items: center;
 	}
-
 	.uni-list-item__icon {
 		margin-right: 18rpx;
 		flex-direction: row;
 		justify-content: center;
 		align-items: center;
 	}
-
 	.uni-list-item__icon-img {
 		/* #ifndef APP-NVUE */
 		display: block;
@@ -464,7 +393,6 @@
 		width: $uni-img-size-base;
 		margin-right: 10px;
 	}
-
 	.uni-icon-wrapper {
 		/* #ifndef APP-NVUE */
 		display: flex;
@@ -472,40 +400,33 @@
 		align-items: center;
 		padding: 0 10px;
 	}
-
 	.flex--direction {
 		flex-direction: column;
 		/* #ifndef APP-NVUE */
 		align-items: initial;
 		/* #endif */
 	}
-
 	.flex--justify {
 		/* #ifndef APP-NVUE */
 		justify-content: initial;
 		/* #endif */
 	}
-
 	.uni-list--lg {
 		height: $uni-img-size-lg;
 		width: $uni-img-size-lg;
 	}
-
 	.uni-list--base {
 		height: $uni-img-size-base;
 		width: $uni-img-size-base;
 	}
-
 	.uni-list--sm {
 		height: $uni-img-size-sm;
 		width: $uni-img-size-sm;
 	}
-
 	.uni-list-item__extra-text {
 		color: $uni-text-color-grey;
 		font-size: $uni-font-size-sm;
 	}
-
 	.uni-ellipsis-1 {
 		/* #ifndef APP-NVUE */
 		overflow: hidden;
@@ -514,10 +435,9 @@
 		/* #endif */
 		/* #ifdef APP-NVUE */
 		lines: 1;
-		text-overflow: ellipsis;
+		text-overflow:ellipsis;
 		/* #endif */
 	}
-
 	.uni-ellipsis-2 {
 		/* #ifndef APP-NVUE */
 		overflow: hidden;
@@ -528,7 +448,7 @@
 		/* #endif */
 		/* #ifdef APP-NVUE */
 		lines: 2;
-		text-overflow: ellipsis;
+		text-overflow:ellipsis;
 		/* #endif */
 	}
-</style>
+</style>

+ 85 - 100
uni_merchants_enter/uni_modules/uni-list/components/uni-list/uni-list.vue

@@ -7,117 +7,102 @@
 	</view>
 	<!-- #endif -->
 	<!-- #ifdef APP-NVUE -->
-	<list :bounce="false" :scrollable="true" show-scrollbar :render-reverse="renderReverse" @scroll="scroll" class="uni-list" :class="{ 'uni-list--border': border }" :enableBackToTop="enableBackToTop"
-		loadmoreoffset="15">
-		<slot />
-	</list>
+	<list class="uni-list" :class="{ 'uni-list--border': border }" :enableBackToTop="enableBackToTop" loadmoreoffset="15"><slot /></list>
 	<!-- #endif -->
 </template>
 
 <script>
-	/**
-	 * List 列表
-	 * @description 列表组件
-	 * @tutorial https://ext.dcloud.net.cn/plugin?id=24
-	 * @property {String} 	border = [true|false] 		标题
-	 */
-	export default {
-		name: 'uniList',
-		'mp-weixin': {
-			options: {
-				multipleSlots: false
-			}
-		},
-		props: {
-			stackFromEnd:{
-				type: Boolean,
-				default:false
-			},
-			enableBackToTop: {
-				type: [Boolean, String],
-				default: false
-			},
-			scrollY: {
-				type: [Boolean, String],
-				default: false
-			},
-			border: {
-				type: Boolean,
-				default: true
-			},
-			renderReverse:{
-				type: Boolean,
-				default: false
-			}
+/**
+ * List 列表
+ * @description 列表组件
+ * @tutorial https://ext.dcloud.net.cn/plugin?id=24
+ * @property {String} 	border = [true|false] 		标题
+ */
+export default {
+	name: 'uniList',
+	'mp-weixin': {
+		options: {
+			multipleSlots: false
+		}
+	},
+	props: {
+		enableBackToTop: {
+			type: [Boolean, String],
+			default: false
 		},
-		// provide() {
-		// 	return {
-		// 		list: this
-		// 	};
-		// },
-		created() {
-			this.firstChildAppend = false;
+		scrollY: {
+			type: [Boolean, String],
+			default: false
 		},
-		methods: {
-			loadMore(e) {
-				this.$emit('scrolltolower');
-			},
-			scroll(e) {
-				this.$emit('scroll', e);
-			}
+		border: {
+			type: Boolean,
+			default: true
+		}
+	},
+	// provide() {
+	// 	return {
+	// 		list: this
+	// 	};
+	// },
+	created() {
+		this.firstChildAppend = false;
+	},
+	methods: {
+		loadMore(e) {
+			this.$emit('scrolltolower');
 		}
-	};
-</script>
-<style lang="scss">
-	$uni-bg-color:#ffffff;
-	$uni-border-color:#e5e5e5;
-
-	.uni-list {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		background-color: $uni-bg-color;
-		position: relative;
-		flex-direction: column;
 	}
+};
+</script>
+<style lang="scss" >
+$uni-bg-color:#ffffff;
+$uni-border-color:#e5e5e5;
+.uni-list {
+	/* #ifndef APP-NVUE */
+	display: flex;
+	/* #endif */
+	background-color: $uni-bg-color;
+	position: relative;
+	flex-direction: column;
+}
 
-	.uni-list--border {
-		position: relative;
-		/* #ifdef APP-NVUE */
-		border-top-color: $uni-border-color;
-		border-top-style: solid;
-		border-top-width: 0.5px;
-		border-bottom-color: $uni-border-color;
-		border-bottom-style: solid;
-		border-bottom-width: 0.5px;
-		/* #endif */
-		z-index: -1;
-	}
+.uni-list--border {
+	position: relative;
+	/* #ifdef APP-NVUE */
+	border-top-color: $uni-border-color;
+	border-top-style: solid;
+	border-top-width: 0.5px;
+	border-bottom-color: $uni-border-color;
+	border-bottom-style: solid;
+	border-bottom-width: 0.5px;
+	/* #endif */
+	z-index: -1;
+}
 
-	/* #ifndef APP-NVUE */
+/* #ifndef APP-NVUE */
 
-	.uni-list--border-top {
-		position: absolute;
-		top: 0;
-		right: 0;
-		left: 0;
-		height: 1px;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		background-color: $uni-border-color;
-		z-index: 1;
-	}
+.uni-list--border-top {
+	position: absolute;
+	top: 0;
+	right: 0;
+	left: 0;
+	height: 1px;
+	-webkit-transform: scaleY(0.5);
+	transform: scaleY(0.5);
+	background-color: $uni-border-color;
+	z-index: 1;
+}
 
-	.uni-list--border-bottom {
-		position: absolute;
-		bottom: 0;
-		right: 0;
-		left: 0;
-		height: 1px;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		background-color: $uni-border-color;
-	}
+.uni-list--border-bottom {
+	position: absolute;
+	bottom: 0;
+	right: 0;
+	left: 0;
+	height: 1px;
+	-webkit-transform: scaleY(0.5);
+	transform: scaleY(0.5);
+	background-color: $uni-border-color;
+}
 
-	/* #endif */
+/* #endif */
 </style>

+ 0 - 4
uni_merchants_enter/uni_modules/uni-nav-bar/changelog.md

@@ -1,7 +1,3 @@
-## 1.3.11(2023-03-29)
-- 修复 自定义状态栏高度闪动BUG
-## 1.3.10(2023-03-29)
-- 修复 暗黑模式下边线颜色错误的bug
 ## 1.3.9(2022-10-13)
 - 修复 条件编译错误的bug
 ## 1.3.8(2022-10-12)

+ 1 - 1
uni_merchants_enter/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="uni-navbar" :class="{'uni-dark':dark, 'uni-nvue-fixed': fixed}">
 		<view class="uni-navbar__content" :class="{ 'uni-navbar--fixed': fixed, 'uni-navbar--shadow': shadow, 'uni-navbar--border': border }"
-			:style="{ 'background-color': themeBgColor, 'border-bottom-color':themeColor }" >
+			:style="{ 'background-color': themeBgColor }" >
 			<status-bar v-if="statusBar" />
 			<view :style="{ color: themeColor,backgroundColor: themeBgColor ,height:navbarHeight}"
 				class="uni-navbar__header">

+ 4 - 1
uni_merchants_enter/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue

@@ -9,8 +9,11 @@
 		name: 'UniStatusBar',
 		data() {
 			return {
-				statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px'
+				statusBarHeight: 20
 			}
+		},
+		mounted() {
+			this.statusBarHeight = uni.getSystemInfoSync().statusBarHeight + 'px'
 		}
 	}
 </script>

+ 0 - 4
uni_merchants_enter/uni_modules/uni-number-box/changelog.md

@@ -1,7 +1,3 @@
-## 1.2.3(2023-05-23)
-更新示例工程
-## 1.2.2(2023-05-08)
-- 修复 change 事件执行顺序错误的问题
 ## 1.2.1(2021-11-22)
 - 修复 vue3中某些scss变量无法找到的问题
 ## 1.2.0(2021-11-19)

+ 2 - 2
uni_merchants_enter/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue

@@ -114,11 +114,11 @@
 				}
 
 				this.inputValue = (value / scale).toFixed(String(scale).length - 1);
+				this.$emit("change", +this.inputValue);
 				// TODO vue2 兼容
 				this.$emit("input", +this.inputValue);
 				// TODO vue3 兼容
 				this.$emit("update:modelValue", +this.inputValue);
-				this.$emit("change", +this.inputValue);
 			},
 			_getDecimalScale() {
 
@@ -144,9 +144,9 @@
 				}
 				const scale = this._getDecimalScale();
 				this.inputValue = value.toFixed(String(scale).length - 1);
+				this.$emit("change", +this.inputValue);
 				this.$emit("input", +this.inputValue);
 				this.$emit("update:modelValue", +this.inputValue);
-				this.$emit("change", +this.inputValue);
 			},
 			_onFocus(event) {
 				this.$emit('focus', event)

+ 0 - 8
uni_merchants_enter/uni_modules/uni-popup/changelog.md

@@ -1,11 +1,3 @@
-## 1.8.3(2023-04-17)
-- 修复 uni-popup 重复打开时的 bug
-## 1.8.2(2023-02-02)
-- uni-popup-dialog 组件新增 inputType 属性
-## 1.8.1(2022-12-01)
-- 修复 nvue 下 v-show 报错
-## 1.8.0(2022-11-29)
-- 优化 主题样式
 ## 1.7.9(2022-04-02)
 - 修复 弹出层内部无法滚动的bug
 ## 1.7.8(2022-03-28)

+ 1 - 5
uni_merchants_enter/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue

@@ -10,7 +10,7 @@
 		</view>
 		<view v-else class="uni-dialog-content">
 			<slot>
-				<input class="uni-dialog-input" v-model="val" :type="inputType" :placeholder="placeholderText" :focus="focus" >
+				<input class="uni-dialog-input" v-model="val" type="text" :placeholder="placeholderText" :focus="focus" >
 			</slot>
 		</view>
 		<view class="uni-dialog-button-group">
@@ -57,10 +57,6 @@
 		mixins: [popup],
 		emits:['confirm','close'],
 		props: {
-			inputType:{
-				type: String,
-				default: 'text'
-			},
 			value: {
 				type: [String, Number],
 				default: ''

+ 9 - 3
uni_merchants_enter/uni_modules/uni-popup/components/uni-popup/uni-popup.vue

@@ -1,10 +1,10 @@
 <template>
-	<view v-if="showPopup" class="uni-popup" :class="[popupstyle, isDesktop ? 'fixforpc-z-index' : '']">
+	<view v-if="showPopup||onceRender" v-show="showPopup"  class="uni-popup" :class="[popupstyle, isDesktop ? 'fixforpc-z-index' : '']">
 		<view @touchstart="touchstart">
 			<uni-transition key="1" v-if="maskShow" name="mask" mode-class="fade" :styles="maskClass"
 				:duration="duration" :show="showTrans" @click="onTap" />
 			<uni-transition key="2" :mode-class="ani" name="content" :styles="transClass" :duration="duration"
-				:show="showTrans" @click="onTap">
+				:show="showTrans" @click="onTap" :once-render="onceRender">
 				<view class="uni-popup__wrapper" :style="{ backgroundColor: bg }" :class="[popupstyle]" @click="clear">
 					<slot />
 				</view>
@@ -86,6 +86,11 @@
 				type: String,
 				default: 'rgba(0, 0, 0, 0.4)'
 			},
+			// 指定使用v-show指令,不重新渲染Pop组件
+			onceRender:{
+				type:Boolean,
+				default:false
+			},
 		},
 
 		watch: {
@@ -269,7 +274,8 @@
 			open(direction) {
 				// fix by mehaotian 处理快速打开关闭的情况
 				if (this.showPopup) {
-					return
+					clearTimeout(this.timer)
+					this.showPopup = false
 				}
 				let innerType = ['top', 'center', 'bottom', 'left', 'right', 'message', 'dialog', 'share']
 				if (!(direction && innerType.indexOf(direction) !== -1)) {

+ 1 - 1
uni_merchants_enter/uni_modules/uni-row/components/uni-col/uni-col.vue

@@ -212,7 +212,7 @@
 	}
 </script>
 
-<style lang='scss' scoped>
+<style lang='scss' >
 	/* breakpoints */
 	$--sm: 768px !default;
 	$--md: 992px !default;

+ 1 - 1
uni_merchants_enter/uni_modules/uni-row/components/uni-row/uni-row.vue

@@ -180,7 +180,7 @@
 	}
 
 	// 字节、QQ配置后不生效
-	// 此处用法无法使用scoped
+	// 此处用法无法使用
 	/* #ifdef MP-WEIXIN || MP-TOUTIAO || MP-QQ */
 	:host {
 		display: block;

+ 0 - 2
uni_merchants_enter/uni_modules/uni-search-bar/changelog.md

@@ -1,5 +1,3 @@
-## 1.2.4(2023-05-09)
-- 修复 i18n 国际化不正确的 Bug
 ## 1.2.3(2022-05-24)
 - 新增 readonly 属性,组件只读
 ## 1.2.2(2022-05-06)

+ 1 - 1
uni_merchants_enter/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue

@@ -80,7 +80,7 @@
 			},
 			cancelText: {
 				type: String,
-				default: ""
+				default: '取消'
 			},
 			bgColor: {
 				type: String,

+ 1 - 1
uni_merchants_enter/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue

@@ -87,7 +87,7 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 	.segmented-control {
 		/* #ifndef APP-NVUE */
 		display: flex;

+ 0 - 2
uni_merchants_enter/uni_modules/uni-swipe-action/changelog.md

@@ -1,5 +1,3 @@
-## 1.3.8(2023-04-13)
-- 修复`uni-swipe-action`和`uni-swipe-action-item`不同时使用导致 closeOther 方法报错的 bug
 ## 1.3.7(2022-06-06)
 - 修复 vue3 下使用组件不能正常运行的Bug
 ## 1.3.6(2022-05-31)

+ 2 - 2
uni_merchants_enter/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js

@@ -31,7 +31,7 @@ bindIngXMixins = {
 	},
 	created() {
 		this.swipeaction = this.getSwipeAction()
-		if (this.swipeaction && Array.isArray(this.swipeaction.children)) {
+		if (this.swipeaction.children !== undefined) {
 			this.swipeaction.children.push(this)
 		}
 	},
@@ -74,7 +74,7 @@ bindIngXMixins = {
 			// 每次只触发一次,避免多次监听造成闪烁
 			if (this.stop) return
 			this.stop = true
-			if (this.autoClose && this.swipeaction) {
+			if (this.autoClose) {
 				this.swipeaction.closeOther(this)
 			}
 

+ 2 - 4
uni_merchants_enter/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js

@@ -21,7 +21,7 @@ export default {
 	},
 	created() {
 		this.swipeaction = this.getSwipeAction()
-		if (this.swipeaction && Array.isArray(this.swipeaction.children)) {
+		if (this.swipeaction.children !== undefined) {
 			this.swipeaction.children.push(this)
 		}
 	},
@@ -65,9 +65,7 @@ export default {
 		touchstart(e) {
 			this.transition = false
 			this.isclose = true
-			if (this.autoClose && this.swipeaction) {
-				this.swipeaction.closeOther(this)
-			}
+			this.autoClose && this.swipeaction.closeOther(this)
 		},
 		touchmove(e) {},
 		touchend(e) {

+ 3 - 4
uni_merchants_enter/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js

@@ -36,7 +36,7 @@ otherMixins = {
 	},
 	mounted() {
 		this.swipeaction = this.getSwipeAction()
-		if (this.swipeaction && Array.isArray(this.swipeaction.children)) {
+		if (this.swipeaction.children !== undefined) {
 			this.swipeaction.children.push(this)
 		}
 		this.init()
@@ -53,9 +53,8 @@ otherMixins = {
 		},
 
 		closeSwipe(e) {
-			if (this.autoClose && this.swipeaction) {
-				this.swipeaction.closeOther(this)
-			}
+			if (!this.autoClose) return
+			this.swipeaction.closeOther(this)
 		},
 		appTouchStart(e) {
 			const {

+ 3 - 4
uni_merchants_enter/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js

@@ -21,7 +21,7 @@ mpMixins = {
 	},
 	created() {
 		this.swipeaction = this.getSwipeAction()
-		if (this.swipeaction && Array.isArray(this.swipeaction.children)) {
+		if (this.swipeaction.children !== undefined) {
 			this.swipeaction.children.push(this)
 		}
 	},
@@ -31,9 +31,8 @@ mpMixins = {
 	methods: {
 		// wxs 中调用
 		closeSwipe(e) {
-			if (this.autoClose && this.swipeaction) {
-				this.swipeaction.closeOther(this)
-			}
+			if (!this.autoClose) return
+			this.swipeaction.closeOther(this)
 		},
 
 		change(e) {

+ 1 - 1
uni_merchants_enter/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue

@@ -120,7 +120,7 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss">
 	.uni-swiper__warp {
 		/* #ifndef APP-NVUE */
 		display: flex;

+ 0 - 4
uni_merchants_enter/uni_modules/uni-table/changelog.md

@@ -1,7 +1,3 @@
-## 1.2.3(2023-03-28)
-- 修复 在vue3模式下可能会出现错误的问题
-## 1.2.2(2022-11-29)
-- 优化 主题样式
 ## 1.2.1(2022-06-06)
 - 修复 微信小程序存在无使用组件的问题
 ## 1.2.0(2021-11-19)

+ 3 - 3
uni_merchants_enter/uni_modules/uni-table/components/uni-table/uni-table.vue

@@ -3,9 +3,9 @@
 		<!-- #ifdef H5 -->
 		<table class="uni-table" border="0" cellpadding="0" cellspacing="0" :class="{ 'table--stripe': stripe }" :style="{ 'min-width': minWidth + 'px' }">
 			<slot></slot>
-			<tr v-if="noData" class="uni-table-loading">
-				<td class="uni-table-text" :class="{ 'empty-border': border }">{{ emptyText }}</td>
-			</tr>
+			<view v-if="noData" class="uni-table-loading">
+				<view class="uni-table-text" :class="{ 'empty-border': border }">{{ emptyText }}</view>
+			</view>
 			<view v-if="loading" class="uni-table-mask" :class="{ 'empty-border': border }"><div class="uni-table--loader"></div></view>
 		</table>
 		<!-- #endif -->

+ 8 - 16
uni_merchants_enter/uni_modules/uni-table/components/uni-th/filter-dropdown.vue

@@ -112,12 +112,6 @@
 						value: 'value'
 					}
 				}
-			},
-			filterDefaultValue: {
-				type: [Array,String],
-				default () {
-					return ""
-				}
 			}
 		},
 		computed: {
@@ -163,7 +157,7 @@
 				enabled: true,
 				isOpened: false,
 				dataList: [],
-				filterValue: this.filterDefaultValue,
+				filterValue: '',
 				checkedValues: [],
 				gtValue: '',
 				ltValue: '',
@@ -292,8 +286,6 @@
 </script>
 
 <style lang="scss">
-	$uni-primary: #1890ff !default;
-	
 	.flex-r {
 		display: flex;
 		flex-direction: row;
@@ -323,8 +315,8 @@
 	}
 
 	.icon-select.active {
-		background-color: $uni-primary;
-		border-top-color: $uni-primary;
+		background-color: #1890ff;
+		border-top-color: #1890ff;
 	}
 
 	.icon-search {
@@ -351,11 +343,11 @@
 	}
 
 	.icon-search.active .icon-search-0 {
-		border-color: $uni-primary;
+		border-color: #1890ff;
 	}
 
 	.icon-search.active .icon-search-1 {
-		background-color: $uni-primary;
+		background-color: #1890ff;
 	}
 
 	.icon-calendar {
@@ -395,14 +387,14 @@
 	}
 
 	.icon-calendar.active {
-		color: $uni-primary;
+		color: #1890ff;
 	}
 
 	.icon-calendar.active .icon-calendar-0,
 	.icon-calendar.active .icon-calendar-1,
 	.icon-calendar.active .icon-calendar-0:before,
 	.icon-calendar.active .icon-calendar-0:after {
-		background-color: $uni-primary;
+		background-color: #1890ff;
 	}
 
 	.uni-filter-dropdown {
@@ -505,7 +497,7 @@
 	}
 
 	.btn-submit {
-		background-color: $uni-primary;
+		background-color: #1890ff;
 		color: #ffffff;
 	}
 </style>

+ 3 - 10
uni_merchants_enter/uni_modules/uni-table/components/uni-th/uni-th.vue

@@ -9,7 +9,7 @@
 					<text class="arrow down" :class="{ active: descending }" @click.stop="descendingFn"></text>
 				</view>
 			</view>
-			<dropdown v-if="filterType || filterData.length" :filterDefaultValue="filterDefaultValue" :filterData="filterData" :filterType="filterType" @change="ondropdown"></dropdown>
+			<dropdown v-if="filterType || filterData.length" :filterData="filterData" :filterType="filterType" @change="ondropdown"></dropdown>
 		</view>
 	</th>
 	<!-- #endif -->
@@ -79,12 +79,6 @@ export default {
 			default () {
 				return []
 			}
-		},
-		filterDefaultValue: {
-			type: [Array,String],
-			default () {
-				return ""
-			}
 		}
 	},
 	data() {
@@ -206,7 +200,6 @@ export default {
 
 <style lang="scss">
 $border-color: #ebeef5;
-$uni-primary: #007aff !default;
 
 .uni-table-th {
 	padding: 12px 10px;
@@ -261,7 +254,7 @@ $uni-primary: #007aff !default;
 	}
 	&.active {
 		::after {
-			background-color: $uni-primary;
+			background-color: #007aff;
 		}
 	}
 }
@@ -278,7 +271,7 @@ $uni-primary: #007aff !default;
 	}
 	&.active {
 		::after {
-			background-color: $uni-primary;
+			background-color: #007aff;
 		}
 	}
 }

+ 6 - 6
uni_merchants_enter/uni_modules/uni-table/components/uni-tr/table-checkbox.vue

@@ -77,7 +77,7 @@
 </script>
 
 <style lang="scss">
-	$uni-primary: #007aff !default;
+	$checked-color: #007aff;
 	$border-color: #DCDFE6;
 	$disable:0.4;
 
@@ -125,8 +125,8 @@
 			}
 
 			&.checkbox--indeterminate {
-				border-color: $uni-primary;
-				background-color: $uni-primary;
+				border-color: $checked-color;
+				background-color: $checked-color;
 
 				.checkbox__inner-icon {
 					position: absolute;
@@ -147,7 +147,7 @@
 				}
 			}
 			&:hover{
-				border-color: $uni-primary;
+				border-color: $checked-color;
 			}
 			// 禁用
 			&.is-disable {
@@ -160,8 +160,8 @@
 
 			// 选中
 			&.is-checked {
-				border-color: $uni-primary;
-				background-color: $uni-primary;
+				border-color: $checked-color;
+				background-color: $checked-color;
 
 				.checkbox__inner-icon {
 					opacity: 1;

+ 1 - 1
uni_merchants_enter/uni_modules/uni-tag/components/uni-tag/uni-tag.vue

@@ -106,7 +106,7 @@
 	};
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss">
 	$uni-primary: #2979ff !default;
 	$uni-success: #18bc37 !default;
 	$uni-warning: #f3a73f !default;

+ 39 - 0
uni_merchants_enter/uni_modules/uni-test/changelog.md

@@ -0,0 +1,39 @@
+## 2.0.13(2021-11-18)
+邱
+## 2.0.12(2021-11-18)
+123123
+## 2.0.11(2021-11-18)
+0000
+## 2.0.10(2021-11-18)
+111234
+## 2.0.9(2021-11-18)
+3333
+## 2.0.8(2021-11-18)
+===
+## 2.0.7(2021-11-18)
+111
+## 2.0.6(2021-05-26)
+- test
+## 0.0.37(2021-03-23)
+- uni-forms 更新 校验器
+- uni-forms 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug
+
+
+## 0.0.36(2021-03-23)
+- uni-forms 更新 校验器
+- uni-forms 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug
+
+
+## 0.0.35(2021-03-23)
+- uni-forms 更新 校验器
+- uni-forms 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug
+
+
+## 0.0.34(2021-03-23)
+- 测试新同步插件
+## 0.0.33(2021-03-09)
+- test
+## 0.0.32(2021-02-24)
+- 更新  read 2
+## 0.0.31(2021-02-24)
+- 同步 readme.md

+ 26 - 0
uni_merchants_enter/uni_modules/uni-test/components/uni-test/uni-test.vue

@@ -0,0 +1,26 @@
+<template>
+	<view>
+		测试插件
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		},
+		onLoad() {
+			let fonts = []
+			let obj = {}
+			fonts.forEach(v=>{
+				obj[v.name] = '\\u'+v.unicode
+			})
+		}
+	}
+</script>
+
+<style>
+
+</style>

+ 10 - 0
uni_merchants_enter/uni_modules/uni-test/readme.md

@@ -0,0 +1,10 @@
+
+
+## DataCheckbox 数据驱动的单选复选框
+> **组件名:uni-data-checkbox**
+> 代码块: `uDataCheckbox`
+
+
+本组件是基于uni-app基础组件checkbox的封装。本组件要解决问题包括:
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-card)

+ 0 - 2
uni_merchants_enter/uni_modules/uni-transition/changelog.md

@@ -1,5 +1,3 @@
-## 1.3.2(2023-05-04)
-- 修复 NVUE 平台报错的问题
 ## 1.3.1(2021-11-23)
 - 修复 init 方法初始化问题
 ## 1.3.0(2021-11-19)

+ 1 - 4
uni_merchants_enter/uni_modules/uni-transition/components/uni-transition/createAnimation.js

@@ -10,10 +10,7 @@ const nvueAnimation = uni.requireNativePlugin('animation')
 class MPAnimation {
 	constructor(options, _this) {
 		this.options = options
-		// 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误
-		this.animation = uni.createAnimation({
-			...options
-		})
+		this.animation = uni.createAnimation(options)
 		this.currentStepAnimates = {}
 		this.next = 0
 		this.$ = _this

+ 1 - 6
uni_merchants_enter/uni_modules/uni-transition/components/uni-transition/uni-transition.vue

@@ -1,10 +1,5 @@
 <template>
-  <!-- #ifndef APP-NVUE -->
-  <view v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
-  <!-- #endif -->
-  <!-- #ifdef APP-NVUE -->
-  <view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
-  <!-- #endif -->
+	<view v-if="isShow||onceRender" v-show="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
 </template>
 
 <script>

+ 0 - 68
uni_merchants_enter/uni_modules/uni-ui/changelog.md

@@ -1,71 +1,3 @@
-## 1.4.27(2023-04-23)
-- uni-calendar 修复 某些情况 monthSwitch 未触发的Bug
-- uni-calendar 修复 某些情况切换月份错误的Bug
-- uni-data-picker 修复 更改 modelValue 报错的 bug
-- uni-data-picker 修复 v-for 未使用 key 值控制台 warning
-- uni-data-picker 修复代码合并时引发 value 属性为空时不渲染数据的问题
-- uni-data-picker 修复 localdata 不支持动态更新的bug
-- uni-data-select 修复 微信小程序点击时会改变背景颜色的 bug
-- uni-data-select 修复 禁用时会显示清空按钮
-- uni-data-select 优化 查询条件短期内多次变更只查询最后一次变更后的结果
-- uni-data-select 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue
-- uni-datetime-picker 修复 日历 picker 修改年月后,自动选中当月1日 [详情](https://ask.dcloud.net.cn/question/165937)
-- uni-datetime-picker 修复 小程序端 低版本 ios NaN [详情](https://ask.dcloud.net.cn/question/162979)
-- uni-datetime-picker 修复 firefox 浏览器显示区域点击无法拉起日历弹框的Bug [详情](https://ask.dcloud.net.cn/question/163362)
-- uni-datetime-picker 优化 值为空依然选中当天问题
-- uni-datetime-picker 优化 提供 default-value 属性支持配置选择器打开时默认显示的时间
-- uni-datetime-picker 优化 非范围选择未选择日期时间,点击确认按钮选中当前日期时间
-- uni-datetime-picker 优化 字节小程序日期时间范围选择,底部日期换行问题
-- uni-datetime-picker 修复 2.2.18 引起范围选择配置 end 选择无效的Bug [详情](https://github.com/dcloudio/uni-ui/issues/686)
-- uni-datetime-picker 修复 移动端范围选择change事件触发异常的Bug [详情](https://github.com/dcloudio/uni-ui/issues/684)
-- uni-datetime-picker 优化 PC端输入日期格式错误时返回当前日期时间
-- uni-datetime-picker 优化 PC端输入日期时间超出 start、end 限制的Bug
-- uni-datetime-picker 优化 移动端日期时间范围用法时间展示不完整问题
-- uni-datetime-picker 修复 小程序端绑定 Date 类型报错的Bug [详情](https://github.com/dcloudio/uni-ui/issues/679)
-- uni-datetime-picker 修复 vue3 time-picker 无法显示绑定时分秒的Bug
-- uni-datetime-picker 修复 字节小程序报错的Bug
-- uni-datetime-picker 修复 某些情况切换月份错误的Bug
-- uni-easyinput 修复 vue3 下 keyboardheightchange 事件报错的bug
-- uni-easyinput 优化 trim 属性默认值
-- uni-easyinput 新增 cursor-spacing 属性
-- uni-fab 新增 pattern.icon 属性,可自定义图标
-- uni-file-picker 修复 手动上传删除一个文件后不能再上传的bug
-- uni-forms 修复 required 参数无法动态绑定
-- uni-list 优化 uni-list-chat 具名插槽`header` 非app端套一层元素,方便使用时通过外层元素定位实现样式修改
-- uni-list uni-list-chat 新增 支持具名插槽`header`
-- uni-list 新增 列表图标新增 customPrefix 属性 ,用法 [详见](https://uniapp.dcloud.net.cn/component/uniui/uni-icons.html#icons-props)
-- uni-nav-bar 修复 自定义状态栏高度闪动BUG
-- uni-nav-bar 修复 暗黑模式下边线颜色错误的bug
-- uni-popup 修复 uni-popup 重复打开时的 bug
-- uni-popup uni-popup-dialog 组件新增 inputType 属性
-- uni-swipe-action 修复`uni-swipe-action`和`uni-swipe-action-item`不同时使用导致 closeOther 方法报错的 bug
-- uni-table 修复 在vue3模式下可能会出现错误的问题
-## 1.4.26(2023-01-31)
-- uni-badge 修复 运行/打包 控制台警告问题
-- uni-calendar 修复 某些情况切换月份错误问题
-- uni-data-select 修复 不关联服务空间报错的问题
-- uni-data-select 新增  属性 `format` 可用于格式化显示选项内容
-- uni-datetime-picker 修复 某些情况切换月份错误问题
-- uni-easyinput 新增 keyboardheightchange 事件,可监听键盘高度变化
-- uni-list 修复 无反馈效果呈现的bug
-## 1.4.25(2023-01-11)
-- uni-file-picker 新增 sourceType 属性, 可以自定义图片和视频选择的来源
-## 1.4.24(2023-01-11)
-- uni-data-select 修复  当where变化时,数据不会自动更新的问题
-- uni-datetime-picker 修复 多次加载组件造成内存占用的 bug
-- uni-datetime-picker 修复 vue3 下 i18n 国际化初始值不正确的 bug
-- uni-easyinput 修复 props 中背景颜色无默认值的bug
-- uni-list 修复 uni-list-chat 在vue3下跳转报错的bug
-- uni-list 修复 uni-list-chat avatar属性 值为本地路径时错误的问题
-- uni-list 修复 uni-list-chat avatar属性 在腾讯云版uniCloud下错误的问题
-- uni-list 修复 uni-list-chat note属性 支持:“草稿”字样功能 文本少1位的问题
-- uni-list 修复 uni-list-item 的 customStyle 属性 padding值在 H5端 无效的bug
-- uni-list 修复 uni-list-item 的 customStyle 属性 padding值在nvue(vue2)下无效的bug
-- uni-list uni-list-chat 新增 avatar 支持 fileId
-- uni-list uni-list 新增属性 render-reverse 详情参考:[https://uniapp.dcloud.net.cn/component/list.html](https://uniapp.dcloud.net.cn/component/list.html)
-- uni-list uni-list-chat note属性 支持:“草稿”字样 加红显示 详情参考uni-im:[https://ext.dcloud.net.cn/plugin?name=uni-im](https://ext.dcloud.net.cn/plugin?name=uni-im)
-- uni-list uni-list-item 新增属性 customStyle 支持设置padding、backgroundColor
-- uni-popup 修复 nvue 下 v-show 报错
 ## 1.4.23(2022-10-25)
 - uni-datetime-picker 修复,支付宝小程序样式错乱,[详情](https://github.com/dcloudio/uni-app/issues/3861)
 

+ 2 - 2
uni_merchants_enter/uni_modules/uview-ui/components/u-form-item/u-form-item.vue

@@ -15,7 +15,7 @@
 					v-if="required || leftIcon || label"
 					:style="{
 						width: $u.addUnit(labelWidth || parentData.labelWidth),
-						marginBottom: parentData.labelPosition === 'left' ? 0 : '5px',
+						marginBottom: labelPosition === 'left' ? 0 : '30rpx',
 					}"
 				>
 					<!-- 为了块对齐 -->
@@ -45,7 +45,7 @@
 			</slot>
 			<view class="u-form-item__body__right">
 				<view class="u-form-item__body__right__content">
-					<view class="u-form-item__body__right__content__slot">
+					<view  class="u-form-item__body__right__content__slot">
 						<slot />
 					</view>
 					<view

+ 5 - 0
uni_merchants_enter/uni_modules/uview-ui/components/u-picker/props.js

@@ -40,6 +40,11 @@ export default {
             type: String,
             default: uni.$u.props.picker.confirmText
         },
+		// 确认按钮的类型
+		confirmType: {
+		    type: String,
+		    default: uni.$u.props.picker.confirmType
+		},
         // 取消按钮的颜色
         cancelColor: {
             type: String,

+ 1 - 0
uni_merchants_enter/uni_modules/uview-ui/components/u-picker/u-picker.vue

@@ -9,6 +9,7 @@
 				:cancelColor="cancelColor"
 				:confirmColor="confirmColor"
 				:cancelText="cancelText"
+				:confirmType="confirmType"
 				:confirmText="confirmText"
 				:title="title"
 				@cancel="cancel"

+ 6 - 1
uni_merchants_enter/uni_modules/uview-ui/components/u-toolbar/props.js

@@ -29,6 +29,11 @@ export default {
         title: {
             type: String,
             default: uni.$u.props.toolbar.title
-        }
+        },
+		// 确认按钮的类型
+		confirmType: {
+		    type: String,
+		    default: uni.$u.props.toolbar.confirmType
+		},
     }
 }

Some files were not shown because too many files changed in this diff