commit f72d87783ea4962f94315e6505141624aada0b14
Author: 王琛 <2103494704@qq.com>
Date: Mon Jul 3 17:49:29 2023 +0800
ipad静态开始
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a25d44a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+.DS_Store
+node_modules
+/dist
+.history
+.hbuilderx
+unpackage
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..4555a00
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,21 @@
+
+
+
diff --git a/common/QqmapWxJssdk.min.js b/common/QqmapWxJssdk.min.js
new file mode 100644
index 0000000..8fa1477
--- /dev/null
+++ b/common/QqmapWxJssdk.min.js
@@ -0,0 +1 @@
+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 = { 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) { 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) }, 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 }, 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 }, 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 }, 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 }) }, 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 () { } }, 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 }, checkKeyword(param) { return !this.checkParamKeyEmpty(param, 'keyword') }, 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 }, buildErrorConfig(errCode, errMsg) { return { status: errCode, message: errMsg } }, 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) { 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) } }, 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 { constructor(options) { if (!options.key) { throw Error('key值不能为空') } this.key = options.key }; 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) }; 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")) } }; 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) }; 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')) }; 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')) }; 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')) }; 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) } }; direction(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (Utils.checkParamKeyEmpty(options, 'to')) { return } var requestParam = { output: 'json', key: that.key }; if (typeof options.to == 'string') { requestParam.to = options.to } else { requestParam.to = options.to.latitude + ',' + options.to.longitude } var SET_URL_DIRECTION = null; 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;
\ No newline at end of file
diff --git a/common/QrCode.js b/common/QrCode.js
new file mode 100644
index 0000000..a200359
--- /dev/null
+++ b/common/QrCode.js
@@ -0,0 +1,425 @@
+// Core code comes from https://github.com/davidshimjs/qrcodejs
+var QRCode;
+
+(function () {
+ /**
+ * Get the type by string length
+ *
+ * @private
+ * @param {String} sText
+ * @param {Number} nCorrectLevel
+ * @return {Number} type
+ */
+ function _getTypeNumber(sText, nCorrectLevel) {
+ var nType = 1;
+ var length = _getUTF8Length(sText);
+
+ for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) {
+ var nLimit = 0;
+
+ switch (nCorrectLevel) {
+ case QRErrorCorrectLevel.L:
+ nLimit = QRCodeLimitLength[i][0];
+ break;
+ case QRErrorCorrectLevel.M:
+ nLimit = QRCodeLimitLength[i][1];
+ break;
+ case QRErrorCorrectLevel.Q:
+ nLimit = QRCodeLimitLength[i][2];
+ break;
+ case QRErrorCorrectLevel.H:
+ nLimit = QRCodeLimitLength[i][3];
+ break;
+ }
+
+ if (length <= nLimit) {
+ break;
+ } else {
+ nType++;
+ }
+ }
+
+ if (nType > QRCodeLimitLength.length) {
+ throw new Error("Too long data");
+ }
+
+ return nType;
+ }
+
+ function _getUTF8Length(sText) {
+ var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a');
+ return replacedText.length + (replacedText.length != sText ? 3 : 0);
+ }
+
+ function QR8bitByte(data) {
+ this.mode = QRMode.MODE_8BIT_BYTE;
+ this.data = data;
+ this.parsedData = [];
+
+ // Added to support UTF-8 Characters
+ for (var i = 0, l = this.data.length; i < l; i++) {
+ var byteArray = [];
+ var code = this.data.charCodeAt(i);
+
+ if (code > 0x10000) {
+ byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18);
+ byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12);
+ byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6);
+ byteArray[3] = 0x80 | (code & 0x3F);
+ } else if (code > 0x800) {
+ byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12);
+ byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6);
+ byteArray[2] = 0x80 | (code & 0x3F);
+ } else if (code > 0x80) {
+ byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6);
+ byteArray[1] = 0x80 | (code & 0x3F);
+ } else {
+ byteArray[0] = code;
+ }
+
+ this.parsedData.push(byteArray);
+ }
+
+ this.parsedData = Array.prototype.concat.apply([], this.parsedData);
+
+ if (this.parsedData.length != this.data.length) {
+ this.parsedData.unshift(191);
+ this.parsedData.unshift(187);
+ this.parsedData.unshift(239);
+ }
+ }
+
+ QR8bitByte.prototype = {
+ getLength: function (buffer) {
+ return this.parsedData.length;
+ },
+ write: function (buffer) {
+ for (var i = 0, l = this.parsedData.length; i < l; i++) {
+ buffer.put(this.parsedData[i], 8);
+ }
+ }
+ };
+
+
+ // QRCodeModel
+ function QRCodeModel(typeNumber, errorCorrectLevel) {
+ this.typeNumber = typeNumber;
+ this.errorCorrectLevel = errorCorrectLevel;
+ this.modules = null;
+ this.moduleCount = 0;
+ this.dataCache = null;
+ this.dataList = [];
+ }
+ QRCodeModel.prototype = {
+ addData: function (data) { var newData = new QR8bitByte(data); this.dataList.push(newData); this.dataCache = null; }, isDark: function (row, col) {
+ if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) { throw new Error(row + "," + col); }
+ return this.modules[row][col];
+ }, getModuleCount: function () { return this.moduleCount; }, make: function () { this.makeImpl(false, this.getBestMaskPattern()); }, makeImpl: function (test, maskPattern) {
+ this.moduleCount = this.typeNumber * 4 + 17; this.modules = new Array(this.moduleCount); for (var row = 0; row < this.moduleCount; row++) { this.modules[row] = new Array(this.moduleCount); for (var col = 0; col < this.moduleCount; col++) { this.modules[row][col] = null; } }
+ this.setupPositionProbePattern(0, 0); this.setupPositionProbePattern(this.moduleCount - 7, 0); this.setupPositionProbePattern(0, this.moduleCount - 7); this.setupPositionAdjustPattern(); this.setupTimingPattern(); this.setupTypeInfo(test, maskPattern); if (this.typeNumber >= 7) { this.setupTypeNumber(test); }
+ if (this.dataCache == null) { this.dataCache = QRCodeModel.createData(this.typeNumber, this.errorCorrectLevel, this.dataList); }
+ this.mapData(this.dataCache, maskPattern);
+ }, setupPositionProbePattern: function (row, col) { for (var r = -1; r <= 7; r++) { if (row + r <= -1 || this.moduleCount <= row + r) continue; for (var c = -1; c <= 7; c++) { if (col + c <= -1 || this.moduleCount <= col + c) continue; if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || (0 <= c && c <= 6 && (r == 0 || r == 6)) || (2 <= r && r <= 4 && 2 <= c && c <= 4)) { this.modules[row + r][col + c] = true; } else { this.modules[row + r][col + c] = false; } } } }, getBestMaskPattern: function () {
+ var minLostPoint = 0; var pattern = 0; for (var i = 0; i < 8; i++) { this.makeImpl(true, i); var lostPoint = QRUtil.getLostPoint(this); if (i == 0 || minLostPoint > lostPoint) { minLostPoint = lostPoint; pattern = i; } }
+ return pattern;
+ }, createMovieClip: function (target_mc, instance_name, depth) {
+ var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth); var cs = 1; this.make(); for (var row = 0; row < this.modules.length; row++) { var y = row * cs; for (var col = 0; col < this.modules[row].length; col++) { var x = col * cs; var dark = this.modules[row][col]; if (dark) { qr_mc.beginFill(0, 100); qr_mc.moveTo(x, y); qr_mc.lineTo(x + cs, y); qr_mc.lineTo(x + cs, y + cs); qr_mc.lineTo(x, y + cs); qr_mc.endFill(); } } }
+ return qr_mc;
+ }, setupTimingPattern: function () {
+ for (var r = 8; r < this.moduleCount - 8; r++) {
+ if (this.modules[r][6] != null) { continue; }
+ this.modules[r][6] = (r % 2 == 0);
+ }
+ for (var c = 8; c < this.moduleCount - 8; c++) {
+ if (this.modules[6][c] != null) { continue; }
+ this.modules[6][c] = (c % 2 == 0);
+ }
+ }, setupPositionAdjustPattern: function () {
+ var pos = QRUtil.getPatternPosition(this.typeNumber); for (var i = 0; i < pos.length; i++) {
+ for (var j = 0; j < pos.length; j++) {
+ var row = pos[i]; var col = pos[j]; if (this.modules[row][col] != null) { continue; }
+ for (var r = -2; r <= 2; r++) { for (var c = -2; c <= 2; c++) { if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) { this.modules[row + r][col + c] = true; } else { this.modules[row + r][col + c] = false; } } }
+ }
+ }
+ }, setupTypeNumber: function (test) {
+ var bits = QRUtil.getBCHTypeNumber(this.typeNumber); for (var i = 0; i < 18; i++) { var mod = (!test && ((bits >> i) & 1) == 1); this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod; }
+ for (var i = 0; i < 18; i++) { var mod = (!test && ((bits >> i) & 1) == 1); this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod; }
+ }, setupTypeInfo: function (test, maskPattern) {
+ var data = (this.errorCorrectLevel << 3) | maskPattern; var bits = QRUtil.getBCHTypeInfo(data); for (var i = 0; i < 15; i++) { var mod = (!test && ((bits >> i) & 1) == 1); if (i < 6) { this.modules[i][8] = mod; } else if (i < 8) { this.modules[i + 1][8] = mod; } else { this.modules[this.moduleCount - 15 + i][8] = mod; } }
+ for (var i = 0; i < 15; i++) { var mod = (!test && ((bits >> i) & 1) == 1); if (i < 8) { this.modules[8][this.moduleCount - i - 1] = mod; } else if (i < 9) { this.modules[8][15 - i - 1 + 1] = mod; } else { this.modules[8][15 - i - 1] = mod; } }
+ this.modules[this.moduleCount - 8][8] = (!test);
+ }, mapData: function (data, maskPattern) {
+ var inc = -1; var row = this.moduleCount - 1; var bitIndex = 7; var byteIndex = 0; for (var col = this.moduleCount - 1; col > 0; col -= 2) {
+ if (col == 6) col--; while (true) {
+ for (var c = 0; c < 2; c++) {
+ if (this.modules[row][col - c] == null) {
+ var dark = false; if (byteIndex < data.length) { dark = (((data[byteIndex] >>> bitIndex) & 1) == 1); }
+ var mask = QRUtil.getMask(maskPattern, row, col - c); if (mask) { dark = !dark; }
+ this.modules[row][col - c] = dark; bitIndex--; if (bitIndex == -1) { byteIndex++; bitIndex = 7; }
+ }
+ }
+ row += inc; if (row < 0 || this.moduleCount <= row) { row -= inc; inc = -inc; break; }
+ }
+ }
+ }
+ };
+ QRCodeModel.PAD0 = 0xEC;
+ QRCodeModel.PAD1 = 0x11;
+ QRCodeModel.createData = function (typeNumber, errorCorrectLevel, dataList) {
+ var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); var buffer = new QRBitBuffer(); for (var i = 0; i < dataList.length; i++) { var data = dataList[i]; buffer.put(data.mode, 4); buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); data.write(buffer); }
+ var totalDataCount = 0; for (var i = 0; i < rsBlocks.length; i++) { totalDataCount += rsBlocks[i].dataCount; }
+ if (buffer.getLengthInBits() > totalDataCount * 8) {
+ throw new Error("code length overflow. ("
+ + buffer.getLengthInBits()
+ + ">"
+ + totalDataCount * 8
+ + ")");
+ }
+ if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { buffer.put(0, 4); }
+ while (buffer.getLengthInBits() % 8 != 0) { buffer.putBit(false); }
+ while (true) {
+ if (buffer.getLengthInBits() >= totalDataCount * 8) { break; }
+ buffer.put(QRCodeModel.PAD0, 8); if (buffer.getLengthInBits() >= totalDataCount * 8) { break; }
+ buffer.put(QRCodeModel.PAD1, 8);
+ }
+ return QRCodeModel.createBytes(buffer, rsBlocks);
+ };
+ QRCodeModel.createBytes = function (buffer, rsBlocks) {
+ var offset = 0; var maxDcCount = 0; var maxEcCount = 0; var dcdata = new Array(rsBlocks.length); var ecdata = new Array(rsBlocks.length); for (var r = 0; r < rsBlocks.length; r++) {
+ var dcCount = rsBlocks[r].dataCount; var ecCount = rsBlocks[r].totalCount - dcCount; maxDcCount = Math.max(maxDcCount, dcCount); maxEcCount = Math.max(maxEcCount, ecCount); dcdata[r] = new Array(dcCount); for (var i = 0; i < dcdata[r].length; i++) { dcdata[r][i] = 0xff & buffer.buffer[i + offset]; }
+ offset += dcCount; var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1); var modPoly = rawPoly.mod(rsPoly); ecdata[r] = new Array(rsPoly.getLength() - 1); for (var i = 0; i < ecdata[r].length; i++) { var modIndex = i + modPoly.getLength() - ecdata[r].length; ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0; }
+ }
+ var totalCodeCount = 0; for (var i = 0; i < rsBlocks.length; i++) { totalCodeCount += rsBlocks[i].totalCount; }
+ var data = new Array(totalCodeCount); var index = 0; for (var i = 0; i < maxDcCount; i++) { for (var r = 0; r < rsBlocks.length; r++) { if (i < dcdata[r].length) { data[index++] = dcdata[r][i]; } } }
+ for (var i = 0; i < maxEcCount; i++) { for (var r = 0; r < rsBlocks.length; r++) { if (i < ecdata[r].length) { data[index++] = ecdata[r][i]; } } }
+ return data;
+ };
+ var QRMode = { MODE_NUMBER: 1 << 0, MODE_ALPHA_NUM: 1 << 1, MODE_8BIT_BYTE: 1 << 2, MODE_KANJI: 1 << 3 };
+ var QRErrorCorrectLevel = { L: 1, M: 0, Q: 3, H: 2 };
+ var QRMaskPattern = { PATTERN000: 0, PATTERN001: 1, PATTERN010: 2, PATTERN011: 3, PATTERN100: 4, PATTERN101: 5, PATTERN110: 6, PATTERN111: 7 };
+ var QRUtil = {
+ PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]], G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0), G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0), G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1), getBCHTypeInfo: function (data) {
+ var d = data << 10; while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) { d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15))); }
+ return ((data << 10) | d) ^ QRUtil.G15_MASK;
+ }, getBCHTypeNumber: function (data) {
+ var d = data << 12; while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) { d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18))); }
+ return (data << 12) | d;
+ }, getBCHDigit: function (data) {
+ var digit = 0; while (data != 0) { digit++; data >>>= 1; }
+ return digit;
+ }, getPatternPosition: function (typeNumber) { return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]; }, getMask: function (maskPattern, i, j) { switch (maskPattern) { case QRMaskPattern.PATTERN000: return (i + j) % 2 == 0; case QRMaskPattern.PATTERN001: return i % 2 == 0; case QRMaskPattern.PATTERN010: return j % 3 == 0; case QRMaskPattern.PATTERN011: return (i + j) % 3 == 0; case QRMaskPattern.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0; case QRMaskPattern.PATTERN101: return (i * j) % 2 + (i * j) % 3 == 0; case QRMaskPattern.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 == 0; case QRMaskPattern.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 == 0; default: throw new Error("bad maskPattern:" + maskPattern); } }, getErrorCorrectPolynomial: function (errorCorrectLength) {
+ var a = new QRPolynomial([1], 0); for (var i = 0; i < errorCorrectLength; i++) { a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0)); }
+ return a;
+ }, getLengthInBits: function (mode, type) { if (1 <= type && type < 10) { switch (mode) { case QRMode.MODE_NUMBER: return 10; case QRMode.MODE_ALPHA_NUM: return 9; case QRMode.MODE_8BIT_BYTE: return 8; case QRMode.MODE_KANJI: return 8; default: throw new Error("mode:" + mode); } } else if (type < 27) { switch (mode) { case QRMode.MODE_NUMBER: return 12; case QRMode.MODE_ALPHA_NUM: return 11; case QRMode.MODE_8BIT_BYTE: return 16; case QRMode.MODE_KANJI: return 10; default: throw new Error("mode:" + mode); } } else if (type < 41) { switch (mode) { case QRMode.MODE_NUMBER: return 14; case QRMode.MODE_ALPHA_NUM: return 13; case QRMode.MODE_8BIT_BYTE: return 16; case QRMode.MODE_KANJI: return 12; default: throw new Error("mode:" + mode); } } else { throw new Error("type:" + type); } }, getLostPoint: function (qrCode) {
+ var moduleCount = qrCode.getModuleCount(); var lostPoint = 0; for (var row = 0; row < moduleCount; row++) {
+ for (var col = 0; col < moduleCount; col++) {
+ var sameCount = 0; var dark = qrCode.isDark(row, col); for (var r = -1; r <= 1; r++) {
+ if (row + r < 0 || moduleCount <= row + r) { continue; }
+ for (var c = -1; c <= 1; c++) {
+ if (col + c < 0 || moduleCount <= col + c) { continue; }
+ if (r == 0 && c == 0) { continue; }
+ if (dark == qrCode.isDark(row + r, col + c)) { sameCount++; }
+ }
+ }
+ if (sameCount > 5) { lostPoint += (3 + sameCount - 5); }
+ }
+ }
+ for (var row = 0; row < moduleCount - 1; row++) { for (var col = 0; col < moduleCount - 1; col++) { var count = 0; if (qrCode.isDark(row, col)) count++; if (qrCode.isDark(row + 1, col)) count++; if (qrCode.isDark(row, col + 1)) count++; if (qrCode.isDark(row + 1, col + 1)) count++; if (count == 0 || count == 4) { lostPoint += 3; } } }
+ for (var row = 0; row < moduleCount; row++) { for (var col = 0; col < moduleCount - 6; col++) { if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) { lostPoint += 40; } } }
+ for (var col = 0; col < moduleCount; col++) { for (var row = 0; row < moduleCount - 6; row++) { if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) { lostPoint += 40; } } }
+ var darkCount = 0; for (var col = 0; col < moduleCount; col++) { for (var row = 0; row < moduleCount; row++) { if (qrCode.isDark(row, col)) { darkCount++; } } }
+ var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; lostPoint += ratio * 10; return lostPoint;
+ }
+ };
+ var QRMath = {
+ glog: function (n) {
+ if (n < 1) { throw new Error("glog(" + n + ")"); }
+ return QRMath.LOG_TABLE[n];
+ }, gexp: function (n) {
+ while (n < 0) { n += 255; }
+ while (n >= 256) { n -= 255; }
+ return QRMath.EXP_TABLE[n];
+ }, EXP_TABLE: new Array(256), LOG_TABLE: new Array(256)
+ }; for (var i = 0; i < 8; i++) { QRMath.EXP_TABLE[i] = 1 << i; }
+ for (var i = 8; i < 256; i++) { QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8]; }
+ for (var i = 0; i < 255; i++) { QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i; }
+ function QRPolynomial(num, shift) {
+ if (num.length == undefined) { throw new Error(num.length + "/" + shift); }
+ var offset = 0; while (offset < num.length && num[offset] == 0) { offset++; }
+ this.num = new Array(num.length - offset + shift); for (var i = 0; i < num.length - offset; i++) { this.num[i] = num[i + offset]; }
+ }
+ QRPolynomial.prototype = {
+ get: function (index) { return this.num[index]; }, getLength: function () { return this.num.length; }, multiply: function (e) {
+ var num = new Array(this.getLength() + e.getLength() - 1); for (var i = 0; i < this.getLength(); i++) { for (var j = 0; j < e.getLength(); j++) { num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j))); } }
+ return new QRPolynomial(num, 0);
+ }, mod: function (e) {
+ if (this.getLength() - e.getLength() < 0) { return this; }
+ var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0)); var num = new Array(this.getLength()); for (var i = 0; i < this.getLength(); i++) { num[i] = this.get(i); }
+ for (var i = 0; i < e.getLength(); i++) { num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio); }
+ return new QRPolynomial(num, 0).mod(e);
+ }
+ };
+ function QRRSBlock(totalCount, dataCount) { this.totalCount = totalCount; this.dataCount = dataCount; }
+ QRRSBlock.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]];
+ QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {
+ var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel); if (rsBlock == undefined) { throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel); }
+ var length = rsBlock.length / 3; var list = []; for (var i = 0; i < length; i++) { var count = rsBlock[i * 3 + 0]; var totalCount = rsBlock[i * 3 + 1]; var dataCount = rsBlock[i * 3 + 2]; for (var j = 0; j < count; j++) { list.push(new QRRSBlock(totalCount, dataCount)); } }
+ return list;
+ };
+ QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) { switch (errorCorrectLevel) { case QRErrorCorrectLevel.L: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; case QRErrorCorrectLevel.M: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; case QRErrorCorrectLevel.Q: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; case QRErrorCorrectLevel.H: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; default: return undefined; } };
+ function QRBitBuffer() { this.buffer = []; this.length = 0; }
+ QRBitBuffer.prototype = {
+ get: function (index) { var bufIndex = Math.floor(index / 8); return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1; }, put: function (num, length) { for (var i = 0; i < length; i++) { this.putBit(((num >>> (length - i - 1)) & 1) == 1); } }, getLengthInBits: function () { return this.length; }, putBit: function (bit) {
+ var bufIndex = Math.floor(this.length / 8); if (this.buffer.length <= bufIndex) { this.buffer.push(0); }
+ if (bit) { this.buffer[bufIndex] |= (0x80 >>> (this.length % 8)); }
+ this.length++;
+ }
+ };
+ var QRCodeLimitLength = [[17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34], [106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84], [230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155], [425, 331, 241, 177], [458, 362, 258, 194], [520, 412, 292, 220], [586, 450, 322, 250], [644, 504, 364, 280], [718, 560, 394, 310], [792, 624, 442, 338], [858, 666, 482, 382], [929, 711, 509, 403], [1003, 779, 565, 439], [1091, 857, 611, 461], [1171, 911, 661, 511], [1273, 997, 715, 535], [1367, 1059, 751, 593], [1465, 1125, 805, 625], [1528, 1190, 868, 658], [1628, 1264, 908, 698], [1732, 1370, 982, 742], [1840, 1452, 1030, 790], [1952, 1538, 1112, 842], [2068, 1628, 1168, 898], [2188, 1722, 1228, 958], [2303, 1809, 1283, 983], [2431, 1911, 1351, 1051], [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]];
+
+ // QRCode object
+ QRCode = function (canvasId, vOption) {
+ this._htOption = {
+ width: 256,
+ height: 256,
+ typeNumber: 4,
+ colorDark: "#000000",
+ colorLight: "#ffffff",
+ correctLevel: QRErrorCorrectLevel.H
+ };
+
+ if (typeof vOption === 'string') {
+ vOption = {
+ text: vOption
+ };
+ }
+
+ // Overwrites options
+ if (vOption) {
+ for (var i in vOption) {
+ this._htOption[i] = vOption[i];
+ }
+ }
+
+ this._oQRCode = null;
+ this.canvasId = canvasId
+
+ if (this._htOption.text && this.canvasId) {
+ this.makeCode(this._htOption.text);
+ }
+ };
+
+ QRCode.prototype.makeCode = function (sText) {
+ this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel);
+ this._oQRCode.addData(sText);
+ this._oQRCode.make();
+ this.makeImage();
+ };
+
+ QRCode.prototype.makeImage = function () {
+ var _oContext
+ if (this._htOption.usingIn) {
+ _oContext = wx.createCanvasContext(this.canvasId, this._htOption.usingIn)
+ }
+ else {
+ _oContext = wx.createCanvasContext(this.canvasId)
+ }
+ var _htOption = this._htOption;
+ var oQRCode = this._oQRCode
+
+ var nCount = oQRCode.getModuleCount();
+ var nWidth = _htOption.padding ? (_htOption.width - 2 * _htOption.padding) / nCount : _htOption.width / nCount;
+ var nHeight = _htOption.padding ? (_htOption.height - 2 * _htOption.padding) / nCount : _htOption.height / nCount;
+ var nRoundedHeight = Math.round(nHeight);
+ var nRoundedWidth = Math.round(nWidth);
+
+ if (_htOption.image && _htOption.image != '') {
+ _oContext.drawImage(_htOption.image, 0, 0, _htOption.width, _htOption.height)
+ }
+ _oContext.setFillStyle('#fff')
+ _oContext.fillRect(0, 0, _htOption.width, _htOption.height)
+ _oContext.save()
+ for (var row = 0; row < nCount; row++) {
+ for (var col = 0; col < nCount; col++) {
+ var bIsDark = oQRCode.isDark(row, col);
+ var nLeft = _htOption.padding ? col * nWidth + _htOption.padding : col * nWidth;
+ var nTop = _htOption.padding ? row * nHeight + _htOption.padding : row * nHeight;
+ _oContext.setStrokeStyle(bIsDark ? _htOption.colorDark : _htOption.colorLight)
+ // _oContext.setStrokeStyle('red')
+ _oContext.setLineWidth(1)
+ _oContext.setFillStyle(bIsDark ? _htOption.colorDark : _htOption.colorLight)
+ // _oContext.setFillStyle('red')
+ // if (bIsDark) {
+ _oContext.fillRect(nLeft, nTop, nWidth, nHeight);
+ // }
+
+ // 안티 앨리어싱 방지 처리
+ // if (bIsDark) {
+ _oContext.strokeRect(
+ Math.floor(nLeft) + 0.5,
+ Math.floor(nTop) + 0.5,
+ nRoundedHeight
+ );
+
+ _oContext.strokeRect(
+ Math.ceil(nLeft) - 0.5,
+ Math.ceil(nTop) - 0.5,
+ nRoundedWidth,
+ nRoundedHeight
+ );
+ // }
+ // _oContext.fillRect(
+ // Math.floor(nLeft) + 0.5,
+ // Math.floor(nTop) + 0.5,
+ // nRoundedWidth,
+ // nRoundedHeight
+ // );
+ // _oContext.fillRect(
+ // Math.ceil(nLeft) - 0.5,
+ // Math.ceil(nTop) - 0.5,
+ // nRoundedWidth,
+ // nRoundedHeight
+ // );
+ // _oContext.clearRect(
+ // Math.floor(nLeft) + 0.5,
+ // Math.floor(nTop) + 0.5,
+ // nRoundedWidth,
+ // nRoundedHeight
+ // );
+ // _oContext.clearRect(
+ // Math.ceil(nLeft) - 0.5,
+ // Math.ceil(nTop) - 0.5,
+ // nRoundedWidth,
+ // nRoundedHeight
+ // );
+ }
+ }
+
+ _oContext.draw(false, () => {
+ setTimeout(() => {
+ this.exportImage()
+ }, 800)
+ })
+ };
+ // 保存为图片,将临时路径传给回调
+ QRCode.prototype.exportImage = function (callback) {
+ if (this._htOption.callback && typeof this._htOption.callback === 'function') {
+ wx.canvasToTempFilePath({
+ x: 0,
+ y: 0,
+ width: this._htOption.width,
+ height: this._htOption.height,
+ destWidth: this._htOption.width,
+ destHeight: this._htOption.height,
+ canvasId: this.canvasId,
+ success: (res) => {
+ this._htOption.callback({path: res.tempFilePath})
+ }
+ })
+ }
+ }
+
+ QRCode.CorrectLevel = QRErrorCorrectLevel;
+})();
+
+module.exports = QRCode
\ No newline at end of file
diff --git a/common/util.js b/common/util.js
new file mode 100644
index 0000000..f49a03f
--- /dev/null
+++ b/common/util.js
@@ -0,0 +1,26 @@
+const formatTime = date => {
+ const year = date.getFullYear()
+ const month = date.getMonth() + 1
+ const day = date.getDate()
+ const hour = date.getHours()
+ const minute = date.getMinutes()
+ const second = date.getSeconds()
+ return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
+}
+const formatDate = date => {
+ const year = date.getFullYear()
+ const month = date.getMonth() + 1
+ const day = date.getDate()
+
+
+ return [year, month, day].map(formatNumber).join('-')
+}
+const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : '0' + n
+}
+
+module.exports = {
+ formatTime: formatTime,
+ formatDate: formatDate
+}
\ No newline at end of file
diff --git a/components/drag_demo/DragButton.vue b/components/drag_demo/DragButton.vue
new file mode 100644
index 0000000..c0b90de
--- /dev/null
+++ b/components/drag_demo/DragButton.vue
@@ -0,0 +1,143 @@
+
+
+
+ {{ text }}
+
+
+
+
+
+
+
diff --git a/components/drag_demo/Inform.vue b/components/drag_demo/Inform.vue
new file mode 100644
index 0000000..e74f4c2
--- /dev/null
+++ b/components/drag_demo/Inform.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+ {{ item.content }}
+
+
+ 查看
+
+
+
+
+ {{ informInfo.title }}
+ {{ informInfo.content }}
+ 发布时间:{{ informInfo.date || '暂无' }}
+ 返回
+
+
+
+
+
+
+
+
diff --git a/components/drag_demo/index.vue b/components/drag_demo/index.vue
new file mode 100644
index 0000000..a209e2b
--- /dev/null
+++ b/components/drag_demo/index.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/head-info/head-info.vue b/components/head-info/head-info.vue
new file mode 100644
index 0000000..bdb870d
--- /dev/null
+++ b/components/head-info/head-info.vue
@@ -0,0 +1,43 @@
+
+
+
+
+ wchenp
+
+
+
+
+
+
+
+
+
diff --git a/components/sider-bar/slider-bar.vue b/components/sider-bar/slider-bar.vue
new file mode 100644
index 0000000..db3e72b
--- /dev/null
+++ b/components/sider-bar/slider-bar.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/components/uni-plate-input/uni-plate-input.css b/components/uni-plate-input/uni-plate-input.css
new file mode 100644
index 0000000..d381cff
--- /dev/null
+++ b/components/uni-plate-input/uni-plate-input.css
@@ -0,0 +1,208 @@
+.so-mask {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ background: rgba(0, 0, 0, 0.5);
+ z-index: 998
+}
+
+.so-plate {
+ box-sizing: border-box;
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ left: 0;
+ background: #fff;
+ padding: 25upx 25upx 0 25upx
+}
+
+.so-plate-head {
+ display: -webkit-box;
+ display: flex;
+ -webkit-box-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ align-items: center
+}
+
+.so-plate-type {
+ -webkit-box-flex: 1;
+ flex: 1;
+ display: block
+}
+
+.so-plate-type label {
+ display: inline-block;
+ min-height: 32upx;
+ font-size: 26upx;
+ margin-right: 20upx
+}
+
+.so-plate-body {
+ box-sizing: border-box;
+ padding: 30upx 0;
+ display: -webkit-box;
+ display: flex;
+ -webkit-box-pack: justify;
+ justify-content: space-between;
+ -webkit-box-align: center;
+ align-items: center
+}
+
+.so-plate-word {
+ border: 1upx solid #ccc;
+ border-radius: 10upx;
+ height: 0;
+ margin: 0 5upx;
+ box-sizing: border-box;
+ padding-bottom: calc(4.28571429%);
+ width: calc(4.28571429%);
+ position: relative
+}
+
+.so-plate-word.active {
+ border-color: #007aff;
+ box-shadow: 0 0 15upx 0 #007aff
+}
+
+.so-plate-word text {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ -webkit-transform: translateX(-50%) translateY(-50%);
+ transform: translateX(-50%) translateY(-50%);
+ font-weight: 700;
+ font-size: 32upx
+}
+
+.so-plate-dot {
+ width: 15upx;
+ height: 15upx;
+ background: #ccc;
+ border-radius: 50%;
+ margin: 0 5upx
+}
+
+.so-plate-keyboard {
+ background: #eee;
+ margin-left: -25upx;
+ margin-right: -25upx;
+ padding: 20upx 25upx 10upx 25upx;
+ box-sizing: border-box;
+ -webkit-transition: all .3s;
+ transition: all .3s
+}
+
+.so-plate-keyboard>view {
+ display: -webkit-box;
+ display: flex;
+ flex-wrap: wrap;
+ -webkit-box-pack: justify;
+ justify-content: space-between
+}
+
+.so-plate-key {
+ display: block;
+ background: #fff;
+ border-radius: 10upx;
+ box-shadow: 0 0 8upx 0 #bbb;
+ width: 80upx;
+ height: 80upx;
+ margin: 5upx 0;
+ font-size: 32upx;
+ text-align: center;
+ display: -webkit-box;
+ display: flex;
+ -webkit-box-align: center;
+ align-items: center;
+ -webkit-box-pack: center;
+ justify-content: center;
+ position: relative
+}
+
+.so-plate-key.hover {
+ background: #efefef
+}
+
+.so-plate-key.fill-block {
+ width: 80upx;
+ height: 80upx;
+ background: none;
+ box-shadow: none
+}
+
+.so-plate-btn {
+ display: inline-block;
+ background: #fff;
+ border-radius: 10upx;
+ box-shadow: 0 0 10upx 0 #bbb;
+ font-size: 28upx;
+ text-align: center;
+ margin: 0 0 0 10upx
+}
+
+.so-plate-btn-group {
+ display: -webkit-box;
+ display: flex;
+ -webkit-box-pack: justify;
+ justify-content: space-between;
+ background: #eee;
+ margin-left: -25upx;
+ margin-right: -25upx;
+ box-sizing: border-box;
+ padding: 0 25upx 10upx 25upx
+}
+
+.so-plate-btn--cancel {
+ margin: 0
+}
+
+.so-plate-btn--submit {
+ background: #5773f9;
+ color: #fff
+}
+
+.so-plate-btn--delete {
+ color: #fd6b6d
+}
+
+.animation-scale-up {
+ -webkit-animation-duration: .2s;
+ animation-duration: .2s;
+ -webkit-animation-timing-function: ease-out;
+ animation-timing-function: ease-out;
+ -webkit-animation-fill-mode: both;
+ animation-fill-mode: both;
+ -webkit-animation-name: scale-up;
+ animation-name: scale-up
+}
+
+@-webkit-keyframes scale-up {
+ 0% {
+ opacity: .8;
+ -webkit-transform: scale(.8);
+ transform: scale(.8)
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ transform: scale(1)
+ }
+}
+
+@keyframes scale-up {
+ 0% {
+ opacity: .8;
+ -webkit-transform: scale(.8);
+ transform: scale(.8)
+ }
+
+ 100% {
+ opacity: 1;
+ -webkit-transform: scale(1);
+ transform: scale(1)
+ }
+}
diff --git a/components/uni-plate-input/uni-plate-input.less b/components/uni-plate-input/uni-plate-input.less
new file mode 100644
index 0000000..b3594d3
--- /dev/null
+++ b/components/uni-plate-input/uni-plate-input.less
@@ -0,0 +1,154 @@
+.so-mask {
+ position: fixed;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ background: rgba(0, 0, 0, 0.5);
+ z-index: 998;
+}
+.so-plate {
+ box-sizing: border-box;
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ left: 0;
+ background: #fff;
+ padding: 25upx 25upx 0 25upx;
+ &-head {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+ &-type {
+ flex:1;
+ display:block;
+ label {
+ display: inline-block;
+ min-height: 32upx;
+ font-size: 26upx;
+ margin-right: 10upx;
+ }
+ }
+ &-body {
+ box-sizing: border-box;
+ padding: 30upx 0;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ }
+ &-word {
+ border: 1upx solid #ccc;
+ border-radius: 10upx;
+ height: 0;
+ margin: 0 5upx;
+ box-sizing: border-box;
+ padding-bottom: calc((100% - 70upx) / 7);
+ width: calc((100% - 70upx) / 7);
+ position: relative;
+ &.active {
+ border-color: #007aff;
+ box-shadow: 0 0 15upx 0 #007aff;
+ }
+ text {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translateX(-50%) translateY(-50%);
+ font-weight: 700;
+ font-size: 32upx;
+ }
+ }
+ &-dot {
+ width: 15upx;
+ height: 15upx;
+ background: #ccc;
+ border-radius: 50%;
+ margin: 0 5upx;
+ }
+ &-keyboard {
+ background: #eee;
+ margin-left: -25upx;
+ margin-right: -25upx;
+ padding: 20upx 25upx 10upx 25upx;
+ box-sizing: border-box;
+ transition: all .3s;
+ &>view{
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ }
+ }
+ &-key {
+ display: block;
+ background: #fff;
+ border-radius: 10upx;
+ box-shadow: 0 0 8upx 0 #bbb;
+ width: 80upx;
+ height: 80upx;
+ margin: 5upx 0;
+ font-size: 32upx;
+ text-align: center;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ position: relative;
+ &.hover {
+ background: #efefef;
+ }
+ &.fill-block {
+ width: 80upx;
+ height: 80upx;
+ background: none;
+ box-shadow: none;
+ }
+ }
+ &-btn {
+ display: inline-block;
+ background: #fff;
+ border-radius: 10upx;
+ box-shadow: 0 0 10upx 0 #bbb;
+ font-size: 28upx;
+ text-align: center;
+ margin:0 0 0 10upx;
+ padding:0 25upx;
+ &-group{
+ display: flex;
+ justify-content: space-between;
+ background: #eee;
+ margin-left: -25upx;
+ margin-right: -25upx;
+ box-sizing: border-box;
+ padding: 0 25upx 10upx 25upx;
+ }
+ &--cancel{
+ margin:0;
+ }
+ &--submit{
+ background:#5773f9;
+ color:#fff;
+ }
+ &--delete{
+ color:#fd6b6d;
+ }
+ }
+}
+
+
+.animation-scale-up {
+ animation-duration: .2s;
+ animation-timing-function: ease-out;
+ animation-fill-mode: both;
+ animation-name: scale-up
+}
+@keyframes scale-up {
+ 0% {
+ opacity: .8;
+ transform: scale(.8)
+ }
+
+ 100% {
+ opacity: 1;
+ transform: scale(1)
+ }
+}
\ No newline at end of file
diff --git a/components/uni-plate-input/uni-plate-input.vue b/components/uni-plate-input/uni-plate-input.vue
new file mode 100644
index 0000000..029a9d8
--- /dev/null
+++ b/components/uni-plate-input/uni-plate-input.vue
@@ -0,0 +1,265 @@
+/**
+* @author minisola
+* @version 20190814
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ currentInputValue[0] }}
+
+
+ {{ currentInputValue[1] }}
+
+
+
+ {{ currentInputValue[2] }}
+
+
+ {{ currentInputValue[3] }}
+
+
+ {{ currentInputValue[4] }}
+
+
+ {{ currentInputValue[5] }}
+
+
+ {{ currentInputValue[6] }}
+
+
+ {{ currentInputValue[7] }}
+
+
+
+
+
+
+
+
diff --git a/config/index.js b/config/index.js
new file mode 100644
index 0000000..d2c90c8
--- /dev/null
+++ b/config/index.js
@@ -0,0 +1,22 @@
+export default {
+
+ /**
+ * @description secret
+ */
+ // secret:'0941059588804f6c34535827a4db8f3f',
+ /**
+ * @description appid
+ */
+ // appid:'wx6f99275e17e83d6b',
+ /**
+ * @description token在Cookie中存储的天数,默认1天
+ */
+ cookieExpires: 1,
+ /**
+ * @description api请求基础路径
+ */
+ // local: "http://192.168.0.103:8891",
+ local: "http://61.184.202.72:8891",
+ imgSrc: "http://116.205.142.169/HtRtosResource/assets/",
+ mapkey: "FUFBZ-KBIWW-P63RR-RR4W3-BNV4H-T6BGX"
+}
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..c3ff205
--- /dev/null
+++ b/index.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..0cec6c1
--- /dev/null
+++ b/main.js
@@ -0,0 +1,27 @@
+import App from './App'
+import store from './store'
+import config from '@/config';
+const { local, mapkey, imgSrc} = config;
+Vue.prototype.$local = local;
+Vue.prototype.$imgSrc = imgSrc;
+// 配置公共方法
+import util from './common/util.js';
+Vue.prototype.$util = util;
+
+import Vue from 'vue'
+Vue.config.productionTip = false
+App.mpType = 'app'
+
+import uniPop from './uni_modules/uni-popup/components/uni-popup/uni-popup'
+import liuStepBar from './uni_modules/liu-step-bar/components/liu-step-bar/liu-step-bar'
+
+Vue.component('uni-pop', uniPop)
+Vue.component('liu-step-bar', liuStepBar)
+
+
+const app = new Vue({
+ store,
+ ...App
+})
+app.$mount()
+
diff --git a/manifest.json b/manifest.json
new file mode 100644
index 0000000..311f8bc
--- /dev/null
+++ b/manifest.json
@@ -0,0 +1,88 @@
+{
+ "name": "gang",
+ "appid": "__UNI__820CEDC",
+ "description": "",
+ "versionName": "1.0.0",
+ "versionCode": "100",
+ "transformPx": false,
+ /* 5+App特有相关 */
+ "app-plus": {
+ "usingComponents": true,
+ "nvueStyleCompiler": "uni-app",
+ "compilerVersion": 3,
+ "splashscreen": {
+ "alwaysShowBeforeRender": true,
+ "waiting": true,
+ "autoclose": true,
+ "delay": 0
+ },
+ /* 模块配置 */
+ "modules": {},
+ /* 应用发布信息 */
+ "distribute": {
+ /* android打包配置 */
+ "android": {
+ "permissions": [
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ]
+ },
+ /* ios打包配置 */
+ "ios": {},
+ /* SDK配置 */
+ "sdkConfigs": {}
+ }
+ },
+ /* 快应用特有相关 */
+ "quickapp": {},
+ /* 小程序特有相关 */
+ "mp-weixin": {
+ "appid": "wxb5fe43c6c0f0a8da",
+ "setting": {
+ "urlCheck": false,
+ "es6": true,
+ "ignoreDevUnusedFiles": false
+ },
+ "usingComponents": true,
+ "permission": {
+ "scope.userLocation": {
+ "desc": "获取当前定位判断距离"
+ }
+ },
+ "requiredPrivateInfos": [
+ "getLocation"
+ ],
+ "plugins": {
+ "ocr-plugin": {
+ "version": "3.1.1",
+ "provider": "wx4418e3e031e551be"
+ }
+ }
+ },
+ "mp-alipay": {
+ "usingComponents": true
+ },
+ "mp-baidu": {
+ "usingComponents": true
+ },
+ "mp-toutiao": {
+ "usingComponents": true
+ },
+ "uniStatistics": {
+ "enable": false
+ },
+ "vueVersion": "2"
+}
diff --git a/pages.json b/pages.json
new file mode 100644
index 0000000..1356288
--- /dev/null
+++ b/pages.json
@@ -0,0 +1,32 @@
+{
+ "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
+ {
+ "path": "pages/index/index",
+ "style": {
+ "navigationBarTitleText": "首页"
+ }
+ }
+ ],
+ "tabBar": {
+ "color": "#9A9A9A",
+ "selectedColor": "#000000",
+ "list": []
+ },
+ "globalStyle": {
+ "backgroundTextStyle": "light",
+ "navigationBarBackgroundColor": "#0052A4",
+ "navigationBarTitleText": "港口Ipad",
+ "navigationBarTextStyle": "white"
+
+
+ },
+ "uniIdRouter": {},
+ "condition": { //模式配置,仅开发期间生效
+ "current": 0, //当前激活的模式(list 的索引项)
+ "list": [{
+ "name": "", //模式名称
+ "path": "", //启动页面,必选
+ "query": "" //启动参数,在页面的onLoad函数里面得到
+ }]
+ }
+}
diff --git a/pages/index/index.vue b/pages/index/index.vue
new file mode 100644
index 0000000..b809eeb
--- /dev/null
+++ b/pages/index/index.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/static/images/discern/error1.png b/static/images/discern/error1.png
new file mode 100644
index 0000000..0869cb3
Binary files /dev/null and b/static/images/discern/error1.png differ
diff --git a/static/images/discern/error2.png b/static/images/discern/error2.png
new file mode 100644
index 0000000..9e1703a
Binary files /dev/null and b/static/images/discern/error2.png differ
diff --git a/static/images/discern/error3.png b/static/images/discern/error3.png
new file mode 100644
index 0000000..cc37f19
Binary files /dev/null and b/static/images/discern/error3.png differ
diff --git a/static/images/discern/ex1.png b/static/images/discern/ex1.png
new file mode 100644
index 0000000..23decfc
Binary files /dev/null and b/static/images/discern/ex1.png differ
diff --git a/static/images/discern/ex2.png b/static/images/discern/ex2.png
new file mode 100644
index 0000000..909a5d8
Binary files /dev/null and b/static/images/discern/ex2.png differ
diff --git a/static/images/discern/no.png b/static/images/discern/no.png
new file mode 100644
index 0000000..9ffabf2
Binary files /dev/null and b/static/images/discern/no.png differ
diff --git a/static/images/discern/ok.png b/static/images/discern/ok.png
new file mode 100644
index 0000000..595b044
Binary files /dev/null and b/static/images/discern/ok.png differ
diff --git a/static/images/discern/yes.png b/static/images/discern/yes.png
new file mode 100644
index 0000000..6ff329d
Binary files /dev/null and b/static/images/discern/yes.png differ
diff --git a/static/images/right.png b/static/images/right.png
new file mode 100644
index 0000000..1034c76
Binary files /dev/null and b/static/images/right.png differ
diff --git a/static/images/theme/dakaH.png b/static/images/theme/dakaH.png
new file mode 100644
index 0000000..cb44c95
Binary files /dev/null and b/static/images/theme/dakaH.png differ
diff --git a/static/images/theme/dakaH_a.png b/static/images/theme/dakaH_a.png
new file mode 100644
index 0000000..21fedac
Binary files /dev/null and b/static/images/theme/dakaH_a.png differ
diff --git a/static/images/theme/icon_home.png b/static/images/theme/icon_home.png
new file mode 100644
index 0000000..4f00927
Binary files /dev/null and b/static/images/theme/icon_home.png differ
diff --git a/static/images/theme/icon_home_a.png b/static/images/theme/icon_home_a.png
new file mode 100644
index 0000000..7838019
Binary files /dev/null and b/static/images/theme/icon_home_a.png differ
diff --git a/static/images/theme/icon_mine.png b/static/images/theme/icon_mine.png
new file mode 100644
index 0000000..e12c5e5
Binary files /dev/null and b/static/images/theme/icon_mine.png differ
diff --git a/static/images/theme/mine.png b/static/images/theme/mine.png
new file mode 100644
index 0000000..62b208f
Binary files /dev/null and b/static/images/theme/mine.png differ
diff --git a/static/images/theme/mine_a.png b/static/images/theme/mine_a.png
new file mode 100644
index 0000000..34a7bc2
Binary files /dev/null and b/static/images/theme/mine_a.png differ
diff --git a/static/images/theme/tjHui.png b/static/images/theme/tjHui.png
new file mode 100644
index 0000000..43824f3
Binary files /dev/null and b/static/images/theme/tjHui.png differ
diff --git a/static/images/theme/tongJ.png b/static/images/theme/tongJ.png
new file mode 100644
index 0000000..f6a6192
Binary files /dev/null and b/static/images/theme/tongJ.png differ
diff --git a/static/images/theme/toux.png b/static/images/theme/toux.png
new file mode 100644
index 0000000..f2b3054
Binary files /dev/null and b/static/images/theme/toux.png differ
diff --git a/static/images/theme/xiaoxi.png b/static/images/theme/xiaoxi.png
new file mode 100644
index 0000000..e3d48ce
Binary files /dev/null and b/static/images/theme/xiaoxi.png differ
diff --git a/static/images/theme/xiaoxi_a.png b/static/images/theme/xiaoxi_a.png
new file mode 100644
index 0000000..f93913b
Binary files /dev/null and b/static/images/theme/xiaoxi_a.png differ
diff --git a/store/index.js b/store/index.js
new file mode 100644
index 0000000..6ded5ba
--- /dev/null
+++ b/store/index.js
@@ -0,0 +1,130 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+Vue.use(Vuex)
+
+
+const store = new Vuex.Store({
+ state: {
+ userInfo: uni.getStorageSync('userInfo'),
+ customInfo: uni.getStorageSync('customInfo'),
+ customer: uni.getStorageSync('customer')
+ },
+ mutations: {
+ set_user_info(state, info) {
+ state.userInfo = info ? info : uni.getStorageSync('userInfo');
+ },
+ set_customer_info(state, info) {
+ state.customInfo = info ? info : uni.getStorageSync('customer');
+ },
+
+ },
+ actions: {
+ goout(state, data) {
+ if (data.code == '401') {
+ if (uni.getStorageSync('token')) {
+ uni.showToast({
+ title: '当前登录已失效,请重新登录后再试',
+ icon: "none",
+ duration: 3000
+ });
+ } else {
+ uni.showToast({
+ title: '您暂未登录,请先登录',
+ icon: "none",
+ duration: 3000
+ });
+ }
+
+ } else {
+ uni.showToast({
+ title: data.msg,
+ icon: "none",
+ duration: 3000
+ });
+ }
+ },
+ majax(state, {
+ url,
+ params,
+ method
+ }) {
+ if (uni.getStorageSync('networkType') == 'none') {
+ uni.showToast({
+ title: '检查网络是否连接',
+ icon: "none"
+ });
+ return false;
+ }
+ //返回异步加载结果
+ return new Promise((resolve, reject) => {
+ try {
+ uni.request({
+ url: url,
+ method: method,
+ data: params,
+ header: {
+ // 'token': uni.getStorageSync('token'),
+ }
+ }).then(data => { //data为一个数组,数组第一项为错误信息,第二项为返回数据
+ let [error, res] = data;
+ if (res) {
+ // let jsRes = JSON.parse(res.data.replace(/'/g,"\""))
+ let jsRes = res.data
+ resolve(jsRes);
+ } else {
+ resolve({
+ "msg": "请求失败!"
+ });
+ }
+ })
+ } catch (error) {
+ reject(error)
+ }
+ })
+ },
+ najax(state, {
+ url,
+ params,
+ method
+ }) {
+ if (uni.getStorageSync('networkType') == 'none') {
+ uni.showToast({
+ title: '检查网络是否连接',
+ icon: "none"
+ });
+ return false;
+ }
+ //返回异步加载结果
+ return new Promise((resolve, reject) => {
+ try {
+ uni.request({
+ url: url,
+ method: method,
+ data: params,
+ header: {
+ // 'token': uni.getStorageSync('token'),
+ 'content-type': 'application/x-www-form-urlencoded',
+ // 'content-type': 'multipart/form-data'
+ // 'content-type': 'application/json'
+ }
+ }).then(data => { //data为一个数组,数组第一项为错误信息,第二项为返回数据
+ let [error, res] = data;
+ if (res) {
+ // let jsRes = JSON.parse(res.data.replace(/'/g,"\""))
+ let jsRes = res.data
+ resolve(jsRes);
+ } else {
+ resolve({
+ "msg": "请求失败!"
+ });
+ }
+ })
+ } catch (error) {
+ reject(error)
+ }
+ })
+ }
+ }
+})
+
+export default store
diff --git a/style/css/flex-main.css b/style/css/flex-main.css
new file mode 100644
index 0000000..0d6aae6
--- /dev/null
+++ b/style/css/flex-main.css
@@ -0,0 +1,106 @@
+/*单行文本溢出省略号*/
+.one-t {
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ transition: all linear 0.2s;
+}
+/*多行文本溢出省略号*/
+.more-t {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ transition: all linear 0.2s;
+}
+
+
+/* ==================
+ flex布局(colorui里面也有相关基础样式)
+ ==================== */
+ /* 多行排列 */
+ .x-more{
+ display: flex;
+ flex-direction: row;
+ flex-wrap: wrap;
+ text-align: center;
+ }
+/* x水平排列*/
+
+.x-f {
+ display: flex;
+ align-items: center;
+}
+/*x两端且水平居中*/
+.x-bc {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+}
+/*x平分且水平居中*/
+.x-ac {
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+}
+
+.x-sc {
+ display: flex;
+ justify-content: space-evenly;
+ align-items: center;
+}
+
+/*x水平靠上对齐*/
+.x-start {
+ display: flex;
+ align-items: flex-start;
+}
+/*x水平靠下对齐*/
+.x-end {
+ display: flex;
+ align-items: flex-end;
+ text-align: end;
+}
+/*上下左右居中*/
+.x-c {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+/*y竖直靠左*/
+.y-start {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+}
+/*y竖直靠右*/
+.y-end {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-end;
+}
+/*y竖直居中*/
+.y-f {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+ /* y竖直两端 */
+.y-b {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+/*y竖直两端居中*/
+.y-bc {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+}
+.y-sc{
+ display: flex;
+ flex-direction: column;
+ justify-content: space-evenly;
+}
diff --git a/style/css/layout.css b/style/css/layout.css
new file mode 100644
index 0000000..553d603
--- /dev/null
+++ b/style/css/layout.css
@@ -0,0 +1,63 @@
+.container {
+ min-height: 100vh;
+ background-color: #f5f6fa;
+}
+.zhanwei {
+ height: 100rpx;
+}
+.center {
+ text-align: center;
+}
+.red {
+ color: #e54d42;
+}
+.green {
+ color: #05b578;
+}
+.hui {
+ color: #999999;
+}
+.blue {
+ color: #1073d7;
+}
+.head {
+ background-color: #fff;
+ height: 120rpx;
+ display: flex;
+ justify-content: space-between;
+ padding: 20rpx;
+}
+
+.head .info {
+ display: flex;
+ justify-content: start;
+}
+
+.head .info .toux {
+ width: 80rpx;
+ height: 80rpx;
+ border-radius: 120rpx;
+ background-color: #cccccc;
+ margin-right: 20rpx;
+}
+
+.head .info .name {
+ color: #333;
+ font-size: 30rpx;
+ line-height: 40rpx;
+}
+
+.head .info .che {
+ color: #ccc;
+ font-size: 25rpx;
+ line-height: 50rpx;
+}
+
+.head .rqi {
+ color: #ccc;
+ height: 80rpx;
+ line-height: 80rpx;
+ font-size: 25rpx;
+}
+
+
diff --git a/style/css/main.css b/style/css/main.css
new file mode 100644
index 0000000..124692c
--- /dev/null
+++ b/style/css/main.css
@@ -0,0 +1,2989 @@
+/*
+ ColorUi for uniApp v2.1.6 | by 文晓港 2019-05-31 10:44:24
+ 仅供学习交流,如作它用所承受的法律责任一概与作者无关
+
+ *使用ColorUi开发扩展与插件时,请注明基于ColorUi开发
+
+ (QQ交流群:240787041)
+*/
+
+/* ==================
+ 初始化
+ ==================== */
+body {
+ background-color: #f1f1f1;
+ font-size: 28rpx;
+ color: #333333;
+ font-family: Helvetica Neue, Helvetica, sans-serif;
+}
+
+view,
+scroll-view,
+swiper,
+button,
+input,
+textarea,
+label,
+navigator,
+image {
+ box-sizing: border-box;
+}
+
+.round {
+ border-radius: 5000rpx;
+}
+
+.radius {
+ border-radius: 6rpx;
+}
+
+.page {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+
+/* ==================
+ 图片
+ ==================== */
+
+image {
+ max-width: 100%;
+ display: inline-block;
+ position: relative;
+ z-index: 0;
+}
+
+image.loading::before {
+ content: "";
+ background-color: #f5f5f5;
+ display: block;
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: -2;
+}
+
+image.loading::after {
+ content: "\e7f1";
+ font-family: "cuIcon";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 32rpx;
+ height: 32rpx;
+ line-height: 32rpx;
+ right: 0;
+ bottom: 0;
+ z-index: -1;
+ font-size: 32rpx;
+ margin: auto;
+ color: #ccc;
+ -webkit-animation: cuIcon-spin 2s infinite linear;
+ animation: cuIcon-spin 2s infinite linear;
+ display: block;
+}
+
+.response {
+ width: 100%;
+}
+
+/* ==================
+ 边框
+ ==================== */
+
+/* -- 实线 -- */
+
+.solid,
+.solid-top,
+.solid-right,
+.solid-bottom,
+.solid-left,
+.solids,
+.solids-top,
+.solids-right,
+.solids-bottom,
+.solids-left,
+.dashed,
+.dashed-top,
+.dashed-right,
+.dashed-bottom,
+.dashed-left {
+ position: relative;
+}
+
+.solid::after,
+.solid-top::after,
+.solid-right::after,
+.solid-bottom::after,
+.solid-left::after,
+.solids::after,
+.solids-top::after,
+.solids-right::after,
+.solids-bottom::after,
+.solids-left::after,
+.dashed::after,
+.dashed-top::after,
+.dashed-right::after,
+.dashed-bottom::after,
+.dashed-left::after {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+}
+
+.solid::after {
+ border: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-top::after {
+ border-top: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-right::after {
+ border-right: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-bottom::after {
+ border-bottom: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.solid-left::after {
+ border-left: 1rpx solid rgba(0, 0, 0, 0.1);
+}
+
+.solids::after {
+ border: 8rpx solid #eee;
+}
+
+.solids-top::after {
+ border-top: 8rpx solid #eee;
+}
+
+.solids-right::after {
+ border-right: 8rpx solid #eee;
+}
+
+.solids-bottom::after {
+ border-bottom: 8rpx solid #eee;
+}
+
+.solids-left::after {
+ border-left: 8rpx solid #eee;
+}
+
+/* -- 虚线 -- */
+
+.dashed::after {
+ border: 1rpx dashed #ddd;
+}
+
+.dashed-top::after {
+ border-top: 1rpx dashed #ddd;
+}
+
+.dashed-right::after {
+ border-right: 1rpx dashed #ddd;
+}
+
+.dashed-bottom::after {
+ border-bottom: 1rpx dashed #ddd;
+}
+
+.dashed-left::after {
+ border-left: 1rpx dashed #ddd;
+}
+
+/* -- 阴影 -- */
+
+.shadow[class*='white'] {
+ --ShadowSize: 0 1rpx 6rpx;
+}
+
+.shadow-lg {
+ --ShadowSize: 0rpx 40rpx 100rpx 0rpx;
+}
+
+.shadow-warp {
+ position: relative;
+ box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.1);
+}
+
+.shadow-warp:before,
+.shadow-warp:after {
+ position: absolute;
+ content: "";
+ top: 20rpx;
+ bottom: 30rpx;
+ left: 20rpx;
+ width: 50%;
+ box-shadow: 0 30rpx 20rpx rgba(0, 0, 0, 0.2);
+ transform: rotate(-3deg);
+ z-index: -1;
+}
+
+.shadow-warp:after {
+ right: 20rpx;
+ left: auto;
+ transform: rotate(3deg);
+}
+
+.shadow-blur {
+ position: relative;
+}
+
+.shadow-blur::before {
+ content: "";
+ display: block;
+ background: inherit;
+ filter: blur(10rpx);
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 10rpx;
+ left: 10rpx;
+ z-index: -1;
+ opacity: 0.4;
+ transform-origin: 0 0;
+ border-radius: inherit;
+ transform: scale(1, 1);
+}
+
+/* ==================
+ 按钮
+ ==================== */
+
+.cu-btn {
+ position: relative;
+ border: 0rpx;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: 0 30rpx;
+ font-size: 28rpx;
+ height: 64rpx;
+ line-height: 1;
+ text-align: center;
+ text-decoration: none;
+ overflow: visible;
+ margin-left: initial;
+ transform: translate(0rpx, 0rpx);
+ margin-right: initial;
+}
+
+.cu-btn::after {
+ display: none;
+}
+
+.cu-btn:not([class*="bg-"]) {
+ background-color: #f0f0f0;
+}
+
+.cu-btn[class*="line"] {
+ background-color: transparent;
+}
+
+.cu-btn[class*="line"]::after {
+ content: " ";
+ display: block;
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border: 1rpx solid currentColor;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ box-sizing: border-box;
+ border-radius: 12rpx;
+ z-index: 1;
+ pointer-events: none;
+}
+
+.cu-btn.round[class*="line"]::after {
+ border-radius: 1000rpx;
+}
+
+.cu-btn[class*="lines"]::after {
+ border: 6rpx solid currentColor;
+}
+
+.cu-btn[class*="bg-"]::after {
+ display: none;
+}
+
+.cu-btn.sm {
+ padding: 0 20rpx;
+ font-size: 20rpx;
+ height: 48rpx;
+}
+
+.cu-btn.lg {
+ padding: 0 40rpx;
+ font-size: 32rpx;
+ height: 80rpx;
+}
+
+.cu-btn.cuIcon.sm {
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.cu-btn.cuIcon {
+ width: 64rpx;
+ height: 64rpx;
+ border-radius: 500rpx;
+ padding: 0;
+}
+
+button.cuIcon.lg {
+ width: 80rpx;
+ height: 80rpx;
+}
+
+.cu-btn.shadow-blur::before {
+ top: 4rpx;
+ left: 4rpx;
+ filter: blur(6rpx);
+ opacity: 0.6;
+}
+
+.cu-btn.button-hover {
+ transform: translate(1rpx, 1rpx);
+}
+
+.block {
+ display: block;
+}
+
+.cu-btn.block {
+ display: flex;
+}
+
+.cu-btn[disabled] {
+ opacity: 0.6;
+ color: #ffffff;
+}
+
+/* ==================
+ 徽章
+ ==================== */
+
+.cu-tag {
+ font-size: 24rpx;
+ vertical-align: middle;
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ box-sizing: border-box;
+ padding: 0rpx 16rpx;
+ height: 48rpx;
+ font-family: Helvetica Neue, Helvetica, sans-serif;
+ white-space: nowrap;
+}
+
+.cu-tag:not([class*="bg"]):not([class*="line"]) {
+ background-color: #f1f1f1;
+}
+
+.cu-tag[class*="line-"]::after {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border: 1rpx solid currentColor;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ box-sizing: border-box;
+ border-radius: inherit;
+ z-index: 1;
+ pointer-events: none;
+}
+
+.cu-tag.radius[class*="line"]::after {
+ border-radius: 12rpx;
+}
+
+.cu-tag.round[class*="line"]::after {
+ border-radius: 1000rpx;
+}
+
+.cu-tag[class*="line-"]::after {
+ border-radius: 0;
+}
+
+.cu-tag+.cu-tag {
+ margin-left: 10rpx;
+}
+
+.cu-tag.sm {
+ font-size: 20rpx;
+ padding: 0rpx 12rpx;
+ height: 32rpx;
+}
+
+.cu-capsule {
+ display: inline-flex;
+ vertical-align: middle;
+}
+
+.cu-capsule+.cu-capsule {
+ margin-left: 10rpx;
+}
+
+.cu-capsule .cu-tag {
+ margin: 0;
+}
+
+.cu-capsule .cu-tag[class*="line-"]:last-child::after {
+ border-left: 0rpx solid transparent;
+}
+
+.cu-capsule .cu-tag[class*="line-"]:first-child::after {
+ border-right: 0rpx solid transparent;
+}
+
+.cu-capsule.radius .cu-tag:first-child {
+ border-top-left-radius: 6rpx;
+ border-bottom-left-radius: 6rpx;
+}
+
+.cu-capsule.radius .cu-tag:last-child::after,
+.cu-capsule.radius .cu-tag[class*="line-"] {
+ border-top-right-radius: 12rpx;
+ border-bottom-right-radius: 12rpx;
+}
+
+.cu-capsule.round .cu-tag:first-child {
+ border-top-left-radius: 200rpx;
+ border-bottom-left-radius: 200rpx;
+ text-indent: 4rpx;
+}
+
+.cu-capsule.round .cu-tag:last-child::after,
+.cu-capsule.round .cu-tag:last-child {
+ border-top-right-radius: 200rpx;
+ border-bottom-right-radius: 200rpx;
+ text-indent: -4rpx;
+}
+
+.cu-tag.badge {
+ border-radius: 200rpx;
+ position: absolute;
+ top: -10rpx;
+ right: -10rpx;
+ font-size: 20rpx;
+ padding: 0rpx 10rpx;
+ height: 28rpx;
+ color: #ffffff;
+}
+
+.cu-tag.badge:not([class*="bg-"]) {
+ background-color: #dd514c;
+}
+
+.cu-tag:empty:not([class*="cuIcon-"]) {
+ padding: 0rpx;
+ width: 16rpx;
+ height: 16rpx;
+ top: -4rpx;
+ right: -4rpx;
+}
+
+.cu-tag[class*="cuIcon-"] {
+ width: 32rpx;
+ height: 32rpx;
+ top: -4rpx;
+ right: -4rpx;
+}
+
+/* ==================
+ 头像
+ ==================== */
+
+.cu-avatar {
+ font-variant: small-caps;
+ margin: 0;
+ padding: 0;
+ display: inline-flex;
+ text-align: center;
+ justify-content: center;
+ align-items: center;
+ background-color: #ccc;
+ color: #ffffff;
+ white-space: nowrap;
+ position: relative;
+ width: 64rpx;
+ height: 64rpx;
+ background-size: cover;
+ background-position: center;
+ vertical-align: middle;
+ font-size: 1.5em;
+}
+
+.cu-avatar.sm {
+ width: 48rpx;
+ height: 48rpx;
+ font-size: 1em;
+}
+
+.cu-avatar.lg {
+ width: 96rpx;
+ height: 96rpx;
+ font-size: 2em;
+}
+
+.cu-avatar.xl {
+ width: 128rpx;
+ height: 128rpx;
+ font-size: 2.5em;
+}
+
+.cu-avatar .avatar-text {
+ font-size: 0.4em;
+}
+
+.cu-avatar-group {
+ direction: rtl;
+ unicode-bidi: bidi-override;
+ padding: 0 10rpx 0 40rpx;
+ display: inline-block;
+}
+
+.cu-avatar-group .cu-avatar {
+ margin-left: -30rpx;
+ border: 4rpx solid #f1f1f1;
+ vertical-align: middle;
+}
+
+.cu-avatar-group .cu-avatar.sm {
+ margin-left: -20rpx;
+ border: 1rpx solid #f1f1f1;
+}
+
+/* ==================
+ 进度条
+ ==================== */
+
+.cu-progress {
+ overflow: hidden;
+ height: 28rpx;
+ background-color: #ebeef5;
+ display: inline-flex;
+ align-items: center;
+ width: 100%;
+}
+
+.cu-progress+view,
+.cu-progress+text {
+ line-height: 1;
+}
+
+.cu-progress.xs {
+ height: 10rpx;
+}
+
+.cu-progress.sm {
+ height: 20rpx;
+}
+
+.cu-progress view {
+ width: 0;
+ height: 100%;
+ align-items: center;
+ display: flex;
+ justify-items: flex-end;
+ justify-content: space-around;
+ font-size: 20rpx;
+ color: #ffffff;
+ transition: width 0.6s ease;
+}
+
+.cu-progress text {
+ align-items: center;
+ display: flex;
+ font-size: 20rpx;
+ color: #333333;
+ text-indent: 10rpx;
+}
+
+.cu-progress.text-progress {
+ padding-right: 60rpx;
+}
+
+.cu-progress.striped view {
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-size: 72rpx 72rpx;
+}
+
+.cu-progress.active view {
+ animation: progress-stripes 2s linear infinite;
+}
+
+@keyframes progress-stripes {
+ from {
+ background-position: 72rpx 0;
+ }
+
+ to {
+ background-position: 0 0;
+ }
+}
+
+/* ==================
+ 加载
+ ==================== */
+
+.cu-load {
+ display: block;
+ line-height: 3em;
+ text-align: center;
+}
+
+.cu-load::before {
+ font-family: "cuIcon";
+ display: inline-block;
+ margin-right: 6rpx;
+}
+
+.cu-load.loading::before {
+ content: "\e67a";
+ animation: cuIcon-spin 2s infinite linear;
+}
+
+.cu-load.loading::after {
+ content: "加载中...";
+}
+
+.cu-load.over::before {
+ content: "\e64a";
+}
+
+.cu-load.over::after {
+ content: "没有更多了";
+}
+
+.cu-load.erro::before {
+ content: "\e658";
+}
+
+.cu-load.erro::after {
+ content: "加载失败";
+}
+
+.cu-load.load-cuIcon::before {
+ font-size: 32rpx;
+}
+
+.cu-load.load-cuIcon::after {
+ display: none;
+}
+
+.cu-load.load-cuIcon.over {
+ display: none;
+}
+
+.cu-load.load-modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 140rpx;
+ left: 0;
+ margin: auto;
+ width: 260rpx;
+ height: 260rpx;
+ background-color: #ffffff;
+ border-radius: 10rpx;
+ box-shadow: 0 0 0rpx 2000rpx rgba(0, 0, 0, 0.5);
+ display: flex;
+ align-items: center;
+ flex-direction: column;
+ justify-content: center;
+ font-size: 28rpx;
+ z-index: 9999;
+ line-height: 2.4em;
+}
+
+.cu-load.load-modal [class*="cuIcon-"] {
+ font-size: 60rpx;
+}
+
+.cu-load.load-modal image {
+ width: 70rpx;
+ height: 70rpx;
+}
+
+.cu-load.load-modal::after {
+ content: "";
+ position: absolute;
+ background-color: #ffffff;
+ border-radius: 50%;
+ width: 200rpx;
+ height: 200rpx;
+ font-size: 10px;
+ border-top: 6rpx solid rgba(0, 0, 0, 0.05);
+ border-right: 6rpx solid rgba(0, 0, 0, 0.05);
+ border-bottom: 6rpx solid rgba(0, 0, 0, 0.05);
+ border-left: 6rpx solid #f37b1d;
+ animation: cuIcon-spin 1s infinite linear;
+ z-index: -1;
+}
+
+.load-progress {
+ pointer-events: none;
+ top: 0;
+ position: fixed;
+ width: 100%;
+ left: 0;
+ z-index: 2000;
+}
+
+.load-progress.hide {
+ display: none;
+}
+
+.load-progress .load-progress-bar {
+ position: relative;
+ width: 100%;
+ height: 4rpx;
+ overflow: hidden;
+ transition: all 200ms ease 0s;
+}
+
+.load-progress .load-progress-spinner {
+ position: absolute;
+ top: 10rpx;
+ right: 10rpx;
+ z-index: 2000;
+ display: block;
+}
+
+.load-progress .load-progress-spinner::after {
+ content: "";
+ display: block;
+ width: 24rpx;
+ height: 24rpx;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ border: solid 4rpx transparent;
+ border-top-color: inherit;
+ border-left-color: inherit;
+ border-radius: 50%;
+ -webkit-animation: load-progress-spinner 0.4s linear infinite;
+ animation: load-progress-spinner 0.4s linear infinite;
+}
+
+@-webkit-keyframes load-progress-spinner {
+ 0% {
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ }
+
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+@keyframes load-progress-spinner {
+ 0% {
+ -webkit-transform: rotate(0);
+ transform: rotate(0);
+ }
+
+ 100% {
+ -webkit-transform: rotate(360deg);
+ transform: rotate(360deg);
+ }
+}
+
+/* ==================
+ 列表
+ ==================== */
+.grayscale {
+ filter: grayscale(1);
+}
+
+.cu-list+.cu-list {
+ margin-top: 30rpx
+}
+
+.cu-list>.cu-item {
+ transition: all .6s ease-in-out 0s;
+ transform: translateX(0rpx)
+}
+
+.cu-list>.cu-item.move-cur {
+ transform: translateX(-260rpx)
+}
+
+.cu-list>.cu-item .move {
+ position: absolute;
+ right: 0;
+ display: flex;
+ width: 260rpx;
+ height: 100%;
+ transform: translateX(100%)
+}
+
+.cu-list>.cu-item .move view {
+ display: flex;
+ flex: 1;
+ justify-content: center;
+ align-items: center
+}
+
+.cu-list.menu-avatar {
+ overflow: hidden;
+}
+
+.cu-list.menu-avatar>.cu-item {
+ position: relative;
+ display: flex;
+ padding-right: 10rpx;
+ height: 140rpx;
+ background-color: #ffffff;
+ justify-content: flex-end;
+ align-items: center
+}
+
+.cu-list.menu-avatar>.cu-item>.cu-avatar {
+ position: absolute;
+ left: 30rpx
+}
+
+.cu-list.menu-avatar>.cu-item .flex .text-cut {
+ max-width: 510rpx
+}
+
+.cu-list.menu-avatar>.cu-item .content {
+ position: absolute;
+ left: 146rpx;
+ width: calc(100% - 96rpx - 60rpx - 120rpx - 20rpx);
+ line-height: 1.6em;
+}
+
+.cu-list.menu-avatar>.cu-item .content.flex-sub {
+ width: calc(100% - 96rpx - 60rpx - 20rpx);
+}
+
+.cu-list.menu-avatar>.cu-item .content>view:first-child {
+ font-size: 30rpx;
+ display: flex;
+ align-items: center
+}
+
+.cu-list.menu-avatar>.cu-item .content .cu-tag.sm {
+ display: inline-block;
+ margin-left: 10rpx;
+ height: 28rpx;
+ font-size: 16rpx;
+ line-height: 32rpx
+}
+
+.cu-list.menu-avatar>.cu-item .action {
+ width: 100rpx;
+ text-align: center
+}
+
+.cu-list.menu-avatar>.cu-item .action view+view {
+ margin-top: 10rpx
+}
+
+.cu-list.menu-avatar.comment>.cu-item .content {
+ position: relative;
+ left: 0;
+ width: auto;
+ flex: 1;
+}
+
+.cu-list.menu-avatar.comment>.cu-item {
+ padding: 30rpx 30rpx 30rpx 120rpx;
+ height: auto
+}
+
+.cu-list.menu-avatar.comment .cu-avatar {
+ align-self: flex-start
+}
+
+.cu-list.menu>.cu-item {
+ position: relative;
+ display: flex;
+ padding: 0 30rpx;
+ min-height: 100rpx;
+ background-color: #ffffff;
+ justify-content: space-between;
+ align-items: center
+}
+
+.cu-list.menu>.cu-item:last-child:after {
+ border: none
+}
+
+.cu-list.menu-avatar>.cu-item:after,
+.cu-list.menu>.cu-item:after {
+ position: absolute;
+ top: 0;
+ left: 0;
+ box-sizing: border-box;
+ width: 200%;
+ height: 200%;
+ border-bottom: 1rpx solid #ddd;
+ border-radius: inherit;
+ content: " ";
+ transform: scale(.5);
+ transform-origin: 0 0;
+ pointer-events: none
+}
+
+.cu-list.menu>.cu-item.grayscale {
+ background-color: #f5f5f5
+}
+
+.cu-list.menu>.cu-item.cur {
+ background-color: #fcf7e9
+}
+
+.cu-list.menu>.cu-item.arrow {
+ padding-right: 90rpx
+}
+
+.cu-list.menu>.cu-item.arrow:before {
+ position: absolute;
+ top: 0;
+ right: 30rpx;
+ bottom: 0;
+ display: block;
+ margin: auto;
+ width: 30rpx;
+ height: 30rpx;
+ color: #8799a3;
+ content: "\e6a3";
+ text-align: center;
+ font-size: 34rpx;
+ font-family: cuIcon;
+ line-height: 30rpx
+}
+
+.cu-list.menu>.cu-item button.content {
+ padding: 0;
+ background-color: transparent;
+ justify-content: flex-start
+}
+
+.cu-list.menu>.cu-item button.content:after {
+ display: none
+}
+
+.cu-list.menu>.cu-item .cu-avatar-group .cu-avatar {
+ border-color: #ffffff
+}
+
+.cu-list.menu>.cu-item .content>view:first-child {
+ display: flex;
+ align-items: center
+}
+
+.cu-list.menu>.cu-item .content>text[class*=cuIcon] {
+ display: inline-block;
+ margin-right: 10rpx;
+ width: 1.6em;
+ text-align: center
+}
+
+.cu-list.menu>.cu-item .content>image {
+ display: inline-block;
+ margin-right: 10rpx;
+ width: 1.6em;
+ height: 1.6em;
+ vertical-align: middle
+}
+
+.cu-list.menu>.cu-item .content {
+ font-size: 30rpx;
+ line-height: 1.6em;
+ flex: 1
+}
+
+.cu-list.menu>.cu-item .content .cu-tag.sm {
+ display: inline-block;
+ margin-left: 10rpx;
+ height: 28rpx;
+ font-size: 16rpx;
+ line-height: 32rpx
+}
+
+.cu-list.menu>.cu-item .action .cu-tag:empty {
+ right: 10rpx
+}
+
+.cu-list.menu {
+ display: block;
+ overflow: hidden
+}
+
+.cu-list.menu.sm-border>.cu-item:after {
+ left: 30rpx;
+ width: calc(200% - 120rpx)
+}
+
+.cu-list.grid>.cu-item {
+ position: relative;
+ display: flex;
+ padding: 20rpx 0 30rpx;
+ transition-duration: 0s;
+ flex-direction: column;
+}
+
+.cu-list.grid>.cu-item:after {
+ position: absolute;
+ top: 0;
+ left: 0;
+ box-sizing: border-box;
+ width: 200%;
+ height: 200%;
+ border-right: 1px solid rgba(0, 0, 0, .1);
+ border-bottom: 1px solid rgba(0, 0, 0, .1);
+ border-radius: inherit;
+ content: " ";
+ transform: scale(.5);
+ transform-origin: 0 0;
+ pointer-events: none
+}
+
+.cu-list.grid>.cu-item text {
+ display: block;
+ margin-top: 10rpx;
+ color: #888;
+ font-size: 26rpx;
+ line-height: 40rpx
+}
+
+.cu-list.grid>.cu-item [class*=cuIcon] {
+ position: relative;
+ display: block;
+ margin-top: 20rpx;
+ width: 100%;
+ font-size: 48rpx
+}
+
+.cu-list.grid>.cu-item .cu-tag {
+ right: auto;
+ left: 50%;
+ margin-left: 20rpx
+}
+
+.cu-list.grid {
+ background-color: #ffffff;
+ text-align: center
+}
+
+.cu-list.grid.no-border>.cu-item {
+ padding-top: 10rpx;
+ padding-bottom: 20rpx
+}
+
+.cu-list.grid.no-border>.cu-item:after {
+ border: none
+}
+
+.cu-list.grid.no-border {
+ padding: 20rpx 10rpx
+}
+
+.cu-list.grid.col-3>.cu-item:nth-child(3n):after,
+.cu-list.grid.col-4>.cu-item:nth-child(4n):after,
+.cu-list.grid.col-5>.cu-item:nth-child(5n):after {
+ border-right-width: 0
+}
+
+.cu-list.card-menu {
+ overflow: hidden;
+ margin-right: 30rpx;
+ margin-left: 30rpx;
+ border-radius: 20rpx
+}
+
+
+/* ==================
+ 操作条
+ ==================== */
+
+.cu-bar {
+ display: flex;
+ position: relative;
+ align-items: center;
+ min-height: 100rpx;
+ justify-content: space-between;
+}
+
+.cu-bar .action {
+ display: flex;
+ align-items: center;
+ height: 100%;
+ justify-content: center;
+ max-width: 100%;
+}
+
+.cu-bar .action.border-title {
+ position: relative;
+ top: -10rpx;
+}
+
+.cu-bar .action.border-title text[class*="bg-"]:last-child {
+ position: absolute;
+ bottom: -0.5rem;
+ min-width: 2rem;
+ height: 6rpx;
+ left: 0;
+}
+
+.cu-bar .action.sub-title {
+ position: relative;
+ top: -0.2rem;
+}
+
+.cu-bar .action.sub-title text {
+ position: relative;
+ z-index: 1;
+}
+
+.cu-bar .action.sub-title text[class*="bg-"]:last-child {
+ position: absolute;
+ display: inline-block;
+ bottom: -0.2rem;
+ border-radius: 6rpx;
+ width: 100%;
+ height: 0.6rem;
+ left: 0.6rem;
+ opacity: 0.3;
+ z-index: 0;
+}
+
+.cu-bar .action.sub-title text[class*="text-"]:last-child {
+ position: absolute;
+ display: inline-block;
+ bottom: -0.7rem;
+ left: 0.5rem;
+ opacity: 0.2;
+ z-index: 0;
+ text-align: right;
+ font-weight: 900;
+ font-size: 36rpx;
+}
+
+.cu-bar.justify-center .action.border-title text:last-child,
+.cu-bar.justify-center .action.sub-title text:last-child {
+ left: 0;
+ right: 0;
+ margin: auto;
+ text-align: center;
+}
+
+.cu-bar .action:first-child {
+ margin-left: 30rpx;
+ font-size: 30rpx;
+}
+
+.cu-bar .action text.text-cut {
+ text-align: left;
+ width: 100%;
+}
+
+.cu-bar .cu-avatar:first-child {
+ margin-left: 20rpx;
+}
+
+.cu-bar .action:first-child>text[class*="cuIcon-"] {
+ margin-left: -0.3em;
+ margin-right: 0.3em;
+}
+
+.cu-bar .action:last-child {
+ margin-right: 30rpx;
+}
+
+.cu-bar .action>text[class*="cuIcon-"],
+.cu-bar .action>view[class*="cuIcon-"] {
+ font-size: 36rpx;
+}
+
+.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] {
+ margin-left: 0.5em;
+}
+
+.cu-bar .content {
+ position: absolute;
+ text-align: center;
+ width: calc(100% - 340rpx);
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ margin: auto;
+ height: 60rpx;
+ font-size: 32rpx;
+ line-height: 60rpx;
+ cursor: none;
+ pointer-events: none;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.cu-bar.ios .content {
+ bottom: 7px;
+ height: 30px;
+ font-size: 32rpx;
+ line-height: 30px;
+}
+
+.cu-bar.btn-group {
+ justify-content: space-around;
+}
+
+.cu-bar.btn-group button {
+ padding: 20rpx 32rpx;
+}
+
+.cu-bar.btn-group button {
+ flex: 1;
+ margin: 0 20rpx;
+ max-width: 50%;
+}
+
+.cu-bar .search-form {
+ background-color: #f5f5f5;
+ line-height: 64rpx;
+ height: 64rpx;
+ font-size: 24rpx;
+ color: #333333;
+ flex: 1;
+ display: flex;
+ align-items: center;
+ margin: 0 30rpx;
+}
+
+.cu-bar .search-form+.action {
+ margin-right: 30rpx;
+}
+
+.cu-bar .search-form input {
+ flex: 1;
+ padding-right: 30rpx;
+ height: 64rpx;
+ line-height: 64rpx;
+ font-size: 26rpx;
+ background-color: transparent;
+}
+
+.cu-bar .search-form [class*="cuIcon-"] {
+ margin: 0 0.5em 0 0.8em;
+}
+
+.cu-bar .search-form [class*="cuIcon-"]::before {
+ top: 0rpx;
+}
+
+.cu-bar.fixed,
+.nav.fixed {
+ position: fixed;
+ width: 100%;
+ top: 0;
+ z-index: 1024;
+ box-shadow: 0 1rpx 6rpx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.foot {
+ position: fixed;
+ width: 100%;
+ bottom: 0;
+ z-index: 1024;
+ box-shadow: 0 -1rpx 6rpx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.tabbar {
+ padding: 0;
+ height: calc(100rpx + env(safe-area-inset-bottom) / 2);
+ padding-bottom: calc(env(safe-area-inset-bottom) / 2);
+}
+
+.cu-tabbar-height {
+ min-height: 100rpx;
+ height: calc(100rpx + env(safe-area-inset-bottom) / 2);
+}
+
+.cu-bar.tabbar.shadow {
+ box-shadow: 0 -1rpx 6rpx rgba(0, 0, 0, 0.1);
+}
+
+.cu-bar.tabbar .action {
+ font-size: 22rpx;
+ position: relative;
+ flex: 1;
+ text-align: center;
+ padding: 0;
+ display: block;
+ height: auto;
+ line-height: 1;
+ margin: 0;
+ background-color: inherit;
+ overflow: initial;
+}
+
+.cu-bar.tabbar.shop .action {
+ width: 140rpx;
+ flex: initial;
+}
+
+.cu-bar.tabbar .action.add-action {
+ position: relative;
+ z-index: 2;
+ padding-top: 50rpx;
+}
+
+.cu-bar.tabbar .action.add-action [class*="cuIcon-"] {
+ position: absolute;
+ width: 70rpx;
+ z-index: 2;
+ height: 70rpx;
+ border-radius: 50%;
+ line-height: 70rpx;
+ font-size: 50rpx;
+ top: -35rpx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ padding: 0;
+}
+
+.cu-bar.tabbar .action.add-action::after {
+ content: "";
+ position: absolute;
+ width: 100rpx;
+ height: 100rpx;
+ top: -50rpx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ box-shadow: 0 -3rpx 8rpx rgba(0, 0, 0, 0.08);
+ border-radius: 50rpx;
+ background-color: inherit;
+ z-index: 0;
+}
+
+.cu-bar.tabbar .action.add-action::before {
+ content: "";
+ position: absolute;
+ width: 100rpx;
+ height: 30rpx;
+ bottom: 30rpx;
+ left: 0;
+ right: 0;
+ margin: auto;
+ background-color: inherit;
+ z-index: 1;
+}
+
+.cu-bar.tabbar .btn-group {
+ flex: 1;
+ display: flex;
+ justify-content: space-around;
+ align-items: center;
+ padding: 0 10rpx;
+}
+
+.cu-bar.tabbar button.action::after {
+ border: 0;
+}
+
+.cu-bar.tabbar .action [class*="cuIcon-"] {
+ width: 100rpx;
+ position: relative;
+ display: block;
+ height: auto;
+ margin: 0 auto 10rpx;
+ text-align: center;
+ font-size: 40rpx;
+}
+
+.cu-bar.tabbar .action .cuIcon-cu-image {
+ margin: 0 auto;
+ line-height: 1 !important;
+}
+
+.cu-bar.tabbar .action .cuIcon-cu-image image {
+ width: 50rpx;
+ height: 50rpx;
+ display: inline-block;
+}
+
+.cu-bar.tabbar .submit {
+ align-items: center;
+ display: flex;
+ justify-content: center;
+ text-align: center;
+ position: relative;
+ flex: 2;
+ align-self: stretch;
+}
+
+.cu-bar.tabbar .submit:last-child {
+ flex: 2.6;
+}
+
+.cu-bar.tabbar .submit+.submit {
+ flex: 2;
+}
+
+.cu-bar.tabbar.border .action::before {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ border-right: 1rpx solid rgba(0, 0, 0, 0.1);
+ z-index: 3;
+}
+
+.cu-bar.tabbar.border .action:last-child:before {
+ display: none;
+}
+
+.cu-bar.input {
+ padding-right: 20rpx;
+ background-color: #ffffff;
+}
+
+.cu-bar.input input {
+ overflow: initial;
+ line-height: 64rpx;
+ height: 64rpx;
+ min-height: 64rpx;
+ flex: 1;
+ font-size: 30rpx;
+ margin: 0 20rpx;
+}
+
+.cu-bar.input .action {
+ margin-left: 20rpx;
+}
+
+.cu-bar.input .action [class*="cuIcon-"] {
+ font-size: 48rpx;
+}
+
+.cu-bar.input input+.action {
+ margin-right: 20rpx;
+ margin-left: 0rpx;
+}
+
+.cu-bar.input .action:first-child [class*="cuIcon-"] {
+ margin-left: 0rpx;
+}
+
+.cu-custom {
+ display: block;
+ position: relative;
+}
+
+.cu-custom .cu-bar .content {
+ width: calc(100% - 440rpx);
+}
+
+/* #ifdef MP-ALIPAY */
+.cu-custom .cu-bar .action .cuIcon-back {
+ opacity: 0;
+}
+
+/* #endif */
+
+.cu-custom .cu-bar .content image {
+ height: 60rpx;
+ width: 240rpx;
+}
+
+.cu-custom .cu-bar {
+ min-height: 0px;
+ /* #ifdef MP-WEIXIN */
+ padding-right: 220rpx;
+ /* #endif */
+ /* #ifdef MP-ALIPAY */
+ padding-right: 150rpx;
+ /* #endif */
+ box-shadow: 0rpx 0rpx 0rpx;
+ z-index: 9999;
+}
+
+.cu-custom .cu-bar .border-custom {
+ position: relative;
+ background: rgba(0, 0, 0, 0.15);
+ border-radius: 1000rpx;
+ height: 30px;
+}
+
+.cu-custom .cu-bar .border-custom::after {
+ content: " ";
+ width: 200%;
+ height: 200%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ border-radius: inherit;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ border: 1rpx solid #ffffff;
+ opacity: 0.5;
+}
+
+.cu-custom .cu-bar .border-custom::before {
+ content: " ";
+ width: 1rpx;
+ height: 110%;
+ position: absolute;
+ top: 22.5%;
+ left: 0;
+ right: 0;
+ margin: auto;
+ transform: scale(0.5);
+ transform-origin: 0 0;
+ pointer-events: none;
+ box-sizing: border-box;
+ opacity: 0.6;
+ background-color: #ffffff;
+}
+
+.cu-custom .cu-bar .border-custom text {
+ display: block;
+ flex: 1;
+ margin: auto !important;
+ text-align: center;
+ font-size: 34rpx;
+}
+
+/* ==================
+ 导航栏
+ ==================== */
+
+.nav {
+ white-space: nowrap;
+}
+
+::-webkit-scrollbar {
+ display: none;
+}
+
+.nav .cu-item {
+ height: 90rpx;
+ display: inline-block;
+ line-height: 90rpx;
+ margin: 0 10rpx;
+ padding: 0 20rpx;
+}
+
+.nav .cu-item.cur {
+ border-bottom: 4rpx solid;
+}
+
+/* ==================
+ 时间轴
+ ==================== */
+
+.cu-timeline {
+ display: block;
+ background-color: #ffffff;
+}
+
+.cu-timeline .cu-time {
+ width: 120rpx;
+ text-align: center;
+ padding: 20rpx 0;
+ font-size: 26rpx;
+ color: #888;
+ display: block;
+}
+
+.cu-timeline>.cu-item {
+ padding: 30rpx 30rpx 30rpx 120rpx;
+ position: relative;
+ display: block;
+ z-index: 0;
+}
+
+.cu-timeline>.cu-item:not([class*="text-"]) {
+ color: #ccc;
+}
+
+.cu-timeline>.cu-item::after {
+ content: "";
+ display: block;
+ position: absolute;
+ width: 1rpx;
+ background-color: #ddd;
+ left: 60rpx;
+ height: 100%;
+ top: 0;
+ z-index: 8;
+}
+
+.cu-timeline>.cu-item::before {
+ font-family: "cuIcon";
+ display: block;
+ position: absolute;
+ top: 36rpx;
+ z-index: 9;
+ background-color: #ffffff;
+ width: 50rpx;
+ height: 50rpx;
+ text-align: center;
+ border: none;
+ line-height: 50rpx;
+ left: 36rpx;
+}
+
+.cu-timeline>.cu-item:not([class*="cuIcon-"])::before {
+ content: "\e763";
+}
+
+.cu-timeline>.cu-item[class*="cuIcon-"]::before {
+ background-color: #ffffff;
+ width: 50rpx;
+ height: 50rpx;
+ text-align: center;
+ border: none;
+ line-height: 50rpx;
+ left: 36rpx;
+}
+
+.cu-timeline>.cu-item>.content {
+ padding: 30rpx;
+ border-radius: 6rpx;
+ display: block;
+ line-height: 1.6;
+}
+
+.cu-timeline>.cu-item>.content:not([class*="bg-"]) {
+ background-color: #f1f1f1;
+ color: #333333;
+}
+
+.cu-timeline>.cu-item>.content+.content {
+ margin-top: 20rpx;
+}
+
+/* ==================
+ 卡片
+ ==================== */
+
+.cu-card {
+ display: block;
+ overflow: hidden;
+}
+
+.cu-card>.cu-item {
+ display: block;
+ background-color: #ffffff;
+ overflow: hidden;
+ border-radius: 10rpx;
+ margin: 30rpx;
+}
+
+.cu-card>.cu-item.shadow-blur {
+ overflow: initial;
+}
+
+.cu-card.no-card>.cu-item {
+ margin: 0rpx;
+ border-radius: 0rpx;
+}
+
+.cu-card .grid.grid-square {
+ margin-bottom: -20rpx;
+}
+
+.cu-card.case .image {
+ position: relative;
+}
+
+.cu-card.case .image image {
+ width: 100%;
+}
+
+.cu-card.case .image .cu-tag {
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.cu-card.case .image .cu-bar {
+ position: absolute;
+ bottom: 0;
+ width: 100%;
+ background-color: transparent;
+ padding: 0rpx 30rpx;
+}
+
+.cu-card.case.no-card .image {
+ margin: 30rpx 30rpx 0;
+ overflow: hidden;
+ border-radius: 10rpx;
+}
+
+.cu-card.dynamic {
+ display: block;
+}
+
+.cu-card.dynamic>.cu-item {
+ display: block;
+ background-color: #ffffff;
+ overflow: hidden;
+}
+
+.cu-card.dynamic>.cu-item>.text-content {
+ padding: 0 30rpx 0;
+ max-height: 6.4em;
+ overflow: hidden;
+ font-size: 30rpx;
+ margin-bottom: 20rpx;
+}
+
+.cu-card.dynamic>.cu-item .square-img {
+ width: 100%;
+ height: 200rpx;
+ border-radius: 6rpx;
+}
+
+.cu-card.dynamic>.cu-item .only-img {
+ width: 100%;
+ height: 320rpx;
+ border-radius: 6rpx;
+}
+
+/* card.dynamic>.cu-item .comment {
+ padding: 20rpx;
+ background-color: #f1f1f1;
+ margin: 0 30rpx 30rpx;
+ border-radius: 6rpx;
+} */
+
+.cu-card.article {
+ display: block;
+}
+
+.cu-card.article>.cu-item {
+ padding-bottom: 30rpx;
+}
+
+.cu-card.article>.cu-item .title {
+ font-size: 30rpx;
+ font-weight: 900;
+ color: #333333;
+ line-height: 100rpx;
+ padding: 0 30rpx;
+}
+
+.cu-card.article>.cu-item .content {
+ display: flex;
+ padding: 0 30rpx;
+}
+
+.cu-card.article>.cu-item .content>image {
+ width: 240rpx;
+ height: 6.4em;
+ margin-right: 20rpx;
+ border-radius: 6rpx;
+}
+
+.cu-card.article>.cu-item .content .desc {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+}
+
+.cu-card.article>.cu-item .content .text-content {
+ font-size: 28rpx;
+ color: #888;
+ height: 4.8em;
+ overflow: hidden;
+}
+
+
+/* ==================
+ 模态窗口
+ ==================== */
+
+.cu-modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1110;
+ opacity: 0;
+ outline: 0;
+ text-align: center;
+ -ms-transform: scale(1.185);
+ transform: scale(1.185);
+ backface-visibility: hidden;
+ perspective: 2000rpx;
+ background: rgba(0, 0, 0, 0.6);
+ transition: all 0.3s ease-in-out 0s;
+ pointer-events: none;
+}
+
+.cu-modal::before {
+ content: "\200B";
+ display: inline-block;
+ height: 100%;
+ vertical-align: middle;
+}
+
+.cu-modal.show {
+ opacity: 1;
+ transition-duration: 0.3s;
+ -ms-transform: scale(1);
+ transform: scale(1);
+ overflow-x: hidden;
+ overflow-y: auto;
+ pointer-events: auto;
+}
+
+.cu-dialog {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+ margin-left: auto;
+ margin-right: auto;
+ width: 680rpx;
+ max-width: 100%;
+ background-color: #f8f8f8;
+ border-radius: 10rpx;
+ overflow: hidden;
+}
+
+.cu-modal.bottom-modal::before {
+ vertical-align: bottom;
+}
+
+.cu-modal.bottom-modal .cu-dialog {
+ width: 100%;
+ border-radius: 0;
+}
+
+.cu-modal.bottom-modal {
+ margin-bottom: -1000rpx;
+}
+
+.cu-modal.bottom-modal.show {
+ margin-bottom: 0;
+}
+
+.cu-modal.drawer-modal {
+ transform: scale(1);
+ display: flex;
+}
+
+.cu-modal.drawer-modal .cu-dialog {
+ height: 100%;
+ min-width: 200rpx;
+ border-radius: 0;
+ margin: initial;
+ transition-duration: 0.3s;
+}
+
+.cu-modal.drawer-modal.justify-start .cu-dialog {
+ transform: translateX(-100%);
+}
+
+.cu-modal.drawer-modal.justify-end .cu-dialog {
+ transform: translateX(100%);
+}
+
+.cu-modal.drawer-modal.show .cu-dialog {
+ transform: translateX(0%);
+}
+.cu-modal .cu-dialog>.cu-bar:first-child .action{
+ min-width: 100rpx;
+ margin-right: 0;
+ min-height: 100rpx;
+}
+/* ==================
+ 轮播
+ ==================== */
+swiper .a-swiper-dot {
+ display: inline-block;
+ width: 16rpx;
+ height: 16rpx;
+ background: rgba(0, 0, 0, .3);
+ border-radius: 50%;
+ vertical-align: middle;
+}
+
+swiper[class*="-dot"] .wx-swiper-dots,
+swiper[class*="-dot"] .a-swiper-dots,
+swiper[class*="-dot"] .uni-swiper-dots {
+ display: flex;
+ align-items: center;
+ width: 100%;
+ justify-content: center;
+}
+
+swiper.square-dot .wx-swiper-dot,
+swiper.square-dot .a-swiper-dot,
+swiper.square-dot .uni-swiper-dot {
+ background-color: #ffffff;
+ opacity: 0.4;
+ width: 10rpx;
+ height: 10rpx;
+ border-radius: 20rpx;
+ margin: 0 8rpx !important;
+}
+
+swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active,
+swiper.square-dot .a-swiper-dot.a-swiper-dot-active,
+swiper.square-dot .uni-swiper-dot.uni-swiper-dot-active {
+ opacity: 1;
+ width: 30rpx;
+}
+
+swiper.round-dot .wx-swiper-dot,
+swiper.round-dot .a-swiper-dot,
+swiper.round-dot .uni-swiper-dot {
+ width: 10rpx;
+ height: 10rpx;
+ position: relative;
+ margin: 4rpx 8rpx !important;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after,
+swiper.round-dot .a-swiper-dot.a-swiper-dot-active::after,
+swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active::after {
+ content: "";
+ position: absolute;
+ width: 10rpx;
+ height: 10rpx;
+ top: 0rpx;
+ left: 0rpx;
+ right: 0;
+ bottom: 0;
+ margin: auto;
+ background-color: #ffffff;
+ border-radius: 20rpx;
+}
+
+swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active,
+swiper.round-dot .a-swiper-dot.a-swiper-dot-active,
+swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active {
+ width: 18rpx;
+ height: 18rpx;
+}
+
+.screen-swiper,
+.screen-swiper.screen-swiper-item {
+ height: 190rpx;
+}
+
+
+.screen-swiper image,
+.screen-swiper video,
+.swiper-item image,
+.swiper-item video {
+ width: 100%;
+ display: block;
+ height: 190rpx;
+ margin: 0;
+ pointer-events: none;
+}
+
+/* -- 内外边距 -- */
+
+.margin-0 {
+ margin: 0;
+}
+
+.margin-xs {
+ margin: 10rpx;
+}
+
+.margin-sm {
+ margin: 20rpx;
+}
+
+.margin {
+ margin: 30rpx;
+}
+
+.margin-lg {
+ margin: 40rpx;
+}
+
+.margin-xl {
+ margin: 50rpx;
+}
+
+.margin-top-xs {
+ margin-top: 10rpx;
+}
+
+.margin-top-sm {
+ margin-top: 20rpx;
+}
+
+.margin-top {
+ margin-top: 30rpx;
+}
+
+.margin-top-lg {
+ margin-top: 40rpx;
+}
+
+.margin-top-xl {
+ margin-top: 50rpx;
+}
+
+.margin-right-xs {
+ margin-right: 10rpx;
+}
+
+.margin-right-sm {
+ margin-right: 20rpx;
+}
+
+.margin-right {
+ margin-right: 30rpx;
+}
+
+.margin-right-lg {
+ margin-right: 40rpx;
+}
+
+.margin-right-xl {
+ margin-right: 50rpx;
+}
+
+.margin-bottom-xs {
+ margin-bottom: 10rpx;
+}
+
+.margin-bottom-sm {
+ margin-bottom: 20rpx;
+}
+
+.margin-bottom {
+ margin-bottom: 30rpx;
+}
+
+.margin-bottom-lg {
+ margin-bottom: 40rpx;
+}
+
+.margin-bottom-xl {
+ margin-bottom: 50rpx;
+}
+
+.margin-left-xs {
+ margin-left: 10rpx;
+}
+
+.margin-left-sm {
+ margin-left: 20rpx;
+}
+
+.margin-left {
+ margin-left: 30rpx;
+}
+
+.margin-left-lg {
+ margin-left: 40rpx;
+}
+
+.margin-left-xl {
+ margin-left: 50rpx;
+}
+
+.margin-lr-xs {
+ margin-left: 10rpx;
+ margin-right: 10rpx;
+}
+
+.margin-lr-sm {
+ margin-left: 20rpx;
+ margin-right: 20rpx;
+}
+
+.margin-lr {
+ margin-left: 30rpx;
+ margin-right: 30rpx;
+}
+
+.margin-lr-lg {
+ margin-left: 40rpx;
+ margin-right: 40rpx;
+}
+
+.margin-lr-xl {
+ margin-left: 50rpx;
+ margin-right: 50rpx;
+}
+
+.margin-tb-xs {
+ margin-top: 10rpx;
+ margin-bottom: 10rpx;
+}
+
+.margin-tb-sm {
+ margin-top: 20rpx;
+ margin-bottom: 20rpx;
+}
+
+.margin-tb {
+ margin-top: 30rpx;
+ margin-bottom: 30rpx;
+}
+
+.margin-tb-lg {
+ margin-top: 40rpx;
+ margin-bottom: 40rpx;
+}
+
+.margin-tb-xl {
+ margin-top: 50rpx;
+ margin-bottom: 50rpx;
+}
+
+.padding-0 {
+ padding: 0;
+}
+
+.padding-xs {
+ padding: 10rpx;
+}
+
+.padding-sm {
+ padding: 20rpx;
+}
+
+.padding {
+ padding: 30rpx;
+}
+
+.padding-lg {
+ padding: 40rpx;
+}
+
+.padding-xl {
+ padding: 50rpx;
+}
+
+.padding-top-xs {
+ padding-top: 10rpx;
+}
+
+.padding-top-sm {
+ padding-top: 20rpx;
+}
+
+.padding-top {
+ padding-top: 30rpx;
+}
+
+.padding-top-lg {
+ padding-top: 40rpx;
+}
+
+.padding-top-xl {
+ padding-top: 50rpx;
+}
+
+.padding-right-xs {
+ padding-right: 10rpx;
+}
+
+.padding-right-sm {
+ padding-right: 20rpx;
+}
+
+.padding-right {
+ padding-right: 30rpx;
+}
+
+.padding-right-lg {
+ padding-right: 40rpx;
+}
+
+.padding-right-xl {
+ padding-right: 50rpx;
+}
+
+.padding-bottom-xs {
+ padding-bottom: 10rpx;
+}
+
+.padding-bottom-sm {
+ padding-bottom: 20rpx;
+}
+
+.padding-bottom {
+ padding-bottom: 30rpx;
+}
+
+.padding-bottom-lg {
+ padding-bottom: 40rpx;
+}
+
+.padding-bottom-xl {
+ padding-bottom: 50rpx;
+}
+
+.padding-left-xs {
+ padding-left: 10rpx;
+}
+
+.padding-left-sm {
+ padding-left: 20rpx;
+}
+
+.padding-left {
+ padding-left: 30rpx;
+}
+
+.padding-left-lg {
+ padding-left: 40rpx;
+}
+
+.padding-left-xl {
+ padding-left: 50rpx;
+}
+
+.padding-lr-xs {
+ padding-left: 10rpx;
+ padding-right: 10rpx;
+}
+
+.padding-lr-sm {
+ padding-left: 20rpx;
+ padding-right: 20rpx;
+}
+
+.padding-lr {
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+}
+
+.padding-lr-lg {
+ padding-left: 40rpx;
+ padding-right: 40rpx;
+}
+
+.padding-lr-xl {
+ padding-left: 50rpx;
+ padding-right: 50rpx;
+}
+
+.padding-tb-xs {
+ padding-top: 10rpx;
+ padding-bottom: 10rpx;
+}
+
+.padding-tb-sm {
+ padding-top: 20rpx;
+ padding-bottom: 20rpx;
+}
+
+.padding-tb {
+ padding-top: 30rpx;
+ padding-bottom: 30rpx;
+}
+
+.padding-tb-lg {
+ padding-top: 40rpx;
+ padding-bottom: 40rpx;
+}
+
+.padding-tb-xl {
+ padding-top: 50rpx;
+ padding-bottom: 50rpx;
+}
+
+/* -- 浮动 -- */
+
+.cf::after,
+.cf::before {
+ content: " ";
+ display: table;
+}
+
+.cf::after {
+ clear: both;
+}
+
+.fl {
+ float: left;
+}
+
+.fr {
+ float: right;
+}
+
+/* ==================
+ 背景
+ ==================== */
+
+.line-red::after,
+.lines-red::after {
+ border-color: #e54d42;
+}
+
+.line-orange::after,
+.lines-orange::after {
+ border-color: #f37b1d;
+}
+
+.line-yellow::after,
+.lines-yellow::after {
+ border-color: #fbbd08;
+}
+
+.line-olive::after,
+.lines-olive::after {
+ border-color: #8dc63f;
+}
+
+.line-green::after,
+.lines-green::after {
+ border-color: #39b54a;
+}
+
+.line-cyan::after,
+.lines-cyan::after {
+ border-color: #1cbbb4;
+}
+
+.line-blue::after,
+.lines-blue::after {
+ border-color: #0081ff;
+}
+
+.line-purple::after,
+.lines-purple::after {
+ border-color: #6739b6;
+}
+
+.line-mauve::after,
+.lines-mauve::after {
+ border-color: #9c26b0;
+}
+
+.line-pink::after,
+.lines-pink::after {
+ border-color: #e03997;
+}
+
+.line-brown::after,
+.lines-brown::after {
+ border-color: #a5673f;
+}
+
+.line-grey::after,
+.lines-grey::after {
+ border-color: #8799a3;
+}
+
+.line-gray::after,
+.lines-gray::after {
+ border-color: #aaaaaa;
+}
+
+.line-black::after,
+.lines-black::after {
+ border-color: #333333;
+}
+
+.line-white::after,
+.lines-white::after {
+ border-color: #ffffff;
+}
+
+.bg-red {
+ background-color: #e54d42;
+ color: #ffffff;
+}
+
+.bg-orange {
+ background-color: #f37b1d;
+ color: #ffffff;
+}
+.bg-skyblue{
+ background-color: #6BADFF;
+ color: #ffffff;
+}
+.bg-yellow {
+ background-color: #fbbd08;
+ color: #333333;
+}
+
+.bg-olive {
+ background-color: #8dc63f;
+ color: #ffffff;
+}
+
+.bg-green {
+ background-color: #39b54a;
+ color: #ffffff;
+}
+
+.bg-cyan {
+ background-color: #1cbbb4;
+ color: #ffffff;
+}
+
+.bg-blue {
+ background-color: #0081ff;
+ color: #ffffff;
+}
+
+.bg-purple {
+ background-color: #6739b6;
+ color: #ffffff;
+}
+
+.bg-mauve {
+ background-color: #9c26b0;
+ color: #ffffff;
+}
+
+.bg-pink {
+ background-color: #e03997;
+ color: #ffffff;
+}
+
+.bg-brown {
+ background-color: #a5673f;
+ color: #ffffff;
+}
+
+.bg-grey {
+ background-color: #8799a3;
+ color: #ffffff;
+}
+
+.bg-gray {
+ background-color: #f0f0f0;
+ color: #333333;
+}
+
+.bg-black {
+ background-color: #333333;
+ color: #ffffff;
+}
+
+.bg-white {
+ background-color: #ffffff;
+ color: #666666;
+}
+
+
+.bg-shadeTop {
+ background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01));
+ color: #ffffff;
+}
+
+.bg-shadeBottom {
+ background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1));
+ color: #ffffff;
+}
+
+.bg-red.light {
+ color: #e54d42;
+ background-color: #fadbd9;
+}
+
+.bg-orange.light {
+ color: #f37b1d;
+ background-color: #fde6d2;
+}
+
+.bg-yellow.light {
+ color: #fbbd08;
+ background-color: #fef2ced2;
+}
+
+.bg-olive.light {
+ color: #8dc63f;
+ background-color: #e8f4d9;
+}
+
+.bg-green.light {
+ color: #39b54a;
+ background-color: #d7f0dbff;
+}
+
+.bg-cyan.light {
+ color: #1cbbb4;
+ background-color: #d2f1f0;
+}
+
+.bg-blue.light {
+ color: #0081ff;
+ background-color: #cce6ff;
+}
+
+.bg-purple.light {
+ color: #6739b6;
+ background-color: #e1d7f0;
+}
+
+.bg-mauve.light {
+ color: #9c26b0;
+ background-color: #ebd4ef;
+}
+
+.bg-pink.light {
+ color: #e03997;
+ background-color: #f9d7ea;
+}
+
+.bg-brown.light {
+ color: #a5673f;
+ background-color: #ede1d9;
+}
+
+.bg-grey.light {
+ color: #8799a3;
+ background-color: #e7ebed;
+}
+
+.bg-gradual-red {
+ background-image: linear-gradient(45deg, #f43f3b, #ec008c);
+ color: #ffffff;
+}
+
+.bg-gradual-orange {
+ background-image: linear-gradient(45deg, #ff9700, #ed1c24);
+ color: #ffffff;
+}
+
+.bg-gradual-green {
+ background-image: linear-gradient(45deg, #39b54a, #8dc63f);
+ color: #ffffff;
+}
+
+.bg-gradual-purple {
+ background-image: linear-gradient(45deg, #9000ff, #5e00ff);
+ color: #ffffff;
+}
+
+.bg-gradual-pink {
+ background-image: linear-gradient(45deg, #ec008c, #6739b6);
+ color: #ffffff;
+}
+
+.bg-gradual-blue {
+ background-image: linear-gradient(45deg, #0081ff, #1cbbb4);
+ color: #ffffff;
+}
+
+.shadow[class*="-red"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(204, 69, 59, 0.2);
+}
+
+.shadow[class*="-orange"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(217, 109, 26, 0.2);
+}
+
+.shadow[class*="-yellow"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(224, 170, 7, 0.2);
+}
+
+.shadow[class*="-olive"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(124, 173, 55, 0.2);
+}
+
+.shadow[class*="-green"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(48, 156, 63, 0.2);
+}
+
+.shadow[class*="-cyan"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(28, 187, 180, 0.2);
+}
+
+.shadow[class*="-blue"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(0, 102, 204, 0.2);
+}
+
+.shadow[class*="-purple"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(88, 48, 156, 0.2);
+}
+
+.shadow[class*="-mauve"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(133, 33, 150, 0.2);
+}
+
+.shadow[class*="-pink"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(199, 50, 134, 0.2);
+}
+
+.shadow[class*="-brown"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(140, 88, 53, 0.2);
+}
+
+.shadow[class*="-grey"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(114, 130, 138, 0.2);
+}
+
+.shadow[class*="-gray"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(114, 130, 138, 0.2);
+}
+
+.shadow[class*="-black"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(26, 26, 26, 0.2);
+}
+
+.shadow[class*="-white"] {
+ box-shadow: 6rpx 6rpx 8rpx rgba(26, 26, 26, 0.2);
+}
+
+.text-shadow[class*="-red"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(204, 69, 59, 0.2);
+}
+
+.text-shadow[class*="-orange"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(217, 109, 26, 0.2);
+}
+
+.text-shadow[class*="-yellow"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(224, 170, 7, 0.2);
+}
+
+.text-shadow[class*="-olive"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(124, 173, 55, 0.2);
+}
+
+.text-shadow[class*="-green"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(48, 156, 63, 0.2);
+}
+
+.text-shadow[class*="-cyan"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(28, 187, 180, 0.2);
+}
+
+.text-shadow[class*="-blue"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(0, 102, 204, 0.2);
+}
+
+.text-shadow[class*="-purple"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(88, 48, 156, 0.2);
+}
+
+.text-shadow[class*="-mauve"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(133, 33, 150, 0.2);
+}
+
+.text-shadow[class*="-pink"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(199, 50, 134, 0.2);
+}
+
+.text-shadow[class*="-brown"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(140, 88, 53, 0.2);
+}
+
+.text-shadow[class*="-grey"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(114, 130, 138, 0.2);
+}
+
+.text-shadow[class*="-gray"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(114, 130, 138, 0.2);
+}
+
+.text-shadow[class*="-black"] {
+ text-shadow: 6rpx 6rpx 8rpx rgba(26, 26, 26, 0.2);
+}
+
+.bg-img {
+ background-size: cover;
+ background-position: center;
+ background-repeat: no-repeat;
+}
+
+.bg-mask {
+ background-color: #333333;
+ position: relative;
+}
+
+.bg-mask::after {
+ content: "";
+ border-radius: inherit;
+ width: 100%;
+ height: 100%;
+ display: block;
+ background-color: rgba(0, 0, 0, 0.4);
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ top: 0;
+}
+
+.bg-mask view,
+.bg-mask cover-view {
+ z-index: 5;
+ position: relative;
+}
+
+.bg-video {
+ position: relative;
+}
+
+.bg-video video {
+ display: block;
+ height: 100%;
+ width: 100%;
+ -o-object-fit: cover;
+ object-fit: cover;
+ position: absolute;
+ top: 0;
+ z-index: 0;
+ pointer-events: none;
+}
+
+/* ==================
+ 文本
+ ==================== */
+
+.text-xs {
+ font-size: 20rpx;
+}
+
+.text-sm {
+ font-size: 24rpx;
+}
+
+.text-df {
+ font-size: 28rpx;
+}
+
+.text-lg {
+ font-size: 32rpx;
+}
+
+.text-xl {
+ font-size: 36rpx;
+}
+
+.text-xxl {
+ font-size: 44rpx;
+}
+
+.text-sl {
+ font-size: 80rpx;
+}
+
+.text-xsl {
+ font-size: 120rpx;
+}
+
+.text-Abc {
+ text-transform: Capitalize;
+}
+
+.text-ABC {
+ text-transform: Uppercase;
+}
+
+.text-abc {
+ text-transform: Lowercase;
+}
+
+.text-price::before {
+ content: "¥";
+ font-size: 80%;
+ margin-right: 4rpx;
+}
+
+.text-cut {
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.text-bold {
+ font-weight: bold;
+}
+
+.text-center {
+ text-align: center;
+}
+
+.text-content {
+ line-height: 1.6;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+.text-red,
+.line-red,
+.lines-red {
+ color: #e54d42;
+}
+.text-skyblue,
+.line-skyblue,
+.lines-skyblue {
+ color: #6BADFF;
+}
+.text-orange,
+.line-orange,
+.lines-orange {
+ color: #f37b1d;
+}
+
+.text-yellow,
+.line-yellow,
+.lines-yellow {
+ color: #fbbd08 !important;
+}
+
+.text-olive,
+.line-olive,
+.lines-olive {
+ color: #8dc63f;
+}
+
+.text-green,
+.line-green,
+.lines-green {
+ color: #39b54a;
+}
+
+.text-cyan,
+.line-cyan,
+.lines-cyan {
+ color: #1cbbb4;
+}
+
+.text-blue,
+.line-blue,
+.lines-blue {
+ color: #0081ff !important;
+}
+
+.text-purple,
+.line-purple,
+.lines-purple {
+ color: #6739b6;
+}
+
+.text-mauve,
+.line-mauve,
+.lines-mauve {
+ color: #9c26b0 !important;
+}
+
+.text-pink,
+.line-pink,
+.lines-pink {
+ color: #e03997;
+}
+
+.text-brown,
+.line-brown,
+.lines-brown {
+ color: #a5673f;
+}
+
+.text-grey,
+.line-grey,
+.lines-grey {
+ color: #8799a3 !important;
+}
+
+.text-gray,
+.line-gray,
+.lines-gray {
+ color: #aaaaaa;
+}
+
+.text-black,
+.line-black,
+.lines-black {
+ color: #333333;
+}
+
+.text-white,
+.line-white,
+.lines-white {
+ color: #ffffff;
+}
+/*字体*/
+.f10 {
+ font-size: 20rpx;
+}
+
+.f12 {
+ font-size: 24rpx;
+}
+.f13 {
+ font-size: 26rpx;
+}
+.f14 {
+ font-size: 28rpx;
+}
+
+.f15 {
+ font-size: 30rpx;
+}
+
+.f16 {
+ font-size: 32rpx;
+}
+.f18 {
+ font-size: 36rpx;
+}
+
+.f20 {
+ font-size: 40rpx;
+}
+
+.f24 {
+ font-size: 48rpx;
+}
+.f28 {
+ font-size: 56rpx;
+}
+.content{
+ width: 100vw;
+ height: 100vh;
+}
+image{
+ width: 100%;
+ height: 100%;
+ vertical-align: center;
+}
+.ml10{
+ margin-left: 10rpx;
+}
\ No newline at end of file
diff --git a/style/iconfont.css b/style/iconfont.css
new file mode 100644
index 0000000..4eb3850
--- /dev/null
+++ b/style/iconfont.css
@@ -0,0 +1,67 @@
+@font-face {
+ font-family: 'iconfont';
+ /* Project id 3979772 */
+ src: url('//at.alicdn.com/t/c/font_3979772_sd5890vlebd.woff2?t=1679996974313') format('woff2'),
+ url('//at.alicdn.com/t/c/font_3979772_sd5890vlebd.woff?t=1679996974313') format('woff'),
+ url('//at.alicdn.com/t/c/font_3979772_sd5890vlebd.ttf?t=1679996974313') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 16px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-queren:before {
+ content: "\e6bd";
+}
+
+.icon-dingweixiao:before {
+ content: "\e8ba";
+}
+
+.icon-shijian:before {
+ content: "\eb2a";
+}
+
+.icon-renyuan:before {
+ content: "\e799";
+}
+
+.icon-truck:before {
+ content: "\e606";
+}
+
+.icon-custom-finsh:before {
+ content: "\e604";
+}
+
+.icon-iconfonticonfonti2:before {
+ content: "\e62c";
+}
+
+.icon-iconfontphone:before {
+ content: "\e634";
+}
+
+.icon-iconfontwujingongju:before {
+ content: "\e641";
+}
+
+.icon-iconfonticon:before {
+ content: "\e639";
+}
+
+.icon-iconfont-shouye:before {
+ content: "\e68d";
+}
+
+.icon-iconfont-jiaoyi:before {
+ content: "\e68e";
+}
+
+.icon-kache:before {
+ content: "\e626";
+}
diff --git a/uni.scss b/uni.scss
new file mode 100644
index 0000000..a9a742d
--- /dev/null
+++ b/uni.scss
@@ -0,0 +1,76 @@
+/**
+ * 这里是uni-app内置的常用样式变量
+ *
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
+ *
+ */
+
+/**
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
+ *
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
+ */
+
+/* 颜色变量 */
+
+/* 行为相关颜色 */
+$uni-color-primary: #007aff;
+$uni-color-success: #4cd964;
+$uni-color-warning: #f0ad4e;
+$uni-color-error: #dd524d;
+
+/* 文字基本颜色 */
+$uni-text-color:#333;//基本色
+$uni-text-color-inverse:#fff;//反色
+$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息
+$uni-text-color-placeholder: #808080;
+$uni-text-color-disable:#c0c0c0;
+
+/* 背景颜色 */
+$uni-bg-color:#ffffff;
+$uni-bg-color-grey:#f8f8f8;
+$uni-bg-color-hover:#f1f1f1;//点击状态颜色
+$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色
+
+/* 边框颜色 */
+$uni-border-color:#c8c7cc;
+
+/* 尺寸变量 */
+
+/* 文字尺寸 */
+$uni-font-size-sm:12px;
+$uni-font-size-base:14px;
+$uni-font-size-lg:16;
+
+/* 图片尺寸 */
+$uni-img-size-sm:20px;
+$uni-img-size-base:26px;
+$uni-img-size-lg:40px;
+
+/* Border Radius */
+$uni-border-radius-sm: 2px;
+$uni-border-radius-base: 3px;
+$uni-border-radius-lg: 6px;
+$uni-border-radius-circle: 50%;
+
+/* 水平间距 */
+$uni-spacing-row-sm: 5px;
+$uni-spacing-row-base: 10px;
+$uni-spacing-row-lg: 15px;
+
+/* 垂直间距 */
+$uni-spacing-col-sm: 4px;
+$uni-spacing-col-base: 8px;
+$uni-spacing-col-lg: 12px;
+
+/* 透明度 */
+$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
+
+/* 文章场景相关 */
+$uni-color-title: #2C405A; // 文章标题颜色
+$uni-font-size-title:20px;
+$uni-color-subtitle: #555555; // 二级标题颜色
+$uni-font-size-subtitle:26px;
+$uni-color-paragraph: #3F536E; // 文章段落颜色
+$uni-font-size-paragraph:15px;
diff --git a/uni_modules/liu-step-bar/changelog.md b/uni_modules/liu-step-bar/changelog.md
new file mode 100644
index 0000000..f2d0d64
--- /dev/null
+++ b/uni_modules/liu-step-bar/changelog.md
@@ -0,0 +1,8 @@
+## 1.0.3(2023-03-20)
+使用说明更新
+## 1.0.2(2023-03-20)
+多样化支持
+## 1.0.1(2023-03-10)
+初始化发布
+## 1.0.0(2023-03-10)
+初始发布
diff --git a/uni_modules/liu-step-bar/components/liu-step-bar/liu-step-bar.vue b/uni_modules/liu-step-bar/components/liu-step-bar/liu-step-bar.vue
new file mode 100644
index 0000000..6e59e84
--- /dev/null
+++ b/uni_modules/liu-step-bar/components/liu-step-bar/liu-step-bar.vue
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
diff --git a/uni_modules/liu-step-bar/package.json b/uni_modules/liu-step-bar/package.json
new file mode 100644
index 0000000..a42dc58
--- /dev/null
+++ b/uni_modules/liu-step-bar/package.json
@@ -0,0 +1,84 @@
+{
+ "id": "liu-step-bar",
+ "displayName": "横向步骤条、多级步骤条、自定义步骤条",
+ "version": "1.0.3",
+ "description": "简单好用的横向步骤条组件",
+ "keywords": [
+ "步骤",
+ "步骤条",
+ "step",
+ "steps"
+],
+ "repository": "",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "type": "component-vue",
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": "2364518038"
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": ""
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ },
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "u",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u",
+ "钉钉": "u",
+ "快手": "u",
+ "飞书": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/liu-step-bar/readme.md b/uni_modules/liu-step-bar/readme.md
new file mode 100644
index 0000000..ba44677
--- /dev/null
+++ b/uni_modules/liu-step-bar/readme.md
@@ -0,0 +1,47 @@
+### liu-step-bar适用于uni-app项目的步骤条组件
+### 本组件目前兼容微信小程序、H5
+### 本组件支持自定义步骤内容、步骤回显、点击
+### 如使用过程中有问题或有一些好的建议,欢迎qq联系:2364518038
+
+### 使用方式(uni_modules版本)
+``` html
+
+```
+``` javascript
+export default {
+ data() {
+ return {
+ step: 1, //当前步骤
+ stepList: [{
+ name: '第一步',
+ id: 1
+ }, {
+ name: '第二步',
+ id: 2
+ }, {
+ name: '第三步',
+ id: 3
+ }], //步骤列表
+ };
+ },
+ methods: {
+ //点击步骤
+ clickStep(e){
+ this.step = e.id
+ console.log('============:', e)
+ }
+ }
+}
+```
+
+### 属性说明
+| 名称 | 类型 | 默认值 | 描述 |
+| ----------------------------|--------------- | ---------------------- | ---------------|
+| step | Number | 1 | 当前步骤
+| stepList | Array | [] | 步骤信息
+| checkedImg | String | checkedImg | 已完成的图片路径
+| unCheckedImg | String | unCheckedImg | 未完成的图片路径
+| checkedColor | String | #287BF8 | 已完成的字体颜色
+| unCheckedColor | String | #333333 | 未完成的字体颜色
+| checkedLine | String | #287BF8 | 已完成的线条颜色
+| unCheckedLine | String | #bebebe | 未完成的线条颜色
\ No newline at end of file
diff --git a/uni_modules/liu-step-bar/static/checkedImg.png b/uni_modules/liu-step-bar/static/checkedImg.png
new file mode 100644
index 0000000..2488538
Binary files /dev/null and b/uni_modules/liu-step-bar/static/checkedImg.png differ
diff --git a/uni_modules/liu-step-bar/static/unCheckedImg.png b/uni_modules/liu-step-bar/static/unCheckedImg.png
new file mode 100644
index 0000000..2e59d62
Binary files /dev/null and b/uni_modules/liu-step-bar/static/unCheckedImg.png differ
diff --git a/uni_modules/uni-calendar/changelog.md b/uni_modules/uni-calendar/changelog.md
new file mode 100644
index 0000000..302b60d
--- /dev/null
+++ b/uni_modules/uni-calendar/changelog.md
@@ -0,0 +1,24 @@
+## 1.4.9(2023-02-02)
+- 修复 某些情况切换月份错误问题
+## 1.4.8(2023-01-30)
+- 修复 某些情况切换月份错误问题
+## 1.4.7(2022-09-16)
+- 可以使用 uni-scss 控制主题色
+## 1.4.6(2022-09-08)
+- fix: 表头年月切换,导致改变当前日期为选择月1号,且未触发change事件
+## 1.4.5(2022-02-25)
+- 修复 条件编译 nvue 不支持的 css 样式
+## 1.4.4(2022-02-25)
+- 修复 条件编译 nvue 不支持的 css 样式
+## 1.4.3(2021-09-22)
+- 修复 startDate、 endDate 属性失效的 bug
+## 1.4.2(2021-08-24)
+- 新增 支持国际化
+## 1.4.1(2021-08-05)
+- 修复 弹出层被 tabbar 遮盖 bug
+## 1.4.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.3.16(2021-05-12)
+- 新增 组件示例地址
+## 1.3.15(2021-02-04)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-calendar/components/uni-calendar/calendar.js b/uni_modules/uni-calendar/components/uni-calendar/calendar.js
new file mode 100644
index 0000000..b8d7d6f
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/calendar.js
@@ -0,0 +1,546 @@
+/**
+* @1900-2100区间内的公历、农历互转
+* @charset UTF-8
+* @github https://github.com/jjonline/calendar.js
+* @Author Jea杨(JJonline@JJonline.Cn)
+* @Time 2014-7-21
+* @Time 2016-8-13 Fixed 2033hex、Attribution Annals
+* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug
+* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year
+* @Version 1.0.3
+* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0]
+* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0]
+*/
+/* eslint-disable */
+var calendar = {
+
+ /**
+ * 农历1900-2100的润大小信息表
+ * @Array Of Property
+ * @return Hex
+ */
+ lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909
+ 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919
+ 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929
+ 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939
+ 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949
+ 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959
+ 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969
+ 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979
+ 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989
+ 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999
+ 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009
+ 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019
+ 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029
+ 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039
+ 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049
+ /** Add By JJonline@JJonline.Cn**/
+ 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059
+ 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069
+ 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079
+ 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089
+ 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099
+ 0x0d520], // 2100
+
+ /**
+ * 公历每个月份的天数普通表
+ * @Array Of Property
+ * @return Number
+ */
+ solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
+
+ /**
+ * 天干地支之天干速查表
+ * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"]
+ * @return Cn string
+ */
+ Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'],
+
+ /**
+ * 天干地支之地支速查表
+ * @Array Of Property
+ * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"]
+ * @return Cn string
+ */
+ Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'],
+
+ /**
+ * 天干地支之地支速查表<=>生肖
+ * @Array Of Property
+ * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"]
+ * @return Cn string
+ */
+ Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'],
+
+ /**
+ * 24节气速查表
+ * @Array Of Property
+ * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
+ * @return Cn string
+ */
+ solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'],
+
+ /**
+ * 1900-2100各年的24节气日期速查表
+ * @Array Of Property
+ * @return 0x string For splice
+ */
+ sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f',
+ '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f',
+ 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f',
+ '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa',
+ '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f',
+ '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f',
+ '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f',
+ '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
+ '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722',
+ '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e',
+ '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
+ '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e',
+ '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2',
+ '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
+ '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa',
+ '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
+ '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2',
+ '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722',
+ '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722',
+ '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722',
+ '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5',
+ '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722',
+ '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35',
+ '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722',
+ '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721',
+ '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd',
+ '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35',
+ '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722',
+ '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721',
+ '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5',
+ '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35',
+ '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721',
+ '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd',
+ '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35',
+ '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'],
+
+ /**
+ * 数字转中文速查表
+ * @Array Of Property
+ * @trans ['日','一','二','三','四','五','六','七','八','九','十']
+ * @return Cn string
+ */
+ nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'],
+
+ /**
+ * 日期转农历称呼速查表
+ * @Array Of Property
+ * @trans ['初','十','廿','卅']
+ * @return Cn string
+ */
+ nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'],
+
+ /**
+ * 月份转农历称呼速查表
+ * @Array Of Property
+ * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊']
+ * @return Cn string
+ */
+ nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'],
+
+ /**
+ * 返回农历y年一整年的总天数
+ * @param lunar Year
+ * @return Number
+ * @eg:var count = calendar.lYearDays(1987) ;//count=387
+ */
+ lYearDays: function (y) {
+ var i; var sum = 348
+ for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 }
+ return (sum + this.leapDays(y))
+ },
+
+ /**
+ * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0
+ * @param lunar Year
+ * @return Number (0-12)
+ * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6
+ */
+ leapMonth: function (y) { // 闰字编码 \u95f0
+ return (this.lunarInfo[y - 1900] & 0xf)
+ },
+
+ /**
+ * 返回农历y年闰月的天数 若该年没有闰月则返回0
+ * @param lunar Year
+ * @return Number (0、29、30)
+ * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29
+ */
+ leapDays: function (y) {
+ if (this.leapMonth(y)) {
+ return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29)
+ }
+ return (0)
+ },
+
+ /**
+ * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法
+ * @param lunar Year
+ * @return Number (-1、29、30)
+ * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29
+ */
+ monthDays: function (y, m) {
+ if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1
+ return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29)
+ },
+
+ /**
+ * 返回公历(!)y年m月的天数
+ * @param solar Year
+ * @return Number (-1、28、29、30、31)
+ * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30
+ */
+ solarDays: function (y, m) {
+ if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1
+ var ms = m - 1
+ if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29
+ return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28)
+ } else {
+ return (this.solarMonth[ms])
+ }
+ },
+
+ /**
+ * 农历年份转换为干支纪年
+ * @param lYear 农历年的年份数
+ * @return Cn string
+ */
+ toGanZhiYear: function (lYear) {
+ var ganKey = (lYear - 3) % 10
+ var zhiKey = (lYear - 3) % 12
+ if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干
+ if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支
+ return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1]
+ },
+
+ /**
+ * 公历月、日判断所属星座
+ * @param cMonth [description]
+ * @param cDay [description]
+ * @return Cn string
+ */
+ toAstro: function (cMonth, cDay) {
+ var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf'
+ var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22]
+ return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座
+ },
+
+ /**
+ * 传入offset偏移量返回干支
+ * @param offset 相对甲子的偏移量
+ * @return Cn string
+ */
+ toGanZhi: function (offset) {
+ return this.Gan[offset % 10] + this.Zhi[offset % 12]
+ },
+
+ /**
+ * 传入公历(!)y年获得该年第n个节气的公历日期
+ * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起
+ * @return day Number
+ * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春
+ */
+ getTerm: function (y, n) {
+ if (y < 1900 || y > 2100) { return -1 }
+ if (n < 1 || n > 24) { return -1 }
+ var _table = this.sTermInfo[y - 1900]
+ var _info = [
+ parseInt('0x' + _table.substr(0, 5)).toString(),
+ parseInt('0x' + _table.substr(5, 5)).toString(),
+ parseInt('0x' + _table.substr(10, 5)).toString(),
+ parseInt('0x' + _table.substr(15, 5)).toString(),
+ parseInt('0x' + _table.substr(20, 5)).toString(),
+ parseInt('0x' + _table.substr(25, 5)).toString()
+ ]
+ var _calday = [
+ _info[0].substr(0, 1),
+ _info[0].substr(1, 2),
+ _info[0].substr(3, 1),
+ _info[0].substr(4, 2),
+
+ _info[1].substr(0, 1),
+ _info[1].substr(1, 2),
+ _info[1].substr(3, 1),
+ _info[1].substr(4, 2),
+
+ _info[2].substr(0, 1),
+ _info[2].substr(1, 2),
+ _info[2].substr(3, 1),
+ _info[2].substr(4, 2),
+
+ _info[3].substr(0, 1),
+ _info[3].substr(1, 2),
+ _info[3].substr(3, 1),
+ _info[3].substr(4, 2),
+
+ _info[4].substr(0, 1),
+ _info[4].substr(1, 2),
+ _info[4].substr(3, 1),
+ _info[4].substr(4, 2),
+
+ _info[5].substr(0, 1),
+ _info[5].substr(1, 2),
+ _info[5].substr(3, 1),
+ _info[5].substr(4, 2)
+ ]
+ return parseInt(_calday[n - 1])
+ },
+
+ /**
+ * 传入农历数字月份返回汉语通俗表示法
+ * @param lunar month
+ * @return Cn string
+ * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月'
+ */
+ toChinaMonth: function (m) { // 月 => \u6708
+ if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1
+ var s = this.nStr3[m - 1]
+ s += '\u6708'// 加上月字
+ return s
+ },
+
+ /**
+ * 传入农历日期数字返回汉字表示法
+ * @param lunar day
+ * @return Cn string
+ * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一'
+ */
+ toChinaDay: function (d) { // 日 => \u65e5
+ var s
+ switch (d) {
+ case 10:
+ s = '\u521d\u5341'; break
+ case 20:
+ s = '\u4e8c\u5341'; break
+ break
+ case 30:
+ s = '\u4e09\u5341'; break
+ break
+ default :
+ s = this.nStr2[Math.floor(d / 10)]
+ s += this.nStr1[d % 10]
+ }
+ return (s)
+ },
+
+ /**
+ * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春”
+ * @param y year
+ * @return Cn string
+ * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔'
+ */
+ getAnimal: function (y) {
+ return this.Animals[(y - 4) % 12]
+ },
+
+ /**
+ * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON
+ * @param y solar year
+ * @param m solar month
+ * @param d solar day
+ * @return JSON object
+ * @eg:console.log(calendar.solar2lunar(1987,11,01));
+ */
+ solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31
+ // 年份限定、上限
+ if (y < 1900 || y > 2100) {
+ return -1// undefined转换为数字变为NaN
+ }
+ // 公历传参最下限
+ if (y == 1900 && m == 1 && d < 31) {
+ return -1
+ }
+ // 未传参 获得当天
+ if (!y) {
+ var objDate = new Date()
+ } else {
+ var objDate = new Date(y, parseInt(m) - 1, d)
+ }
+ var i; var leap = 0; var temp = 0
+ // 修正ymd参数
+ var y = objDate.getFullYear()
+ var m = objDate.getMonth() + 1
+ var d = objDate.getDate()
+ var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000
+ for (i = 1900; i < 2101 && offset > 0; i++) {
+ temp = this.lYearDays(i)
+ offset -= temp
+ }
+ if (offset < 0) {
+ offset += temp; i--
+ }
+
+ // 是否今天
+ var isTodayObj = new Date()
+ var isToday = false
+ if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) {
+ isToday = true
+ }
+ // 星期几
+ var nWeek = objDate.getDay()
+ var cWeek = this.nStr1[nWeek]
+ // 数字表示周几顺应天朝周一开始的惯例
+ if (nWeek == 0) {
+ nWeek = 7
+ }
+ // 农历年
+ var year = i
+ var leap = this.leapMonth(i) // 闰哪个月
+ var isLeap = false
+
+ // 效验闰月
+ for (i = 1; i < 13 && offset > 0; i++) {
+ // 闰月
+ if (leap > 0 && i == (leap + 1) && isLeap == false) {
+ --i
+ isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数
+ } else {
+ temp = this.monthDays(year, i)// 计算农历普通月天数
+ }
+ // 解除闰月
+ if (isLeap == true && i == (leap + 1)) { isLeap = false }
+ offset -= temp
+ }
+ // 闰月导致数组下标重叠取反
+ if (offset == 0 && leap > 0 && i == leap + 1) {
+ if (isLeap) {
+ isLeap = false
+ } else {
+ isLeap = true; --i
+ }
+ }
+ if (offset < 0) {
+ offset += temp; --i
+ }
+ // 农历月
+ var month = i
+ // 农历日
+ var day = offset + 1
+ // 天干地支处理
+ var sm = m - 1
+ var gzY = this.toGanZhiYear(year)
+
+ // 当月的两个节气
+ // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year`
+ var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始
+ var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始
+
+ // 依据12节气修正干支月
+ var gzM = this.toGanZhi((y - 1900) * 12 + m + 11)
+ if (d >= firstNode) {
+ gzM = this.toGanZhi((y - 1900) * 12 + m + 12)
+ }
+
+ // 传入的日期的节气与否
+ var isTerm = false
+ var Term = null
+ if (firstNode == d) {
+ isTerm = true
+ Term = this.solarTerm[m * 2 - 2]
+ }
+ if (secondNode == d) {
+ isTerm = true
+ Term = this.solarTerm[m * 2 - 1]
+ }
+ // 日柱 当月一日与 1900/1/1 相差天数
+ var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10
+ var gzD = this.toGanZhi(dayCyclical + d - 1)
+ // 该日期所属的星座
+ var astro = this.toAstro(m, d)
+
+ return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro }
+ },
+
+ /**
+ * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON
+ * @param y lunar year
+ * @param m lunar month
+ * @param d lunar day
+ * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可]
+ * @return JSON object
+ * @eg:console.log(calendar.lunar2solar(1987,9,10));
+ */
+ lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1
+ var isLeapMonth = !!isLeapMonth
+ var leapOffset = 0
+ var leapMonth = this.leapMonth(y)
+ var leapDay = this.leapDays(y)
+ if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同
+ if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值
+ var day = this.monthDays(y, m)
+ var _day = day
+ // bugFix 2016-9-25
+ // if month is leap, _day use leapDays method
+ if (isLeapMonth) {
+ _day = this.leapDays(y, m)
+ }
+ if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验
+
+ // 计算农历的时间差
+ var offset = 0
+ for (var i = 1900; i < y; i++) {
+ offset += this.lYearDays(i)
+ }
+ var leap = 0; var isAdd = false
+ for (var i = 1; i < m; i++) {
+ leap = this.leapMonth(y)
+ if (!isAdd) { // 处理闰月
+ if (leap <= i && leap > 0) {
+ offset += this.leapDays(y); isAdd = true
+ }
+ }
+ offset += this.monthDays(y, i)
+ }
+ // 转换闰月农历 需补充该年闰月的前一个月的时差
+ if (isLeapMonth) { offset += day }
+ // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点)
+ var stmap = Date.UTC(1900, 1, 30, 0, 0, 0)
+ var calObj = new Date((offset + d - 31) * 86400000 + stmap)
+ var cY = calObj.getUTCFullYear()
+ var cM = calObj.getUTCMonth() + 1
+ var cD = calObj.getUTCDate()
+
+ return this.solar2lunar(cY, cM, cD)
+ }
+}
+
+export default calendar
diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json
new file mode 100644
index 0000000..526a4f3
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json
@@ -0,0 +1,12 @@
+{
+ "uni-calender.ok": "ok",
+ "uni-calender.cancel": "cancel",
+ "uni-calender.today": "today",
+ "uni-calender.MON": "MON",
+ "uni-calender.TUE": "TUE",
+ "uni-calender.WED": "WED",
+ "uni-calender.THU": "THU",
+ "uni-calender.FRI": "FRI",
+ "uni-calender.SAT": "SAT",
+ "uni-calender.SUN": "SUN"
+}
diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js
new file mode 100644
index 0000000..fa8f0f3
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json
new file mode 100644
index 0000000..4d959a4
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json
@@ -0,0 +1,12 @@
+{
+ "uni-calender.ok": "确定",
+ "uni-calender.cancel": "取消",
+ "uni-calender.today": "今日",
+ "uni-calender.SUN": "日",
+ "uni-calender.MON": "一",
+ "uni-calender.TUE": "二",
+ "uni-calender.WED": "三",
+ "uni-calender.THU": "四",
+ "uni-calender.FRI": "五",
+ "uni-calender.SAT": "六"
+}
diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json
new file mode 100644
index 0000000..8dabf81
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json
@@ -0,0 +1,12 @@
+{
+ "uni-calender.ok": "確定",
+ "uni-calender.cancel": "取消",
+ "uni-calender.today": "今日",
+ "uni-calender.SUN": "日",
+ "uni-calender.MON": "一",
+ "uni-calender.TUE": "二",
+ "uni-calender.WED": "三",
+ "uni-calender.THU": "四",
+ "uni-calender.FRI": "五",
+ "uni-calender.SAT": "六"
+}
diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue
new file mode 100644
index 0000000..d29ead5
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue
@@ -0,0 +1,188 @@
+
+
+
+
+ {{weeks.date}}
+ {{todayText}}
+ {{weeks.isDay ? todayText : (weeks.lunar.IDayCn === '初一'?weeks.lunar.IMonthCn:weeks.lunar.IDayCn)}}
+ {{weeks.extraInfo.info}}
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue
new file mode 100644
index 0000000..1273d76
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue
@@ -0,0 +1,562 @@
+
+
+
+
+
+
+
+
+ {{nowDate.month}}
+
+
+
+ {{SUNText}}
+
+
+ {{monText}}
+
+
+ {{TUEText}}
+
+
+ {{WEDText}}
+
+
+ {{THUText}}
+
+
+ {{FRIText}}
+
+
+ {{SATText}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-calendar/components/uni-calendar/util.js b/uni_modules/uni-calendar/components/uni-calendar/util.js
new file mode 100644
index 0000000..671f61e
--- /dev/null
+++ b/uni_modules/uni-calendar/components/uni-calendar/util.js
@@ -0,0 +1,360 @@
+import CALENDAR from './calendar.js'
+
+class Calendar {
+ constructor({
+ date,
+ selected,
+ startDate,
+ endDate,
+ range
+ } = {}) {
+ // 当前日期
+ 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)
+ }
+ /**
+ * 设置日期
+ * @param {Object} date
+ */
+ setDate(date) {
+ this.selectDate = this.getDate(date)
+ this._getWeek(this.selectDate.fullDate)
+ }
+
+ /**
+ * 清理多选状态
+ */
+ cleanMultipleStatus() {
+ this.multipleStatus = {
+ before: '',
+ after: '',
+ data: []
+ }
+ }
+
+ /**
+ * 重置开始日期
+ */
+ resetSatrtDate(startDate) {
+ // 范围开始
+ this.startDate = startDate
+
+ }
+
+ /**
+ * 重置结束日期
+ */
+ resetEndDate(endDate) {
+ // 范围结束
+ this.endDate = endDate
+ }
+
+ /**
+ * 获取任意时间
+ */
+ 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 && AddDayCount>0) {
+ dd.setDate(dd.getDate() + AddDayCount)
+ } else {
+ const preMonth = dd.getMonth()
+ dd.setMonth(preMonth + AddDayCount) // 获取AddDayCount天后的日期
+ const nextMonth = dd.getMonth()
+ // 处理 pre 切换月份目标月份为2月没有当前日(30 31) 切换错误问题
+ if(AddDayCount<0 && preMonth!==0 && nextMonth-preMonth>AddDayCount){
+ dd.setMonth(nextMonth+(nextMonth-preMonth+AddDayCount))
+ }
+ // 处理 next 切换月份目标月份为2月没有当前日(30 31) 切换错误问题
+ if(AddDayCount>0 && nextMonth-preMonth>AddDayCount){
+ dd.setMonth(nextMonth-(nextMonth-preMonth-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: y + '-' + m + '-' + d,
+ year: y,
+ month: m,
+ date: d,
+ day: dd.getDay()
+ }
+ }
+
+
+ /**
+ * 获取上月剩余天数
+ */
+ _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,
+ lunar: this.getlunar(full.year, full.month - 1, beforeDate),
+ disable: true
+ })
+ }
+ return dateArr
+ }
+ /**
+ * 获取本月天数
+ */
+ _currentMonthDys(dateData, full) {
+ let dateArr = []
+ let fullDate = this.date.fullDate
+ for (let i = 1; i <= dateData; i++) {
+ let nowDate = full.year + '-' + (full.month < 10 ?
+ full.month : full.month) + '-' + (i < 10 ?
+ '0' + i : i)
+ // 是否今天
+ let isDay = fullDate === nowDate
+ // 获取打点信息
+ let info = this.selected && this.selected.find((item) => {
+ if (this.dateEqual(nowDate, item.date)) {
+ return item
+ }
+ })
+
+ // 日期禁用
+ let disableBefore = true
+ let disableAfter = true
+ if (this.startDate) {
+ // let dateCompBefore = this.dateCompare(this.startDate, fullDate)
+ // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate)
+ disableBefore = this.dateCompare(this.startDate, nowDate)
+ }
+
+ if (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) {
+ if (multiples) {
+ multiplesStatus = multiples.findIndex((item) => {
+ return this.dateEqual(item, nowDate)
+ })
+ }
+ if (multiplesStatus !== -1) {
+ checked = true
+ }
+ }
+ let data = {
+ fullDate: nowDate,
+ year: full.year,
+ date: i,
+ multiple: this.range ? checked : false,
+ beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate),
+ afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate),
+ month: full.month,
+ lunar: this.getlunar(full.year, full.month, i),
+ disable: !(disableBefore && disableAfter),
+ isDay
+ }
+ if (info) {
+ data.extraInfo = info
+ }
+
+ dateArr.push(data)
+ }
+ return dateArr
+ }
+ /**
+ * 获取下月天数
+ */
+ _getNextMonthDays(surplus, full) {
+ let dateArr = []
+ for (let i = 1; i < surplus + 1; i++) {
+ dateArr.push({
+ date: i,
+ month: Number(full.month) + 1,
+ lunar: this.getlunar(full.year, Number(full.month) + 1, i),
+ disable: true
+ })
+ }
+ return dateArr
+ }
+
+ /**
+ * 获取当前日期详情
+ * @param {Object} date
+ */
+ getInfo(date) {
+ if (!date) {
+ date = new Date()
+ }
+ const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate)
+ return dateInfo
+ }
+
+ /**
+ * 比较时间大小
+ */
+ 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(before.replace('-', '/').replace('-', '/'))
+ // 计算详细项的截止时间
+ after = new Date(after.replace('-', '/').replace('-', '/'))
+ if (before.getTime() - after.getTime() === 0) {
+ return true
+ } else {
+ return false
+ }
+ }
+
+
+ /**
+ * 获取日期范围内所有日期
+ * @param {Object} begin
+ * @param {Object} end
+ */
+ geDateAll(begin, end) {
+ var arr = []
+ var ab = begin.split('-')
+ var ae = end.split('-')
+ var db = new Date()
+ db.setFullYear(ab[0], ab[1] - 1, ab[2])
+ var de = new Date()
+ de.setFullYear(ae[0], ae[1] - 1, ae[2])
+ var unixDb = db.getTime() - 24 * 60 * 60 * 1000
+ var unixDe = de.getTime() - 24 * 60 * 60 * 1000
+ for (var k = unixDb; k <= unixDe;) {
+ k = k + 24 * 60 * 60 * 1000
+ arr.push(this.getDate(new Date(parseInt(k))).fullDate)
+ }
+ return arr
+ }
+ /**
+ * 计算阴历日期显示
+ */
+ getlunar(year, month, date) {
+ return CALENDAR.solar2lunar(year, month, date)
+ }
+ /**
+ * 设置打点
+ */
+ setSelectInfo(data, value) {
+ this.selected = value
+ this._getWeek(data)
+ }
+
+ /**
+ * 获取多选状态
+ */
+ setMultiple(fullDate) {
+ let {
+ before,
+ after
+ } = this.multipleStatus
+
+ if (!this.range) return
+ if (before && after) {
+ this.multipleStatus.before = ''
+ this.multipleStatus.after = ''
+ this.multipleStatus.data = []
+ } else {
+ if (!before) {
+ this.multipleStatus.before = fullDate
+ } else {
+ this.multipleStatus.after = fullDate
+ 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._getWeek(fullDate)
+ }
+
+ /**
+ * 获取每周数据
+ * @param {Object} dateData
+ */
+ _getWeek(dateData) {
+ const {
+ year,
+ month
+ } = 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: []
+ }
+ 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
+ }
+
+ //静态方法
+ // static init(date) {
+ // if (!this.instance) {
+ // this.instance = new Calendar(date);
+ // }
+ // return this.instance;
+ // }
+}
+
+
+export default Calendar
diff --git a/uni_modules/uni-calendar/package.json b/uni_modules/uni-calendar/package.json
new file mode 100644
index 0000000..713a2c4
--- /dev/null
+++ b/uni_modules/uni-calendar/package.json
@@ -0,0 +1,85 @@
+{
+ "id": "uni-calendar",
+ "displayName": "uni-calendar 日历",
+ "version": "1.4.9",
+ "description": "日历组件",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "日历",
+ "",
+ "打卡",
+ "日历选择"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-calendar/readme.md b/uni_modules/uni-calendar/readme.md
new file mode 100644
index 0000000..4f3ca0e
--- /dev/null
+++ b/uni_modules/uni-calendar/readme.md
@@ -0,0 +1,103 @@
+
+
+## Calendar 日历
+> **组件名:uni-calendar**
+> 代码块: `uCalendar`
+
+
+日历组件
+
+> **注意事项**
+> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
+> - 本组件农历转换使用的js是 [@1900-2100区间内的公历、农历互转](https://github.com/jjonline/calendar.js)
+> - 仅支持自定义组件模式
+> - `date`属性传入的应该是一个 String ,如: 2019-06-27 ,而不是 new Date()
+> - 通过 `insert` 属性来确定当前的事件是 @change 还是 @confirm 。理应合并为一个事件,但是为了区分模式,现使用两个事件,这里需要注意
+> - 弹窗模式下无法阻止后面的元素滚动,如有需要阻止,请在弹窗弹出后,手动设置滚动元素为不可滚动
+
+
+### 安装方式
+
+本组件符合[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
+
+
+
+```
+
+### 通过方法打开日历
+
+需要设置 `insert` 为 `false`
+
+```html
+
+
+
+
+```
+
+```javascript
+
+export default {
+ data() {
+ return {};
+ },
+ methods: {
+ open(){
+ this.$refs.calendar.open();
+ },
+ confirm(e) {
+ console.log(e);
+ }
+ }
+};
+
+```
+
+
+## API
+
+### Calendar Props
+
+| 属性名 | 类型 | 默认值| 说明 |
+| | |
+| date | String |- | 自定义当前时间,默认为今天 |
+| lunar | Boolean | false | 显示农历 |
+| startDate | String |- | 日期选择范围-开始日期 |
+| endDate | String |- | 日期选择范围-结束日期 |
+| range | Boolean | false | 范围选择 |
+| insert | Boolean | false | 插入模式,可选值,ture:插入模式;false:弹窗模式;默认为插入模式 |
+|clearDate |Boolean |true |弹窗模式是否清空上次选择内容 |
+| selected | Array |- | 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}] |
+|showMonth | Boolean | true | 是否显示月份为背景 |
+
+### Calendar Events
+
+| 事件名 | 说明 |返回值|
+| | | |
+| open | 弹出日历组件,`insert :false` 时生效|- |
+
+
+
+
+
+## 组件示例
+
+点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar](https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar)
\ No newline at end of file
diff --git a/uni_modules/uni-data-select/changelog.md b/uni_modules/uni-data-select/changelog.md
new file mode 100644
index 0000000..dd87dbb
--- /dev/null
+++ b/uni_modules/uni-data-select/changelog.md
@@ -0,0 +1,33 @@
+## 1.0.5(2023-02-03)
+- 修复 禁用时会显示清空按钮
+## 1.0.4(2023-02-02)
+- 优化 查询条件短期内多次变更只查询最后一次变更后的结果
+- 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue
+## 1.0.3(2023-01-16)
+- 修复 不关联服务空间报错的问题
+## 1.0.2(2023-01-14)
+- 新增 属性 `format` 可用于格式化显示选项内容
+## 1.0.1(2022-12-06)
+- 修复 当where变化时,数据不会自动更新的问题
+## 0.1.9(2022-09-05)
+- 修复 微信小程序下拉框出现后选择会点击到蒙板后面的输入框
+## 0.1.8(2022-08-29)
+- 修复 点击的位置不准确
+## 0.1.7(2022-08-12)
+- 新增 支持 disabled 属性
+## 0.1.6(2022-07-06)
+- 修复 pc端宽度异常的bug
+## 0.1.5
+- 修复 pc端宽度异常的bug
+## 0.1.4(2022-07-05)
+- 优化 显示样式
+## 0.1.3(2022-06-02)
+- 修复 localdata 赋值不生效的 bug
+- 新增 支持 uni.scss 修改颜色
+- 新增 支持选项禁用(数据选项设置 disabled: true 即禁用)
+## 0.1.2(2022-05-08)
+- 修复 当 value 为 0 时选择不生效的 bug
+## 0.1.1(2022-05-07)
+- 新增 记住上次的选项(仅 collection 存在时有效)
+## 0.1.0(2022-04-22)
+- 初始化
diff --git a/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
new file mode 100644
index 0000000..2c2a9ac
--- /dev/null
+++ b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue
@@ -0,0 +1,502 @@
+
+
+ {{label + ':'}}
+
+
+
+ {{current}}
+ {{typePlaceholder}}
+
+
+
+
+
+
+
+
+ {{emptyTips}}
+
+
+ {{formatItemName(item)}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-data-select/package.json b/uni_modules/uni-data-select/package.json
new file mode 100644
index 0000000..3d40897
--- /dev/null
+++ b/uni_modules/uni-data-select/package.json
@@ -0,0 +1,85 @@
+{
+ "id": "uni-data-select",
+ "displayName": "uni-data-select 下拉框选择器",
+ "version": "1.0.5",
+ "description": "通过数据驱动的下拉框选择器",
+ "keywords": [
+ "uni-ui",
+ "select",
+ "uni-data-select",
+ "下拉框",
+ "下拉选"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "^3.1.1"
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-load-more"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "u",
+ "app-nvue": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "u",
+ "百度": "u",
+ "字节跳动": "u",
+ "QQ": "u",
+ "京东": "u"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-data-select/readme.md b/uni_modules/uni-data-select/readme.md
new file mode 100644
index 0000000..eb58de3
--- /dev/null
+++ b/uni_modules/uni-data-select/readme.md
@@ -0,0 +1,8 @@
+## DataSelect 下拉框选择器
+> **组件名:uni-data-select**
+> 代码块: `uDataSelect`
+
+当选项过多时,使用下拉菜单展示并选择内容
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-select)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
diff --git a/uni_modules/uni-file-picker/changelog.md b/uni_modules/uni-file-picker/changelog.md
new file mode 100644
index 0000000..b8230e9
--- /dev/null
+++ b/uni_modules/uni-file-picker/changelog.md
@@ -0,0 +1,67 @@
+## 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)
+- 修复 参数为对象的情况下,url在某些情况显示错误的bug
+## 1.0.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-file-picker](https://uniapp.dcloud.io/component/uniui/uni-file-picker)
+## 0.2.16(2021-11-08)
+- 修复 传入空对象 ,显示错误的Bug
+## 0.2.15(2021-08-30)
+- 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug
+## 0.2.14(2021-08-23)
+- 新增 参数中返回 fileID 字段
+## 0.2.13(2021-08-23)
+- 修复 腾讯云传入fileID 不能回显的bug
+- 修复 选择图片后,不能放大的问题
+## 0.2.12(2021-08-17)
+- 修复 由于 0.2.11 版本引起的不能回显图片的Bug
+## 0.2.11(2021-08-16)
+- 新增 clearFiles(index) 方法,可以手动删除指定文件
+- 修复 v-model 值设为 null 报错的Bug
+## 0.2.10(2021-08-13)
+- 修复 return-type="object" 时,无法删除文件的Bug
+## 0.2.9(2021-08-03)
+- 修复 auto-upload 属性失效的Bug
+## 0.2.8(2021-07-31)
+- 修复 fileExtname属性不指定值报错的Bug
+## 0.2.7(2021-07-31)
+- 修复 在某种场景下图片不回显的Bug
+## 0.2.6(2021-07-30)
+- 修复 return-type为object下,返回值不正确的Bug
+## 0.2.5(2021-07-30)
+- 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题
+## 0.2.3(2021-07-28)
+- 优化 调整示例代码
+## 0.2.2(2021-07-27)
+- 修复 vue3 下赋值错误的Bug
+- 优化 h5平台下上传文件导致页面卡死的问题
+## 0.2.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 0.1.1(2021-07-02)
+- 修复 sourceType 缺少默认值导致 ios 无法选择文件
+## 0.1.0(2021-06-30)
+- 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改
+## 0.0.11(2021-06-30)
+- 修复 由 0.0.10 版本引发的 returnType 属性失效的问题
+## 0.0.10(2021-06-29)
+- 优化 文件上传后进度条消失时机
+## 0.0.9(2021-06-29)
+- 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug
+## 0.0.8(2021-06-15)
+- 修复 删除文件时无法触发 v-model 的Bug
+## 0.0.7(2021-05-12)
+- 新增 组件示例地址
+## 0.0.6(2021-04-09)
+- 修复 选择的文件非 file-extname 字段指定的扩展名报错的Bug
+## 0.0.5(2021-04-09)
+- 优化 更新组件示例
+## 0.0.4(2021-04-09)
+- 优化 file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔
+## 0.0.3(2021-02-05)
+- 调整为uni_modules目录规范
+- 修复 微信小程序不指定 fileExtname 属性选择失败的Bug
diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js b/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js
new file mode 100644
index 0000000..018590d
--- /dev/null
+++ b/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js
@@ -0,0 +1,224 @@
+'use strict';
+
+const ERR_MSG_OK = 'chooseAndUploadFile:ok';
+const ERR_MSG_FAIL = 'chooseAndUploadFile:fail';
+
+function chooseImage(opts) {
+ const {
+ count,
+ sizeType = ['original', 'compressed'],
+ sourceType,
+ extension
+ } = opts
+ return new Promise((resolve, reject) => {
+ uni.chooseImage({
+ count,
+ sizeType,
+ sourceType,
+ extension,
+ success(res) {
+ resolve(normalizeChooseAndUploadFileRes(res, 'image'));
+ },
+ fail(res) {
+ reject({
+ errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL),
+ });
+ },
+ });
+ });
+}
+
+function chooseVideo(opts) {
+ const {
+ camera,
+ compressed,
+ maxDuration,
+ sourceType,
+ extension
+ } = opts;
+ return new Promise((resolve, reject) => {
+ uni.chooseVideo({
+ camera,
+ compressed,
+ maxDuration,
+ sourceType,
+ extension,
+ success(res) {
+ const {
+ tempFilePath,
+ duration,
+ size,
+ height,
+ width
+ } = res;
+ resolve(normalizeChooseAndUploadFileRes({
+ errMsg: 'chooseVideo:ok',
+ tempFilePaths: [tempFilePath],
+ tempFiles: [
+ {
+ name: (res.tempFile && res.tempFile.name) || '',
+ path: tempFilePath,
+ size,
+ type: (res.tempFile && res.tempFile.type) || '',
+ width,
+ height,
+ duration,
+ fileType: 'video',
+ cloudPath: '',
+ }, ],
+ }, 'video'));
+ },
+ fail(res) {
+ reject({
+ errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL),
+ });
+ },
+ });
+ });
+}
+
+function chooseAll(opts) {
+ const {
+ count,
+ extension
+ } = opts;
+ return new Promise((resolve, reject) => {
+ let chooseFile = uni.chooseFile;
+ if (typeof wx !== 'undefined' &&
+ typeof wx.chooseMessageFile === 'function') {
+ chooseFile = wx.chooseMessageFile;
+ }
+ if (typeof chooseFile !== 'function') {
+ return reject({
+ errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。',
+ });
+ }
+ chooseFile({
+ type: 'all',
+ count,
+ extension,
+ success(res) {
+ resolve(normalizeChooseAndUploadFileRes(res));
+ },
+ fail(res) {
+ reject({
+ errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL),
+ });
+ },
+ });
+ });
+}
+
+function normalizeChooseAndUploadFileRes(res, fileType) {
+ res.tempFiles.forEach((item, index) => {
+ if (!item.name) {
+ item.name = item.path.substring(item.path.lastIndexOf('/') + 1);
+ }
+ if (fileType) {
+ item.fileType = fileType;
+ }
+ item.cloudPath =
+ Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.'));
+ });
+ if (!res.tempFilePaths) {
+ res.tempFilePaths = res.tempFiles.map((file) => file.path);
+ }
+ return res;
+}
+
+function uploadCloudFiles(files, max = 5, onUploadProgress) {
+ files = JSON.parse(JSON.stringify(files))
+ const len = files.length
+ let count = 0
+ let self = this
+ return new Promise(resolve => {
+ while (count < max) {
+ next()
+ }
+
+ function next() {
+ let cur = count++
+ if (cur >= len) {
+ !files.find(item => !item.url && !item.errMsg) && resolve(files)
+ return
+ }
+ const fileItem = files[cur]
+ const index = self.files.findIndex(v => v.uuid === fileItem.uuid)
+ fileItem.url = ''
+ delete fileItem.errMsg
+
+ uniCloud
+ .uploadFile({
+ filePath: fileItem.path,
+ cloudPath: fileItem.cloudPath,
+ fileType: fileItem.fileType,
+ onUploadProgress: res => {
+ res.index = index
+ onUploadProgress && onUploadProgress(res)
+ }
+ })
+ .then(res => {
+ fileItem.url = res.fileID
+ fileItem.index = index
+ if (cur < len) {
+ next()
+ }
+ })
+ .catch(res => {
+ fileItem.errMsg = res.errMsg || res.message
+ fileItem.index = index
+ if (cur < len) {
+ next()
+ }
+ })
+ }
+ })
+}
+
+
+
+
+
+function uploadFiles(choosePromise, {
+ onChooseFile,
+ onUploadProgress
+}) {
+ return choosePromise
+ .then((res) => {
+ if (onChooseFile) {
+ const customChooseRes = onChooseFile(res);
+ if (typeof customChooseRes !== 'undefined') {
+ return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ?
+ res : chooseRes);
+ }
+ }
+ return res;
+ })
+ .then((res) => {
+ if (res === false) {
+ return {
+ errMsg: ERR_MSG_OK,
+ tempFilePaths: [],
+ tempFiles: [],
+ };
+ }
+ return res
+ })
+}
+
+function chooseAndUploadFile(opts = {
+ type: 'all'
+}) {
+ if (opts.type === 'image') {
+ return uploadFiles(chooseImage(opts), opts);
+ }
+ else if (opts.type === 'video') {
+ return uploadFiles(chooseVideo(opts), opts);
+ }
+ return uploadFiles(chooseAll(opts), opts);
+}
+
+export {
+ chooseAndUploadFile,
+ uploadCloudFiles
+};
diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue b/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue
new file mode 100644
index 0000000..7a13a6c
--- /dev/null
+++ b/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue
@@ -0,0 +1,667 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue
new file mode 100644
index 0000000..eb1840b
--- /dev/null
+++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue
@@ -0,0 +1,325 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+ 点击重试
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue
new file mode 100644
index 0000000..51ace0b
--- /dev/null
+++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击重试
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/utils.js b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js
new file mode 100644
index 0000000..60aaa3e
--- /dev/null
+++ b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js
@@ -0,0 +1,109 @@
+/**
+ * 获取文件名和后缀
+ * @param {String} name
+ */
+export const get_file_ext = (name) => {
+ const last_len = name.lastIndexOf('.')
+ const len = name.length
+ return {
+ name: name.substring(0, last_len),
+ ext: name.substring(last_len + 1, len)
+ }
+}
+
+/**
+ * 获取扩展名
+ * @param {Array} fileExtname
+ */
+export const get_extname = (fileExtname) => {
+ if (!Array.isArray(fileExtname)) {
+ let extname = fileExtname.replace(/(\[|\])/g, '')
+ return extname.split(',')
+ } else {
+ return fileExtname
+ }
+ return []
+}
+
+/**
+ * 获取文件和检测是否可选
+ */
+export const get_files_and_is_max = (res, _extname) => {
+ let filePaths = []
+ let files = []
+ if(!_extname || _extname.length === 0){
+ return {
+ filePaths,
+ files
+ }
+ }
+ res.tempFiles.forEach(v => {
+ let fileFullName = get_file_ext(v.name)
+ const extname = fileFullName.ext.toLowerCase()
+ if (_extname.indexOf(extname) !== -1) {
+ files.push(v)
+ filePaths.push(v.path)
+ }
+ })
+ if (files.length !== res.tempFiles.length) {
+ uni.showToast({
+ title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`,
+ icon: 'none',
+ duration: 5000
+ })
+ }
+
+ return {
+ filePaths,
+ files
+ }
+}
+
+
+/**
+ * 获取图片信息
+ * @param {Object} filepath
+ */
+export const get_file_info = (filepath) => {
+ return new Promise((resolve, reject) => {
+ uni.getImageInfo({
+ src: filepath,
+ success(res) {
+ resolve(res)
+ },
+ fail(err) {
+ reject(err)
+ }
+ })
+ })
+}
+/**
+ * 获取封装数据
+ */
+export const get_file_data = async (files, type = 'image') => {
+ // 最终需要上传数据库的数据
+ let fileFullName = get_file_ext(files.name)
+ const extname = fileFullName.ext.toLowerCase()
+ let filedata = {
+ name: files.name,
+ uuid: files.uuid,
+ extname: extname || '',
+ cloudPath: files.cloudPath,
+ fileType: files.fileType,
+ url: files.path || files.path,
+ size: files.size, //单位是字节
+ image: {},
+ path: files.path,
+ video: {}
+ }
+ if (type === 'image') {
+ const imageinfo = await get_file_info(files.path)
+ delete filedata.video
+ filedata.image.width = imageinfo.width
+ filedata.image.height = imageinfo.height
+ filedata.image.location = imageinfo.path
+ } else {
+ delete filedata.image
+ }
+ return filedata
+}
diff --git a/uni_modules/uni-file-picker/package.json b/uni_modules/uni-file-picker/package.json
new file mode 100644
index 0000000..35c926c
--- /dev/null
+++ b/uni_modules/uni-file-picker/package.json
@@ -0,0 +1,83 @@
+{
+ "id": "uni-file-picker",
+ "displayName": "uni-file-picker 文件选择上传",
+ "version": "1.0.4",
+ "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "图片上传",
+ "文件上传"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+"dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "n"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-file-picker/readme.md b/uni_modules/uni-file-picker/readme.md
new file mode 100644
index 0000000..c8399a5
--- /dev/null
+++ b/uni_modules/uni-file-picker/readme.md
@@ -0,0 +1,11 @@
+
+## FilePicker 文件选择上传
+
+> **组件名:uni-file-picker**
+> 代码块: `uFilePicker`
+
+
+文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md
new file mode 100644
index 0000000..6449885
--- /dev/null
+++ b/uni_modules/uni-icons/changelog.md
@@ -0,0 +1,22 @@
+## 1.3.5(2022-01-24)
+- 优化 size 属性可以传入不带单位的字符串数值
+## 1.3.4(2022-01-24)
+- 优化 size 支持其他单位
+## 1.3.3(2022-01-17)
+- 修复 nvue 有些图标不显示的bug,兼容老版本图标
+## 1.3.2(2021-12-01)
+- 优化 示例可复制图标名称
+## 1.3.1(2021-11-23)
+- 优化 兼容旧组件 type 值
+## 1.3.0(2021-11-19)
+- 新增 更多图标
+- 优化 自定义图标使用方式
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons)
+## 1.1.7(2021-11-08)
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.5(2021-05-12)
+- 新增 组件示例地址
+## 1.1.4(2021-02-05)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-icons/components/uni-icons/icons.js b/uni_modules/uni-icons/components/uni-icons/icons.js
new file mode 100644
index 0000000..7889936
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/icons.js
@@ -0,0 +1,1169 @@
+export default {
+ "id": "2852637",
+ "name": "uniui图标库",
+ "font_family": "uniicons",
+ "css_prefix_text": "uniui-",
+ "description": "",
+ "glyphs": [
+ {
+ "icon_id": "25027049",
+ "name": "yanse",
+ "font_class": "color",
+ "unicode": "e6cf",
+ "unicode_decimal": 59087
+ },
+ {
+ "icon_id": "25027048",
+ "name": "wallet",
+ "font_class": "wallet",
+ "unicode": "e6b1",
+ "unicode_decimal": 59057
+ },
+ {
+ "icon_id": "25015720",
+ "name": "settings-filled",
+ "font_class": "settings-filled",
+ "unicode": "e6ce",
+ "unicode_decimal": 59086
+ },
+ {
+ "icon_id": "25015434",
+ "name": "shimingrenzheng-filled",
+ "font_class": "auth-filled",
+ "unicode": "e6cc",
+ "unicode_decimal": 59084
+ },
+ {
+ "icon_id": "24934246",
+ "name": "shop-filled",
+ "font_class": "shop-filled",
+ "unicode": "e6cd",
+ "unicode_decimal": 59085
+ },
+ {
+ "icon_id": "24934159",
+ "name": "staff-filled-01",
+ "font_class": "staff-filled",
+ "unicode": "e6cb",
+ "unicode_decimal": 59083
+ },
+ {
+ "icon_id": "24932461",
+ "name": "VIP-filled",
+ "font_class": "vip-filled",
+ "unicode": "e6c6",
+ "unicode_decimal": 59078
+ },
+ {
+ "icon_id": "24932462",
+ "name": "plus_circle_fill",
+ "font_class": "plus-filled",
+ "unicode": "e6c7",
+ "unicode_decimal": 59079
+ },
+ {
+ "icon_id": "24932463",
+ "name": "folder_add-filled",
+ "font_class": "folder-add-filled",
+ "unicode": "e6c8",
+ "unicode_decimal": 59080
+ },
+ {
+ "icon_id": "24932464",
+ "name": "yanse-filled",
+ "font_class": "color-filled",
+ "unicode": "e6c9",
+ "unicode_decimal": 59081
+ },
+ {
+ "icon_id": "24932465",
+ "name": "tune-filled",
+ "font_class": "tune-filled",
+ "unicode": "e6ca",
+ "unicode_decimal": 59082
+ },
+ {
+ "icon_id": "24932455",
+ "name": "a-rilidaka-filled",
+ "font_class": "calendar-filled",
+ "unicode": "e6c0",
+ "unicode_decimal": 59072
+ },
+ {
+ "icon_id": "24932456",
+ "name": "notification-filled",
+ "font_class": "notification-filled",
+ "unicode": "e6c1",
+ "unicode_decimal": 59073
+ },
+ {
+ "icon_id": "24932457",
+ "name": "wallet-filled",
+ "font_class": "wallet-filled",
+ "unicode": "e6c2",
+ "unicode_decimal": 59074
+ },
+ {
+ "icon_id": "24932458",
+ "name": "paihangbang-filled",
+ "font_class": "medal-filled",
+ "unicode": "e6c3",
+ "unicode_decimal": 59075
+ },
+ {
+ "icon_id": "24932459",
+ "name": "gift-filled",
+ "font_class": "gift-filled",
+ "unicode": "e6c4",
+ "unicode_decimal": 59076
+ },
+ {
+ "icon_id": "24932460",
+ "name": "fire-filled",
+ "font_class": "fire-filled",
+ "unicode": "e6c5",
+ "unicode_decimal": 59077
+ },
+ {
+ "icon_id": "24928001",
+ "name": "refreshempty",
+ "font_class": "refreshempty",
+ "unicode": "e6bf",
+ "unicode_decimal": 59071
+ },
+ {
+ "icon_id": "24926853",
+ "name": "location-ellipse",
+ "font_class": "location-filled",
+ "unicode": "e6af",
+ "unicode_decimal": 59055
+ },
+ {
+ "icon_id": "24926735",
+ "name": "person-filled",
+ "font_class": "person-filled",
+ "unicode": "e69d",
+ "unicode_decimal": 59037
+ },
+ {
+ "icon_id": "24926703",
+ "name": "personadd-filled",
+ "font_class": "personadd-filled",
+ "unicode": "e698",
+ "unicode_decimal": 59032
+ },
+ {
+ "icon_id": "24923351",
+ "name": "back",
+ "font_class": "back",
+ "unicode": "e6b9",
+ "unicode_decimal": 59065
+ },
+ {
+ "icon_id": "24923352",
+ "name": "forward",
+ "font_class": "forward",
+ "unicode": "e6ba",
+ "unicode_decimal": 59066
+ },
+ {
+ "icon_id": "24923353",
+ "name": "arrowthinright",
+ "font_class": "arrow-right",
+ "unicode": "e6bb",
+ "unicode_decimal": 59067
+ },
+ {
+ "icon_id": "24923353",
+ "name": "arrowthinright",
+ "font_class": "arrowthinright",
+ "unicode": "e6bb",
+ "unicode_decimal": 59067
+ },
+ {
+ "icon_id": "24923354",
+ "name": "arrowthinleft",
+ "font_class": "arrow-left",
+ "unicode": "e6bc",
+ "unicode_decimal": 59068
+ },
+ {
+ "icon_id": "24923354",
+ "name": "arrowthinleft",
+ "font_class": "arrowthinleft",
+ "unicode": "e6bc",
+ "unicode_decimal": 59068
+ },
+ {
+ "icon_id": "24923355",
+ "name": "arrowthinup",
+ "font_class": "arrow-up",
+ "unicode": "e6bd",
+ "unicode_decimal": 59069
+ },
+ {
+ "icon_id": "24923355",
+ "name": "arrowthinup",
+ "font_class": "arrowthinup",
+ "unicode": "e6bd",
+ "unicode_decimal": 59069
+ },
+ {
+ "icon_id": "24923356",
+ "name": "arrowthindown",
+ "font_class": "arrow-down",
+ "unicode": "e6be",
+ "unicode_decimal": 59070
+ },{
+ "icon_id": "24923356",
+ "name": "arrowthindown",
+ "font_class": "arrowthindown",
+ "unicode": "e6be",
+ "unicode_decimal": 59070
+ },
+ {
+ "icon_id": "24923349",
+ "name": "arrowdown",
+ "font_class": "bottom",
+ "unicode": "e6b8",
+ "unicode_decimal": 59064
+ },{
+ "icon_id": "24923349",
+ "name": "arrowdown",
+ "font_class": "arrowdown",
+ "unicode": "e6b8",
+ "unicode_decimal": 59064
+ },
+ {
+ "icon_id": "24923346",
+ "name": "arrowright",
+ "font_class": "right",
+ "unicode": "e6b5",
+ "unicode_decimal": 59061
+ },
+ {
+ "icon_id": "24923346",
+ "name": "arrowright",
+ "font_class": "arrowright",
+ "unicode": "e6b5",
+ "unicode_decimal": 59061
+ },
+ {
+ "icon_id": "24923347",
+ "name": "arrowup",
+ "font_class": "top",
+ "unicode": "e6b6",
+ "unicode_decimal": 59062
+ },
+ {
+ "icon_id": "24923347",
+ "name": "arrowup",
+ "font_class": "arrowup",
+ "unicode": "e6b6",
+ "unicode_decimal": 59062
+ },
+ {
+ "icon_id": "24923348",
+ "name": "arrowleft",
+ "font_class": "left",
+ "unicode": "e6b7",
+ "unicode_decimal": 59063
+ },
+ {
+ "icon_id": "24923348",
+ "name": "arrowleft",
+ "font_class": "arrowleft",
+ "unicode": "e6b7",
+ "unicode_decimal": 59063
+ },
+ {
+ "icon_id": "24923334",
+ "name": "eye",
+ "font_class": "eye",
+ "unicode": "e651",
+ "unicode_decimal": 58961
+ },
+ {
+ "icon_id": "24923335",
+ "name": "eye-filled",
+ "font_class": "eye-filled",
+ "unicode": "e66a",
+ "unicode_decimal": 58986
+ },
+ {
+ "icon_id": "24923336",
+ "name": "eye-slash",
+ "font_class": "eye-slash",
+ "unicode": "e6b3",
+ "unicode_decimal": 59059
+ },
+ {
+ "icon_id": "24923337",
+ "name": "eye-slash-filled",
+ "font_class": "eye-slash-filled",
+ "unicode": "e6b4",
+ "unicode_decimal": 59060
+ },
+ {
+ "icon_id": "24923305",
+ "name": "info-filled",
+ "font_class": "info-filled",
+ "unicode": "e649",
+ "unicode_decimal": 58953
+ },
+ {
+ "icon_id": "24923299",
+ "name": "reload-01",
+ "font_class": "reload",
+ "unicode": "e6b2",
+ "unicode_decimal": 59058
+ },
+ {
+ "icon_id": "24923195",
+ "name": "mic_slash_fill",
+ "font_class": "micoff-filled",
+ "unicode": "e6b0",
+ "unicode_decimal": 59056
+ },
+ {
+ "icon_id": "24923165",
+ "name": "map-pin-ellipse",
+ "font_class": "map-pin-ellipse",
+ "unicode": "e6ac",
+ "unicode_decimal": 59052
+ },
+ {
+ "icon_id": "24923166",
+ "name": "map-pin",
+ "font_class": "map-pin",
+ "unicode": "e6ad",
+ "unicode_decimal": 59053
+ },
+ {
+ "icon_id": "24923167",
+ "name": "location",
+ "font_class": "location",
+ "unicode": "e6ae",
+ "unicode_decimal": 59054
+ },
+ {
+ "icon_id": "24923064",
+ "name": "starhalf",
+ "font_class": "starhalf",
+ "unicode": "e683",
+ "unicode_decimal": 59011
+ },
+ {
+ "icon_id": "24923065",
+ "name": "star",
+ "font_class": "star",
+ "unicode": "e688",
+ "unicode_decimal": 59016
+ },
+ {
+ "icon_id": "24923066",
+ "name": "star-filled",
+ "font_class": "star-filled",
+ "unicode": "e68f",
+ "unicode_decimal": 59023
+ },
+ {
+ "icon_id": "24899646",
+ "name": "a-rilidaka",
+ "font_class": "calendar",
+ "unicode": "e6a0",
+ "unicode_decimal": 59040
+ },
+ {
+ "icon_id": "24899647",
+ "name": "fire",
+ "font_class": "fire",
+ "unicode": "e6a1",
+ "unicode_decimal": 59041
+ },
+ {
+ "icon_id": "24899648",
+ "name": "paihangbang",
+ "font_class": "medal",
+ "unicode": "e6a2",
+ "unicode_decimal": 59042
+ },
+ {
+ "icon_id": "24899649",
+ "name": "font",
+ "font_class": "font",
+ "unicode": "e6a3",
+ "unicode_decimal": 59043
+ },
+ {
+ "icon_id": "24899650",
+ "name": "gift",
+ "font_class": "gift",
+ "unicode": "e6a4",
+ "unicode_decimal": 59044
+ },
+ {
+ "icon_id": "24899651",
+ "name": "link",
+ "font_class": "link",
+ "unicode": "e6a5",
+ "unicode_decimal": 59045
+ },
+ {
+ "icon_id": "24899652",
+ "name": "notification",
+ "font_class": "notification",
+ "unicode": "e6a6",
+ "unicode_decimal": 59046
+ },
+ {
+ "icon_id": "24899653",
+ "name": "staff",
+ "font_class": "staff",
+ "unicode": "e6a7",
+ "unicode_decimal": 59047
+ },
+ {
+ "icon_id": "24899654",
+ "name": "VIP",
+ "font_class": "vip",
+ "unicode": "e6a8",
+ "unicode_decimal": 59048
+ },
+ {
+ "icon_id": "24899655",
+ "name": "folder_add",
+ "font_class": "folder-add",
+ "unicode": "e6a9",
+ "unicode_decimal": 59049
+ },
+ {
+ "icon_id": "24899656",
+ "name": "tune",
+ "font_class": "tune",
+ "unicode": "e6aa",
+ "unicode_decimal": 59050
+ },
+ {
+ "icon_id": "24899657",
+ "name": "shimingrenzheng",
+ "font_class": "auth",
+ "unicode": "e6ab",
+ "unicode_decimal": 59051
+ },
+ {
+ "icon_id": "24899565",
+ "name": "person",
+ "font_class": "person",
+ "unicode": "e699",
+ "unicode_decimal": 59033
+ },
+ {
+ "icon_id": "24899566",
+ "name": "email-filled",
+ "font_class": "email-filled",
+ "unicode": "e69a",
+ "unicode_decimal": 59034
+ },
+ {
+ "icon_id": "24899567",
+ "name": "phone-filled",
+ "font_class": "phone-filled",
+ "unicode": "e69b",
+ "unicode_decimal": 59035
+ },
+ {
+ "icon_id": "24899568",
+ "name": "phone",
+ "font_class": "phone",
+ "unicode": "e69c",
+ "unicode_decimal": 59036
+ },
+ {
+ "icon_id": "24899570",
+ "name": "email",
+ "font_class": "email",
+ "unicode": "e69e",
+ "unicode_decimal": 59038
+ },
+ {
+ "icon_id": "24899571",
+ "name": "personadd",
+ "font_class": "personadd",
+ "unicode": "e69f",
+ "unicode_decimal": 59039
+ },
+ {
+ "icon_id": "24899558",
+ "name": "chatboxes-filled",
+ "font_class": "chatboxes-filled",
+ "unicode": "e692",
+ "unicode_decimal": 59026
+ },
+ {
+ "icon_id": "24899559",
+ "name": "contact",
+ "font_class": "contact",
+ "unicode": "e693",
+ "unicode_decimal": 59027
+ },
+ {
+ "icon_id": "24899560",
+ "name": "chatbubble-filled",
+ "font_class": "chatbubble-filled",
+ "unicode": "e694",
+ "unicode_decimal": 59028
+ },
+ {
+ "icon_id": "24899561",
+ "name": "contact-filled",
+ "font_class": "contact-filled",
+ "unicode": "e695",
+ "unicode_decimal": 59029
+ },
+ {
+ "icon_id": "24899562",
+ "name": "chatboxes",
+ "font_class": "chatboxes",
+ "unicode": "e696",
+ "unicode_decimal": 59030
+ },
+ {
+ "icon_id": "24899563",
+ "name": "chatbubble",
+ "font_class": "chatbubble",
+ "unicode": "e697",
+ "unicode_decimal": 59031
+ },
+ {
+ "icon_id": "24881290",
+ "name": "upload-filled",
+ "font_class": "upload-filled",
+ "unicode": "e68e",
+ "unicode_decimal": 59022
+ },
+ {
+ "icon_id": "24881292",
+ "name": "upload",
+ "font_class": "upload",
+ "unicode": "e690",
+ "unicode_decimal": 59024
+ },
+ {
+ "icon_id": "24881293",
+ "name": "weixin",
+ "font_class": "weixin",
+ "unicode": "e691",
+ "unicode_decimal": 59025
+ },
+ {
+ "icon_id": "24881274",
+ "name": "compose",
+ "font_class": "compose",
+ "unicode": "e67f",
+ "unicode_decimal": 59007
+ },
+ {
+ "icon_id": "24881275",
+ "name": "qq",
+ "font_class": "qq",
+ "unicode": "e680",
+ "unicode_decimal": 59008
+ },
+ {
+ "icon_id": "24881276",
+ "name": "download-filled",
+ "font_class": "download-filled",
+ "unicode": "e681",
+ "unicode_decimal": 59009
+ },
+ {
+ "icon_id": "24881277",
+ "name": "pengyouquan",
+ "font_class": "pyq",
+ "unicode": "e682",
+ "unicode_decimal": 59010
+ },
+ {
+ "icon_id": "24881279",
+ "name": "sound",
+ "font_class": "sound",
+ "unicode": "e684",
+ "unicode_decimal": 59012
+ },
+ {
+ "icon_id": "24881280",
+ "name": "trash-filled",
+ "font_class": "trash-filled",
+ "unicode": "e685",
+ "unicode_decimal": 59013
+ },
+ {
+ "icon_id": "24881281",
+ "name": "sound-filled",
+ "font_class": "sound-filled",
+ "unicode": "e686",
+ "unicode_decimal": 59014
+ },
+ {
+ "icon_id": "24881282",
+ "name": "trash",
+ "font_class": "trash",
+ "unicode": "e687",
+ "unicode_decimal": 59015
+ },
+ {
+ "icon_id": "24881284",
+ "name": "videocam-filled",
+ "font_class": "videocam-filled",
+ "unicode": "e689",
+ "unicode_decimal": 59017
+ },
+ {
+ "icon_id": "24881285",
+ "name": "spinner-cycle",
+ "font_class": "spinner-cycle",
+ "unicode": "e68a",
+ "unicode_decimal": 59018
+ },
+ {
+ "icon_id": "24881286",
+ "name": "weibo",
+ "font_class": "weibo",
+ "unicode": "e68b",
+ "unicode_decimal": 59019
+ },
+ {
+ "icon_id": "24881288",
+ "name": "videocam",
+ "font_class": "videocam",
+ "unicode": "e68c",
+ "unicode_decimal": 59020
+ },
+ {
+ "icon_id": "24881289",
+ "name": "download",
+ "font_class": "download",
+ "unicode": "e68d",
+ "unicode_decimal": 59021
+ },
+ {
+ "icon_id": "24879601",
+ "name": "help",
+ "font_class": "help",
+ "unicode": "e679",
+ "unicode_decimal": 59001
+ },
+ {
+ "icon_id": "24879602",
+ "name": "navigate-filled",
+ "font_class": "navigate-filled",
+ "unicode": "e67a",
+ "unicode_decimal": 59002
+ },
+ {
+ "icon_id": "24879603",
+ "name": "plusempty",
+ "font_class": "plusempty",
+ "unicode": "e67b",
+ "unicode_decimal": 59003
+ },
+ {
+ "icon_id": "24879604",
+ "name": "smallcircle",
+ "font_class": "smallcircle",
+ "unicode": "e67c",
+ "unicode_decimal": 59004
+ },
+ {
+ "icon_id": "24879605",
+ "name": "minus-filled",
+ "font_class": "minus-filled",
+ "unicode": "e67d",
+ "unicode_decimal": 59005
+ },
+ {
+ "icon_id": "24879606",
+ "name": "micoff",
+ "font_class": "micoff",
+ "unicode": "e67e",
+ "unicode_decimal": 59006
+ },
+ {
+ "icon_id": "24879588",
+ "name": "closeempty",
+ "font_class": "closeempty",
+ "unicode": "e66c",
+ "unicode_decimal": 58988
+ },
+ {
+ "icon_id": "24879589",
+ "name": "clear",
+ "font_class": "clear",
+ "unicode": "e66d",
+ "unicode_decimal": 58989
+ },
+ {
+ "icon_id": "24879590",
+ "name": "navigate",
+ "font_class": "navigate",
+ "unicode": "e66e",
+ "unicode_decimal": 58990
+ },
+ {
+ "icon_id": "24879591",
+ "name": "minus",
+ "font_class": "minus",
+ "unicode": "e66f",
+ "unicode_decimal": 58991
+ },
+ {
+ "icon_id": "24879592",
+ "name": "image",
+ "font_class": "image",
+ "unicode": "e670",
+ "unicode_decimal": 58992
+ },
+ {
+ "icon_id": "24879593",
+ "name": "mic",
+ "font_class": "mic",
+ "unicode": "e671",
+ "unicode_decimal": 58993
+ },
+ {
+ "icon_id": "24879594",
+ "name": "paperplane",
+ "font_class": "paperplane",
+ "unicode": "e672",
+ "unicode_decimal": 58994
+ },
+ {
+ "icon_id": "24879595",
+ "name": "close",
+ "font_class": "close",
+ "unicode": "e673",
+ "unicode_decimal": 58995
+ },
+ {
+ "icon_id": "24879596",
+ "name": "help-filled",
+ "font_class": "help-filled",
+ "unicode": "e674",
+ "unicode_decimal": 58996
+ },
+ {
+ "icon_id": "24879597",
+ "name": "plus-filled",
+ "font_class": "paperplane-filled",
+ "unicode": "e675",
+ "unicode_decimal": 58997
+ },
+ {
+ "icon_id": "24879598",
+ "name": "plus",
+ "font_class": "plus",
+ "unicode": "e676",
+ "unicode_decimal": 58998
+ },
+ {
+ "icon_id": "24879599",
+ "name": "mic-filled",
+ "font_class": "mic-filled",
+ "unicode": "e677",
+ "unicode_decimal": 58999
+ },
+ {
+ "icon_id": "24879600",
+ "name": "image-filled",
+ "font_class": "image-filled",
+ "unicode": "e678",
+ "unicode_decimal": 59000
+ },
+ {
+ "icon_id": "24855900",
+ "name": "locked-filled",
+ "font_class": "locked-filled",
+ "unicode": "e668",
+ "unicode_decimal": 58984
+ },
+ {
+ "icon_id": "24855901",
+ "name": "info",
+ "font_class": "info",
+ "unicode": "e669",
+ "unicode_decimal": 58985
+ },
+ {
+ "icon_id": "24855903",
+ "name": "locked",
+ "font_class": "locked",
+ "unicode": "e66b",
+ "unicode_decimal": 58987
+ },
+ {
+ "icon_id": "24855884",
+ "name": "camera-filled",
+ "font_class": "camera-filled",
+ "unicode": "e658",
+ "unicode_decimal": 58968
+ },
+ {
+ "icon_id": "24855885",
+ "name": "chat-filled",
+ "font_class": "chat-filled",
+ "unicode": "e659",
+ "unicode_decimal": 58969
+ },
+ {
+ "icon_id": "24855886",
+ "name": "camera",
+ "font_class": "camera",
+ "unicode": "e65a",
+ "unicode_decimal": 58970
+ },
+ {
+ "icon_id": "24855887",
+ "name": "circle",
+ "font_class": "circle",
+ "unicode": "e65b",
+ "unicode_decimal": 58971
+ },
+ {
+ "icon_id": "24855888",
+ "name": "checkmarkempty",
+ "font_class": "checkmarkempty",
+ "unicode": "e65c",
+ "unicode_decimal": 58972
+ },
+ {
+ "icon_id": "24855889",
+ "name": "chat",
+ "font_class": "chat",
+ "unicode": "e65d",
+ "unicode_decimal": 58973
+ },
+ {
+ "icon_id": "24855890",
+ "name": "circle-filled",
+ "font_class": "circle-filled",
+ "unicode": "e65e",
+ "unicode_decimal": 58974
+ },
+ {
+ "icon_id": "24855891",
+ "name": "flag",
+ "font_class": "flag",
+ "unicode": "e65f",
+ "unicode_decimal": 58975
+ },
+ {
+ "icon_id": "24855892",
+ "name": "flag-filled",
+ "font_class": "flag-filled",
+ "unicode": "e660",
+ "unicode_decimal": 58976
+ },
+ {
+ "icon_id": "24855893",
+ "name": "gear-filled",
+ "font_class": "gear-filled",
+ "unicode": "e661",
+ "unicode_decimal": 58977
+ },
+ {
+ "icon_id": "24855894",
+ "name": "home",
+ "font_class": "home",
+ "unicode": "e662",
+ "unicode_decimal": 58978
+ },
+ {
+ "icon_id": "24855895",
+ "name": "home-filled",
+ "font_class": "home-filled",
+ "unicode": "e663",
+ "unicode_decimal": 58979
+ },
+ {
+ "icon_id": "24855896",
+ "name": "gear",
+ "font_class": "gear",
+ "unicode": "e664",
+ "unicode_decimal": 58980
+ },
+ {
+ "icon_id": "24855897",
+ "name": "smallcircle-filled",
+ "font_class": "smallcircle-filled",
+ "unicode": "e665",
+ "unicode_decimal": 58981
+ },
+ {
+ "icon_id": "24855898",
+ "name": "map-filled",
+ "font_class": "map-filled",
+ "unicode": "e666",
+ "unicode_decimal": 58982
+ },
+ {
+ "icon_id": "24855899",
+ "name": "map",
+ "font_class": "map",
+ "unicode": "e667",
+ "unicode_decimal": 58983
+ },
+ {
+ "icon_id": "24855825",
+ "name": "refresh-filled",
+ "font_class": "refresh-filled",
+ "unicode": "e656",
+ "unicode_decimal": 58966
+ },
+ {
+ "icon_id": "24855826",
+ "name": "refresh",
+ "font_class": "refresh",
+ "unicode": "e657",
+ "unicode_decimal": 58967
+ },
+ {
+ "icon_id": "24855808",
+ "name": "cloud-upload",
+ "font_class": "cloud-upload",
+ "unicode": "e645",
+ "unicode_decimal": 58949
+ },
+ {
+ "icon_id": "24855809",
+ "name": "cloud-download-filled",
+ "font_class": "cloud-download-filled",
+ "unicode": "e646",
+ "unicode_decimal": 58950
+ },
+ {
+ "icon_id": "24855810",
+ "name": "cloud-download",
+ "font_class": "cloud-download",
+ "unicode": "e647",
+ "unicode_decimal": 58951
+ },
+ {
+ "icon_id": "24855811",
+ "name": "cloud-upload-filled",
+ "font_class": "cloud-upload-filled",
+ "unicode": "e648",
+ "unicode_decimal": 58952
+ },
+ {
+ "icon_id": "24855813",
+ "name": "redo",
+ "font_class": "redo",
+ "unicode": "e64a",
+ "unicode_decimal": 58954
+ },
+ {
+ "icon_id": "24855814",
+ "name": "images-filled",
+ "font_class": "images-filled",
+ "unicode": "e64b",
+ "unicode_decimal": 58955
+ },
+ {
+ "icon_id": "24855815",
+ "name": "undo-filled",
+ "font_class": "undo-filled",
+ "unicode": "e64c",
+ "unicode_decimal": 58956
+ },
+ {
+ "icon_id": "24855816",
+ "name": "more",
+ "font_class": "more",
+ "unicode": "e64d",
+ "unicode_decimal": 58957
+ },
+ {
+ "icon_id": "24855817",
+ "name": "more-filled",
+ "font_class": "more-filled",
+ "unicode": "e64e",
+ "unicode_decimal": 58958
+ },
+ {
+ "icon_id": "24855818",
+ "name": "undo",
+ "font_class": "undo",
+ "unicode": "e64f",
+ "unicode_decimal": 58959
+ },
+ {
+ "icon_id": "24855819",
+ "name": "images",
+ "font_class": "images",
+ "unicode": "e650",
+ "unicode_decimal": 58960
+ },
+ {
+ "icon_id": "24855821",
+ "name": "paperclip",
+ "font_class": "paperclip",
+ "unicode": "e652",
+ "unicode_decimal": 58962
+ },
+ {
+ "icon_id": "24855822",
+ "name": "settings",
+ "font_class": "settings",
+ "unicode": "e653",
+ "unicode_decimal": 58963
+ },
+ {
+ "icon_id": "24855823",
+ "name": "search",
+ "font_class": "search",
+ "unicode": "e654",
+ "unicode_decimal": 58964
+ },
+ {
+ "icon_id": "24855824",
+ "name": "redo-filled",
+ "font_class": "redo-filled",
+ "unicode": "e655",
+ "unicode_decimal": 58965
+ },
+ {
+ "icon_id": "24841702",
+ "name": "list",
+ "font_class": "list",
+ "unicode": "e644",
+ "unicode_decimal": 58948
+ },
+ {
+ "icon_id": "24841489",
+ "name": "mail-open-filled",
+ "font_class": "mail-open-filled",
+ "unicode": "e63a",
+ "unicode_decimal": 58938
+ },
+ {
+ "icon_id": "24841491",
+ "name": "hand-thumbsdown-filled",
+ "font_class": "hand-down-filled",
+ "unicode": "e63c",
+ "unicode_decimal": 58940
+ },
+ {
+ "icon_id": "24841492",
+ "name": "hand-thumbsdown",
+ "font_class": "hand-down",
+ "unicode": "e63d",
+ "unicode_decimal": 58941
+ },
+ {
+ "icon_id": "24841493",
+ "name": "hand-thumbsup-filled",
+ "font_class": "hand-up-filled",
+ "unicode": "e63e",
+ "unicode_decimal": 58942
+ },
+ {
+ "icon_id": "24841494",
+ "name": "hand-thumbsup",
+ "font_class": "hand-up",
+ "unicode": "e63f",
+ "unicode_decimal": 58943
+ },
+ {
+ "icon_id": "24841496",
+ "name": "heart-filled",
+ "font_class": "heart-filled",
+ "unicode": "e641",
+ "unicode_decimal": 58945
+ },
+ {
+ "icon_id": "24841498",
+ "name": "mail-open",
+ "font_class": "mail-open",
+ "unicode": "e643",
+ "unicode_decimal": 58947
+ },
+ {
+ "icon_id": "24841488",
+ "name": "heart",
+ "font_class": "heart",
+ "unicode": "e639",
+ "unicode_decimal": 58937
+ },
+ {
+ "icon_id": "24839963",
+ "name": "loop",
+ "font_class": "loop",
+ "unicode": "e633",
+ "unicode_decimal": 58931
+ },
+ {
+ "icon_id": "24839866",
+ "name": "pulldown",
+ "font_class": "pulldown",
+ "unicode": "e632",
+ "unicode_decimal": 58930
+ },
+ {
+ "icon_id": "24813798",
+ "name": "scan",
+ "font_class": "scan",
+ "unicode": "e62a",
+ "unicode_decimal": 58922
+ },
+ {
+ "icon_id": "24813786",
+ "name": "bars",
+ "font_class": "bars",
+ "unicode": "e627",
+ "unicode_decimal": 58919
+ },
+ {
+ "icon_id": "24813788",
+ "name": "cart-filled",
+ "font_class": "cart-filled",
+ "unicode": "e629",
+ "unicode_decimal": 58921
+ },
+ {
+ "icon_id": "24813790",
+ "name": "checkbox",
+ "font_class": "checkbox",
+ "unicode": "e62b",
+ "unicode_decimal": 58923
+ },
+ {
+ "icon_id": "24813791",
+ "name": "checkbox-filled",
+ "font_class": "checkbox-filled",
+ "unicode": "e62c",
+ "unicode_decimal": 58924
+ },
+ {
+ "icon_id": "24813794",
+ "name": "shop",
+ "font_class": "shop",
+ "unicode": "e62f",
+ "unicode_decimal": 58927
+ },
+ {
+ "icon_id": "24813795",
+ "name": "headphones",
+ "font_class": "headphones",
+ "unicode": "e630",
+ "unicode_decimal": 58928
+ },
+ {
+ "icon_id": "24813796",
+ "name": "cart",
+ "font_class": "cart",
+ "unicode": "e631",
+ "unicode_decimal": 58929
+ }
+ ]
+}
diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue
new file mode 100644
index 0000000..a87f68e
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue
@@ -0,0 +1,96 @@
+
+
+ {{unicode}}
+
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.css b/uni_modules/uni-icons/components/uni-icons/uniicons.css
new file mode 100644
index 0000000..2f56eab
--- /dev/null
+++ b/uni_modules/uni-icons/components/uni-icons/uniicons.css
@@ -0,0 +1,663 @@
+.uniui-color:before {
+ content: "\e6cf";
+}
+
+.uniui-wallet:before {
+ content: "\e6b1";
+}
+
+.uniui-settings-filled:before {
+ content: "\e6ce";
+}
+
+.uniui-auth-filled:before {
+ content: "\e6cc";
+}
+
+.uniui-shop-filled:before {
+ content: "\e6cd";
+}
+
+.uniui-staff-filled:before {
+ content: "\e6cb";
+}
+
+.uniui-vip-filled:before {
+ content: "\e6c6";
+}
+
+.uniui-plus-filled:before {
+ content: "\e6c7";
+}
+
+.uniui-folder-add-filled:before {
+ content: "\e6c8";
+}
+
+.uniui-color-filled:before {
+ content: "\e6c9";
+}
+
+.uniui-tune-filled:before {
+ content: "\e6ca";
+}
+
+.uniui-calendar-filled:before {
+ content: "\e6c0";
+}
+
+.uniui-notification-filled:before {
+ content: "\e6c1";
+}
+
+.uniui-wallet-filled:before {
+ content: "\e6c2";
+}
+
+.uniui-medal-filled:before {
+ content: "\e6c3";
+}
+
+.uniui-gift-filled:before {
+ content: "\e6c4";
+}
+
+.uniui-fire-filled:before {
+ content: "\e6c5";
+}
+
+.uniui-refreshempty:before {
+ content: "\e6bf";
+}
+
+.uniui-location-filled:before {
+ content: "\e6af";
+}
+
+.uniui-person-filled:before {
+ content: "\e69d";
+}
+
+.uniui-personadd-filled:before {
+ content: "\e698";
+}
+
+.uniui-back:before {
+ content: "\e6b9";
+}
+
+.uniui-forward:before {
+ content: "\e6ba";
+}
+
+.uniui-arrow-right:before {
+ content: "\e6bb";
+}
+
+.uniui-arrowthinright:before {
+ content: "\e6bb";
+}
+
+.uniui-arrow-left:before {
+ content: "\e6bc";
+}
+
+.uniui-arrowthinleft:before {
+ content: "\e6bc";
+}
+
+.uniui-arrow-up:before {
+ content: "\e6bd";
+}
+
+.uniui-arrowthinup:before {
+ content: "\e6bd";
+}
+
+.uniui-arrow-down:before {
+ content: "\e6be";
+}
+
+.uniui-arrowthindown:before {
+ content: "\e6be";
+}
+
+.uniui-bottom:before {
+ content: "\e6b8";
+}
+
+.uniui-arrowdown:before {
+ content: "\e6b8";
+}
+
+.uniui-right:before {
+ content: "\e6b5";
+}
+
+.uniui-arrowright:before {
+ content: "\e6b5";
+}
+
+.uniui-top:before {
+ content: "\e6b6";
+}
+
+.uniui-arrowup:before {
+ content: "\e6b6";
+}
+
+.uniui-left:before {
+ content: "\e6b7";
+}
+
+.uniui-arrowleft:before {
+ content: "\e6b7";
+}
+
+.uniui-eye:before {
+ content: "\e651";
+}
+
+.uniui-eye-filled:before {
+ content: "\e66a";
+}
+
+.uniui-eye-slash:before {
+ content: "\e6b3";
+}
+
+.uniui-eye-slash-filled:before {
+ content: "\e6b4";
+}
+
+.uniui-info-filled:before {
+ content: "\e649";
+}
+
+.uniui-reload:before {
+ content: "\e6b2";
+}
+
+.uniui-micoff-filled:before {
+ content: "\e6b0";
+}
+
+.uniui-map-pin-ellipse:before {
+ content: "\e6ac";
+}
+
+.uniui-map-pin:before {
+ content: "\e6ad";
+}
+
+.uniui-location:before {
+ content: "\e6ae";
+}
+
+.uniui-starhalf:before {
+ content: "\e683";
+}
+
+.uniui-star:before {
+ content: "\e688";
+}
+
+.uniui-star-filled:before {
+ content: "\e68f";
+}
+
+.uniui-calendar:before {
+ content: "\e6a0";
+}
+
+.uniui-fire:before {
+ content: "\e6a1";
+}
+
+.uniui-medal:before {
+ content: "\e6a2";
+}
+
+.uniui-font:before {
+ content: "\e6a3";
+}
+
+.uniui-gift:before {
+ content: "\e6a4";
+}
+
+.uniui-link:before {
+ content: "\e6a5";
+}
+
+.uniui-notification:before {
+ content: "\e6a6";
+}
+
+.uniui-staff:before {
+ content: "\e6a7";
+}
+
+.uniui-vip:before {
+ content: "\e6a8";
+}
+
+.uniui-folder-add:before {
+ content: "\e6a9";
+}
+
+.uniui-tune:before {
+ content: "\e6aa";
+}
+
+.uniui-auth:before {
+ content: "\e6ab";
+}
+
+.uniui-person:before {
+ content: "\e699";
+}
+
+.uniui-email-filled:before {
+ content: "\e69a";
+}
+
+.uniui-phone-filled:before {
+ content: "\e69b";
+}
+
+.uniui-phone:before {
+ content: "\e69c";
+}
+
+.uniui-email:before {
+ content: "\e69e";
+}
+
+.uniui-personadd:before {
+ content: "\e69f";
+}
+
+.uniui-chatboxes-filled:before {
+ content: "\e692";
+}
+
+.uniui-contact:before {
+ content: "\e693";
+}
+
+.uniui-chatbubble-filled:before {
+ content: "\e694";
+}
+
+.uniui-contact-filled:before {
+ content: "\e695";
+}
+
+.uniui-chatboxes:before {
+ content: "\e696";
+}
+
+.uniui-chatbubble:before {
+ content: "\e697";
+}
+
+.uniui-upload-filled:before {
+ content: "\e68e";
+}
+
+.uniui-upload:before {
+ content: "\e690";
+}
+
+.uniui-weixin:before {
+ content: "\e691";
+}
+
+.uniui-compose:before {
+ content: "\e67f";
+}
+
+.uniui-qq:before {
+ content: "\e680";
+}
+
+.uniui-download-filled:before {
+ content: "\e681";
+}
+
+.uniui-pyq:before {
+ content: "\e682";
+}
+
+.uniui-sound:before {
+ content: "\e684";
+}
+
+.uniui-trash-filled:before {
+ content: "\e685";
+}
+
+.uniui-sound-filled:before {
+ content: "\e686";
+}
+
+.uniui-trash:before {
+ content: "\e687";
+}
+
+.uniui-videocam-filled:before {
+ content: "\e689";
+}
+
+.uniui-spinner-cycle:before {
+ content: "\e68a";
+}
+
+.uniui-weibo:before {
+ content: "\e68b";
+}
+
+.uniui-videocam:before {
+ content: "\e68c";
+}
+
+.uniui-download:before {
+ content: "\e68d";
+}
+
+.uniui-help:before {
+ content: "\e679";
+}
+
+.uniui-navigate-filled:before {
+ content: "\e67a";
+}
+
+.uniui-plusempty:before {
+ content: "\e67b";
+}
+
+.uniui-smallcircle:before {
+ content: "\e67c";
+}
+
+.uniui-minus-filled:before {
+ content: "\e67d";
+}
+
+.uniui-micoff:before {
+ content: "\e67e";
+}
+
+.uniui-closeempty:before {
+ content: "\e66c";
+}
+
+.uniui-clear:before {
+ content: "\e66d";
+}
+
+.uniui-navigate:before {
+ content: "\e66e";
+}
+
+.uniui-minus:before {
+ content: "\e66f";
+}
+
+.uniui-image:before {
+ content: "\e670";
+}
+
+.uniui-mic:before {
+ content: "\e671";
+}
+
+.uniui-paperplane:before {
+ content: "\e672";
+}
+
+.uniui-close:before {
+ content: "\e673";
+}
+
+.uniui-help-filled:before {
+ content: "\e674";
+}
+
+.uniui-paperplane-filled:before {
+ content: "\e675";
+}
+
+.uniui-plus:before {
+ content: "\e676";
+}
+
+.uniui-mic-filled:before {
+ content: "\e677";
+}
+
+.uniui-image-filled:before {
+ content: "\e678";
+}
+
+.uniui-locked-filled:before {
+ content: "\e668";
+}
+
+.uniui-info:before {
+ content: "\e669";
+}
+
+.uniui-locked:before {
+ content: "\e66b";
+}
+
+.uniui-camera-filled:before {
+ content: "\e658";
+}
+
+.uniui-chat-filled:before {
+ content: "\e659";
+}
+
+.uniui-camera:before {
+ content: "\e65a";
+}
+
+.uniui-circle:before {
+ content: "\e65b";
+}
+
+.uniui-checkmarkempty:before {
+ content: "\e65c";
+}
+
+.uniui-chat:before {
+ content: "\e65d";
+}
+
+.uniui-circle-filled:before {
+ content: "\e65e";
+}
+
+.uniui-flag:before {
+ content: "\e65f";
+}
+
+.uniui-flag-filled:before {
+ content: "\e660";
+}
+
+.uniui-gear-filled:before {
+ content: "\e661";
+}
+
+.uniui-home:before {
+ content: "\e662";
+}
+
+.uniui-home-filled:before {
+ content: "\e663";
+}
+
+.uniui-gear:before {
+ content: "\e664";
+}
+
+.uniui-smallcircle-filled:before {
+ content: "\e665";
+}
+
+.uniui-map-filled:before {
+ content: "\e666";
+}
+
+.uniui-map:before {
+ content: "\e667";
+}
+
+.uniui-refresh-filled:before {
+ content: "\e656";
+}
+
+.uniui-refresh:before {
+ content: "\e657";
+}
+
+.uniui-cloud-upload:before {
+ content: "\e645";
+}
+
+.uniui-cloud-download-filled:before {
+ content: "\e646";
+}
+
+.uniui-cloud-download:before {
+ content: "\e647";
+}
+
+.uniui-cloud-upload-filled:before {
+ content: "\e648";
+}
+
+.uniui-redo:before {
+ content: "\e64a";
+}
+
+.uniui-images-filled:before {
+ content: "\e64b";
+}
+
+.uniui-undo-filled:before {
+ content: "\e64c";
+}
+
+.uniui-more:before {
+ content: "\e64d";
+}
+
+.uniui-more-filled:before {
+ content: "\e64e";
+}
+
+.uniui-undo:before {
+ content: "\e64f";
+}
+
+.uniui-images:before {
+ content: "\e650";
+}
+
+.uniui-paperclip:before {
+ content: "\e652";
+}
+
+.uniui-settings:before {
+ content: "\e653";
+}
+
+.uniui-search:before {
+ content: "\e654";
+}
+
+.uniui-redo-filled:before {
+ content: "\e655";
+}
+
+.uniui-list:before {
+ content: "\e644";
+}
+
+.uniui-mail-open-filled:before {
+ content: "\e63a";
+}
+
+.uniui-hand-down-filled:before {
+ content: "\e63c";
+}
+
+.uniui-hand-down:before {
+ content: "\e63d";
+}
+
+.uniui-hand-up-filled:before {
+ content: "\e63e";
+}
+
+.uniui-hand-up:before {
+ content: "\e63f";
+}
+
+.uniui-heart-filled:before {
+ content: "\e641";
+}
+
+.uniui-mail-open:before {
+ content: "\e643";
+}
+
+.uniui-heart:before {
+ content: "\e639";
+}
+
+.uniui-loop:before {
+ content: "\e633";
+}
+
+.uniui-pulldown:before {
+ content: "\e632";
+}
+
+.uniui-scan:before {
+ content: "\e62a";
+}
+
+.uniui-bars:before {
+ content: "\e627";
+}
+
+.uniui-cart-filled:before {
+ content: "\e629";
+}
+
+.uniui-checkbox:before {
+ content: "\e62b";
+}
+
+.uniui-checkbox-filled:before {
+ content: "\e62c";
+}
+
+.uniui-shop:before {
+ content: "\e62f";
+}
+
+.uniui-headphones:before {
+ content: "\e630";
+}
+
+.uniui-cart:before {
+ content: "\e631";
+}
diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf
new file mode 100644
index 0000000..835f33b
Binary files /dev/null and b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf differ
diff --git a/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json
new file mode 100644
index 0000000..d1c4e77
--- /dev/null
+++ b/uni_modules/uni-icons/package.json
@@ -0,0 +1,86 @@
+{
+ "id": "uni-icons",
+ "displayName": "uni-icons 图标",
+ "version": "1.3.5",
+ "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "icon",
+ "图标"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "^3.2.14"
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-icons/readme.md b/uni_modules/uni-icons/readme.md
new file mode 100644
index 0000000..86234ba
--- /dev/null
+++ b/uni_modules/uni-icons/readme.md
@@ -0,0 +1,8 @@
+## Icons 图标
+> **组件名:uni-icons**
+> 代码块: `uIcons`
+
+用于展示 icons 图标 。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
diff --git a/uni_modules/uni-load-more/changelog.md b/uni_modules/uni-load-more/changelog.md
new file mode 100644
index 0000000..8f03f1d
--- /dev/null
+++ b/uni_modules/uni-load-more/changelog.md
@@ -0,0 +1,19 @@
+## 1.3.3(2022-01-20)
+- 新增 showText属性 ,是否显示文本
+## 1.3.2(2022-01-19)
+- 修复 nvue 平台下不显示文本的bug
+## 1.3.1(2022-01-19)
+- 修复 微信小程序平台样式选择器报警告的问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+## 1.2.1(2021-08-24)
+- 新增 支持国际化
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.8(2021-05-12)
+- 新增 组件示例地址
+## 1.1.7(2021-03-30)
+- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug
+## 1.1.6(2021-02-05)
+- 调整为uni_modules目录规范
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
new file mode 100644
index 0000000..6f45b0e
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "Pull up to show more",
+ "uni-load-more.contentrefresh": "loading...",
+ "uni-load-more.contentnomore": "No more data"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
new file mode 100644
index 0000000..fa8f0f3
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
new file mode 100644
index 0000000..3a14ca0
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "上拉显示更多",
+ "uni-load-more.contentrefresh": "正在加载...",
+ "uni-load-more.contentnomore": "没有更多数据了"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
new file mode 100644
index 0000000..ee99b06
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json
@@ -0,0 +1,5 @@
+{
+ "uni-load-more.contentdown": "上拉顯示更多",
+ "uni-load-more.contentrefresh": "正在加載...",
+ "uni-load-more.contentnomore": "沒有更多數據了"
+}
diff --git a/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
new file mode 100644
index 0000000..ededbc2
--- /dev/null
+++ b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue
@@ -0,0 +1,399 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ status === 'more' ? contentdownText : status === 'loading' ? contentrefreshText : contentnomoreText }}
+
+
+
+
+
+
diff --git a/uni_modules/uni-load-more/package.json b/uni_modules/uni-load-more/package.json
new file mode 100644
index 0000000..2fa6f04
--- /dev/null
+++ b/uni_modules/uni-load-more/package.json
@@ -0,0 +1,86 @@
+{
+ "id": "uni-load-more",
+ "displayName": "uni-load-more 加载更多",
+ "version": "1.3.3",
+ "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "加载更多",
+ "load-more"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-load-more/readme.md b/uni_modules/uni-load-more/readme.md
new file mode 100644
index 0000000..54dc1fa
--- /dev/null
+++ b/uni_modules/uni-load-more/readme.md
@@ -0,0 +1,14 @@
+
+
+### LoadMore 加载更多
+> **组件名:uni-load-more**
+> 代码块: `uLoadMore`
+
+
+用于列表中,做滚动加载使用,展示 loading 的各种状态。
+
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
diff --git a/uni_modules/uni-popup/changelog.md b/uni_modules/uni-popup/changelog.md
new file mode 100644
index 0000000..41abeb4
--- /dev/null
+++ b/uni_modules/uni-popup/changelog.md
@@ -0,0 +1,66 @@
+## 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)
+- 修复 小程序中高度错误的bug
+## 1.7.7(2022-03-17)
+- 修复 快速调用open出现问题的Bug
+## 1.7.6(2022-02-14)
+- 修复 safeArea 属性不能设置为false的bug
+## 1.7.5(2022-01-19)
+- 修复 isMaskClick 失效的bug
+## 1.7.4(2022-01-19)
+- 新增 cancelText \ confirmText 属性 ,可自定义文本
+- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色
+- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题
+## 1.7.3(2022-01-13)
+- 修复 设置 safeArea 属性不生效的bug
+## 1.7.2(2021-11-26)
+- 优化 组件示例
+## 1.7.1(2021-11-26)
+- 修复 vuedoc 文字错误
+## 1.7.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup)
+## 1.6.2(2021-08-24)
+- 新增 支持国际化
+## 1.6.1(2021-07-30)
+- 优化 vue3下事件警告的问题
+## 1.6.0(2021-07-13)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.5.0(2021-06-23)
+- 新增 mask-click 遮罩层点击事件
+## 1.4.5(2021-06-22)
+- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
+## 1.4.4(2021-06-18)
+- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug
+## 1.4.3(2021-06-08)
+- 修复 错误的 watch 字段
+- 修复 safeArea 属性不生效的问题
+- 修复 点击内容,再点击遮罩无法关闭的Bug
+## 1.4.2(2021-05-12)
+- 新增 组件示例地址
+## 1.4.1(2021-04-29)
+- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题
+## 1.4.0 (2021-04-29)
+- 新增 type 属性的 left\right 值,支持左右弹出
+- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗
+- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色
+- 新增 safeArea 属性,是否适配底部安全区
+- 修复 App\h5\微信小程序底部安全区占位不对的Bug
+- 修复 App 端弹出等待的Bug
+- 优化 提升低配设备性能,优化动画卡顿问题
+- 优化 更简单的组件自定义方式
+## 1.2.9(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+## 1.2.8(2021-02-05)
+- 调整为uni_modules目录规范
+## 1.2.7(2021-02-05)
+- 调整为uni_modules目录规范
+- 新增 支持 PC 端
+- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端
diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js
new file mode 100644
index 0000000..a747b9f
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-dialog/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
diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
new file mode 100644
index 0000000..9bc87fc
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
new file mode 100644
index 0000000..7f27a1e
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
new file mode 100644
index 0000000..ab08656
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue
@@ -0,0 +1,187 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/uni_modules/uni-popup/components/uni-popup/i18n/en.json
new file mode 100644
index 0000000..8c0f5f3
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/en.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "cancel",
+ "uni-popup.ok": "ok",
+ "uni-popup.placeholder": "pleace enter",
+ "uni-popup.title": "Hint",
+ "uni-popup.shareTitle": "Share to"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/uni_modules/uni-popup/components/uni-popup/i18n/index.js
new file mode 100644
index 0000000..fa8f0f3
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/index.js
@@ -0,0 +1,8 @@
+import en from './en.json'
+import zhHans from './zh-Hans.json'
+import zhHant from './zh-Hant.json'
+export default {
+ en,
+ 'zh-Hans': zhHans,
+ 'zh-Hant': zhHant
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
new file mode 100644
index 0000000..8e5b99f
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "取消",
+ "uni-popup.ok": "确定",
+ "uni-popup.placeholder": "请输入",
+ "uni-popup.title": "提示",
+ "uni-popup.shareTitle": "分享到"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
new file mode 100644
index 0000000..06ce162
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json
@@ -0,0 +1,7 @@
+{
+ "uni-popup.cancel": "取消",
+ "uni-popup.ok": "確定",
+ "uni-popup.placeholder": "請輸入",
+ "uni-popup.title": "提示",
+ "uni-popup.shareTitle": "分享到"
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/keypress.js b/uni_modules/uni-popup/components/uni-popup/keypress.js
new file mode 100644
index 0000000..16a5818
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/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
diff --git a/uni_modules/uni-popup/components/uni-popup/popup.js b/uni_modules/uni-popup/components/uni-popup/popup.js
new file mode 100644
index 0000000..a37fb9f
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/popup.js
@@ -0,0 +1,26 @@
+
+export default {
+ data() {
+ return {
+
+ }
+ },
+ created(){
+ this.popup = this.getParent()
+ },
+ methods:{
+ /**
+ * 获取父元素实例
+ */
+ getParent(name = 'uniPopup') {
+ let parent = this.$parent;
+ let parentName = parent.$options.name;
+ while (parentName !== name) {
+ parent = parent.$parent;
+ if (!parent) return false
+ parentName = parent.$options.name;
+ }
+ return parent;
+ },
+ }
+}
diff --git a/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
new file mode 100644
index 0000000..db90c59
--- /dev/null
+++ b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue
@@ -0,0 +1,474 @@
+
+
+
+
+
+
diff --git a/uni_modules/uni-popup/package.json b/uni_modules/uni-popup/package.json
new file mode 100644
index 0000000..8a17034
--- /dev/null
+++ b/uni_modules/uni-popup/package.json
@@ -0,0 +1,87 @@
+{
+ "id": "uni-popup",
+ "displayName": "uni-popup 弹出层",
+ "version": "1.8.2",
+ "description": " Popup 组件,提供常用的弹层",
+ "keywords": [
+ "uni-ui",
+ "弹出层",
+ "弹窗",
+ "popup",
+ "弹框"
+ ],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+ "type": "component-vue"
+ },
+ "uni_modules": {
+ "dependencies": [
+ "uni-scss",
+ "uni-transition"
+ ],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-popup/readme.md b/uni_modules/uni-popup/readme.md
new file mode 100644
index 0000000..fdad4b3
--- /dev/null
+++ b/uni_modules/uni-popup/readme.md
@@ -0,0 +1,17 @@
+
+
+## Popup 弹出层
+> **组件名:uni-popup**
+> 代码块: `uPopup`
+> 关联组件:`uni-transition`
+
+
+弹出层组件,在应用中弹出一个消息提示窗口、提示框等
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
+
+
+
+
+
diff --git a/uni_modules/uni-scss/changelog.md b/uni_modules/uni-scss/changelog.md
new file mode 100644
index 0000000..b863bb0
--- /dev/null
+++ b/uni_modules/uni-scss/changelog.md
@@ -0,0 +1,8 @@
+## 1.0.3(2022-01-21)
+- 优化 组件示例
+## 1.0.2(2021-11-22)
+- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题
+## 1.0.1(2021-11-22)
+- 修复 vue3中scss语法兼容问题
+## 1.0.0(2021-11-18)
+- init
diff --git a/uni_modules/uni-scss/index.scss b/uni_modules/uni-scss/index.scss
new file mode 100644
index 0000000..1744a5f
--- /dev/null
+++ b/uni_modules/uni-scss/index.scss
@@ -0,0 +1 @@
+@import './styles/index.scss';
diff --git a/uni_modules/uni-scss/package.json b/uni_modules/uni-scss/package.json
new file mode 100644
index 0000000..7cc0ccb
--- /dev/null
+++ b/uni_modules/uni-scss/package.json
@@ -0,0 +1,82 @@
+{
+ "id": "uni-scss",
+ "displayName": "uni-scss 辅助样式",
+ "version": "1.0.3",
+ "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。",
+ "keywords": [
+ "uni-scss",
+ "uni-ui",
+ "辅助样式"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ },
+ "dcloudext": {
+ "category": [
+ "JS SDK",
+ "通用 SDK"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": [],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "u"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "n",
+ "联盟": "n"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-scss/readme.md b/uni_modules/uni-scss/readme.md
new file mode 100644
index 0000000..b7d1c25
--- /dev/null
+++ b/uni_modules/uni-scss/readme.md
@@ -0,0 +1,4 @@
+`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/index.scss b/uni_modules/uni-scss/styles/index.scss
new file mode 100644
index 0000000..ffac4fe
--- /dev/null
+++ b/uni_modules/uni-scss/styles/index.scss
@@ -0,0 +1,7 @@
+@import './setting/_variables.scss';
+@import './setting/_border.scss';
+@import './setting/_color.scss';
+@import './setting/_space.scss';
+@import './setting/_radius.scss';
+@import './setting/_text.scss';
+@import './setting/_styles.scss';
diff --git a/uni_modules/uni-scss/styles/setting/_border.scss b/uni_modules/uni-scss/styles/setting/_border.scss
new file mode 100644
index 0000000..12a11c3
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_border.scss
@@ -0,0 +1,3 @@
+.uni-border {
+ border: 1px $uni-border-1 solid;
+}
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/setting/_color.scss b/uni_modules/uni-scss/styles/setting/_color.scss
new file mode 100644
index 0000000..1ededd9
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_color.scss
@@ -0,0 +1,66 @@
+
+// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐
+// @mixin get-styles($k,$c) {
+// @if $k == size or $k == weight{
+// font-#{$k}:#{$c}
+// }@else{
+// #{$k}:#{$c}
+// }
+// }
+$uni-ui-color:(
+ // 主色
+ primary: $uni-primary,
+ primary-disable: $uni-primary-disable,
+ primary-light: $uni-primary-light,
+ // 辅助色
+ success: $uni-success,
+ success-disable: $uni-success-disable,
+ success-light: $uni-success-light,
+ warning: $uni-warning,
+ warning-disable: $uni-warning-disable,
+ warning-light: $uni-warning-light,
+ error: $uni-error,
+ error-disable: $uni-error-disable,
+ error-light: $uni-error-light,
+ info: $uni-info,
+ info-disable: $uni-info-disable,
+ info-light: $uni-info-light,
+ // 中性色
+ main-color: $uni-main-color,
+ base-color: $uni-base-color,
+ secondary-color: $uni-secondary-color,
+ extra-color: $uni-extra-color,
+ // 背景色
+ bg-color: $uni-bg-color,
+ // 边框颜色
+ border-1: $uni-border-1,
+ border-2: $uni-border-2,
+ border-3: $uni-border-3,
+ border-4: $uni-border-4,
+ // 黑色
+ black:$uni-black,
+ // 白色
+ white:$uni-white,
+ // 透明
+ transparent:$uni-transparent
+) !default;
+@each $key, $child in $uni-ui-color {
+ .uni-#{"" + $key} {
+ color: $child;
+ }
+ .uni-#{"" + $key}-bg {
+ background-color: $child;
+ }
+}
+.uni-shadow-sm {
+ box-shadow: $uni-shadow-sm;
+}
+.uni-shadow-base {
+ box-shadow: $uni-shadow-base;
+}
+.uni-shadow-lg {
+ box-shadow: $uni-shadow-lg;
+}
+.uni-mask {
+ background-color:$uni-mask;
+}
diff --git a/uni_modules/uni-scss/styles/setting/_radius.scss b/uni_modules/uni-scss/styles/setting/_radius.scss
new file mode 100644
index 0000000..9a0428b
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_radius.scss
@@ -0,0 +1,55 @@
+@mixin radius($r,$d:null ,$important: false){
+ $radius-value:map-get($uni-radius, $r) if($important, !important, null);
+ // Key exists within the $uni-radius variable
+ @if (map-has-key($uni-radius, $r) and $d){
+ @if $d == t {
+ border-top-left-radius:$radius-value;
+ border-top-right-radius:$radius-value;
+ }@else if $d == r {
+ border-top-right-radius:$radius-value;
+ border-bottom-right-radius:$radius-value;
+ }@else if $d == b {
+ border-bottom-left-radius:$radius-value;
+ border-bottom-right-radius:$radius-value;
+ }@else if $d == l {
+ border-top-left-radius:$radius-value;
+ border-bottom-left-radius:$radius-value;
+ }@else if $d == tl {
+ border-top-left-radius:$radius-value;
+ }@else if $d == tr {
+ border-top-right-radius:$radius-value;
+ }@else if $d == br {
+ border-bottom-right-radius:$radius-value;
+ }@else if $d == bl {
+ border-bottom-left-radius:$radius-value;
+ }
+ }@else{
+ border-radius:$radius-value;
+ }
+}
+
+@each $key, $child in $uni-radius {
+ @if($key){
+ .uni-radius-#{"" + $key} {
+ @include radius($key)
+ }
+ }@else{
+ .uni-radius {
+ @include radius($key)
+ }
+ }
+}
+
+@each $direction in t, r, b, l,tl, tr, br, bl {
+ @each $key, $child in $uni-radius {
+ @if($key){
+ .uni-radius-#{"" + $direction}-#{"" + $key} {
+ @include radius($key,$direction,false)
+ }
+ }@else{
+ .uni-radius-#{$direction} {
+ @include radius($key,$direction,false)
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-scss/styles/setting/_space.scss b/uni_modules/uni-scss/styles/setting/_space.scss
new file mode 100644
index 0000000..3c89528
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_space.scss
@@ -0,0 +1,56 @@
+
+@mixin fn($space,$direction,$size,$n) {
+ @if $n {
+ #{$space}-#{$direction}: #{$size*$uni-space-root}px
+ } @else {
+ #{$space}-#{$direction}: #{-$size*$uni-space-root}px
+ }
+}
+@mixin get-styles($direction,$i,$space,$n){
+ @if $direction == t {
+ @include fn($space, top,$i,$n);
+ }
+ @if $direction == r {
+ @include fn($space, right,$i,$n);
+ }
+ @if $direction == b {
+ @include fn($space, bottom,$i,$n);
+ }
+ @if $direction == l {
+ @include fn($space, left,$i,$n);
+ }
+ @if $direction == x {
+ @include fn($space, left,$i,$n);
+ @include fn($space, right,$i,$n);
+ }
+ @if $direction == y {
+ @include fn($space, top,$i,$n);
+ @include fn($space, bottom,$i,$n);
+ }
+ @if $direction == a {
+ @if $n {
+ #{$space}:#{$i*$uni-space-root}px;
+ } @else {
+ #{$space}:#{-$i*$uni-space-root}px;
+ }
+ }
+}
+
+@each $orientation in m,p {
+ $space: margin;
+ @if $orientation == m {
+ $space: margin;
+ } @else {
+ $space: padding;
+ }
+ @for $i from 0 through 16 {
+ @each $direction in t, r, b, l, x, y, a {
+ .uni-#{$orientation}#{$direction}-#{$i} {
+ @include get-styles($direction,$i,$space,true);
+ }
+ .uni-#{$orientation}#{$direction}-n#{$i} {
+ @include get-styles($direction,$i,$space,false);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-scss/styles/setting/_styles.scss b/uni_modules/uni-scss/styles/setting/_styles.scss
new file mode 100644
index 0000000..689afec
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_styles.scss
@@ -0,0 +1,167 @@
+/* #ifndef APP-NVUE */
+
+$-color-white:#fff;
+$-color-black:#000;
+@mixin base-style($color) {
+ color: #fff;
+ background-color: $color;
+ border-color: mix($-color-black, $color, 8%);
+ &:not([hover-class]):active {
+ background: mix($-color-black, $color, 10%);
+ border-color: mix($-color-black, $color, 20%);
+ color: $-color-white;
+ outline: none;
+ }
+}
+@mixin is-color($color) {
+ @include base-style($color);
+ &[loading] {
+ @include base-style($color);
+ &::before {
+ margin-right:5px;
+ }
+ }
+ &[disabled] {
+ &,
+ &[loading],
+ &:not([hover-class]):active {
+ color: $-color-white;
+ border-color: mix(darken($color,10%), $-color-white);
+ background-color: mix($color, $-color-white);
+ }
+ }
+
+}
+@mixin base-plain-style($color) {
+ color:$color;
+ background-color: mix($-color-white, $color, 90%);
+ border-color: mix($-color-white, $color, 70%);
+ &:not([hover-class]):active {
+ background: mix($-color-white, $color, 80%);
+ color: $color;
+ outline: none;
+ border-color: mix($-color-white, $color, 50%);
+ }
+}
+@mixin is-plain($color){
+ &[plain] {
+ @include base-plain-style($color);
+ &[loading] {
+ @include base-plain-style($color);
+ &::before {
+ margin-right:5px;
+ }
+ }
+ &[disabled] {
+ &,
+ &:active {
+ color: mix($-color-white, $color, 40%);
+ background-color: mix($-color-white, $color, 90%);
+ border-color: mix($-color-white, $color, 80%);
+ }
+ }
+ }
+}
+
+
+.uni-btn {
+ margin: 5px;
+ color: #393939;
+ border:1px solid #ccc;
+ font-size: 16px;
+ font-weight: 200;
+ background-color: #F9F9F9;
+ // TODO 暂时处理边框隐藏一边的问题
+ overflow: visible;
+ &::after{
+ border: none;
+ }
+
+ &:not([type]),&[type=default] {
+ color: #999;
+ &[loading] {
+ background: none;
+ &::before {
+ margin-right:5px;
+ }
+ }
+
+
+
+ &[disabled]{
+ color: mix($-color-white, #999, 60%);
+ &,
+ &[loading],
+ &:active {
+ color: mix($-color-white, #999, 60%);
+ background-color: mix($-color-white,$-color-black , 98%);
+ border-color: mix($-color-white, #999, 85%);
+ }
+ }
+
+ &[plain] {
+ color: #999;
+ background: none;
+ border-color: $uni-border-1;
+ &:not([hover-class]):active {
+ background: none;
+ color: mix($-color-white, $-color-black, 80%);
+ border-color: mix($-color-white, $-color-black, 90%);
+ outline: none;
+ }
+ &[disabled]{
+ &,
+ &[loading],
+ &:active {
+ background: none;
+ color: mix($-color-white, #999, 60%);
+ border-color: mix($-color-white, #999, 85%);
+ }
+ }
+ }
+ }
+
+ &:not([hover-class]):active {
+ color: mix($-color-white, $-color-black, 50%);
+ }
+
+ &[size=mini] {
+ font-size: 16px;
+ font-weight: 200;
+ border-radius: 8px;
+ }
+
+
+
+ &.uni-btn-small {
+ font-size: 14px;
+ }
+ &.uni-btn-mini {
+ font-size: 12px;
+ }
+
+ &.uni-btn-radius {
+ border-radius: 999px;
+ }
+ &[type=primary] {
+ @include is-color($uni-primary);
+ @include is-plain($uni-primary)
+ }
+ &[type=success] {
+ @include is-color($uni-success);
+ @include is-plain($uni-success)
+ }
+ &[type=error] {
+ @include is-color($uni-error);
+ @include is-plain($uni-error)
+ }
+ &[type=warning] {
+ @include is-color($uni-warning);
+ @include is-plain($uni-warning)
+ }
+ &[type=info] {
+ @include is-color($uni-info);
+ @include is-plain($uni-info)
+ }
+}
+/* #endif */
diff --git a/uni_modules/uni-scss/styles/setting/_text.scss b/uni_modules/uni-scss/styles/setting/_text.scss
new file mode 100644
index 0000000..a34d08f
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_text.scss
@@ -0,0 +1,24 @@
+@mixin get-styles($k,$c) {
+ @if $k == size or $k == weight{
+ font-#{$k}:#{$c}
+ }@else{
+ #{$k}:#{$c}
+ }
+}
+
+@each $key, $child in $uni-headings {
+ /* #ifndef APP-NVUE */
+ .uni-#{$key} {
+ @each $k, $c in $child {
+ @include get-styles($k,$c)
+ }
+ }
+ /* #endif */
+ /* #ifdef APP-NVUE */
+ .container .uni-#{$key} {
+ @each $k, $c in $child {
+ @include get-styles($k,$c)
+ }
+ }
+ /* #endif */
+}
diff --git a/uni_modules/uni-scss/styles/setting/_variables.scss b/uni_modules/uni-scss/styles/setting/_variables.scss
new file mode 100644
index 0000000..557d3d7
--- /dev/null
+++ b/uni_modules/uni-scss/styles/setting/_variables.scss
@@ -0,0 +1,146 @@
+// @use "sass:math";
+@import '../tools/functions.scss';
+// 间距基础倍数
+$uni-space-root: 2 !default;
+// 边框半径默认值
+$uni-radius-root:5px !default;
+$uni-radius: () !default;
+// 边框半径断点
+$uni-radius: map-deep-merge(
+ (
+ 0: 0,
+ // TODO 当前版本暂时不支持 sm 属性
+ // 'sm': math.div($uni-radius-root, 2),
+ null: $uni-radius-root,
+ 'lg': $uni-radius-root * 2,
+ 'xl': $uni-radius-root * 6,
+ 'pill': 9999px,
+ 'circle': 50%
+ ),
+ $uni-radius
+);
+// 字体家族
+$body-font-family: 'Roboto', sans-serif !default;
+// 文本
+$heading-font-family: $body-font-family !default;
+$uni-headings: () !default;
+$letterSpacing: -0.01562em;
+$uni-headings: map-deep-merge(
+ (
+ 'h1': (
+ size: 32px,
+ weight: 300,
+ line-height: 50px,
+ // letter-spacing:-0.01562em
+ ),
+ 'h2': (
+ size: 28px,
+ weight: 300,
+ line-height: 40px,
+ // letter-spacing: -0.00833em
+ ),
+ 'h3': (
+ size: 24px,
+ weight: 400,
+ line-height: 32px,
+ // letter-spacing: normal
+ ),
+ 'h4': (
+ size: 20px,
+ weight: 400,
+ line-height: 30px,
+ // letter-spacing: 0.00735em
+ ),
+ 'h5': (
+ size: 16px,
+ weight: 400,
+ line-height: 24px,
+ // letter-spacing: normal
+ ),
+ 'h6': (
+ size: 14px,
+ weight: 500,
+ line-height: 18px,
+ // letter-spacing: 0.0125em
+ ),
+ 'subtitle': (
+ size: 12px,
+ weight: 400,
+ line-height: 20px,
+ // letter-spacing: 0.00937em
+ ),
+ 'body': (
+ font-size: 14px,
+ font-weight: 400,
+ line-height: 22px,
+ // letter-spacing: 0.03125em
+ ),
+ 'caption': (
+ 'size': 12px,
+ 'weight': 400,
+ 'line-height': 20px,
+ // 'letter-spacing': 0.03333em,
+ // 'text-transform': false
+ )
+ ),
+ $uni-headings
+);
+
+
+
+// 主色
+$uni-primary: #2979ff !default;
+$uni-primary-disable:lighten($uni-primary,20%) !default;
+$uni-primary-light: lighten($uni-primary,25%) !default;
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37 !default;
+$uni-success-disable:lighten($uni-success,20%) !default;
+$uni-success-light: lighten($uni-success,25%) !default;
+
+$uni-warning: #f3a73f !default;
+$uni-warning-disable:lighten($uni-warning,20%) !default;
+$uni-warning-light: lighten($uni-warning,25%) !default;
+
+$uni-error: #e43d33 !default;
+$uni-error-disable:lighten($uni-error,20%) !default;
+$uni-error-light: lighten($uni-error,25%) !default;
+
+$uni-info: #8f939c !default;
+$uni-info-disable:lighten($uni-info,20%) !default;
+$uni-info-light: lighten($uni-info,25%) !default;
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a !default; // 主要文字
+$uni-base-color: #6a6a6a !default; // 常规文字
+$uni-secondary-color: #909399 !default; // 次要文字
+$uni-extra-color: #c7c7c7 !default; // 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0 !default;
+$uni-border-2: #EDEDED !default;
+$uni-border-3: #DCDCDC !default;
+$uni-border-4: #B9B9B9 !default;
+
+// 常规色
+$uni-black: #000000 !default;
+$uni-white: #ffffff !default;
+$uni-transparent: rgba($color: #000000, $alpha: 0) !default;
+
+// 背景色
+$uni-bg-color: #f7f7f7 !default;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px !default;
+$uni-spacing-base: 15px !default;
+$uni-spacing-lg: 30px !default;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default;
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default;
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default;
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4) !default;
diff --git a/uni_modules/uni-scss/styles/tools/functions.scss b/uni_modules/uni-scss/styles/tools/functions.scss
new file mode 100644
index 0000000..ac6f63e
--- /dev/null
+++ b/uni_modules/uni-scss/styles/tools/functions.scss
@@ -0,0 +1,19 @@
+// 合并 map
+@function map-deep-merge($parent-map, $child-map){
+ $result: $parent-map;
+ @each $key, $child in $child-map {
+ $parent-has-key: map-has-key($result, $key);
+ $parent-value: map-get($result, $key);
+ $parent-type: type-of($parent-value);
+ $child-type: type-of($child);
+ $parent-is-map: $parent-type == map;
+ $child-is-map: $child-type == map;
+
+ @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){
+ $result: map-merge($result, ( $key: $child ));
+ }@else {
+ $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) ));
+ }
+ }
+ @return $result;
+};
diff --git a/uni_modules/uni-scss/theme.scss b/uni_modules/uni-scss/theme.scss
new file mode 100644
index 0000000..80ee62f
--- /dev/null
+++ b/uni_modules/uni-scss/theme.scss
@@ -0,0 +1,31 @@
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+// 主色
+$uni-primary: #2979ff;
+// 辅助色
+$uni-success: #4cd964;
+// 警告色
+$uni-warning: #f0ad4e;
+// 错误色
+$uni-error: #dd524d;
+// 描述色
+$uni-info: #909399;
+// 中性色
+$uni-main-color: #303133;
+$uni-base-color: #606266;
+$uni-secondary-color: #909399;
+$uni-extra-color: #C0C4CC;
+// 背景色
+$uni-bg-color: #f5f5f5;
+// 边框颜色
+$uni-border-1: #DCDFE6;
+$uni-border-2: #E4E7ED;
+$uni-border-3: #EBEEF5;
+$uni-border-4: #F2F6FC;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);
diff --git a/uni_modules/uni-scss/variables.scss b/uni_modules/uni-scss/variables.scss
new file mode 100644
index 0000000..1c062d4
--- /dev/null
+++ b/uni_modules/uni-scss/variables.scss
@@ -0,0 +1,62 @@
+@import './styles/setting/_variables.scss';
+// 间距基础倍数
+$uni-space-root: 2;
+// 边框半径默认值
+$uni-radius-root:5px;
+
+// 主色
+$uni-primary: #2979ff;
+$uni-primary-disable:mix(#fff,$uni-primary,50%);
+$uni-primary-light: mix(#fff,$uni-primary,80%);
+
+// 辅助色
+// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。
+$uni-success: #18bc37;
+$uni-success-disable:mix(#fff,$uni-success,50%);
+$uni-success-light: mix(#fff,$uni-success,80%);
+
+$uni-warning: #f3a73f;
+$uni-warning-disable:mix(#fff,$uni-warning,50%);
+$uni-warning-light: mix(#fff,$uni-warning,80%);
+
+$uni-error: #e43d33;
+$uni-error-disable:mix(#fff,$uni-error,50%);
+$uni-error-light: mix(#fff,$uni-error,80%);
+
+$uni-info: #8f939c;
+$uni-info-disable:mix(#fff,$uni-info,50%);
+$uni-info-light: mix(#fff,$uni-info,80%);
+
+// 中性色
+// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。
+$uni-main-color: #3a3a3a; // 主要文字
+$uni-base-color: #6a6a6a; // 常规文字
+$uni-secondary-color: #909399; // 次要文字
+$uni-extra-color: #c7c7c7; // 辅助说明
+
+// 边框颜色
+$uni-border-1: #F0F0F0;
+$uni-border-2: #EDEDED;
+$uni-border-3: #DCDCDC;
+$uni-border-4: #B9B9B9;
+
+// 常规色
+$uni-black: #000000;
+$uni-white: #ffffff;
+$uni-transparent: rgba($color: #000000, $alpha: 0);
+
+// 背景色
+$uni-bg-color: #f7f7f7;
+
+/* 水平间距 */
+$uni-spacing-sm: 8px;
+$uni-spacing-base: 15px;
+$uni-spacing-lg: 30px;
+
+// 阴影
+$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5);
+$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2);
+$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5);
+
+// 蒙版
+$uni-mask: rgba($color: #000000, $alpha: 0.4);
diff --git a/uni_modules/uni-transition/changelog.md b/uni_modules/uni-transition/changelog.md
new file mode 100644
index 0000000..ad489f1
--- /dev/null
+++ b/uni_modules/uni-transition/changelog.md
@@ -0,0 +1,20 @@
+## 1.3.1(2021-11-23)
+- 修复 init 方法初始化问题
+## 1.3.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition)
+## 1.2.1(2021-09-27)
+- 修复 init 方法不生效的 Bug
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.1(2021-05-12)
+- 新增 示例地址
+- 修复 示例项目缺少组件的 Bug
+## 1.1.0(2021-04-22)
+- 新增 通过方法自定义动画
+- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式
+- 优化 动画触发逻辑,使动画更流畅
+- 优化 支持单独的动画类型
+- 优化 文档示例
+## 1.0.2(2021-02-05)
+- 调整为 uni_modules 目录规范
diff --git a/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/uni_modules/uni-transition/components/uni-transition/createAnimation.js
new file mode 100644
index 0000000..af47dbc
--- /dev/null
+++ b/uni_modules/uni-transition/components/uni-transition/createAnimation.js
@@ -0,0 +1,128 @@
+// const defaultOption = {
+// duration: 300,
+// timingFunction: 'linear',
+// delay: 0,
+// transformOrigin: '50% 50% 0'
+// }
+// #ifdef APP-NVUE
+const nvueAnimation = uni.requireNativePlugin('animation')
+// #endif
+class MPAnimation {
+ constructor(options, _this) {
+ this.options = options
+ this.animation = uni.createAnimation(options)
+ this.currentStepAnimates = {}
+ this.next = 0
+ this.$ = _this
+
+ }
+
+ _nvuePushAnimates(type, args) {
+ let aniObj = this.currentStepAnimates[this.next]
+ let styles = {}
+ if (!aniObj) {
+ styles = {
+ styles: {},
+ config: {}
+ }
+ } else {
+ styles = aniObj
+ }
+ if (animateTypes1.includes(type)) {
+ if (!styles.styles.transform) {
+ styles.styles.transform = ''
+ }
+ let unit = ''
+ if(type === 'rotate'){
+ unit = 'deg'
+ }
+ styles.styles.transform += `${type}(${args+unit}) `
+ } else {
+ styles.styles[type] = `${args}`
+ }
+ this.currentStepAnimates[this.next] = styles
+ }
+ _animateRun(styles = {}, config = {}) {
+ let ref = this.$.$refs['ani'].ref
+ if (!ref) return
+ return new Promise((resolve, reject) => {
+ nvueAnimation.transition(ref, {
+ styles,
+ ...config
+ }, res => {
+ resolve()
+ })
+ })
+ }
+
+ _nvueNextAnimate(animates, step = 0, fn) {
+ let obj = animates[step]
+ if (obj) {
+ let {
+ styles,
+ config
+ } = obj
+ this._animateRun(styles, config).then(() => {
+ step += 1
+ this._nvueNextAnimate(animates, step, fn)
+ })
+ } else {
+ this.currentStepAnimates = {}
+ typeof fn === 'function' && fn()
+ this.isEnd = true
+ }
+ }
+
+ step(config = {}) {
+ // #ifndef APP-NVUE
+ this.animation.step(config)
+ // #endif
+ // #ifdef APP-NVUE
+ this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
+ this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
+ this.next++
+ // #endif
+ return this
+ }
+
+ run(fn) {
+ // #ifndef APP-NVUE
+ this.$.animationData = this.animation.export()
+ this.$.timer = setTimeout(() => {
+ typeof fn === 'function' && fn()
+ }, this.$.durationTime)
+ // #endif
+ // #ifdef APP-NVUE
+ this.isEnd = false
+ let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
+ if(!ref) return
+ this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
+ this.next = 0
+ // #endif
+ }
+}
+
+
+const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
+ 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
+ 'translateZ'
+]
+const animateTypes2 = ['opacity', 'backgroundColor']
+const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
+animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
+ MPAnimation.prototype[type] = function(...args) {
+ // #ifndef APP-NVUE
+ this.animation[type](...args)
+ // #endif
+ // #ifdef APP-NVUE
+ this._nvuePushAnimates(type, args)
+ // #endif
+ return this
+ }
+})
+
+export function createAnimation(option, _this) {
+ if(!_this) return
+ clearTimeout(_this.timer)
+ return new MPAnimation(option, _this)
+}
diff --git a/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
new file mode 100644
index 0000000..be5e794
--- /dev/null
+++ b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-transition/package.json b/uni_modules/uni-transition/package.json
new file mode 100644
index 0000000..379e9aa
--- /dev/null
+++ b/uni_modules/uni-transition/package.json
@@ -0,0 +1,87 @@
+{
+ "id": "uni-transition",
+ "displayName": "uni-transition 过渡动画",
+ "version": "1.3.1",
+ "description": "元素的简单过渡动画",
+ "keywords": [
+ "uni-ui",
+ "uniui",
+ "动画",
+ "过渡",
+ "过渡动画"
+],
+ "repository": "https://github.com/dcloudio/uni-ui",
+ "engines": {
+ "HBuilderX": ""
+ },
+ "directories": {
+ "example": "../../temps/example_temps"
+ },
+ "dcloudext": {
+ "category": [
+ "前端组件",
+ "通用组件"
+ ],
+ "sale": {
+ "regular": {
+ "price": "0.00"
+ },
+ "sourcecode": {
+ "price": "0.00"
+ }
+ },
+ "contact": {
+ "qq": ""
+ },
+ "declaration": {
+ "ads": "无",
+ "data": "无",
+ "permissions": "无"
+ },
+ "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+ },
+ "uni_modules": {
+ "dependencies": ["uni-scss"],
+ "encrypt": [],
+ "platforms": {
+ "cloud": {
+ "tcb": "y",
+ "aliyun": "y"
+ },
+ "client": {
+ "App": {
+ "app-vue": "y",
+ "app-nvue": "y"
+ },
+ "H5-mobile": {
+ "Safari": "y",
+ "Android Browser": "y",
+ "微信浏览器(Android)": "y",
+ "QQ浏览器(Android)": "y"
+ },
+ "H5-pc": {
+ "Chrome": "y",
+ "IE": "y",
+ "Edge": "y",
+ "Firefox": "y",
+ "Safari": "y"
+ },
+ "小程序": {
+ "微信": "y",
+ "阿里": "y",
+ "百度": "y",
+ "字节跳动": "y",
+ "QQ": "y"
+ },
+ "快应用": {
+ "华为": "u",
+ "联盟": "u"
+ },
+ "Vue": {
+ "vue2": "y",
+ "vue3": "y"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/uni_modules/uni-transition/readme.md b/uni_modules/uni-transition/readme.md
new file mode 100644
index 0000000..1e104fe
--- /dev/null
+++ b/uni_modules/uni-transition/readme.md
@@ -0,0 +1,11 @@
+
+
+## Transition 过渡动画
+> **组件名:uni-transition**
+> 代码块: `uTransition`
+
+
+元素过渡动画
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/action-sheet/index.d.ts b/wxcomponents/vant/dist/action-sheet/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/action-sheet/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/action-sheet/index.js b/wxcomponents/vant/dist/action-sheet/index.js
new file mode 100644
index 0000000..aee6999
--- /dev/null
+++ b/wxcomponents/vant/dist/action-sheet/index.js
@@ -0,0 +1,71 @@
+import { VantComponent } from '../common/component';
+import { button } from '../mixins/button';
+VantComponent({
+ classes: ['list-class'],
+ mixins: [button],
+ props: {
+ show: Boolean,
+ title: String,
+ cancelText: String,
+ description: String,
+ round: {
+ type: Boolean,
+ value: true,
+ },
+ zIndex: {
+ type: Number,
+ value: 100,
+ },
+ actions: {
+ type: Array,
+ value: [],
+ },
+ overlay: {
+ type: Boolean,
+ value: true,
+ },
+ closeOnClickOverlay: {
+ type: Boolean,
+ value: true,
+ },
+ closeOnClickAction: {
+ type: Boolean,
+ value: true,
+ },
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ methods: {
+ onSelect(event) {
+ const { index } = event.currentTarget.dataset;
+ const { actions, closeOnClickAction, canIUseGetUserProfile } = this.data;
+ const item = actions[index];
+ if (item) {
+ this.$emit('select', item);
+ if (closeOnClickAction) {
+ this.onClose();
+ }
+ if (item.openType === 'getUserInfo' && canIUseGetUserProfile) {
+ wx.getUserProfile({
+ desc: item.getUserProfileDesc || ' ',
+ complete: (userProfile) => {
+ this.$emit('getuserinfo', userProfile);
+ },
+ });
+ }
+ }
+ },
+ onCancel() {
+ this.$emit('cancel');
+ },
+ onClose() {
+ this.$emit('close');
+ },
+ onClickOverlay() {
+ this.$emit('click-overlay');
+ this.onClose();
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/action-sheet/index.json b/wxcomponents/vant/dist/action-sheet/index.json
new file mode 100644
index 0000000..19bf989
--- /dev/null
+++ b/wxcomponents/vant/dist/action-sheet/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-popup": "../popup/index",
+ "van-loading": "../loading/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/action-sheet/index.vue b/wxcomponents/vant/dist/action-sheet/index.vue
new file mode 100644
index 0000000..616bb0a
--- /dev/null
+++ b/wxcomponents/vant/dist/action-sheet/index.vue
@@ -0,0 +1,112 @@
+
+
+
+
+ {{ description }}
+
+
+
+
+
+
+
+
+
+ {{ cancelText }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/action-sheet/index.wxml b/wxcomponents/vant/dist/action-sheet/index.wxml
new file mode 100644
index 0000000..d59a45d
--- /dev/null
+++ b/wxcomponents/vant/dist/action-sheet/index.wxml
@@ -0,0 +1,69 @@
+
+
+
+
+
+ {{ description }}
+
+
+
+
+
+
+
+
+
+ {{ cancelText }}
+
+
+
diff --git a/wxcomponents/vant/dist/action-sheet/index.wxss b/wxcomponents/vant/dist/action-sheet/index.wxss
new file mode 100644
index 0000000..eedd361
--- /dev/null
+++ b/wxcomponents/vant/dist/action-sheet/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-action-sheet{color:var(--action-sheet-item-text-color,#323233);max-height:var(--action-sheet-max-height,90%)!important}.van-action-sheet__cancel,.van-action-sheet__item{background-color:var(--action-sheet-item-background,#fff);font-size:var(--action-sheet-item-font-size,16px);line-height:var(--action-sheet-item-line-height,22px);padding:14px 16px;text-align:center}.van-action-sheet__cancel--hover,.van-action-sheet__item--hover{background-color:#f2f3f5}.van-action-sheet__cancel:after,.van-action-sheet__item:after{border-width:0}.van-action-sheet__cancel{color:var(--action-sheet-cancel-text-color,#646566)}.van-action-sheet__gap{background-color:var(--action-sheet-cancel-padding-color,#f7f8fa);display:block;height:var(--action-sheet-cancel-padding-top,8px)}.van-action-sheet__item--disabled{color:var(--action-sheet-item-disabled-text-color,#c8c9cc)}.van-action-sheet__item--disabled.van-action-sheet__item--hover{background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__subname{color:var(--action-sheet-subname-color,#969799);font-size:var(--action-sheet-subname-font-size,12px);line-height:var(--action-sheet-subname-line-height,20px);margin-top:var(--padding-xs,8px)}.van-action-sheet__header{font-size:var(--action-sheet-header-font-size,16px);font-weight:var(--font-weight-bold,500);line-height:var(--action-sheet-header-height,48px);text-align:center}.van-action-sheet__description{color:var(--action-sheet-description-color,#969799);font-size:var(--action-sheet-description-font-size,14px);line-height:var(--action-sheet-description-line-height,20px);padding:20px var(--padding-md,16px);text-align:center}.van-action-sheet__close{color:var(--action-sheet-close-icon-color,#c8c9cc);font-size:var(--action-sheet-close-icon-size,22px)!important;line-height:inherit!important;padding:var(--action-sheet-close-icon-padding,0 16px);position:absolute!important;right:0;top:0}.van-action-sheet__loading{display:flex!important}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/area/index.d.ts b/wxcomponents/vant/dist/area/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/area/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/area/index.js b/wxcomponents/vant/dist/area/index.js
new file mode 100644
index 0000000..9cf1edd
--- /dev/null
+++ b/wxcomponents/vant/dist/area/index.js
@@ -0,0 +1,220 @@
+import { VantComponent } from '../common/component';
+import { pickerProps } from '../picker/shared';
+import { requestAnimationFrame } from '../common/utils';
+const EMPTY_CODE = '000000';
+VantComponent({
+ classes: ['active-class', 'toolbar-class', 'column-class'],
+ props: Object.assign(Object.assign({}, pickerProps), { showToolbar: {
+ type: Boolean,
+ value: true,
+ }, value: {
+ type: String,
+ observer(value) {
+ this.code = value;
+ this.setValues();
+ },
+ }, areaList: {
+ type: Object,
+ value: {},
+ observer: 'setValues',
+ }, columnsNum: {
+ type: null,
+ value: 3,
+ }, columnsPlaceholder: {
+ type: Array,
+ observer(val) {
+ this.setData({
+ typeToColumnsPlaceholder: {
+ province: val[0] || '',
+ city: val[1] || '',
+ county: val[2] || '',
+ },
+ });
+ },
+ } }),
+ data: {
+ columns: [{ values: [] }, { values: [] }, { values: [] }],
+ typeToColumnsPlaceholder: {},
+ },
+ mounted() {
+ requestAnimationFrame(() => {
+ this.setValues();
+ });
+ },
+ methods: {
+ getPicker() {
+ if (this.picker == null) {
+ this.picker = this.selectComponent('.van-area__picker');
+ }
+ return this.picker;
+ },
+ onCancel(event) {
+ this.emit('cancel', event.detail);
+ },
+ onConfirm(event) {
+ const { index } = event.detail;
+ let { value } = event.detail;
+ value = this.parseValues(value);
+ this.emit('confirm', { value, index });
+ },
+ emit(type, detail) {
+ detail.values = detail.value;
+ delete detail.value;
+ this.$emit(type, detail);
+ },
+ parseValues(values) {
+ const { columnsPlaceholder } = this.data;
+ return values.map((value, index) => {
+ if (value &&
+ (!value.code || value.name === columnsPlaceholder[index])) {
+ return Object.assign(Object.assign({}, value), { code: '', name: '' });
+ }
+ return value;
+ });
+ },
+ onChange(event) {
+ var _a;
+ const { index, picker, value } = event.detail;
+ this.code = value[index].code;
+ (_a = this.setValues()) === null || _a === void 0 ? void 0 : _a.then(() => {
+ this.$emit('change', {
+ picker,
+ values: this.parseValues(picker.getValues()),
+ index,
+ });
+ });
+ },
+ getConfig(type) {
+ const { areaList } = this.data;
+ return (areaList && areaList[`${type}_list`]) || {};
+ },
+ getList(type, code) {
+ if (type !== 'province' && !code) {
+ return [];
+ }
+ const { typeToColumnsPlaceholder } = this.data;
+ const list = this.getConfig(type);
+ let result = Object.keys(list).map((code) => ({
+ code,
+ name: list[code],
+ }));
+ if (code != null) {
+ // oversea code
+ if (code[0] === '9' && type === 'city') {
+ code = '9';
+ }
+ result = result.filter((item) => item.code.indexOf(code) === 0);
+ }
+ if (typeToColumnsPlaceholder[type] && result.length) {
+ // set columns placeholder
+ const codeFill = type === 'province'
+ ? ''
+ : type === 'city'
+ ? EMPTY_CODE.slice(2, 4)
+ : EMPTY_CODE.slice(4, 6);
+ result.unshift({
+ code: `${code}${codeFill}`,
+ name: typeToColumnsPlaceholder[type],
+ });
+ }
+ return result;
+ },
+ getIndex(type, code) {
+ let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6;
+ const list = this.getList(type, code.slice(0, compareNum - 2));
+ // oversea code
+ if (code[0] === '9' && type === 'province') {
+ compareNum = 1;
+ }
+ code = code.slice(0, compareNum);
+ for (let i = 0; i < list.length; i++) {
+ if (list[i].code.slice(0, compareNum) === code) {
+ return i;
+ }
+ }
+ return 0;
+ },
+ setValues() {
+ const picker = this.getPicker();
+ if (!picker) {
+ return;
+ }
+ let code = this.code || this.getDefaultCode();
+ const provinceList = this.getList('province');
+ const cityList = this.getList('city', code.slice(0, 2));
+ const stack = [];
+ const indexes = [];
+ const { columnsNum } = this.data;
+ if (columnsNum >= 1) {
+ stack.push(picker.setColumnValues(0, provinceList, false));
+ indexes.push(this.getIndex('province', code));
+ }
+ if (columnsNum >= 2) {
+ stack.push(picker.setColumnValues(1, cityList, false));
+ indexes.push(this.getIndex('city', code));
+ if (cityList.length && code.slice(2, 4) === '00') {
+ [{ code }] = cityList;
+ }
+ }
+ if (columnsNum === 3) {
+ stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false));
+ indexes.push(this.getIndex('county', code));
+ }
+ return Promise.all(stack)
+ .catch(() => { })
+ .then(() => picker.setIndexes(indexes))
+ .catch(() => { });
+ },
+ getDefaultCode() {
+ const { columnsPlaceholder } = this.data;
+ if (columnsPlaceholder.length) {
+ return EMPTY_CODE;
+ }
+ const countyCodes = Object.keys(this.getConfig('county'));
+ if (countyCodes[0]) {
+ return countyCodes[0];
+ }
+ const cityCodes = Object.keys(this.getConfig('city'));
+ if (cityCodes[0]) {
+ return cityCodes[0];
+ }
+ return '';
+ },
+ getValues() {
+ const picker = this.getPicker();
+ if (!picker) {
+ return [];
+ }
+ return this.parseValues(picker.getValues().filter((value) => !!value));
+ },
+ getDetail() {
+ const values = this.getValues();
+ const area = {
+ code: '',
+ country: '',
+ province: '',
+ city: '',
+ county: '',
+ };
+ if (!values.length) {
+ return area;
+ }
+ const names = values.map((item) => item.name);
+ area.code = values[values.length - 1].code;
+ if (area.code[0] === '9') {
+ area.country = names[1] || '';
+ area.province = names[2] || '';
+ }
+ else {
+ area.province = names[0] || '';
+ area.city = names[1] || '';
+ area.county = names[2] || '';
+ }
+ return area;
+ },
+ reset(code) {
+ this.code = code || '';
+ return this.setValues();
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/area/index.json b/wxcomponents/vant/dist/area/index.json
new file mode 100644
index 0000000..a778e91
--- /dev/null
+++ b/wxcomponents/vant/dist/area/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-picker": "../picker/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/area/index.vue b/wxcomponents/vant/dist/area/index.vue
new file mode 100644
index 0000000..907975f
--- /dev/null
+++ b/wxcomponents/vant/dist/area/index.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/area/index.wxml b/wxcomponents/vant/dist/area/index.wxml
new file mode 100644
index 0000000..3a437b7
--- /dev/null
+++ b/wxcomponents/vant/dist/area/index.wxml
@@ -0,0 +1,20 @@
+
+
+
diff --git a/wxcomponents/vant/dist/area/index.wxs b/wxcomponents/vant/dist/area/index.wxs
new file mode 100644
index 0000000..07723c1
--- /dev/null
+++ b/wxcomponents/vant/dist/area/index.wxs
@@ -0,0 +1,8 @@
+/* eslint-disable */
+function displayColumns(columns, columnsNum) {
+ return columns.slice(0, +columnsNum);
+}
+
+module.exports = {
+ displayColumns: displayColumns,
+};
diff --git a/wxcomponents/vant/dist/area/index.wxss b/wxcomponents/vant/dist/area/index.wxss
new file mode 100644
index 0000000..99694d6
--- /dev/null
+++ b/wxcomponents/vant/dist/area/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/button/index.d.ts b/wxcomponents/vant/dist/button/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/button/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/button/index.js b/wxcomponents/vant/dist/button/index.js
new file mode 100644
index 0000000..0e3c134
--- /dev/null
+++ b/wxcomponents/vant/dist/button/index.js
@@ -0,0 +1,64 @@
+import { VantComponent } from '../common/component';
+import { button } from '../mixins/button';
+import { canIUseFormFieldButton } from '../common/version';
+const mixins = [button];
+if (canIUseFormFieldButton()) {
+ mixins.push('wx://form-field-button');
+}
+VantComponent({
+ mixins,
+ classes: ['hover-class', 'loading-class'],
+ data: {
+ baseStyle: '',
+ },
+ props: {
+ formType: String,
+ icon: String,
+ classPrefix: {
+ type: String,
+ value: 'van-icon',
+ },
+ plain: Boolean,
+ block: Boolean,
+ round: Boolean,
+ square: Boolean,
+ loading: Boolean,
+ hairline: Boolean,
+ disabled: Boolean,
+ loadingText: String,
+ customStyle: String,
+ loadingType: {
+ type: String,
+ value: 'circular',
+ },
+ type: {
+ type: String,
+ value: 'default',
+ },
+ dataset: null,
+ size: {
+ type: String,
+ value: 'normal',
+ },
+ loadingSize: {
+ type: String,
+ value: '20px',
+ },
+ color: String,
+ },
+ methods: {
+ onClick(event) {
+ this.$emit('click', event);
+ const { canIUseGetUserProfile, openType, getUserProfileDesc, lang, } = this.data;
+ if (openType === 'getUserInfo' && canIUseGetUserProfile) {
+ wx.getUserProfile({
+ desc: getUserProfileDesc || ' ',
+ lang: lang || 'en',
+ complete: (userProfile) => {
+ this.$emit('getuserinfo', userProfile);
+ },
+ });
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/button/index.json b/wxcomponents/vant/dist/button/index.json
new file mode 100644
index 0000000..e00a588
--- /dev/null
+++ b/wxcomponents/vant/dist/button/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-loading": "../loading/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/button/index.vue b/wxcomponents/vant/dist/button/index.vue
new file mode 100644
index 0000000..9555e12
--- /dev/null
+++ b/wxcomponents/vant/dist/button/index.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/button/index.wxml b/wxcomponents/vant/dist/button/index.wxml
new file mode 100644
index 0000000..b5abebb
--- /dev/null
+++ b/wxcomponents/vant/dist/button/index.wxml
@@ -0,0 +1,54 @@
+
+
+
+
diff --git a/wxcomponents/vant/dist/button/index.wxs b/wxcomponents/vant/dist/button/index.wxs
new file mode 100644
index 0000000..8b649fe
--- /dev/null
+++ b/wxcomponents/vant/dist/button/index.wxs
@@ -0,0 +1,39 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+
+function rootStyle(data) {
+ if (!data.color) {
+ return data.customStyle;
+ }
+
+ var properties = {
+ color: data.plain ? data.color : '#fff',
+ background: data.plain ? null : data.color,
+ };
+
+ // hide border when color is linear-gradient
+ if (data.color.indexOf('gradient') !== -1) {
+ properties.border = 0;
+ } else {
+ properties['border-color'] = data.color;
+ }
+
+ return style([properties, data.customStyle]);
+}
+
+function loadingColor(data) {
+ if (data.plain) {
+ return data.color ? data.color : '#c9c9c9';
+ }
+
+ if (data.type === 'default') {
+ return '#c9c9c9';
+ }
+
+ return '#fff';
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+ loadingColor: loadingColor,
+};
diff --git a/wxcomponents/vant/dist/button/index.wxss b/wxcomponents/vant/dist/button/index.wxss
new file mode 100644
index 0000000..bd8bb5a
--- /dev/null
+++ b/wxcomponents/vant/dist/button/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-button{-webkit-text-size-adjust:100%;align-items:center;-webkit-appearance:none;border-radius:var(--button-border-radius,2px);box-sizing:border-box;display:inline-flex;font-size:var(--button-default-font-size,16px);height:var(--button-default-height,44px);justify-content:center;line-height:var(--button-line-height,20px);padding:0;position:relative;text-align:center;transition:opacity .2s;vertical-align:middle}.van-button:before{background-color:#000;border:inherit;border-color:#000;border-radius:inherit;content:" ";height:100%;left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%}.van-button:after{border-width:0}.van-button--active:before{opacity:.15}.van-button--unclickable:after{display:none}.van-button--default{background:var(--button-default-background-color,#fff);border:var(--button-border-width,1px) solid var(--button-default-border-color,#ebedf0);color:var(--button-default-color,#323233)}.van-button--primary{background:var(--button-primary-background-color,#07c160);border:var(--button-border-width,1px) solid var(--button-primary-border-color,#07c160);color:var(--button-primary-color,#fff)}.van-button--info{background:var(--button-info-background-color,#1989fa);border:var(--button-border-width,1px) solid var(--button-info-border-color,#1989fa);color:var(--button-info-color,#fff)}.van-button--danger{background:var(--button-danger-background-color,#ee0a24);border:var(--button-border-width,1px) solid var(--button-danger-border-color,#ee0a24);color:var(--button-danger-color,#fff)}.van-button--warning{background:var(--button-warning-background-color,#ff976a);border:var(--button-border-width,1px) solid var(--button-warning-border-color,#ff976a);color:var(--button-warning-color,#fff)}.van-button--plain{background:var(--button-plain-background-color,#fff)}.van-button--plain.van-button--primary{color:var(--button-primary-background-color,#07c160)}.van-button--plain.van-button--info{color:var(--button-info-background-color,#1989fa)}.van-button--plain.van-button--danger{color:var(--button-danger-background-color,#ee0a24)}.van-button--plain.van-button--warning{color:var(--button-warning-background-color,#ff976a)}.van-button--large{height:var(--button-large-height,50px);width:100%}.van-button--normal{font-size:var(--button-normal-font-size,14px);padding:0 15px}.van-button--small{font-size:var(--button-small-font-size,12px);height:var(--button-small-height,30px);min-width:var(--button-small-min-width,60px);padding:0 var(--padding-xs,8px)}.van-button--mini{display:inline-block;font-size:var(--button-mini-font-size,10px);height:var(--button-mini-height,22px);min-width:var(--button-mini-min-width,50px)}.van-button--mini+.van-button--mini{margin-left:5px}.van-button--block{display:flex;width:100%}.van-button--round{border-radius:var(--button-round-border-radius,999px)}.van-button--square{border-radius:0}.van-button--disabled{opacity:var(--button-disabled-opacity,.5)}.van-button__text{display:inline}.van-button__icon+.van-button__text:not(:empty),.van-button__loading-text{margin-left:4px}.van-button__icon{line-height:inherit!important;min-width:1em;vertical-align:top}.van-button--hairline{border-width:0;padding-top:1px}.van-button--hairline:after{border-color:inherit;border-radius:calc(var(--button-border-radius, 2px)*2);border-width:1px}.van-button--hairline.van-button--round:after{border-radius:var(--button-round-border-radius,999px)}.van-button--hairline.van-button--square:after{border-radius:0}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/calendar/calendar.vue b/wxcomponents/vant/dist/calendar/calendar.vue
new file mode 100644
index 0000000..cd45e25
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/calendar.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ computed.getButtonDisabled(type, currentDate, minRange)
+ ? confirmDisabledText
+ : confirmText
+ }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/calendar/calendar.wxml b/wxcomponents/vant/dist/calendar/calendar.wxml
new file mode 100644
index 0000000..2ba6f30
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/calendar.wxml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/calendar/components/header/index.d.ts b/wxcomponents/vant/dist/calendar/components/header/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/header/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/calendar/components/header/index.js b/wxcomponents/vant/dist/calendar/components/header/index.js
new file mode 100644
index 0000000..8fb3682
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/header/index.js
@@ -0,0 +1,37 @@
+import { VantComponent } from '../../../common/component';
+VantComponent({
+ props: {
+ title: {
+ type: String,
+ value: '日期选择',
+ },
+ subtitle: String,
+ showTitle: Boolean,
+ showSubtitle: Boolean,
+ firstDayOfWeek: {
+ type: Number,
+ observer: 'initWeekDay',
+ },
+ },
+ data: {
+ weekdays: [],
+ },
+ created() {
+ this.initWeekDay();
+ },
+ methods: {
+ initWeekDay() {
+ const defaultWeeks = ['日', '一', '二', '三', '四', '五', '六'];
+ const firstDayOfWeek = this.data.firstDayOfWeek || 0;
+ this.setData({
+ weekdays: [
+ ...defaultWeeks.slice(firstDayOfWeek, 7),
+ ...defaultWeeks.slice(0, firstDayOfWeek),
+ ],
+ });
+ },
+ onClickSubtitle(event) {
+ this.$emit('click-subtitle', event);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/calendar/components/header/index.json b/wxcomponents/vant/dist/calendar/components/header/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/header/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/calendar/components/header/index.vue b/wxcomponents/vant/dist/calendar/components/header/index.vue
new file mode 100644
index 0000000..fd8fd55
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/header/index.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/calendar/components/header/index.wxml b/wxcomponents/vant/dist/calendar/components/header/index.wxml
new file mode 100644
index 0000000..7e56c83
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/header/index.wxml
@@ -0,0 +1,16 @@
+
diff --git a/wxcomponents/vant/dist/calendar/components/header/index.wxss b/wxcomponents/vant/dist/calendar/components/header/index.wxss
new file mode 100644
index 0000000..272537e
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/header/index.wxss
@@ -0,0 +1 @@
+@import '../../../common/index.wxss';.van-calendar__header{box-shadow:var(--calendar-header-box-shadow,0 2px 10px hsla(220,1%,50%,.16));flex-shrink:0}.van-calendar__header-subtitle,.van-calendar__header-title{font-weight:var(--font-weight-bold,500);height:var(--calendar-header-title-height,44px);line-height:var(--calendar-header-title-height,44px);text-align:center}.van-calendar__header-title+.van-calendar__header-title,.van-calendar__header-title:empty{display:none}.van-calendar__header-title:empty+.van-calendar__header-title{display:block!important}.van-calendar__weekdays{display:flex}.van-calendar__weekday{flex:1;font-size:var(--calendar-weekdays-font-size,12px);line-height:var(--calendar-weekdays-height,30px);text-align:center}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/calendar/components/month/index.d.ts b/wxcomponents/vant/dist/calendar/components/month/index.d.ts
new file mode 100644
index 0000000..3ccf85a
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/month/index.d.ts
@@ -0,0 +1,6 @@
+export interface Day {
+ date: Date;
+ type: string;
+ text: number;
+ bottomInfo?: string;
+}
diff --git a/wxcomponents/vant/dist/calendar/components/month/index.js b/wxcomponents/vant/dist/calendar/components/month/index.js
new file mode 100644
index 0000000..d04c0fe
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/month/index.js
@@ -0,0 +1,154 @@
+import { VantComponent } from '../../../common/component';
+import { getMonthEndDay, compareDay, getPrevDay, getNextDay, } from '../../utils';
+VantComponent({
+ props: {
+ date: {
+ type: null,
+ observer: 'setDays',
+ },
+ type: {
+ type: String,
+ observer: 'setDays',
+ },
+ color: String,
+ minDate: {
+ type: null,
+ observer: 'setDays',
+ },
+ maxDate: {
+ type: null,
+ observer: 'setDays',
+ },
+ showMark: Boolean,
+ rowHeight: null,
+ formatter: {
+ type: null,
+ observer: 'setDays',
+ },
+ currentDate: {
+ type: null,
+ observer: 'setDays',
+ },
+ firstDayOfWeek: {
+ type: Number,
+ observer: 'setDays',
+ },
+ allowSameDay: Boolean,
+ showSubtitle: Boolean,
+ showMonthTitle: Boolean,
+ },
+ data: {
+ visible: true,
+ days: [],
+ },
+ methods: {
+ onClick(event) {
+ const { index } = event.currentTarget.dataset;
+ const item = this.data.days[index];
+ if (item.type !== 'disabled') {
+ this.$emit('click', item);
+ }
+ },
+ setDays() {
+ const days = [];
+ const startDate = new Date(this.data.date);
+ const year = startDate.getFullYear();
+ const month = startDate.getMonth();
+ const totalDay = getMonthEndDay(startDate.getFullYear(), startDate.getMonth() + 1);
+ for (let day = 1; day <= totalDay; day++) {
+ const date = new Date(year, month, day);
+ const type = this.getDayType(date);
+ let config = {
+ date,
+ type,
+ text: day,
+ bottomInfo: this.getBottomInfo(type),
+ };
+ if (this.data.formatter) {
+ config = this.data.formatter(config);
+ }
+ days.push(config);
+ }
+ this.setData({ days });
+ },
+ getMultipleDayType(day) {
+ const { currentDate } = this.data;
+ if (!Array.isArray(currentDate)) {
+ return '';
+ }
+ const isSelected = (date) => currentDate.some((item) => compareDay(item, date) === 0);
+ if (isSelected(day)) {
+ const prevDay = getPrevDay(day);
+ const nextDay = getNextDay(day);
+ const prevSelected = isSelected(prevDay);
+ const nextSelected = isSelected(nextDay);
+ if (prevSelected && nextSelected) {
+ return 'multiple-middle';
+ }
+ if (prevSelected) {
+ return 'end';
+ }
+ return nextSelected ? 'start' : 'multiple-selected';
+ }
+ return '';
+ },
+ getRangeDayType(day) {
+ const { currentDate, allowSameDay } = this.data;
+ if (!Array.isArray(currentDate)) {
+ return '';
+ }
+ const [startDay, endDay] = currentDate;
+ if (!startDay) {
+ return '';
+ }
+ const compareToStart = compareDay(day, startDay);
+ if (!endDay) {
+ return compareToStart === 0 ? 'start' : '';
+ }
+ const compareToEnd = compareDay(day, endDay);
+ if (compareToStart === 0 && compareToEnd === 0 && allowSameDay) {
+ return 'start-end';
+ }
+ if (compareToStart === 0) {
+ return 'start';
+ }
+ if (compareToEnd === 0) {
+ return 'end';
+ }
+ if (compareToStart > 0 && compareToEnd < 0) {
+ return 'middle';
+ }
+ return '';
+ },
+ getDayType(day) {
+ const { type, minDate, maxDate, currentDate } = this.data;
+ if (compareDay(day, minDate) < 0 || compareDay(day, maxDate) > 0) {
+ return 'disabled';
+ }
+ if (type === 'single') {
+ return compareDay(day, currentDate) === 0 ? 'selected' : '';
+ }
+ if (type === 'multiple') {
+ return this.getMultipleDayType(day);
+ }
+ /* istanbul ignore else */
+ if (type === 'range') {
+ return this.getRangeDayType(day);
+ }
+ return '';
+ },
+ getBottomInfo(type) {
+ if (this.data.type === 'range') {
+ if (type === 'start') {
+ return '开始';
+ }
+ if (type === 'end') {
+ return '结束';
+ }
+ if (type === 'start-end') {
+ return '开始/结束';
+ }
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/calendar/components/month/index.json b/wxcomponents/vant/dist/calendar/components/month/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/month/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/calendar/components/month/index.vue b/wxcomponents/vant/dist/calendar/components/month/index.vue
new file mode 100644
index 0000000..e94271c
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/month/index.vue
@@ -0,0 +1,194 @@
+
+
+
+ {{ computed.formatMonthTitle(date) }}
+
+
+
+
+ {{ computed.getMark(date) }}
+
+
+
+
+ {{ item.topInfo }}
+ {{ item.text }}
+
+ {{ item.bottomInfo }}
+
+
+
+
+ {{ item.topInfo }}
+ {{ item.text }}
+
+ {{ item.bottomInfo }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/calendar/components/month/index.wxml b/wxcomponents/vant/dist/calendar/components/month/index.wxml
new file mode 100644
index 0000000..0c73b2f
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/month/index.wxml
@@ -0,0 +1,39 @@
+
+
+
+
+
+ {{ computed.formatMonthTitle(date) }}
+
+
+
+
+ {{ computed.getMark(date) }}
+
+
+
+
+ {{ item.topInfo }}
+ {{ item.text }}
+
+ {{ item.bottomInfo }}
+
+
+
+
+ {{ item.topInfo }}
+ {{ item.text }}
+
+ {{ item.bottomInfo }}
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/calendar/components/month/index.wxs b/wxcomponents/vant/dist/calendar/components/month/index.wxs
new file mode 100644
index 0000000..55e45a5
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/month/index.wxs
@@ -0,0 +1,71 @@
+/* eslint-disable */
+var utils = require('../../utils.wxs');
+
+function getMark(date) {
+ return getDate(date).getMonth() + 1;
+}
+
+var ROW_HEIGHT = 64;
+
+function getDayStyle(type, index, date, rowHeight, color, firstDayOfWeek) {
+ var style = [];
+ var current = getDate(date).getDay() || 7;
+ var offset = current < firstDayOfWeek ? (7 - firstDayOfWeek + current) :
+ current === 7 && firstDayOfWeek === 0 ? 0 :
+ (current - firstDayOfWeek);
+
+ if (index === 0) {
+ style.push(['margin-left', (100 * offset) / 7 + '%']);
+ }
+
+ if (rowHeight !== ROW_HEIGHT) {
+ style.push(['height', rowHeight + 'px']);
+ }
+
+ if (color) {
+ if (
+ type === 'start' ||
+ type === 'end' ||
+ type === 'start-end' ||
+ type === 'multiple-selected' ||
+ type === 'multiple-middle'
+ ) {
+ style.push(['background', color]);
+ } else if (type === 'middle') {
+ style.push(['color', color]);
+ }
+ }
+
+ return style
+ .map(function(item) {
+ return item.join(':');
+ })
+ .join(';');
+}
+
+function formatMonthTitle(date) {
+ date = getDate(date);
+ return date.getFullYear() + '年' + (date.getMonth() + 1) + '月';
+}
+
+function getMonthStyle(visible, date, rowHeight) {
+ if (!visible) {
+ date = getDate(date);
+
+ var totalDay = utils.getMonthEndDay(
+ date.getFullYear(),
+ date.getMonth() + 1
+ );
+ var offset = getDate(date).getDay();
+ var padding = Math.ceil((totalDay + offset) / 7) * rowHeight;
+
+ return 'padding-bottom:' + padding + 'px';
+ }
+}
+
+module.exports = {
+ getMark: getMark,
+ getDayStyle: getDayStyle,
+ formatMonthTitle: formatMonthTitle,
+ getMonthStyle: getMonthStyle
+};
diff --git a/wxcomponents/vant/dist/calendar/components/month/index.wxss b/wxcomponents/vant/dist/calendar/components/month/index.wxss
new file mode 100644
index 0000000..9aee73d
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/components/month/index.wxss
@@ -0,0 +1 @@
+@import '../../../common/index.wxss';.van-calendar{background-color:var(--calendar-background-color,#fff);display:flex;flex-direction:column;height:100%}.van-calendar__month-title{font-size:var(--calendar-month-title-font-size,14px);font-weight:var(--font-weight-bold,500);height:var(--calendar-header-title-height,44px);line-height:var(--calendar-header-title-height,44px);text-align:center}.van-calendar__days{display:flex;flex-wrap:wrap;position:relative;-webkit-user-select:none;user-select:none}.van-calendar__month-mark{color:var(--calendar-month-mark-color,rgba(242,243,245,.8));font-size:var(--calendar-month-mark-font-size,160px);left:50%;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:0}.van-calendar__day,.van-calendar__selected-day{align-items:center;display:flex;justify-content:center;text-align:center}.van-calendar__day{font-size:var(--calendar-day-font-size,16px);height:var(--calendar-day-height,64px);position:relative;width:14.285%}.van-calendar__day--end,.van-calendar__day--multiple-middle,.van-calendar__day--multiple-selected,.van-calendar__day--start,.van-calendar__day--start-end{background-color:var(--calendar-range-edge-background-color,#ee0a24);color:var(--calendar-range-edge-color,#fff)}.van-calendar__day--start{border-radius:4px 0 0 4px}.van-calendar__day--end{border-radius:0 4px 4px 0}.van-calendar__day--multiple-selected,.van-calendar__day--start-end{border-radius:4px}.van-calendar__day--middle{color:var(--calendar-range-middle-color,#ee0a24)}.van-calendar__day--middle:after{background-color:currentColor;bottom:0;content:"";left:0;opacity:var(--calendar-range-middle-background-opacity,.1);position:absolute;right:0;top:0}.van-calendar__day--disabled{color:var(--calendar-day-disabled-color,#c8c9cc);cursor:default}.van-calendar__bottom-info,.van-calendar__top-info{font-size:var(--calendar-info-font-size,10px);left:0;line-height:var(--calendar-info-line-height,14px);position:absolute;right:0}@media (max-width:350px){.van-calendar__bottom-info,.van-calendar__top-info{font-size:9px}}.van-calendar__top-info{top:6px}.van-calendar__bottom-info{bottom:6px}.van-calendar__selected-day{background-color:var(--calendar-selected-day-background-color,#ee0a24);border-radius:4px;color:var(--calendar-selected-day-color,#fff);height:var(--calendar-selected-day-size,54px);width:var(--calendar-selected-day-size,54px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/calendar/index.d.ts b/wxcomponents/vant/dist/calendar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/calendar/index.js b/wxcomponents/vant/dist/calendar/index.js
new file mode 100644
index 0000000..0c529ef
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/index.js
@@ -0,0 +1,342 @@
+import { VantComponent } from '../common/component';
+import { ROW_HEIGHT, getPrevDay, getNextDay, getToday, compareDay, copyDates, calcDateNum, formatMonthTitle, compareMonth, getMonths, getDayByOffset, } from './utils';
+import Toast from '../toast/toast';
+import { requestAnimationFrame } from '../common/utils';
+const initialMinDate = getToday().getTime();
+const initialMaxDate = (() => {
+ const now = getToday();
+ return new Date(now.getFullYear(), now.getMonth() + 6, now.getDate()).getTime();
+})();
+const getTime = (date) => date instanceof Date ? date.getTime() : date;
+VantComponent({
+ props: {
+ title: {
+ type: String,
+ value: '日期选择',
+ },
+ color: String,
+ show: {
+ type: Boolean,
+ observer(val) {
+ if (val) {
+ this.initRect();
+ this.scrollIntoView();
+ }
+ },
+ },
+ formatter: null,
+ confirmText: {
+ type: String,
+ value: '确定',
+ },
+ confirmDisabledText: {
+ type: String,
+ value: '确定',
+ },
+ rangePrompt: String,
+ showRangePrompt: {
+ type: Boolean,
+ value: true,
+ },
+ defaultDate: {
+ type: null,
+ observer(val) {
+ this.setData({ currentDate: val });
+ this.scrollIntoView();
+ },
+ },
+ allowSameDay: Boolean,
+ type: {
+ type: String,
+ value: 'single',
+ observer: 'reset',
+ },
+ minDate: {
+ type: Number,
+ value: initialMinDate,
+ },
+ maxDate: {
+ type: Number,
+ value: initialMaxDate,
+ },
+ position: {
+ type: String,
+ value: 'bottom',
+ },
+ rowHeight: {
+ type: null,
+ value: ROW_HEIGHT,
+ },
+ round: {
+ type: Boolean,
+ value: true,
+ },
+ poppable: {
+ type: Boolean,
+ value: true,
+ },
+ showMark: {
+ type: Boolean,
+ value: true,
+ },
+ showTitle: {
+ type: Boolean,
+ value: true,
+ },
+ showConfirm: {
+ type: Boolean,
+ value: true,
+ },
+ showSubtitle: {
+ type: Boolean,
+ value: true,
+ },
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true,
+ },
+ closeOnClickOverlay: {
+ type: Boolean,
+ value: true,
+ },
+ maxRange: {
+ type: null,
+ value: null,
+ },
+ minRange: {
+ type: Number,
+ value: 1,
+ },
+ firstDayOfWeek: {
+ type: Number,
+ value: 0,
+ },
+ readonly: Boolean,
+ },
+ data: {
+ subtitle: '',
+ currentDate: null,
+ scrollIntoView: '',
+ },
+ created() {
+ this.setData({
+ currentDate: this.getInitialDate(this.data.defaultDate),
+ });
+ },
+ mounted() {
+ if (this.data.show || !this.data.poppable) {
+ this.initRect();
+ this.scrollIntoView();
+ }
+ },
+ methods: {
+ reset() {
+ this.setData({ currentDate: this.getInitialDate() });
+ this.scrollIntoView();
+ },
+ initRect() {
+ if (this.contentObserver != null) {
+ this.contentObserver.disconnect();
+ }
+ const contentObserver = this.createIntersectionObserver({
+ thresholds: [0, 0.1, 0.9, 1],
+ observeAll: true,
+ });
+ this.contentObserver = contentObserver;
+ contentObserver.relativeTo('.van-calendar__body');
+ contentObserver.observe('.month', (res) => {
+ if (res.boundingClientRect.top <= res.relativeRect.top) {
+ // @ts-ignore
+ this.setData({ subtitle: formatMonthTitle(res.dataset.date) });
+ }
+ });
+ },
+ limitDateRange(date, minDate = null, maxDate = null) {
+ minDate = minDate || this.data.minDate;
+ maxDate = maxDate || this.data.maxDate;
+ if (compareDay(date, minDate) === -1) {
+ return minDate;
+ }
+ if (compareDay(date, maxDate) === 1) {
+ return maxDate;
+ }
+ return date;
+ },
+ getInitialDate(defaultDate = null) {
+ const { type, minDate, maxDate, allowSameDay } = this.data;
+ const now = getToday().getTime();
+ if (type === 'range') {
+ if (!Array.isArray(defaultDate)) {
+ defaultDate = [];
+ }
+ const [startDay, endDay] = defaultDate || [];
+ const start = this.limitDateRange(startDay || now, minDate, getPrevDay(new Date(maxDate)).getTime());
+ const date = getTime(endDay || now);
+ const end = this.limitDateRange(date, allowSameDay ? date : getNextDay(new Date(minDate)).getTime());
+ return [start, end];
+ }
+ if (type === 'multiple') {
+ if (Array.isArray(defaultDate)) {
+ return defaultDate.map((date) => this.limitDateRange(date));
+ }
+ return [this.limitDateRange(now)];
+ }
+ if (!defaultDate || Array.isArray(defaultDate)) {
+ defaultDate = now;
+ }
+ return this.limitDateRange(defaultDate);
+ },
+ scrollIntoView() {
+ requestAnimationFrame(() => {
+ const { currentDate, type, show, poppable, minDate, maxDate } = this.data;
+ // @ts-ignore
+ const targetDate = type === 'single' ? currentDate : currentDate[0];
+ const displayed = show || !poppable;
+ if (!targetDate || !displayed) {
+ return;
+ }
+ const months = getMonths(minDate, maxDate);
+ months.some((month, index) => {
+ if (compareMonth(month, targetDate) === 0) {
+ this.setData({ scrollIntoView: `month${index}` });
+ return true;
+ }
+ return false;
+ });
+ });
+ },
+ onOpen() {
+ this.$emit('open');
+ },
+ onOpened() {
+ this.$emit('opened');
+ },
+ onClose() {
+ this.$emit('close');
+ },
+ onClosed() {
+ this.$emit('closed');
+ },
+ onClickDay(event) {
+ if (this.data.readonly) {
+ return;
+ }
+ let { date } = event.detail;
+ const { type, currentDate, allowSameDay } = this.data;
+ if (type === 'range') {
+ // @ts-ignore
+ const [startDay, endDay] = currentDate;
+ if (startDay && !endDay) {
+ const compareToStart = compareDay(date, startDay);
+ if (compareToStart === 1) {
+ const { days } = this.selectComponent('.month').data;
+ days.some((day, index) => {
+ const isDisabled = day.type === 'disabled' &&
+ getTime(startDay) < getTime(day.date) &&
+ getTime(day.date) < getTime(date);
+ if (isDisabled) {
+ ({ date } = days[index - 1]);
+ }
+ return isDisabled;
+ });
+ this.select([startDay, date], true);
+ }
+ else if (compareToStart === -1) {
+ this.select([date, null]);
+ }
+ else if (allowSameDay) {
+ this.select([date, date]);
+ }
+ }
+ else {
+ this.select([date, null]);
+ }
+ }
+ else if (type === 'multiple') {
+ let selectedIndex;
+ // @ts-ignore
+ const selected = currentDate.some((dateItem, index) => {
+ const equal = compareDay(dateItem, date) === 0;
+ if (equal) {
+ selectedIndex = index;
+ }
+ return equal;
+ });
+ if (selected) {
+ // @ts-ignore
+ const cancelDate = currentDate.splice(selectedIndex, 1);
+ this.setData({ currentDate });
+ this.unselect(cancelDate);
+ }
+ else {
+ // @ts-ignore
+ this.select([...currentDate, date]);
+ }
+ }
+ else {
+ this.select(date, true);
+ }
+ },
+ unselect(dateArray) {
+ const date = dateArray[0];
+ if (date) {
+ this.$emit('unselect', copyDates(date));
+ }
+ },
+ select(date, complete) {
+ if (complete && this.data.type === 'range') {
+ const valid = this.checkRange(date);
+ if (!valid) {
+ // auto selected to max range if showConfirm
+ if (this.data.showConfirm) {
+ this.emit([
+ date[0],
+ getDayByOffset(date[0], this.data.maxRange - 1),
+ ]);
+ }
+ else {
+ this.emit(date);
+ }
+ return;
+ }
+ }
+ this.emit(date);
+ if (complete && !this.data.showConfirm) {
+ this.onConfirm();
+ }
+ },
+ emit(date) {
+ this.setData({
+ currentDate: Array.isArray(date) ? date.map(getTime) : getTime(date),
+ });
+ this.$emit('select', copyDates(date));
+ },
+ checkRange(date) {
+ const { maxRange, rangePrompt, showRangePrompt } = this.data;
+ if (maxRange && calcDateNum(date) > maxRange) {
+ if (showRangePrompt) {
+ Toast({
+ context: this,
+ message: rangePrompt || `选择天数不能超过 ${maxRange} 天`,
+ });
+ }
+ this.$emit('over-range');
+ return false;
+ }
+ return true;
+ },
+ onConfirm() {
+ if (this.data.type === 'range' &&
+ !this.checkRange(this.data.currentDate)) {
+ return;
+ }
+ wx.nextTick(() => {
+ // @ts-ignore
+ this.$emit('confirm', copyDates(this.data.currentDate));
+ });
+ },
+ onClickSubtitle(event) {
+ this.$emit('click-subtitle', event);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/calendar/index.json b/wxcomponents/vant/dist/calendar/index.json
new file mode 100644
index 0000000..397d5ae
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/index.json
@@ -0,0 +1,10 @@
+{
+ "component": true,
+ "usingComponents": {
+ "header": "./components/header/index",
+ "month": "./components/month/index",
+ "van-button": "../button/index",
+ "van-popup": "../popup/index",
+ "van-toast": "../toast/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/calendar/index.vue b/wxcomponents/vant/dist/calendar/index.vue
new file mode 100644
index 0000000..3a0dc3f
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/index.vue
@@ -0,0 +1,370 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/calendar/index.wxml b/wxcomponents/vant/dist/calendar/index.wxml
new file mode 100644
index 0000000..9667eef
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/index.wxml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/calendar/index.wxs b/wxcomponents/vant/dist/calendar/index.wxs
new file mode 100644
index 0000000..0a56646
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/index.wxs
@@ -0,0 +1,37 @@
+/* eslint-disable */
+var utils = require('./utils.wxs');
+
+function getMonths(minDate, maxDate) {
+ var months = [];
+ var cursor = getDate(minDate);
+
+ cursor.setDate(1);
+
+ do {
+ months.push(cursor.getTime());
+ cursor.setMonth(cursor.getMonth() + 1);
+ } while (utils.compareMonth(cursor, getDate(maxDate)) !== 1);
+
+ return months;
+}
+
+function getButtonDisabled(type, currentDate, minRange) {
+ if (currentDate == null) {
+ return true;
+ }
+
+ if (type === 'range') {
+ return !currentDate[0] || !currentDate[1];
+ }
+
+ if (type === 'multiple') {
+ return currentDate.length < minRange;
+ }
+
+ return !currentDate;
+}
+
+module.exports = {
+ getMonths: getMonths,
+ getButtonDisabled: getButtonDisabled
+};
diff --git a/wxcomponents/vant/dist/calendar/index.wxss b/wxcomponents/vant/dist/calendar/index.wxss
new file mode 100644
index 0000000..05df518
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-calendar{background-color:var(--calendar-background-color,#fff);display:flex;flex-direction:column;height:var(--calendar-height,100%)}.van-calendar__close-icon{top:11px}.van-calendar__popup--bottom,.van-calendar__popup--top{height:var(--calendar-popup-height,80%)}.van-calendar__popup--left,.van-calendar__popup--right{height:100%}.van-calendar__body{-webkit-overflow-scrolling:touch;flex:1;overflow:auto}.van-calendar__footer{flex-shrink:0;padding:0 var(--padding-md,16px)}.van-calendar__footer--safe-area-inset-bottom{padding-bottom:env(safe-area-inset-bottom)}.van-calendar__footer+.van-calendar__footer,.van-calendar__footer:empty{display:none}.van-calendar__footer:empty+.van-calendar__footer{display:block!important}.van-calendar__confirm{height:var(--calendar-confirm-button-height,36px)!important;line-height:var(--calendar-confirm-button-line-height,34px)!important;margin:var(--calendar-confirm-button-margin,7px 0)!important}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/calendar/utils.d.ts b/wxcomponents/vant/dist/calendar/utils.d.ts
new file mode 100644
index 0000000..889e6e7
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/utils.d.ts
@@ -0,0 +1,12 @@
+export declare const ROW_HEIGHT = 64;
+export declare function formatMonthTitle(date: Date): string;
+export declare function compareMonth(date1: Date | number, date2: Date | number): 0 | 1 | -1;
+export declare function compareDay(day1: Date | number, day2: Date | number): 0 | 1 | -1;
+export declare function getDayByOffset(date: Date, offset: number): Date;
+export declare function getPrevDay(date: Date): Date;
+export declare function getNextDay(date: Date): Date;
+export declare function getToday(): Date;
+export declare function calcDateNum(date: [Date, Date]): number;
+export declare function copyDates(dates: Date | Date[]): Date | Date[];
+export declare function getMonthEndDay(year: number, month: number): number;
+export declare function getMonths(minDate: number, maxDate: number): number[];
diff --git a/wxcomponents/vant/dist/calendar/utils.js b/wxcomponents/vant/dist/calendar/utils.js
new file mode 100644
index 0000000..83d6971
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/utils.js
@@ -0,0 +1,83 @@
+export const ROW_HEIGHT = 64;
+export function formatMonthTitle(date) {
+ if (!(date instanceof Date)) {
+ date = new Date(date);
+ }
+ return `${date.getFullYear()}年${date.getMonth() + 1}月`;
+}
+export function compareMonth(date1, date2) {
+ if (!(date1 instanceof Date)) {
+ date1 = new Date(date1);
+ }
+ if (!(date2 instanceof Date)) {
+ date2 = new Date(date2);
+ }
+ const year1 = date1.getFullYear();
+ const year2 = date2.getFullYear();
+ const month1 = date1.getMonth();
+ const month2 = date2.getMonth();
+ if (year1 === year2) {
+ return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
+ }
+ return year1 > year2 ? 1 : -1;
+}
+export function compareDay(day1, day2) {
+ if (!(day1 instanceof Date)) {
+ day1 = new Date(day1);
+ }
+ if (!(day2 instanceof Date)) {
+ day2 = new Date(day2);
+ }
+ const compareMonthResult = compareMonth(day1, day2);
+ if (compareMonthResult === 0) {
+ const date1 = day1.getDate();
+ const date2 = day2.getDate();
+ return date1 === date2 ? 0 : date1 > date2 ? 1 : -1;
+ }
+ return compareMonthResult;
+}
+export function getDayByOffset(date, offset) {
+ date = new Date(date);
+ date.setDate(date.getDate() + offset);
+ return date;
+}
+export function getPrevDay(date) {
+ return getDayByOffset(date, -1);
+}
+export function getNextDay(date) {
+ return getDayByOffset(date, 1);
+}
+export function getToday() {
+ const today = new Date();
+ today.setHours(0, 0, 0, 0);
+ return today;
+}
+export function calcDateNum(date) {
+ const day1 = new Date(date[0]).getTime();
+ const day2 = new Date(date[1]).getTime();
+ return (day2 - day1) / (1000 * 60 * 60 * 24) + 1;
+}
+export function copyDates(dates) {
+ if (Array.isArray(dates)) {
+ return dates.map((date) => {
+ if (date === null) {
+ return date;
+ }
+ return new Date(date);
+ });
+ }
+ return new Date(dates);
+}
+export function getMonthEndDay(year, month) {
+ return 32 - new Date(year, month - 1, 32).getDate();
+}
+export function getMonths(minDate, maxDate) {
+ const months = [];
+ const cursor = new Date(minDate);
+ cursor.setDate(1);
+ do {
+ months.push(cursor.getTime());
+ cursor.setMonth(cursor.getMonth() + 1);
+ } while (compareMonth(cursor, maxDate) !== 1);
+ return months;
+}
diff --git a/wxcomponents/vant/dist/calendar/utils.wxs b/wxcomponents/vant/dist/calendar/utils.wxs
new file mode 100644
index 0000000..e57f6b3
--- /dev/null
+++ b/wxcomponents/vant/dist/calendar/utils.wxs
@@ -0,0 +1,25 @@
+/* eslint-disable */
+function getMonthEndDay(year, month) {
+ return 32 - getDate(year, month - 1, 32).getDate();
+}
+
+function compareMonth(date1, date2) {
+ date1 = getDate(date1);
+ date2 = getDate(date2);
+
+ var year1 = date1.getFullYear();
+ var year2 = date2.getFullYear();
+ var month1 = date1.getMonth();
+ var month2 = date2.getMonth();
+
+ if (year1 === year2) {
+ return month1 === month2 ? 0 : month1 > month2 ? 1 : -1;
+ }
+
+ return year1 > year2 ? 1 : -1;
+}
+
+module.exports = {
+ getMonthEndDay: getMonthEndDay,
+ compareMonth: compareMonth
+};
diff --git a/wxcomponents/vant/dist/card/index.d.ts b/wxcomponents/vant/dist/card/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/card/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/card/index.js b/wxcomponents/vant/dist/card/index.js
new file mode 100644
index 0000000..5bbd212
--- /dev/null
+++ b/wxcomponents/vant/dist/card/index.js
@@ -0,0 +1,49 @@
+import { link } from '../mixins/link';
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: [
+ 'num-class',
+ 'desc-class',
+ 'thumb-class',
+ 'title-class',
+ 'price-class',
+ 'origin-price-class',
+ ],
+ mixins: [link],
+ props: {
+ tag: String,
+ num: String,
+ desc: String,
+ thumb: String,
+ title: String,
+ price: {
+ type: String,
+ observer: 'updatePrice',
+ },
+ centered: Boolean,
+ lazyLoad: Boolean,
+ thumbLink: String,
+ originPrice: String,
+ thumbMode: {
+ type: String,
+ value: 'aspectFit',
+ },
+ currency: {
+ type: String,
+ value: '¥',
+ },
+ },
+ methods: {
+ updatePrice() {
+ const { price } = this.data;
+ const priceArr = price.toString().split('.');
+ this.setData({
+ integerStr: priceArr[0],
+ decimalStr: priceArr[1] ? `.${priceArr[1]}` : '',
+ });
+ },
+ onClickThumb() {
+ this.jumpLink('thumbLink');
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/card/index.json b/wxcomponents/vant/dist/card/index.json
new file mode 100644
index 0000000..e917407
--- /dev/null
+++ b/wxcomponents/vant/dist/card/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-tag": "../tag/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/card/index.vue b/wxcomponents/vant/dist/card/index.vue
new file mode 100644
index 0000000..023767d
--- /dev/null
+++ b/wxcomponents/vant/dist/card/index.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+ {{ tag }}
+
+
+
+
+
+
+ {{ title }}
+
+
+ {{ desc }}
+
+
+
+
+
+
+
+
+ {{ currency }}
+ {{ integerStr }}
+ {{ decimalStr }}
+
+
+ {{ currency }} {{ originPrice }}
+
+ x {{ num }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/card/index.wxml b/wxcomponents/vant/dist/card/index.wxml
new file mode 100644
index 0000000..62173e4
--- /dev/null
+++ b/wxcomponents/vant/dist/card/index.wxml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/card/index.wxss b/wxcomponents/vant/dist/card/index.wxss
new file mode 100644
index 0000000..0f4d7c5
--- /dev/null
+++ b/wxcomponents/vant/dist/card/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-card{background-color:var(--card-background-color,#fafafa);box-sizing:border-box;color:var(--card-text-color,#323233);font-size:var(--card-font-size,12px);padding:var(--card-padding,8px 16px);position:relative}.van-card__header{display:flex}.van-card__header--center{align-items:center;justify-content:center}.van-card__thumb{flex:none;height:var(--card-thumb-size,88px);margin-right:var(--padding-xs,8px);position:relative;width:var(--card-thumb-size,88px)}.van-card__thumb:empty{display:none}.van-card__img{border-radius:8px;height:100%;width:100%}.van-card__content{display:flex;flex:1;flex-direction:column;justify-content:space-between;min-height:var(--card-thumb-size,88px);min-width:0;position:relative}.van-card__content--center{justify-content:center}.van-card__desc,.van-card__title{word-wrap:break-word}.van-card__title{font-weight:700;line-height:var(--card-title-line-height,16px)}.van-card__desc{color:var(--card-desc-color,#646566);line-height:var(--card-desc-line-height,20px)}.van-card__bottom{line-height:20px}.van-card__price{color:var(--card-price-color,#ee0a24);display:inline-block;font-size:var(--card-price-font-size,12px);font-weight:700}.van-card__price-integer{font-size:var(--card-price-integer-font-size,16px)}.van-card__price-decimal,.van-card__price-integer{font-family:var(--card-price-font-family,Avenir-Heavy,PingFang SC,Helvetica Neue,Arial,sans-serif)}.van-card__origin-price{color:var(--card-origin-price-color,#646566);display:inline-block;font-size:var(--card-origin-price-font-size,10px);margin-left:5px;text-decoration:line-through}.van-card__num{float:right}.van-card__tag{left:0;position:absolute!important;top:2px}.van-card__footer{flex:none;text-align:right;width:100%}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/cascader/index.d.ts b/wxcomponents/vant/dist/cascader/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/cascader/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/cascader/index.js b/wxcomponents/vant/dist/cascader/index.js
new file mode 100644
index 0000000..486928a
--- /dev/null
+++ b/wxcomponents/vant/dist/cascader/index.js
@@ -0,0 +1,208 @@
+import { VantComponent } from '../common/component';
+var FieldName;
+(function (FieldName) {
+ FieldName["TEXT"] = "text";
+ FieldName["VALUE"] = "value";
+ FieldName["CHILDREN"] = "children";
+})(FieldName || (FieldName = {}));
+const defaultFieldNames = {
+ text: FieldName.TEXT,
+ value: FieldName.VALUE,
+ children: FieldName.CHILDREN,
+};
+VantComponent({
+ props: {
+ title: String,
+ value: {
+ type: String,
+ observer: 'updateValue',
+ },
+ placeholder: {
+ type: String,
+ value: '请选择',
+ },
+ activeColor: {
+ type: String,
+ value: '#1989fa',
+ },
+ options: {
+ type: Array,
+ value: [],
+ observer: 'updateOptions',
+ },
+ swipeable: {
+ type: Boolean,
+ value: false,
+ },
+ closeable: {
+ type: Boolean,
+ value: true,
+ },
+ showHeader: {
+ type: Boolean,
+ value: true,
+ },
+ closeIcon: {
+ type: String,
+ value: 'cross',
+ },
+ fieldNames: {
+ type: Object,
+ value: defaultFieldNames,
+ observer: 'updateFieldNames',
+ },
+ },
+ data: {
+ tabs: [],
+ activeTab: 0,
+ textKey: FieldName.TEXT,
+ valueKey: FieldName.VALUE,
+ childrenKey: FieldName.CHILDREN,
+ },
+ created() {
+ this.updateTabs();
+ },
+ methods: {
+ updateOptions(val, oldVal) {
+ const isAsync = !!(val.length && oldVal.length);
+ this.updateTabs(isAsync);
+ },
+ updateValue(val) {
+ if (val !== undefined) {
+ const values = this.data.tabs.map((tab) => tab.selected && tab.selected[this.data.valueKey]);
+ if (values.indexOf(val) > -1) {
+ return;
+ }
+ }
+ this.updateTabs();
+ },
+ updateFieldNames() {
+ const { text = 'text', value = 'value', children = 'children', } = this.data.fieldNames || defaultFieldNames;
+ this.setData({
+ textKey: text,
+ valueKey: value,
+ childrenKey: children,
+ });
+ },
+ getSelectedOptionsByValue(options, value) {
+ for (let i = 0; i < options.length; i++) {
+ const option = options[i];
+ if (option[this.data.valueKey] === value) {
+ return [option];
+ }
+ if (option[this.data.childrenKey]) {
+ const selectedOptions = this.getSelectedOptionsByValue(option[this.data.childrenKey], value);
+ if (selectedOptions) {
+ return [option, ...selectedOptions];
+ }
+ }
+ }
+ },
+ updateTabs(isAsync = false) {
+ const { options, value } = this.data;
+ if (value !== undefined) {
+ const selectedOptions = this.getSelectedOptionsByValue(options, value);
+ if (selectedOptions) {
+ let optionsCursor = options;
+ const tabs = selectedOptions.map((option) => {
+ const tab = {
+ options: optionsCursor,
+ selected: option,
+ };
+ const next = optionsCursor.find((item) => item[this.data.valueKey] === option[this.data.valueKey]);
+ if (next) {
+ optionsCursor = next[this.data.childrenKey];
+ }
+ return tab;
+ });
+ if (optionsCursor) {
+ tabs.push({
+ options: optionsCursor,
+ selected: null,
+ });
+ }
+ this.setData({
+ tabs,
+ });
+ wx.nextTick(() => {
+ this.setData({
+ activeTab: tabs.length - 1,
+ });
+ });
+ return;
+ }
+ }
+ // 异步更新
+ if (isAsync) {
+ const { tabs } = this.data;
+ tabs[tabs.length - 1].options =
+ options[options.length - 1][this.data.childrenKey];
+ this.setData({
+ tabs,
+ });
+ return;
+ }
+ this.setData({
+ tabs: [
+ {
+ options,
+ selected: null,
+ },
+ ],
+ });
+ },
+ onClose() {
+ this.$emit('close');
+ },
+ onClickTab(e) {
+ const { index: tabIndex, title } = e.detail;
+ this.$emit('click-tab', { title, tabIndex });
+ this.setData({
+ activeTab: tabIndex,
+ });
+ },
+ // 选中
+ onSelect(e) {
+ const { option, tabIndex } = e.currentTarget.dataset;
+ if (option && option.disabled) {
+ return;
+ }
+ const { valueKey, childrenKey } = this.data;
+ let { tabs } = this.data;
+ tabs[tabIndex].selected = option;
+ if (tabs.length > tabIndex + 1) {
+ tabs = tabs.slice(0, tabIndex + 1);
+ }
+ if (option[childrenKey]) {
+ const nextTab = {
+ options: option[childrenKey],
+ selected: null,
+ };
+ if (tabs[tabIndex + 1]) {
+ tabs[tabIndex + 1] = nextTab;
+ }
+ else {
+ tabs.push(nextTab);
+ }
+ wx.nextTick(() => {
+ this.setData({
+ activeTab: tabIndex + 1,
+ });
+ });
+ }
+ this.setData({
+ tabs,
+ });
+ const selectedOptions = tabs.map((tab) => tab.selected).filter(Boolean);
+ const params = {
+ value: option[valueKey],
+ tabIndex,
+ selectedOptions,
+ };
+ this.$emit('change', params);
+ if (!option[childrenKey]) {
+ this.$emit('finish', params);
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/cascader/index.json b/wxcomponents/vant/dist/cascader/index.json
new file mode 100644
index 0000000..d0f75eb
--- /dev/null
+++ b/wxcomponents/vant/dist/cascader/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-tab": "../tab/index",
+ "van-tabs": "../tabs/index"
+ }
+}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/cascader/index.vue b/wxcomponents/vant/dist/cascader/index.vue
new file mode 100644
index 0000000..6da2550
--- /dev/null
+++ b/wxcomponents/vant/dist/cascader/index.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+
+ {{ option[textKey] }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/cascader/index.wxml b/wxcomponents/vant/dist/cascader/index.wxml
new file mode 100644
index 0000000..b1d724b
--- /dev/null
+++ b/wxcomponents/vant/dist/cascader/index.wxml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ option[textKey] }}
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/cascader/index.wxs b/wxcomponents/vant/dist/cascader/index.wxs
new file mode 100644
index 0000000..cba6465
--- /dev/null
+++ b/wxcomponents/vant/dist/cascader/index.wxs
@@ -0,0 +1,24 @@
+var utils = require('../wxs/utils.wxs');
+var style = require('../wxs/style.wxs');
+
+function isSelected(tab, textKey, option) {
+ return tab.selected && tab.selected[textKey] === option[textKey]
+}
+
+function optionClass(tab, textKey, option) {
+ return utils.bem('cascader__option', { selected: isSelected({ tab, textKey, option }), disabled: option.disabled })
+}
+
+function optionStyle(data) {
+ var color = data.option.color || (isSelected(data.tab, data.textKey, data.option) ? data.activeColor : undefined);
+ return style({
+ color
+ });
+}
+
+
+module.exports = {
+ isSelected: isSelected,
+ optionClass: optionClass,
+ optionStyle: optionStyle,
+};
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/cascader/index.wxss b/wxcomponents/vant/dist/cascader/index.wxss
new file mode 100644
index 0000000..7062486
--- /dev/null
+++ b/wxcomponents/vant/dist/cascader/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-cascader__header{align-items:center;display:flex;height:48px;justify-content:space-between;padding:0 16px}.van-cascader__title{font-size:16px;font-weight:600;line-height:20px}.van-cascader__close-icon{color:#c8c9cc;font-size:22px;height:22px}.van-cascader__tabs-wrap{height:48px!important;padding:0 8px}.van-cascader__tab{color:#323233!important;flex:none!important;font-weight:600!important;padding:0 8px!important}.van-cascader__tab--unselected{color:#969799!important;font-weight:400!important}.van-cascader__option{align-items:center;cursor:pointer;display:flex;font-size:14px;justify-content:space-between;line-height:20px;padding:10px 16px}.van-cascader__option:active{background-color:#f2f3f5}.van-cascader__option--selected{color:#1989fa;font-weight:600}.van-cascader__option--disabled{color:#c8c9cc;cursor:not-allowed}.van-cascader__option--disabled:active{background-color:initial}.van-cascader__options{-webkit-overflow-scrolling:touch;box-sizing:border-box;height:384px;overflow-y:auto;padding-top:6px}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/cell-group/index.d.ts b/wxcomponents/vant/dist/cell-group/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/cell-group/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/cell-group/index.js b/wxcomponents/vant/dist/cell-group/index.js
new file mode 100644
index 0000000..170760f
--- /dev/null
+++ b/wxcomponents/vant/dist/cell-group/index.js
@@ -0,0 +1,11 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ title: String,
+ border: {
+ type: Boolean,
+ value: true,
+ },
+ inset: Boolean,
+ },
+});
diff --git a/wxcomponents/vant/dist/cell-group/index.json b/wxcomponents/vant/dist/cell-group/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/cell-group/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/cell-group/index.vue b/wxcomponents/vant/dist/cell-group/index.vue
new file mode 100644
index 0000000..74e139c
--- /dev/null
+++ b/wxcomponents/vant/dist/cell-group/index.vue
@@ -0,0 +1,28 @@
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/cell-group/index.wxml b/wxcomponents/vant/dist/cell-group/index.wxml
new file mode 100644
index 0000000..311e064
--- /dev/null
+++ b/wxcomponents/vant/dist/cell-group/index.wxml
@@ -0,0 +1,11 @@
+
+
+
+ {{ title }}
+
+
+
+
diff --git a/wxcomponents/vant/dist/cell-group/index.wxss b/wxcomponents/vant/dist/cell-group/index.wxss
new file mode 100644
index 0000000..08b252f
--- /dev/null
+++ b/wxcomponents/vant/dist/cell-group/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-cell-group--inset{border-radius:var(--cell-group-inset-border-radius,8px);margin:var(--cell-group-inset-padding,0 16px);overflow:hidden}.van-cell-group__title{color:var(--cell-group-title-color,#969799);font-size:var(--cell-group-title-font-size,14px);line-height:var(--cell-group-title-line-height,16px);padding:var(--cell-group-title-padding,16px 16px 8px)}.van-cell-group__title--inset{padding:var(--cell-group-inset-title-padding,16px 16px 8px 32px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/cell/index.d.ts b/wxcomponents/vant/dist/cell/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/cell/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/cell/index.js b/wxcomponents/vant/dist/cell/index.js
new file mode 100644
index 0000000..35548b9
--- /dev/null
+++ b/wxcomponents/vant/dist/cell/index.js
@@ -0,0 +1,38 @@
+import { link } from '../mixins/link';
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: [
+ 'title-class',
+ 'label-class',
+ 'value-class',
+ 'right-icon-class',
+ 'hover-class',
+ ],
+ mixins: [link],
+ props: {
+ title: null,
+ value: null,
+ icon: String,
+ size: String,
+ label: String,
+ center: Boolean,
+ isLink: Boolean,
+ required: Boolean,
+ clickable: Boolean,
+ titleWidth: String,
+ customStyle: String,
+ arrowDirection: String,
+ useLabelSlot: Boolean,
+ border: {
+ type: Boolean,
+ value: true,
+ },
+ titleStyle: String,
+ },
+ methods: {
+ onClick(event) {
+ this.$emit('click', event.detail);
+ this.jumpLink();
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/cell/index.json b/wxcomponents/vant/dist/cell/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/wxcomponents/vant/dist/cell/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/cell/index.vue b/wxcomponents/vant/dist/cell/index.vue
new file mode 100644
index 0000000..559527d
--- /dev/null
+++ b/wxcomponents/vant/dist/cell/index.vue
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+ {{ label }}
+
+
+
+
+ {{ value }}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/cell/index.wxml b/wxcomponents/vant/dist/cell/index.wxml
new file mode 100644
index 0000000..8387c3c
--- /dev/null
+++ b/wxcomponents/vant/dist/cell/index.wxml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+ {{ title }}
+
+
+
+
+ {{ label }}
+
+
+
+
+ {{ value }}
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/cell/index.wxs b/wxcomponents/vant/dist/cell/index.wxs
new file mode 100644
index 0000000..e3500c4
--- /dev/null
+++ b/wxcomponents/vant/dist/cell/index.wxs
@@ -0,0 +1,17 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function titleStyle(data) {
+ return style([
+ {
+ 'max-width': addUnit(data.titleWidth),
+ 'min-width': addUnit(data.titleWidth),
+ },
+ data.titleStyle,
+ ]);
+}
+
+module.exports = {
+ titleStyle: titleStyle,
+};
diff --git a/wxcomponents/vant/dist/cell/index.wxss b/wxcomponents/vant/dist/cell/index.wxss
new file mode 100644
index 0000000..1802f8e
--- /dev/null
+++ b/wxcomponents/vant/dist/cell/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-cell{background-color:var(--cell-background-color,#fff);box-sizing:border-box;color:var(--cell-text-color,#323233);display:flex;font-size:var(--cell-font-size,14px);line-height:var(--cell-line-height,24px);padding:var(--cell-vertical-padding,10px) var(--cell-horizontal-padding,16px);position:relative;width:100%}.van-cell:after{border-bottom:1px solid #ebedf0;bottom:0;box-sizing:border-box;content:" ";left:16px;pointer-events:none;position:absolute;right:16px;transform:scaleY(.5);transform-origin:center}.van-cell--borderless:after{display:none}.van-cell-group{background-color:var(--cell-background-color,#fff)}.van-cell__label{color:var(--cell-label-color,#969799);font-size:var(--cell-label-font-size,12px);line-height:var(--cell-label-line-height,18px);margin-top:var(--cell-label-margin-top,3px)}.van-cell__value{color:var(--cell-value-color,#969799);overflow:hidden;text-align:right;vertical-align:middle}.van-cell__title,.van-cell__value{flex:1}.van-cell__title:empty,.van-cell__value:empty{display:none}.van-cell__left-icon-wrap,.van-cell__right-icon-wrap{align-items:center;display:flex;font-size:var(--cell-icon-size,16px);height:var(--cell-line-height,24px)}.van-cell__left-icon-wrap{margin-right:var(--padding-base,4px)}.van-cell__right-icon-wrap{color:var(--cell-right-icon-color,#969799);margin-left:var(--padding-base,4px)}.van-cell__left-icon{vertical-align:middle}.van-cell__left-icon,.van-cell__right-icon{line-height:var(--cell-line-height,24px)}.van-cell--clickable.van-cell--hover{background-color:var(--cell-active-color,#f2f3f5)}.van-cell--required{overflow:visible}.van-cell--required:before{color:var(--cell-required-color,#ee0a24);content:"*";font-size:var(--cell-font-size,14px);left:var(--padding-xs,8px);position:absolute}.van-cell--center{align-items:center}.van-cell--large{padding-bottom:var(--cell-large-vertical-padding,12px);padding-top:var(--cell-large-vertical-padding,12px)}.van-cell--large .van-cell__title{font-size:var(--cell-large-title-font-size,16px)}.van-cell--large .van-cell__value{font-size:var(--cell-large-value-font-size,16px)}.van-cell--large .van-cell__label{font-size:var(--cell-large-label-font-size,14px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/checkbox-group/index.d.ts b/wxcomponents/vant/dist/checkbox-group/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox-group/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/checkbox-group/index.js b/wxcomponents/vant/dist/checkbox-group/index.js
new file mode 100644
index 0000000..c47d97d
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox-group/index.js
@@ -0,0 +1,36 @@
+import { useChildren } from '../common/relation';
+import { VantComponent } from '../common/component';
+VantComponent({
+ field: true,
+ relation: useChildren('checkbox', function (target) {
+ this.updateChild(target);
+ }),
+ props: {
+ max: Number,
+ value: {
+ type: Array,
+ observer: 'updateChildren',
+ },
+ disabled: {
+ type: Boolean,
+ observer: 'updateChildren',
+ },
+ direction: {
+ type: String,
+ value: 'vertical',
+ },
+ },
+ methods: {
+ updateChildren() {
+ this.children.forEach((child) => this.updateChild(child));
+ },
+ updateChild(child) {
+ const { value, disabled, direction } = this.data;
+ child.setData({
+ value: value.indexOf(child.data.name) !== -1,
+ parentDisabled: disabled,
+ direction,
+ });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/checkbox-group/index.json b/wxcomponents/vant/dist/checkbox-group/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox-group/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/checkbox-group/index.vue b/wxcomponents/vant/dist/checkbox-group/index.vue
new file mode 100644
index 0000000..c733e55
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox-group/index.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/checkbox-group/index.wxml b/wxcomponents/vant/dist/checkbox-group/index.wxml
new file mode 100644
index 0000000..638bf9d
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox-group/index.wxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/checkbox-group/index.wxss b/wxcomponents/vant/dist/checkbox-group/index.wxss
new file mode 100644
index 0000000..c5666d7
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox-group/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-checkbox-group--horizontal{display:flex;flex-wrap:wrap}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/checkbox/index.d.ts b/wxcomponents/vant/dist/checkbox/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/checkbox/index.js b/wxcomponents/vant/dist/checkbox/index.js
new file mode 100644
index 0000000..e3b78ab
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox/index.js
@@ -0,0 +1,77 @@
+import { useParent } from '../common/relation';
+import { VantComponent } from '../common/component';
+function emit(target, value) {
+ target.$emit('input', value);
+ target.$emit('change', value);
+}
+VantComponent({
+ field: true,
+ relation: useParent('checkbox-group'),
+ classes: ['icon-class', 'label-class'],
+ props: {
+ value: Boolean,
+ disabled: Boolean,
+ useIconSlot: Boolean,
+ checkedColor: String,
+ labelPosition: {
+ type: String,
+ value: 'right',
+ },
+ labelDisabled: Boolean,
+ shape: {
+ type: String,
+ value: 'round',
+ },
+ iconSize: {
+ type: null,
+ value: 20,
+ },
+ },
+ data: {
+ parentDisabled: false,
+ direction: 'vertical',
+ },
+ methods: {
+ emitChange(value) {
+ if (this.parent) {
+ this.setParentValue(this.parent, value);
+ }
+ else {
+ emit(this, value);
+ }
+ },
+ toggle() {
+ const { parentDisabled, disabled, value } = this.data;
+ if (!disabled && !parentDisabled) {
+ this.emitChange(!value);
+ }
+ },
+ onClickLabel() {
+ const { labelDisabled, parentDisabled, disabled, value } = this.data;
+ if (!disabled && !labelDisabled && !parentDisabled) {
+ this.emitChange(!value);
+ }
+ },
+ setParentValue(parent, value) {
+ const parentValue = parent.data.value.slice();
+ const { name } = this.data;
+ const { max } = parent.data;
+ if (value) {
+ if (max && parentValue.length >= max) {
+ return;
+ }
+ if (parentValue.indexOf(name) === -1) {
+ parentValue.push(name);
+ emit(parent, parentValue);
+ }
+ }
+ else {
+ const index = parentValue.indexOf(name);
+ if (index !== -1) {
+ parentValue.splice(index, 1);
+ emit(parent, parentValue);
+ }
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/checkbox/index.json b/wxcomponents/vant/dist/checkbox/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/checkbox/index.vue b/wxcomponents/vant/dist/checkbox/index.vue
new file mode 100644
index 0000000..4b95088
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox/index.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/checkbox/index.wxml b/wxcomponents/vant/dist/checkbox/index.wxml
new file mode 100644
index 0000000..39a7bb0
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox/index.wxml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/checkbox/index.wxs b/wxcomponents/vant/dist/checkbox/index.wxs
new file mode 100644
index 0000000..eb9c772
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox/index.wxs
@@ -0,0 +1,20 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function iconStyle(checkedColor, value, disabled, parentDisabled, iconSize) {
+ var styles = {
+ 'font-size': addUnit(iconSize),
+ };
+
+ if (checkedColor && value && !disabled && !parentDisabled) {
+ styles['border-color'] = checkedColor;
+ styles['background-color'] = checkedColor;
+ }
+
+ return style(styles);
+}
+
+module.exports = {
+ iconStyle: iconStyle,
+};
diff --git a/wxcomponents/vant/dist/checkbox/index.wxss b/wxcomponents/vant/dist/checkbox/index.wxss
new file mode 100644
index 0000000..da2272a
--- /dev/null
+++ b/wxcomponents/vant/dist/checkbox/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-checkbox{align-items:center;display:flex;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox--horizontal{margin-right:12px}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{flex:none}.van-checkbox__icon{align-items:center;border:1px solid var(--checkbox-border-color,#c8c9cc);box-sizing:border-box;color:transparent;display:flex;font-size:var(--checkbox-size,20px);height:1em;justify-content:center;text-align:center;transition-duration:var(--checkbox-transition-duration,.2s);transition-property:color,border-color,background-color;width:1em}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:var(--checkbox-checked-icon-color,#1989fa);color:#fff}.van-checkbox__icon--disabled{background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;color:var(--checkbox-label-color,#323233);padding-left:var(--checkbox-label-margin,10px)}.van-checkbox__label--left{float:left;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/circle/canvas.d.ts b/wxcomponents/vant/dist/circle/canvas.d.ts
new file mode 100644
index 0000000..8a0b71e
--- /dev/null
+++ b/wxcomponents/vant/dist/circle/canvas.d.ts
@@ -0,0 +1,4 @@
+///
+type CanvasContext = WechatMiniprogram.CanvasContext;
+export declare function adaptor(ctx: CanvasContext & Record): CanvasContext;
+export {};
diff --git a/wxcomponents/vant/dist/circle/canvas.js b/wxcomponents/vant/dist/circle/canvas.js
new file mode 100644
index 0000000..3ade4cd
--- /dev/null
+++ b/wxcomponents/vant/dist/circle/canvas.js
@@ -0,0 +1,43 @@
+export function adaptor(ctx) {
+ // @ts-ignore
+ return Object.assign(ctx, {
+ setStrokeStyle(val) {
+ ctx.strokeStyle = val;
+ },
+ setLineWidth(val) {
+ ctx.lineWidth = val;
+ },
+ setLineCap(val) {
+ ctx.lineCap = val;
+ },
+ setFillStyle(val) {
+ ctx.fillStyle = val;
+ },
+ setFontSize(val) {
+ ctx.font = String(val);
+ },
+ setGlobalAlpha(val) {
+ ctx.globalAlpha = val;
+ },
+ setLineJoin(val) {
+ ctx.lineJoin = val;
+ },
+ setTextAlign(val) {
+ ctx.textAlign = val;
+ },
+ setMiterLimit(val) {
+ ctx.miterLimit = val;
+ },
+ setShadow(offsetX, offsetY, blur, color) {
+ ctx.shadowOffsetX = offsetX;
+ ctx.shadowOffsetY = offsetY;
+ ctx.shadowBlur = blur;
+ ctx.shadowColor = color;
+ },
+ setTextBaseline(val) {
+ ctx.textBaseline = val;
+ },
+ createCircularGradient() { },
+ draw() { },
+ });
+}
diff --git a/wxcomponents/vant/dist/circle/index.d.ts b/wxcomponents/vant/dist/circle/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/circle/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/circle/index.js b/wxcomponents/vant/dist/circle/index.js
new file mode 100644
index 0000000..2a4baf5
--- /dev/null
+++ b/wxcomponents/vant/dist/circle/index.js
@@ -0,0 +1,193 @@
+import { BLUE, WHITE } from '../common/color';
+import { VantComponent } from '../common/component';
+import { getSystemInfoSync } from '../common/utils';
+import { isObj } from '../common/validator';
+import { canIUseCanvas2d } from '../common/version';
+import { adaptor } from './canvas';
+function format(rate) {
+ return Math.min(Math.max(rate, 0), 100);
+}
+const PERIMETER = 2 * Math.PI;
+const BEGIN_ANGLE = -Math.PI / 2;
+const STEP = 1;
+VantComponent({
+ props: {
+ text: String,
+ lineCap: {
+ type: String,
+ value: 'round',
+ },
+ value: {
+ type: Number,
+ value: 0,
+ observer: 'reRender',
+ },
+ speed: {
+ type: Number,
+ value: 50,
+ },
+ size: {
+ type: Number,
+ value: 100,
+ observer() {
+ this.drawCircle(this.currentValue);
+ },
+ },
+ fill: String,
+ layerColor: {
+ type: String,
+ value: WHITE,
+ },
+ color: {
+ type: null,
+ value: BLUE,
+ observer() {
+ this.setHoverColor().then(() => {
+ this.drawCircle(this.currentValue);
+ });
+ },
+ },
+ type: {
+ type: String,
+ value: '',
+ },
+ strokeWidth: {
+ type: Number,
+ value: 4,
+ },
+ clockwise: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ data: {
+ hoverColor: BLUE,
+ },
+ methods: {
+ getContext() {
+ const { type, size } = this.data;
+ if (type === '' || !canIUseCanvas2d()) {
+ const ctx = wx.createCanvasContext('van-circle', this);
+ return Promise.resolve(ctx);
+ }
+ const dpr = getSystemInfoSync().pixelRatio;
+ return new Promise((resolve) => {
+ wx.createSelectorQuery()
+ .in(this)
+ .select('#van-circle')
+ .node()
+ .exec((res) => {
+ const canvas = res[0].node;
+ const ctx = canvas.getContext(type);
+ if (!this.inited) {
+ this.inited = true;
+ canvas.width = size * dpr;
+ canvas.height = size * dpr;
+ ctx.scale(dpr, dpr);
+ }
+ resolve(adaptor(ctx));
+ });
+ });
+ },
+ setHoverColor() {
+ const { color, size } = this.data;
+ if (isObj(color)) {
+ return this.getContext().then((context) => {
+ const LinearColor = context.createLinearGradient(size, 0, 0, 0);
+ Object.keys(color)
+ .sort((a, b) => parseFloat(a) - parseFloat(b))
+ .map((key) => LinearColor.addColorStop(parseFloat(key) / 100, color[key]));
+ this.hoverColor = LinearColor;
+ });
+ }
+ this.hoverColor = color;
+ return Promise.resolve();
+ },
+ presetCanvas(context, strokeStyle, beginAngle, endAngle, fill) {
+ const { strokeWidth, lineCap, clockwise, size } = this.data;
+ const position = size / 2;
+ const radius = position - strokeWidth / 2;
+ context.setStrokeStyle(strokeStyle);
+ context.setLineWidth(strokeWidth);
+ context.setLineCap(lineCap);
+ context.beginPath();
+ context.arc(position, position, radius, beginAngle, endAngle, !clockwise);
+ context.stroke();
+ if (fill) {
+ context.setFillStyle(fill);
+ context.fill();
+ }
+ },
+ renderLayerCircle(context) {
+ const { layerColor, fill } = this.data;
+ this.presetCanvas(context, layerColor, 0, PERIMETER, fill);
+ },
+ renderHoverCircle(context, formatValue) {
+ const { clockwise } = this.data;
+ // 结束角度
+ const progress = PERIMETER * (formatValue / 100);
+ const endAngle = clockwise
+ ? BEGIN_ANGLE + progress
+ : 3 * Math.PI - (BEGIN_ANGLE + progress);
+ this.presetCanvas(context, this.hoverColor, BEGIN_ANGLE, endAngle);
+ },
+ drawCircle(currentValue) {
+ const { size } = this.data;
+ this.getContext().then((context) => {
+ context.clearRect(0, 0, size, size);
+ this.renderLayerCircle(context);
+ const formatValue = format(currentValue);
+ if (formatValue !== 0) {
+ this.renderHoverCircle(context, formatValue);
+ }
+ context.draw();
+ });
+ },
+ reRender() {
+ // tofector 动画暂时没有想到好的解决方案
+ const { value, speed } = this.data;
+ if (speed <= 0 || speed > 1000) {
+ this.drawCircle(value);
+ return;
+ }
+ this.clearMockInterval();
+ this.currentValue = this.currentValue || 0;
+ const run = () => {
+ this.interval = setTimeout(() => {
+ if (this.currentValue !== value) {
+ if (Math.abs(this.currentValue - value) < STEP) {
+ this.currentValue = value;
+ }
+ else if (this.currentValue < value) {
+ this.currentValue += STEP;
+ }
+ else {
+ this.currentValue -= STEP;
+ }
+ this.drawCircle(this.currentValue);
+ run();
+ }
+ else {
+ this.clearMockInterval();
+ }
+ }, 1000 / speed);
+ };
+ run();
+ },
+ clearMockInterval() {
+ if (this.interval) {
+ clearTimeout(this.interval);
+ this.interval = null;
+ }
+ },
+ },
+ mounted() {
+ this.currentValue = this.data.value;
+ this.setHoverColor().then(() => {
+ this.drawCircle(this.currentValue);
+ });
+ },
+ destroyed() {
+ this.clearMockInterval();
+ },
+});
diff --git a/wxcomponents/vant/dist/circle/index.json b/wxcomponents/vant/dist/circle/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/circle/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/circle/index.vue b/wxcomponents/vant/dist/circle/index.vue
new file mode 100644
index 0000000..39e1173
--- /dev/null
+++ b/wxcomponents/vant/dist/circle/index.vue
@@ -0,0 +1,211 @@
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/circle/index.wxml b/wxcomponents/vant/dist/circle/index.wxml
new file mode 100644
index 0000000..52bc59f
--- /dev/null
+++ b/wxcomponents/vant/dist/circle/index.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+ {{ text }}
+
diff --git a/wxcomponents/vant/dist/circle/index.wxss b/wxcomponents/vant/dist/circle/index.wxss
new file mode 100644
index 0000000..2200751
--- /dev/null
+++ b/wxcomponents/vant/dist/circle/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-circle{display:inline-block;position:relative;text-align:center}.van-circle__text{color:var(--circle-text-color,#323233);left:0;position:absolute;top:50%;transform:translateY(-50%);width:100%}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/col/index.d.ts b/wxcomponents/vant/dist/col/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/col/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/col/index.js b/wxcomponents/vant/dist/col/index.js
new file mode 100644
index 0000000..02bb78d
--- /dev/null
+++ b/wxcomponents/vant/dist/col/index.js
@@ -0,0 +1,9 @@
+import { useParent } from '../common/relation';
+import { VantComponent } from '../common/component';
+VantComponent({
+ relation: useParent('row'),
+ props: {
+ span: Number,
+ offset: Number,
+ },
+});
diff --git a/wxcomponents/vant/dist/col/index.json b/wxcomponents/vant/dist/col/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/col/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/col/index.vue b/wxcomponents/vant/dist/col/index.vue
new file mode 100644
index 0000000..f766d6e
--- /dev/null
+++ b/wxcomponents/vant/dist/col/index.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/col/index.wxml b/wxcomponents/vant/dist/col/index.wxml
new file mode 100644
index 0000000..975348b
--- /dev/null
+++ b/wxcomponents/vant/dist/col/index.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/col/index.wxs b/wxcomponents/vant/dist/col/index.wxs
new file mode 100644
index 0000000..507c1cb
--- /dev/null
+++ b/wxcomponents/vant/dist/col/index.wxs
@@ -0,0 +1,18 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function rootStyle(data) {
+ if (!data.gutter) {
+ return '';
+ }
+
+ return style({
+ 'padding-right': addUnit(data.gutter / 2),
+ 'padding-left': addUnit(data.gutter / 2),
+ });
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+};
diff --git a/wxcomponents/vant/dist/col/index.wxss b/wxcomponents/vant/dist/col/index.wxss
new file mode 100644
index 0000000..2fa265e
--- /dev/null
+++ b/wxcomponents/vant/dist/col/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-col{box-sizing:border-box;float:left}.van-col--1{width:4.16666667%}.van-col--offset-1{margin-left:4.16666667%}.van-col--2{width:8.33333333%}.van-col--offset-2{margin-left:8.33333333%}.van-col--3{width:12.5%}.van-col--offset-3{margin-left:12.5%}.van-col--4{width:16.66666667%}.van-col--offset-4{margin-left:16.66666667%}.van-col--5{width:20.83333333%}.van-col--offset-5{margin-left:20.83333333%}.van-col--6{width:25%}.van-col--offset-6{margin-left:25%}.van-col--7{width:29.16666667%}.van-col--offset-7{margin-left:29.16666667%}.van-col--8{width:33.33333333%}.van-col--offset-8{margin-left:33.33333333%}.van-col--9{width:37.5%}.van-col--offset-9{margin-left:37.5%}.van-col--10{width:41.66666667%}.van-col--offset-10{margin-left:41.66666667%}.van-col--11{width:45.83333333%}.van-col--offset-11{margin-left:45.83333333%}.van-col--12{width:50%}.van-col--offset-12{margin-left:50%}.van-col--13{width:54.16666667%}.van-col--offset-13{margin-left:54.16666667%}.van-col--14{width:58.33333333%}.van-col--offset-14{margin-left:58.33333333%}.van-col--15{width:62.5%}.van-col--offset-15{margin-left:62.5%}.van-col--16{width:66.66666667%}.van-col--offset-16{margin-left:66.66666667%}.van-col--17{width:70.83333333%}.van-col--offset-17{margin-left:70.83333333%}.van-col--18{width:75%}.van-col--offset-18{margin-left:75%}.van-col--19{width:79.16666667%}.van-col--offset-19{margin-left:79.16666667%}.van-col--20{width:83.33333333%}.van-col--offset-20{margin-left:83.33333333%}.van-col--21{width:87.5%}.van-col--offset-21{margin-left:87.5%}.van-col--22{width:91.66666667%}.van-col--offset-22{margin-left:91.66666667%}.van-col--23{width:95.83333333%}.van-col--offset-23{margin-left:95.83333333%}.van-col--24{width:100%}.van-col--offset-24{margin-left:100%}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/collapse-item/animate.d.ts b/wxcomponents/vant/dist/collapse-item/animate.d.ts
new file mode 100644
index 0000000..32157b6
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse-item/animate.d.ts
@@ -0,0 +1,2 @@
+///
+export declare function setContentAnimate(context: WechatMiniprogram.Component.TrivialInstance, expanded: boolean, mounted: boolean): void;
diff --git a/wxcomponents/vant/dist/collapse-item/animate.js b/wxcomponents/vant/dist/collapse-item/animate.js
new file mode 100644
index 0000000..f966ac5
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse-item/animate.js
@@ -0,0 +1,39 @@
+import { getRect } from '../common/utils';
+function useAnimation(context, expanded, mounted, height) {
+ const animation = wx.createAnimation({
+ duration: 0,
+ timingFunction: 'ease-in-out',
+ });
+ if (expanded) {
+ if (height === 0) {
+ animation.height('auto').top(1).step();
+ }
+ else {
+ animation
+ .height(height)
+ .top(1)
+ .step({
+ duration: mounted ? 300 : 1,
+ })
+ .height('auto')
+ .step();
+ }
+ context.setData({
+ animation: animation.export(),
+ });
+ return;
+ }
+ animation.height(height).top(0).step({ duration: 1 }).height(0).step({
+ duration: 300,
+ });
+ context.setData({
+ animation: animation.export(),
+ });
+}
+export function setContentAnimate(context, expanded, mounted) {
+ getRect(context, '.van-collapse-item__content')
+ .then((rect) => rect.height)
+ .then((height) => {
+ useAnimation(context, expanded, mounted, height);
+ });
+}
diff --git a/wxcomponents/vant/dist/collapse-item/index.d.ts b/wxcomponents/vant/dist/collapse-item/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse-item/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/collapse-item/index.js b/wxcomponents/vant/dist/collapse-item/index.js
new file mode 100644
index 0000000..5bac368
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse-item/index.js
@@ -0,0 +1,60 @@
+import { VantComponent } from '../common/component';
+import { useParent } from '../common/relation';
+import { setContentAnimate } from './animate';
+VantComponent({
+ classes: ['title-class', 'content-class'],
+ relation: useParent('collapse'),
+ props: {
+ size: String,
+ name: null,
+ title: null,
+ value: null,
+ icon: String,
+ label: String,
+ disabled: Boolean,
+ clickable: Boolean,
+ border: {
+ type: Boolean,
+ value: true,
+ },
+ isLink: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ data: {
+ expanded: false,
+ },
+ mounted() {
+ this.updateExpanded();
+ this.mounted = true;
+ },
+ methods: {
+ updateExpanded() {
+ if (!this.parent) {
+ return;
+ }
+ const { value, accordion } = this.parent.data;
+ const { children = [] } = this.parent;
+ const { name } = this.data;
+ const index = children.indexOf(this);
+ const currentName = name == null ? index : name;
+ const expanded = accordion
+ ? value === currentName
+ : (value || []).some((name) => name === currentName);
+ if (expanded !== this.data.expanded) {
+ setContentAnimate(this, expanded, this.mounted);
+ }
+ this.setData({ index, expanded });
+ },
+ onClick() {
+ if (this.data.disabled) {
+ return;
+ }
+ const { name, expanded } = this.data;
+ const index = this.parent.children.indexOf(this);
+ const currentName = name == null ? index : name;
+ this.parent.switch(currentName, !expanded);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/collapse-item/index.json b/wxcomponents/vant/dist/collapse-item/index.json
new file mode 100644
index 0000000..0e5425c
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse-item/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-cell": "../cell/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/collapse-item/index.vue b/wxcomponents/vant/dist/collapse-item/index.vue
new file mode 100644
index 0000000..074d53d
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse-item/index.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/collapse-item/index.wxml b/wxcomponents/vant/dist/collapse-item/index.wxml
new file mode 100644
index 0000000..f11d0d4
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse-item/index.wxml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/collapse-item/index.wxss b/wxcomponents/vant/dist/collapse-item/index.wxss
new file mode 100644
index 0000000..4a65b5a
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse-item/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-collapse-item__title .van-cell__right-icon{transform:rotate(90deg);transition:transform var(--collapse-item-transition-duration,.3s)}.van-collapse-item__title--expanded .van-cell__right-icon{transform:rotate(-90deg)}.van-collapse-item__title--disabled .van-cell,.van-collapse-item__title--disabled .van-cell__right-icon{color:var(--collapse-item-title-disabled-color,#c8c9cc)!important}.van-collapse-item__title--disabled .van-cell--hover{background-color:#fff!important}.van-collapse-item__wrapper{overflow:hidden}.van-collapse-item__content{background-color:var(--collapse-item-content-background-color,#fff);color:var(--collapse-item-content-text-color,#969799);font-size:var(--collapse-item-content-font-size,13px);line-height:var(--collapse-item-content-line-height,1.5);padding:var(--collapse-item-content-padding,15px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/collapse/index.d.ts b/wxcomponents/vant/dist/collapse/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/collapse/index.js b/wxcomponents/vant/dist/collapse/index.js
new file mode 100644
index 0000000..3616087
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse/index.js
@@ -0,0 +1,46 @@
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+ relation: useChildren('collapse-item'),
+ props: {
+ value: {
+ type: null,
+ observer: 'updateExpanded',
+ },
+ accordion: {
+ type: Boolean,
+ observer: 'updateExpanded',
+ },
+ border: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ methods: {
+ updateExpanded() {
+ this.children.forEach((child) => {
+ child.updateExpanded();
+ });
+ },
+ switch(name, expanded) {
+ const { accordion, value } = this.data;
+ const changeItem = name;
+ if (!accordion) {
+ name = expanded
+ ? (value || []).concat(name)
+ : (value || []).filter((activeName) => activeName !== name);
+ }
+ else {
+ name = expanded ? name : '';
+ }
+ if (expanded) {
+ this.$emit('open', changeItem);
+ }
+ else {
+ this.$emit('close', changeItem);
+ }
+ this.$emit('change', name);
+ this.$emit('input', name);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/collapse/index.json b/wxcomponents/vant/dist/collapse/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/collapse/index.vue b/wxcomponents/vant/dist/collapse/index.vue
new file mode 100644
index 0000000..446cae8
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse/index.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/collapse/index.wxml b/wxcomponents/vant/dist/collapse/index.wxml
new file mode 100644
index 0000000..fd4e171
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse/index.wxml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/wxcomponents/vant/dist/collapse/index.wxss b/wxcomponents/vant/dist/collapse/index.wxss
new file mode 100644
index 0000000..99694d6
--- /dev/null
+++ b/wxcomponents/vant/dist/collapse/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/common/color.d.ts b/wxcomponents/vant/dist/common/color.d.ts
new file mode 100644
index 0000000..386f307
--- /dev/null
+++ b/wxcomponents/vant/dist/common/color.d.ts
@@ -0,0 +1,7 @@
+export declare const RED = "#ee0a24";
+export declare const BLUE = "#1989fa";
+export declare const WHITE = "#fff";
+export declare const GREEN = "#07c160";
+export declare const ORANGE = "#ff976a";
+export declare const GRAY = "#323233";
+export declare const GRAY_DARK = "#969799";
diff --git a/wxcomponents/vant/dist/common/color.js b/wxcomponents/vant/dist/common/color.js
new file mode 100644
index 0000000..6b285bd
--- /dev/null
+++ b/wxcomponents/vant/dist/common/color.js
@@ -0,0 +1,7 @@
+export const RED = '#ee0a24';
+export const BLUE = '#1989fa';
+export const WHITE = '#fff';
+export const GREEN = '#07c160';
+export const ORANGE = '#ff976a';
+export const GRAY = '#323233';
+export const GRAY_DARK = '#969799';
diff --git a/wxcomponents/vant/dist/common/component.d.ts b/wxcomponents/vant/dist/common/component.d.ts
new file mode 100644
index 0000000..1d0fd27
--- /dev/null
+++ b/wxcomponents/vant/dist/common/component.d.ts
@@ -0,0 +1,4 @@
+///
+import { VantComponentOptions } from 'definitions/index';
+declare function VantComponent(vantOptions: VantComponentOptions): void;
+export { VantComponent };
diff --git a/wxcomponents/vant/dist/common/component.js b/wxcomponents/vant/dist/common/component.js
new file mode 100644
index 0000000..938d96b
--- /dev/null
+++ b/wxcomponents/vant/dist/common/component.js
@@ -0,0 +1,46 @@
+import { basic } from '../mixins/basic';
+function mapKeys(source, target, map) {
+ Object.keys(map).forEach((key) => {
+ if (source[key]) {
+ target[map[key]] = source[key];
+ }
+ });
+}
+function VantComponent(vantOptions) {
+ const options = {};
+ mapKeys(vantOptions, options, {
+ data: 'data',
+ props: 'properties',
+ watch: 'observers',
+ mixins: 'behaviors',
+ methods: 'methods',
+ beforeCreate: 'created',
+ created: 'attached',
+ mounted: 'ready',
+ destroyed: 'detached',
+ classes: 'externalClasses',
+ });
+ // add default externalClasses
+ options.externalClasses = options.externalClasses || [];
+ options.externalClasses.push('custom-class');
+ // add default behaviors
+ options.behaviors = options.behaviors || [];
+ options.behaviors.push(basic);
+ // add relations
+ const { relation } = vantOptions;
+ if (relation) {
+ options.relations = relation.relations;
+ options.behaviors.push(relation.mixin);
+ }
+ // map field to form-field behavior
+ if (vantOptions.field) {
+ options.behaviors.push('wx://form-field');
+ }
+ // add default options
+ options.options = {
+ multipleSlots: true,
+ addGlobalClass: true,
+ };
+ Component(options);
+}
+export { VantComponent };
diff --git a/wxcomponents/vant/dist/common/index.css b/wxcomponents/vant/dist/common/index.css
new file mode 100644
index 0000000..a73bb7a
--- /dev/null
+++ b/wxcomponents/vant/dist/common/index.css
@@ -0,0 +1 @@
+.van-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{clear:both;content:"";display:table}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{border:0 solid #ebedf0;bottom:-50%;box-sizing:border-box;content:" ";left:-50%;pointer-events:none;position:absolute;right:-50%;top:-50%;transform:scale(.5);transform-origin:center}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/common/index.wxss b/wxcomponents/vant/dist/common/index.wxss
new file mode 100644
index 0000000..a73bb7a
--- /dev/null
+++ b/wxcomponents/vant/dist/common/index.wxss
@@ -0,0 +1 @@
+.van-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{clear:both;content:"";display:table}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{border:0 solid #ebedf0;bottom:-50%;box-sizing:border-box;content:" ";left:-50%;pointer-events:none;position:absolute;right:-50%;top:-50%;transform:scale(.5);transform-origin:center}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/common/relation.d.ts b/wxcomponents/vant/dist/common/relation.d.ts
new file mode 100644
index 0000000..10193fa
--- /dev/null
+++ b/wxcomponents/vant/dist/common/relation.d.ts
@@ -0,0 +1,15 @@
+///
+type TrivialInstance = WechatMiniprogram.Component.TrivialInstance;
+export declare function useParent(name: string, onEffect?: (this: TrivialInstance) => void): {
+ relations: {
+ [x: string]: WechatMiniprogram.Component.RelationOption;
+ };
+ mixin: string;
+};
+export declare function useChildren(name: string, onEffect?: (this: TrivialInstance, target: TrivialInstance) => void): {
+ relations: {
+ [x: string]: WechatMiniprogram.Component.RelationOption;
+ };
+ mixin: string;
+};
+export {};
diff --git a/wxcomponents/vant/dist/common/relation.js b/wxcomponents/vant/dist/common/relation.js
new file mode 100644
index 0000000..04e2934
--- /dev/null
+++ b/wxcomponents/vant/dist/common/relation.js
@@ -0,0 +1,56 @@
+export function useParent(name, onEffect) {
+ const path = `../${name}/index`;
+ return {
+ relations: {
+ [path]: {
+ type: 'ancestor',
+ linked() {
+ onEffect && onEffect.call(this);
+ },
+ linkChanged() {
+ onEffect && onEffect.call(this);
+ },
+ unlinked() {
+ onEffect && onEffect.call(this);
+ },
+ },
+ },
+ mixin: Behavior({
+ created() {
+ Object.defineProperty(this, 'parent', {
+ get: () => this.getRelationNodes(path)[0],
+ });
+ Object.defineProperty(this, 'index', {
+ // @ts-ignore
+ get: () => { var _a, _b; return (_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.indexOf(this); },
+ });
+ },
+ }),
+ };
+}
+export function useChildren(name, onEffect) {
+ const path = `../${name}/index`;
+ return {
+ relations: {
+ [path]: {
+ type: 'descendant',
+ linked(target) {
+ onEffect && onEffect.call(this, target);
+ },
+ linkChanged(target) {
+ onEffect && onEffect.call(this, target);
+ },
+ unlinked(target) {
+ onEffect && onEffect.call(this, target);
+ },
+ },
+ },
+ mixin: Behavior({
+ created() {
+ Object.defineProperty(this, 'children', {
+ get: () => this.getRelationNodes(path) || [],
+ });
+ },
+ }),
+ };
+}
diff --git a/wxcomponents/vant/dist/common/style/clearfix.css b/wxcomponents/vant/dist/common/style/clearfix.css
new file mode 100644
index 0000000..442246f
--- /dev/null
+++ b/wxcomponents/vant/dist/common/style/clearfix.css
@@ -0,0 +1 @@
+.van-clearfix:after{clear:both;content:"";display:table}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/common/style/clearfix.wxss b/wxcomponents/vant/dist/common/style/clearfix.wxss
new file mode 100644
index 0000000..442246f
--- /dev/null
+++ b/wxcomponents/vant/dist/common/style/clearfix.wxss
@@ -0,0 +1 @@
+.van-clearfix:after{clear:both;content:"";display:table}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/common/style/ellipsis.css b/wxcomponents/vant/dist/common/style/ellipsis.css
new file mode 100644
index 0000000..ee701df
--- /dev/null
+++ b/wxcomponents/vant/dist/common/style/ellipsis.css
@@ -0,0 +1 @@
+.van-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.van-multi-ellipsis--l3{-webkit-line-clamp:3}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/common/style/ellipsis.wxss b/wxcomponents/vant/dist/common/style/ellipsis.wxss
new file mode 100644
index 0000000..ee701df
--- /dev/null
+++ b/wxcomponents/vant/dist/common/style/ellipsis.wxss
@@ -0,0 +1 @@
+.van-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.van-multi-ellipsis--l3{-webkit-line-clamp:3}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/common/style/hairline.css b/wxcomponents/vant/dist/common/style/hairline.css
new file mode 100644
index 0000000..f7c6260
--- /dev/null
+++ b/wxcomponents/vant/dist/common/style/hairline.css
@@ -0,0 +1 @@
+.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{border:0 solid #ebedf0;bottom:-50%;box-sizing:border-box;content:" ";left:-50%;pointer-events:none;position:absolute;right:-50%;top:-50%;transform:scale(.5);transform-origin:center}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/common/style/hairline.wxss b/wxcomponents/vant/dist/common/style/hairline.wxss
new file mode 100644
index 0000000..f7c6260
--- /dev/null
+++ b/wxcomponents/vant/dist/common/style/hairline.wxss
@@ -0,0 +1 @@
+.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{border:0 solid #ebedf0;bottom:-50%;box-sizing:border-box;content:" ";left:-50%;pointer-events:none;position:absolute;right:-50%;top:-50%;transform:scale(.5);transform-origin:center}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/common/style/mixins/clearfix.css b/wxcomponents/vant/dist/common/style/mixins/clearfix.css
new file mode 100644
index 0000000..e69de29
diff --git a/wxcomponents/vant/dist/common/style/mixins/clearfix.wxss b/wxcomponents/vant/dist/common/style/mixins/clearfix.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/wxcomponents/vant/dist/common/style/mixins/ellipsis.css b/wxcomponents/vant/dist/common/style/mixins/ellipsis.css
new file mode 100644
index 0000000..e69de29
diff --git a/wxcomponents/vant/dist/common/style/mixins/ellipsis.wxss b/wxcomponents/vant/dist/common/style/mixins/ellipsis.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/wxcomponents/vant/dist/common/style/mixins/hairline.css b/wxcomponents/vant/dist/common/style/mixins/hairline.css
new file mode 100644
index 0000000..e69de29
diff --git a/wxcomponents/vant/dist/common/style/mixins/hairline.wxss b/wxcomponents/vant/dist/common/style/mixins/hairline.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/wxcomponents/vant/dist/common/style/var.css b/wxcomponents/vant/dist/common/style/var.css
new file mode 100644
index 0000000..e69de29
diff --git a/wxcomponents/vant/dist/common/style/var.wxss b/wxcomponents/vant/dist/common/style/var.wxss
new file mode 100644
index 0000000..e69de29
diff --git a/wxcomponents/vant/dist/common/utils.d.ts b/wxcomponents/vant/dist/common/utils.d.ts
new file mode 100644
index 0000000..719f2ed
--- /dev/null
+++ b/wxcomponents/vant/dist/common/utils.d.ts
@@ -0,0 +1,17 @@
+///
+///
+///
+///
+///
+export { isDef } from './validator';
+export { getSystemInfoSync } from './version';
+export declare function range(num: number, min: number, max: number): number;
+export declare function nextTick(cb: (...args: any[]) => void): void;
+export declare function addUnit(value?: string | number): string | undefined;
+export declare function requestAnimationFrame(cb: () => void): NodeJS.Timeout;
+export declare function pickExclude(obj: unknown, keys: string[]): {};
+export declare function getRect(context: WechatMiniprogram.Component.TrivialInstance, selector: string): Promise;
+export declare function getAllRect(context: WechatMiniprogram.Component.TrivialInstance, selector: string): Promise;
+export declare function groupSetData(context: WechatMiniprogram.Component.TrivialInstance, cb: () => void): void;
+export declare function toPromise(promiseLike: Promise | unknown): Promise;
+export declare function getCurrentPage(): T & WechatMiniprogram.OptionalInterface & WechatMiniprogram.Page.InstanceProperties & WechatMiniprogram.Page.InstanceMethods & WechatMiniprogram.Page.Data & WechatMiniprogram.IAnyObject;
diff --git a/wxcomponents/vant/dist/common/utils.js b/wxcomponents/vant/dist/common/utils.js
new file mode 100644
index 0000000..f81f5f4
--- /dev/null
+++ b/wxcomponents/vant/dist/common/utils.js
@@ -0,0 +1,76 @@
+import { isDef, isNumber, isPlainObject, isPromise } from './validator';
+import { canIUseGroupSetData, canIUseNextTick } from './version';
+export { isDef } from './validator';
+export { getSystemInfoSync } from './version';
+export function range(num, min, max) {
+ return Math.min(Math.max(num, min), max);
+}
+export function nextTick(cb) {
+ if (canIUseNextTick()) {
+ wx.nextTick(cb);
+ }
+ else {
+ setTimeout(() => {
+ cb();
+ }, 1000 / 30);
+ }
+}
+export function addUnit(value) {
+ if (!isDef(value)) {
+ return undefined;
+ }
+ value = String(value);
+ return isNumber(value) ? `${value}px` : value;
+}
+export function requestAnimationFrame(cb) {
+ return setTimeout(() => {
+ cb();
+ }, 1000 / 30);
+}
+export function pickExclude(obj, keys) {
+ if (!isPlainObject(obj)) {
+ return {};
+ }
+ return Object.keys(obj).reduce((prev, key) => {
+ if (!keys.includes(key)) {
+ prev[key] = obj[key];
+ }
+ return prev;
+ }, {});
+}
+export function getRect(context, selector) {
+ return new Promise((resolve) => {
+ wx.createSelectorQuery()
+ .in(context)
+ .select(selector)
+ .boundingClientRect()
+ .exec((rect = []) => resolve(rect[0]));
+ });
+}
+export function getAllRect(context, selector) {
+ return new Promise((resolve) => {
+ wx.createSelectorQuery()
+ .in(context)
+ .selectAll(selector)
+ .boundingClientRect()
+ .exec((rect = []) => resolve(rect[0]));
+ });
+}
+export function groupSetData(context, cb) {
+ if (canIUseGroupSetData()) {
+ context.groupSetData(cb);
+ }
+ else {
+ cb();
+ }
+}
+export function toPromise(promiseLike) {
+ if (isPromise(promiseLike)) {
+ return promiseLike;
+ }
+ return Promise.resolve(promiseLike);
+}
+export function getCurrentPage() {
+ const pages = getCurrentPages();
+ return pages[pages.length - 1];
+}
diff --git a/wxcomponents/vant/dist/common/validator.d.ts b/wxcomponents/vant/dist/common/validator.d.ts
new file mode 100644
index 0000000..152894a
--- /dev/null
+++ b/wxcomponents/vant/dist/common/validator.d.ts
@@ -0,0 +1,9 @@
+export declare function isFunction(val: unknown): val is Function;
+export declare function isPlainObject(val: unknown): val is Record;
+export declare function isPromise(val: unknown): val is Promise;
+export declare function isDef(value: unknown): boolean;
+export declare function isObj(x: unknown): x is Record;
+export declare function isNumber(value: string): boolean;
+export declare function isBoolean(value: unknown): value is boolean;
+export declare function isImageUrl(url: string): boolean;
+export declare function isVideoUrl(url: string): boolean;
diff --git a/wxcomponents/vant/dist/common/validator.js b/wxcomponents/vant/dist/common/validator.js
new file mode 100644
index 0000000..f11f844
--- /dev/null
+++ b/wxcomponents/vant/dist/common/validator.js
@@ -0,0 +1,31 @@
+// eslint-disable-next-line @typescript-eslint/ban-types
+export function isFunction(val) {
+ return typeof val === 'function';
+}
+export function isPlainObject(val) {
+ return val !== null && typeof val === 'object' && !Array.isArray(val);
+}
+export function isPromise(val) {
+ return isPlainObject(val) && isFunction(val.then) && isFunction(val.catch);
+}
+export function isDef(value) {
+ return value !== undefined && value !== null;
+}
+export function isObj(x) {
+ const type = typeof x;
+ return x !== null && (type === 'object' || type === 'function');
+}
+export function isNumber(value) {
+ return /^\d+(\.\d+)?$/.test(value);
+}
+export function isBoolean(value) {
+ return typeof value === 'boolean';
+}
+const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
+const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv)/i;
+export function isImageUrl(url) {
+ return IMAGE_REGEXP.test(url);
+}
+export function isVideoUrl(url) {
+ return VIDEO_REGEXP.test(url);
+}
diff --git a/wxcomponents/vant/dist/common/version.d.ts b/wxcomponents/vant/dist/common/version.d.ts
new file mode 100644
index 0000000..7142201
--- /dev/null
+++ b/wxcomponents/vant/dist/common/version.d.ts
@@ -0,0 +1,9 @@
+///
+export declare function getSystemInfoSync(): WechatMiniprogram.SystemInfo;
+export declare function canIUseModel(): boolean;
+export declare function canIUseFormFieldButton(): boolean;
+export declare function canIUseAnimate(): boolean;
+export declare function canIUseGroupSetData(): boolean;
+export declare function canIUseNextTick(): boolean;
+export declare function canIUseCanvas2d(): boolean;
+export declare function canIUseGetUserProfile(): boolean;
diff --git a/wxcomponents/vant/dist/common/version.js b/wxcomponents/vant/dist/common/version.js
new file mode 100644
index 0000000..c675e1f
--- /dev/null
+++ b/wxcomponents/vant/dist/common/version.js
@@ -0,0 +1,59 @@
+let systemInfo;
+export function getSystemInfoSync() {
+ if (systemInfo == null) {
+ systemInfo = wx.getSystemInfoSync();
+ }
+ return systemInfo;
+}
+function compareVersion(v1, v2) {
+ v1 = v1.split('.');
+ v2 = v2.split('.');
+ const len = Math.max(v1.length, v2.length);
+ while (v1.length < len) {
+ v1.push('0');
+ }
+ while (v2.length < len) {
+ v2.push('0');
+ }
+ for (let i = 0; i < len; i++) {
+ const num1 = parseInt(v1[i], 10);
+ const num2 = parseInt(v2[i], 10);
+ if (num1 > num2) {
+ return 1;
+ }
+ if (num1 < num2) {
+ return -1;
+ }
+ }
+ return 0;
+}
+function gte(version) {
+ const system = getSystemInfoSync();
+ return compareVersion(system.SDKVersion, version) >= 0;
+}
+export function canIUseModel() {
+ return gte('2.9.3');
+}
+export function canIUseFormFieldButton() {
+ return gte('2.10.3');
+}
+export function canIUseAnimate() {
+ return gte('2.9.0');
+}
+export function canIUseGroupSetData() {
+ return gte('2.4.0');
+}
+export function canIUseNextTick() {
+ try {
+ return wx.canIUse('nextTick');
+ }
+ catch (e) {
+ return gte('2.7.1');
+ }
+}
+export function canIUseCanvas2d() {
+ return gte('2.9.0');
+}
+export function canIUseGetUserProfile() {
+ return !!wx.getUserProfile;
+}
diff --git a/wxcomponents/vant/dist/config-provider/index.d.ts b/wxcomponents/vant/dist/config-provider/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/config-provider/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/config-provider/index.js b/wxcomponents/vant/dist/config-provider/index.js
new file mode 100644
index 0000000..0cb23f4
--- /dev/null
+++ b/wxcomponents/vant/dist/config-provider/index.js
@@ -0,0 +1,9 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ themeVars: {
+ type: Object,
+ value: {},
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/config-provider/index.json b/wxcomponents/vant/dist/config-provider/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/config-provider/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/config-provider/index.vue b/wxcomponents/vant/dist/config-provider/index.vue
new file mode 100644
index 0000000..65a2deb
--- /dev/null
+++ b/wxcomponents/vant/dist/config-provider/index.vue
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/config-provider/index.wxml b/wxcomponents/vant/dist/config-provider/index.wxml
new file mode 100644
index 0000000..3cfb461
--- /dev/null
+++ b/wxcomponents/vant/dist/config-provider/index.wxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/config-provider/index.wxs b/wxcomponents/vant/dist/config-provider/index.wxs
new file mode 100644
index 0000000..7ca0203
--- /dev/null
+++ b/wxcomponents/vant/dist/config-provider/index.wxs
@@ -0,0 +1,29 @@
+/* eslint-disable */
+var object = require('../wxs/object.wxs');
+var style = require('../wxs/style.wxs');
+
+function kebabCase(word) {
+ var newWord = word
+ .replace(getRegExp("[A-Z]", 'g'), function (i) {
+ return '-' + i;
+ })
+ .toLowerCase()
+ .replace(getRegExp("^-"), '');
+
+ return newWord;
+}
+
+function mapThemeVarsToCSSVars(themeVars) {
+ var cssVars = {};
+ object.keys(themeVars).forEach(function (key) {
+ var cssVarsKey = '--' + kebabCase(key);
+ cssVars[cssVarsKey] = themeVars[key];
+ });
+
+ return style(cssVars);
+}
+
+module.exports = {
+ kebabCase: kebabCase,
+ mapThemeVarsToCSSVars: mapThemeVarsToCSSVars,
+};
diff --git a/wxcomponents/vant/dist/count-down/index.d.ts b/wxcomponents/vant/dist/count-down/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/count-down/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/count-down/index.js b/wxcomponents/vant/dist/count-down/index.js
new file mode 100644
index 0000000..da24145
--- /dev/null
+++ b/wxcomponents/vant/dist/count-down/index.js
@@ -0,0 +1,100 @@
+import { VantComponent } from '../common/component';
+import { isSameSecond, parseFormat, parseTimeData } from './utils';
+function simpleTick(fn) {
+ return setTimeout(fn, 30);
+}
+VantComponent({
+ props: {
+ useSlot: Boolean,
+ millisecond: Boolean,
+ time: {
+ type: Number,
+ observer: 'reset',
+ },
+ format: {
+ type: String,
+ value: 'HH:mm:ss',
+ },
+ autoStart: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ data: {
+ timeData: parseTimeData(0),
+ formattedTime: '0',
+ },
+ destroyed() {
+ clearTimeout(this.tid);
+ this.tid = null;
+ },
+ methods: {
+ // 开始
+ start() {
+ if (this.counting) {
+ return;
+ }
+ this.counting = true;
+ this.endTime = Date.now() + this.remain;
+ this.tick();
+ },
+ // 暂停
+ pause() {
+ this.counting = false;
+ clearTimeout(this.tid);
+ },
+ // 重置
+ reset() {
+ this.pause();
+ this.remain = this.data.time;
+ this.setRemain(this.remain);
+ if (this.data.autoStart) {
+ this.start();
+ }
+ },
+ tick() {
+ if (this.data.millisecond) {
+ this.microTick();
+ }
+ else {
+ this.macroTick();
+ }
+ },
+ microTick() {
+ this.tid = simpleTick(() => {
+ this.setRemain(this.getRemain());
+ if (this.remain !== 0) {
+ this.microTick();
+ }
+ });
+ },
+ macroTick() {
+ this.tid = simpleTick(() => {
+ const remain = this.getRemain();
+ if (!isSameSecond(remain, this.remain) || remain === 0) {
+ this.setRemain(remain);
+ }
+ if (this.remain !== 0) {
+ this.macroTick();
+ }
+ });
+ },
+ getRemain() {
+ return Math.max(this.endTime - Date.now(), 0);
+ },
+ setRemain(remain) {
+ this.remain = remain;
+ const timeData = parseTimeData(remain);
+ if (this.data.useSlot) {
+ this.$emit('change', timeData);
+ }
+ this.setData({
+ formattedTime: parseFormat(this.data.format, timeData),
+ });
+ if (remain === 0) {
+ this.pause();
+ this.$emit('finish');
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/count-down/index.json b/wxcomponents/vant/dist/count-down/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/count-down/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/count-down/index.vue b/wxcomponents/vant/dist/count-down/index.vue
new file mode 100644
index 0000000..32924a6
--- /dev/null
+++ b/wxcomponents/vant/dist/count-down/index.vue
@@ -0,0 +1,115 @@
+
+
+
+ {{ formattedTime }}
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/count-down/index.wxml b/wxcomponents/vant/dist/count-down/index.wxml
new file mode 100644
index 0000000..e206e16
--- /dev/null
+++ b/wxcomponents/vant/dist/count-down/index.wxml
@@ -0,0 +1,4 @@
+
+
+ {{ formattedTime }}
+
diff --git a/wxcomponents/vant/dist/count-down/index.wxss b/wxcomponents/vant/dist/count-down/index.wxss
new file mode 100644
index 0000000..8b957f7
--- /dev/null
+++ b/wxcomponents/vant/dist/count-down/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-count-down{color:var(--count-down-text-color,#323233);font-size:var(--count-down-font-size,14px);line-height:var(--count-down-line-height,20px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/count-down/utils.d.ts b/wxcomponents/vant/dist/count-down/utils.d.ts
new file mode 100644
index 0000000..876a6c1
--- /dev/null
+++ b/wxcomponents/vant/dist/count-down/utils.d.ts
@@ -0,0 +1,10 @@
+export type TimeData = {
+ days: number;
+ hours: number;
+ minutes: number;
+ seconds: number;
+ milliseconds: number;
+};
+export declare function parseTimeData(time: number): TimeData;
+export declare function parseFormat(format: string, timeData: TimeData): string;
+export declare function isSameSecond(time1: number, time2: number): boolean;
diff --git a/wxcomponents/vant/dist/count-down/utils.js b/wxcomponents/vant/dist/count-down/utils.js
new file mode 100644
index 0000000..cbdbd79
--- /dev/null
+++ b/wxcomponents/vant/dist/count-down/utils.js
@@ -0,0 +1,57 @@
+function padZero(num, targetLength = 2) {
+ let str = num + '';
+ while (str.length < targetLength) {
+ str = '0' + str;
+ }
+ return str;
+}
+const SECOND = 1000;
+const MINUTE = 60 * SECOND;
+const HOUR = 60 * MINUTE;
+const DAY = 24 * HOUR;
+export function parseTimeData(time) {
+ const days = Math.floor(time / DAY);
+ const hours = Math.floor((time % DAY) / HOUR);
+ const minutes = Math.floor((time % HOUR) / MINUTE);
+ const seconds = Math.floor((time % MINUTE) / SECOND);
+ const milliseconds = Math.floor(time % SECOND);
+ return {
+ days,
+ hours,
+ minutes,
+ seconds,
+ milliseconds,
+ };
+}
+export function parseFormat(format, timeData) {
+ const { days } = timeData;
+ let { hours, minutes, seconds, milliseconds } = timeData;
+ if (format.indexOf('DD') === -1) {
+ hours += days * 24;
+ }
+ else {
+ format = format.replace('DD', padZero(days));
+ }
+ if (format.indexOf('HH') === -1) {
+ minutes += hours * 60;
+ }
+ else {
+ format = format.replace('HH', padZero(hours));
+ }
+ if (format.indexOf('mm') === -1) {
+ seconds += minutes * 60;
+ }
+ else {
+ format = format.replace('mm', padZero(minutes));
+ }
+ if (format.indexOf('ss') === -1) {
+ milliseconds += seconds * 1000;
+ }
+ else {
+ format = format.replace('ss', padZero(seconds));
+ }
+ return format.replace('SSS', padZero(milliseconds, 3));
+}
+export function isSameSecond(time1, time2) {
+ return Math.floor(time1 / 1000) === Math.floor(time2 / 1000);
+}
diff --git a/wxcomponents/vant/dist/datetime-picker/index.d.ts b/wxcomponents/vant/dist/datetime-picker/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/datetime-picker/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/datetime-picker/index.js b/wxcomponents/vant/dist/datetime-picker/index.js
new file mode 100644
index 0000000..3334170
--- /dev/null
+++ b/wxcomponents/vant/dist/datetime-picker/index.js
@@ -0,0 +1,295 @@
+import { VantComponent } from '../common/component';
+import { isDef } from '../common/validator';
+import { pickerProps } from '../picker/shared';
+const currentYear = new Date().getFullYear();
+function isValidDate(date) {
+ return isDef(date) && !isNaN(new Date(date).getTime());
+}
+function range(num, min, max) {
+ return Math.min(Math.max(num, min), max);
+}
+function padZero(val) {
+ return `00${val}`.slice(-2);
+}
+function times(n, iteratee) {
+ let index = -1;
+ const result = Array(n < 0 ? 0 : n);
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+}
+function getTrueValue(formattedValue) {
+ if (formattedValue === undefined) {
+ formattedValue = '1';
+ }
+ while (isNaN(parseInt(formattedValue, 10))) {
+ formattedValue = formattedValue.slice(1);
+ }
+ return parseInt(formattedValue, 10);
+}
+function getMonthEndDay(year, month) {
+ return 32 - new Date(year, month - 1, 32).getDate();
+}
+const defaultFormatter = (type, value) => value;
+VantComponent({
+ classes: ['active-class', 'toolbar-class', 'column-class'],
+ props: Object.assign(Object.assign({}, pickerProps), { value: {
+ type: null,
+ observer: 'updateValue',
+ }, filter: null, type: {
+ type: String,
+ value: 'datetime',
+ observer: 'updateValue',
+ }, showToolbar: {
+ type: Boolean,
+ value: true,
+ }, formatter: {
+ type: null,
+ value: defaultFormatter,
+ }, minDate: {
+ type: Number,
+ value: new Date(currentYear - 10, 0, 1).getTime(),
+ observer: 'updateValue',
+ }, maxDate: {
+ type: Number,
+ value: new Date(currentYear + 10, 11, 31).getTime(),
+ observer: 'updateValue',
+ }, minHour: {
+ type: Number,
+ value: 0,
+ observer: 'updateValue',
+ }, maxHour: {
+ type: Number,
+ value: 23,
+ observer: 'updateValue',
+ }, minMinute: {
+ type: Number,
+ value: 0,
+ observer: 'updateValue',
+ }, maxMinute: {
+ type: Number,
+ value: 59,
+ observer: 'updateValue',
+ } }),
+ data: {
+ innerValue: Date.now(),
+ columns: [],
+ },
+ methods: {
+ updateValue() {
+ const { data } = this;
+ const val = this.correctValue(data.value);
+ const isEqual = val === data.innerValue;
+ this.updateColumnValue(val).then(() => {
+ if (!isEqual) {
+ this.$emit('input', val);
+ }
+ });
+ },
+ getPicker() {
+ if (this.picker == null) {
+ this.picker = this.selectComponent('.van-datetime-picker');
+ const { picker } = this;
+ const { setColumnValues } = picker;
+ picker.setColumnValues = (...args) => setColumnValues.apply(picker, [...args, false]);
+ }
+ return this.picker;
+ },
+ updateColumns() {
+ const { formatter = defaultFormatter } = this.data;
+ const results = this.getOriginColumns().map((column) => ({
+ values: column.values.map((value) => formatter(column.type, value)),
+ }));
+ return this.set({ columns: results });
+ },
+ getOriginColumns() {
+ const { filter } = this.data;
+ const results = this.getRanges().map(({ type, range }) => {
+ let values = times(range[1] - range[0] + 1, (index) => {
+ const value = range[0] + index;
+ return type === 'year' ? `${value}` : padZero(value);
+ });
+ if (filter) {
+ values = filter(type, values);
+ }
+ return { type, values };
+ });
+ return results;
+ },
+ getRanges() {
+ const { data } = this;
+ if (data.type === 'time') {
+ return [
+ {
+ type: 'hour',
+ range: [data.minHour, data.maxHour],
+ },
+ {
+ type: 'minute',
+ range: [data.minMinute, data.maxMinute],
+ },
+ ];
+ }
+ const { maxYear, maxDate, maxMonth, maxHour, maxMinute, } = this.getBoundary('max', data.innerValue);
+ const { minYear, minDate, minMonth, minHour, minMinute, } = this.getBoundary('min', data.innerValue);
+ const result = [
+ {
+ type: 'year',
+ range: [minYear, maxYear],
+ },
+ {
+ type: 'month',
+ range: [minMonth, maxMonth],
+ },
+ {
+ type: 'day',
+ range: [minDate, maxDate],
+ },
+ {
+ type: 'hour',
+ range: [minHour, maxHour],
+ },
+ {
+ type: 'minute',
+ range: [minMinute, maxMinute],
+ },
+ ];
+ if (data.type === 'date')
+ result.splice(3, 2);
+ if (data.type === 'year-month')
+ result.splice(2, 3);
+ return result;
+ },
+ correctValue(value) {
+ const { data } = this;
+ // validate value
+ const isDateType = data.type !== 'time';
+ if (isDateType && !isValidDate(value)) {
+ value = data.minDate;
+ }
+ else if (!isDateType && !value) {
+ const { minHour } = data;
+ value = `${padZero(minHour)}:00`;
+ }
+ // time type
+ if (!isDateType) {
+ let [hour, minute] = value.split(':');
+ hour = padZero(range(hour, data.minHour, data.maxHour));
+ minute = padZero(range(minute, data.minMinute, data.maxMinute));
+ return `${hour}:${minute}`;
+ }
+ // date type
+ value = Math.max(value, data.minDate);
+ value = Math.min(value, data.maxDate);
+ return value;
+ },
+ getBoundary(type, innerValue) {
+ const value = new Date(innerValue);
+ const boundary = new Date(this.data[`${type}Date`]);
+ const year = boundary.getFullYear();
+ let month = 1;
+ let date = 1;
+ let hour = 0;
+ let minute = 0;
+ if (type === 'max') {
+ month = 12;
+ date = getMonthEndDay(value.getFullYear(), value.getMonth() + 1);
+ hour = 23;
+ minute = 59;
+ }
+ if (value.getFullYear() === year) {
+ month = boundary.getMonth() + 1;
+ if (value.getMonth() + 1 === month) {
+ date = boundary.getDate();
+ if (value.getDate() === date) {
+ hour = boundary.getHours();
+ if (value.getHours() === hour) {
+ minute = boundary.getMinutes();
+ }
+ }
+ }
+ }
+ return {
+ [`${type}Year`]: year,
+ [`${type}Month`]: month,
+ [`${type}Date`]: date,
+ [`${type}Hour`]: hour,
+ [`${type}Minute`]: minute,
+ };
+ },
+ onCancel() {
+ this.$emit('cancel');
+ },
+ onConfirm() {
+ this.$emit('confirm', this.data.innerValue);
+ },
+ onChange() {
+ const { data } = this;
+ let value;
+ const picker = this.getPicker();
+ const originColumns = this.getOriginColumns();
+ if (data.type === 'time') {
+ const indexes = picker.getIndexes();
+ value = `${+originColumns[0].values[indexes[0]]}:${+originColumns[1]
+ .values[indexes[1]]}`;
+ }
+ else {
+ const indexes = picker.getIndexes();
+ const values = indexes.map((value, index) => originColumns[index].values[value]);
+ const year = getTrueValue(values[0]);
+ const month = getTrueValue(values[1]);
+ const maxDate = getMonthEndDay(year, month);
+ let date = getTrueValue(values[2]);
+ if (data.type === 'year-month') {
+ date = 1;
+ }
+ date = date > maxDate ? maxDate : date;
+ let hour = 0;
+ let minute = 0;
+ if (data.type === 'datetime') {
+ hour = getTrueValue(values[3]);
+ minute = getTrueValue(values[4]);
+ }
+ value = new Date(year, month - 1, date, hour, minute);
+ }
+ value = this.correctValue(value);
+ this.updateColumnValue(value).then(() => {
+ this.$emit('input', value);
+ this.$emit('change', picker);
+ });
+ },
+ updateColumnValue(value) {
+ let values = [];
+ const { type } = this.data;
+ const formatter = this.data.formatter || defaultFormatter;
+ const picker = this.getPicker();
+ if (type === 'time') {
+ const pair = value.split(':');
+ values = [formatter('hour', pair[0]), formatter('minute', pair[1])];
+ }
+ else {
+ const date = new Date(value);
+ values = [
+ formatter('year', `${date.getFullYear()}`),
+ formatter('month', padZero(date.getMonth() + 1)),
+ ];
+ if (type === 'date') {
+ values.push(formatter('day', padZero(date.getDate())));
+ }
+ if (type === 'datetime') {
+ values.push(formatter('day', padZero(date.getDate())), formatter('hour', padZero(date.getHours())), formatter('minute', padZero(date.getMinutes())));
+ }
+ }
+ return this.set({ innerValue: value })
+ .then(() => this.updateColumns())
+ .then(() => picker.setValues(values));
+ },
+ },
+ created() {
+ const innerValue = this.correctValue(this.data.value);
+ this.updateColumnValue(innerValue).then(() => {
+ this.$emit('input', innerValue);
+ });
+ },
+});
diff --git a/wxcomponents/vant/dist/datetime-picker/index.json b/wxcomponents/vant/dist/datetime-picker/index.json
new file mode 100644
index 0000000..a778e91
--- /dev/null
+++ b/wxcomponents/vant/dist/datetime-picker/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-picker": "../picker/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/datetime-picker/index.vue b/wxcomponents/vant/dist/datetime-picker/index.vue
new file mode 100644
index 0000000..497155d
--- /dev/null
+++ b/wxcomponents/vant/dist/datetime-picker/index.vue
@@ -0,0 +1,309 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/datetime-picker/index.wxml b/wxcomponents/vant/dist/datetime-picker/index.wxml
new file mode 100644
index 0000000..ade2202
--- /dev/null
+++ b/wxcomponents/vant/dist/datetime-picker/index.wxml
@@ -0,0 +1,16 @@
+
diff --git a/wxcomponents/vant/dist/datetime-picker/index.wxss b/wxcomponents/vant/dist/datetime-picker/index.wxss
new file mode 100644
index 0000000..99694d6
--- /dev/null
+++ b/wxcomponents/vant/dist/datetime-picker/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/definitions/index.d.ts b/wxcomponents/vant/dist/definitions/index.d.ts
new file mode 100644
index 0000000..d0554f6
--- /dev/null
+++ b/wxcomponents/vant/dist/definitions/index.d.ts
@@ -0,0 +1,28 @@
+///
+interface VantComponentInstance {
+ parent: WechatMiniprogram.Component.TrivialInstance;
+ children: WechatMiniprogram.Component.TrivialInstance[];
+ index: number;
+ $emit: (name: string, detail?: unknown, options?: WechatMiniprogram.Component.TriggerEventOption) => void;
+}
+export type VantComponentOptions = {
+ data?: Data;
+ field?: boolean;
+ classes?: string[];
+ mixins?: string[];
+ props?: Props;
+ relation?: {
+ relations: Record;
+ mixin: string;
+ };
+ watch?: Record any>;
+ methods?: Methods;
+ beforeCreate?: () => void;
+ created?: () => void;
+ mounted?: () => void;
+ destroyed?: () => void;
+} & ThisType, Props, Methods> & Record>;
+export {};
diff --git a/wxcomponents/vant/dist/definitions/index.js b/wxcomponents/vant/dist/definitions/index.js
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/definitions/index.js
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/dialog/dialog.d.ts b/wxcomponents/vant/dist/dialog/dialog.d.ts
new file mode 100644
index 0000000..db2da5f
--- /dev/null
+++ b/wxcomponents/vant/dist/dialog/dialog.d.ts
@@ -0,0 +1,55 @@
+///
+///
+export type Action = 'confirm' | 'cancel' | 'overlay';
+type DialogContext = WechatMiniprogram.Page.TrivialInstance | WechatMiniprogram.Component.TrivialInstance;
+interface DialogOptions {
+ lang?: string;
+ show?: boolean;
+ title?: string;
+ width?: string | number | null;
+ zIndex?: number;
+ theme?: string;
+ context?: (() => DialogContext) | DialogContext;
+ message?: string;
+ overlay?: boolean;
+ selector?: string;
+ ariaLabel?: string;
+ /**
+ * @deprecated use custom-class instead
+ */
+ className?: string;
+ customStyle?: string;
+ transition?: string;
+ /**
+ * @deprecated use beforeClose instead
+ */
+ asyncClose?: boolean;
+ beforeClose?: null | ((action: Action) => Promise | void);
+ businessId?: number;
+ sessionFrom?: string;
+ overlayStyle?: string;
+ appParameter?: string;
+ messageAlign?: string;
+ sendMessageImg?: string;
+ showMessageCard?: boolean;
+ sendMessagePath?: string;
+ sendMessageTitle?: string;
+ confirmButtonText?: string;
+ cancelButtonText?: string;
+ showConfirmButton?: boolean;
+ showCancelButton?: boolean;
+ closeOnClickOverlay?: boolean;
+ confirmButtonOpenType?: string;
+}
+declare const Dialog: {
+ (options: DialogOptions): Promise;
+ alert(options: DialogOptions): Promise;
+ confirm(options: DialogOptions): Promise;
+ close(): void;
+ stopLoading(): void;
+ currentOptions: DialogOptions;
+ defaultOptions: DialogOptions;
+ setDefaultOptions(options: DialogOptions): void;
+ resetDefaultOptions(): void;
+};
+export default Dialog;
diff --git a/wxcomponents/vant/dist/dialog/dialog.js b/wxcomponents/vant/dist/dialog/dialog.js
new file mode 100644
index 0000000..a96ec08
--- /dev/null
+++ b/wxcomponents/vant/dist/dialog/dialog.js
@@ -0,0 +1,77 @@
+let queue = [];
+const defaultOptions = {
+ show: false,
+ title: '',
+ width: null,
+ theme: 'default',
+ message: '',
+ zIndex: 100,
+ overlay: true,
+ selector: '#van-dialog',
+ className: '',
+ asyncClose: false,
+ beforeClose: null,
+ transition: 'scale',
+ customStyle: '',
+ messageAlign: '',
+ overlayStyle: '',
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ showConfirmButton: true,
+ showCancelButton: false,
+ closeOnClickOverlay: false,
+ confirmButtonOpenType: '',
+};
+let currentOptions = Object.assign({}, defaultOptions);
+function getContext() {
+ const pages = getCurrentPages();
+ return pages[pages.length - 1];
+}
+const Dialog = (options) => {
+ options = Object.assign(Object.assign({}, currentOptions), options);
+ return new Promise((resolve, reject) => {
+ const context = (typeof options.context === 'function'
+ ? options.context()
+ : options.context) || getContext();
+ const dialog = context.selectComponent(options.selector);
+ delete options.context;
+ delete options.selector;
+ if (dialog) {
+ dialog.setData(Object.assign({ callback: (action, instance) => {
+ action === 'confirm' ? resolve(instance) : reject(instance);
+ } }, options));
+ wx.nextTick(() => {
+ dialog.setData({ show: true });
+ });
+ queue.push(dialog);
+ }
+ else {
+ console.warn('未找到 van-dialog 节点,请确认 selector 及 context 是否正确');
+ }
+ });
+};
+Dialog.alert = (options) => Dialog(options);
+Dialog.confirm = (options) => Dialog(Object.assign({ showCancelButton: true }, options));
+Dialog.close = () => {
+ queue.forEach((dialog) => {
+ dialog.close();
+ });
+ queue = [];
+};
+Dialog.stopLoading = () => {
+ queue.forEach((dialog) => {
+ dialog.stopLoading();
+ });
+};
+Dialog.currentOptions = currentOptions;
+Dialog.defaultOptions = defaultOptions;
+Dialog.setDefaultOptions = (options) => {
+ currentOptions = Object.assign(Object.assign({}, currentOptions), options);
+ Dialog.currentOptions = currentOptions;
+};
+Dialog.resetDefaultOptions = () => {
+ currentOptions = Object.assign({}, defaultOptions);
+ Dialog.currentOptions = currentOptions;
+};
+Dialog.resetDefaultOptions();
+export default Dialog;
diff --git a/wxcomponents/vant/dist/dialog/index.d.ts b/wxcomponents/vant/dist/dialog/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/dialog/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/dialog/index.js b/wxcomponents/vant/dist/dialog/index.js
new file mode 100644
index 0000000..6f24cf4
--- /dev/null
+++ b/wxcomponents/vant/dist/dialog/index.js
@@ -0,0 +1,122 @@
+import { VantComponent } from '../common/component';
+import { button } from '../mixins/button';
+import { GRAY, RED } from '../common/color';
+import { toPromise } from '../common/utils';
+VantComponent({
+ mixins: [button],
+ props: {
+ show: {
+ type: Boolean,
+ observer(show) {
+ !show && this.stopLoading();
+ },
+ },
+ title: String,
+ message: String,
+ theme: {
+ type: String,
+ value: 'default',
+ },
+ useSlot: Boolean,
+ className: String,
+ customStyle: String,
+ asyncClose: Boolean,
+ messageAlign: String,
+ beforeClose: null,
+ overlayStyle: String,
+ useTitleSlot: Boolean,
+ showCancelButton: Boolean,
+ closeOnClickOverlay: Boolean,
+ confirmButtonOpenType: String,
+ width: null,
+ zIndex: {
+ type: Number,
+ value: 2000,
+ },
+ confirmButtonText: {
+ type: String,
+ value: '确认',
+ },
+ cancelButtonText: {
+ type: String,
+ value: '取消',
+ },
+ confirmButtonColor: {
+ type: String,
+ value: RED,
+ },
+ cancelButtonColor: {
+ type: String,
+ value: GRAY,
+ },
+ showConfirmButton: {
+ type: Boolean,
+ value: true,
+ },
+ overlay: {
+ type: Boolean,
+ value: true,
+ },
+ transition: {
+ type: String,
+ value: 'scale',
+ },
+ },
+ data: {
+ loading: {
+ confirm: false,
+ cancel: false,
+ },
+ callback: (() => { }),
+ },
+ methods: {
+ onConfirm() {
+ this.handleAction('confirm');
+ },
+ onCancel() {
+ this.handleAction('cancel');
+ },
+ onClickOverlay() {
+ this.close('overlay');
+ },
+ close(action) {
+ this.setData({ show: false });
+ wx.nextTick(() => {
+ this.$emit('close', action);
+ const { callback } = this.data;
+ if (callback) {
+ callback(action, this);
+ }
+ });
+ },
+ stopLoading() {
+ this.setData({
+ loading: {
+ confirm: false,
+ cancel: false,
+ },
+ });
+ },
+ handleAction(action) {
+ this.$emit(action, { dialog: this });
+ const { asyncClose, beforeClose } = this.data;
+ if (!asyncClose && !beforeClose) {
+ this.close(action);
+ return;
+ }
+ this.setData({
+ [`loading.${action}`]: true,
+ });
+ if (beforeClose) {
+ toPromise(beforeClose(action)).then((value) => {
+ if (value) {
+ this.close(action);
+ }
+ else {
+ this.stopLoading();
+ }
+ });
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/dialog/index.json b/wxcomponents/vant/dist/dialog/index.json
new file mode 100644
index 0000000..43417fc
--- /dev/null
+++ b/wxcomponents/vant/dist/dialog/index.json
@@ -0,0 +1,9 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-popup": "../popup/index",
+ "van-button": "../button/index",
+ "van-goods-action": "../goods-action/index",
+ "van-goods-action-button": "../goods-action-button/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/dialog/index.vue b/wxcomponents/vant/dist/dialog/index.vue
new file mode 100644
index 0000000..7ad7860
--- /dev/null
+++ b/wxcomponents/vant/dist/dialog/index.vue
@@ -0,0 +1,167 @@
+
+
+
+
+ {{ title }}
+
+
+
+
+ {{ message }}
+
+
+
+
+ {{ cancelButtonText }}
+
+
+ {{ confirmButtonText }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/dialog/index.wxml b/wxcomponents/vant/dist/dialog/index.wxml
new file mode 100644
index 0000000..e1ac81e
--- /dev/null
+++ b/wxcomponents/vant/dist/dialog/index.wxml
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+ {{ message }}
+
+
+
+
+ {{ cancelButtonText }}
+
+
+ {{ confirmButtonText }}
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/dialog/index.wxss b/wxcomponents/vant/dist/dialog/index.wxss
new file mode 100644
index 0000000..507a789
--- /dev/null
+++ b/wxcomponents/vant/dist/dialog/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-dialog{background-color:var(--dialog-background-color,#fff);border-radius:var(--dialog-border-radius,16px);font-size:var(--dialog-font-size,16px);overflow:hidden;top:45%!important;width:var(--dialog-width,320px)}@media (max-width:321px){.van-dialog{width:var(--dialog-small-screen-width,90%)}}.van-dialog__header{font-weight:var(--dialog-header-font-weight,500);line-height:var(--dialog-header-line-height,24px);padding-top:var(--dialog-header-padding-top,24px);text-align:center}.van-dialog__header--isolated{padding:var(--dialog-header-isolated-padding,24px 0)}.van-dialog__message{-webkit-overflow-scrolling:touch;font-size:var(--dialog-message-font-size,14px);line-height:var(--dialog-message-line-height,20px);max-height:var(--dialog-message-max-height,60vh);overflow-y:auto;padding:var(--dialog-message-padding,24px);text-align:center}.van-dialog__message-text{word-wrap:break-word}.van-dialog__message--hasTitle{color:var(--dialog-has-title-message-text-color,#646566);padding-top:var(--dialog-has-title-message-padding-top,8px)}.van-dialog__message--round-button{color:#323233;padding-bottom:16px}.van-dialog__message--left{text-align:left}.van-dialog__message--right{text-align:right}.van-dialog__message--justify{text-align:justify}.van-dialog__footer{display:flex}.van-dialog__footer--round-button{padding:8px 24px 16px!important;position:relative!important}.van-dialog__button{flex:1}.van-dialog__cancel,.van-dialog__confirm{border:0!important}.van-dialog-bounce-enter{opacity:0;transform:translate3d(-50%,-50%,0) scale(.7)}.van-dialog-bounce-leave-active{opacity:0;transform:translate3d(-50%,-50%,0) scale(.9)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/divider/index.d.ts b/wxcomponents/vant/dist/divider/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/divider/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/divider/index.js b/wxcomponents/vant/dist/divider/index.js
new file mode 100644
index 0000000..9596edd
--- /dev/null
+++ b/wxcomponents/vant/dist/divider/index.js
@@ -0,0 +1,12 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ dashed: Boolean,
+ hairline: Boolean,
+ contentPosition: String,
+ fontSize: String,
+ borderColor: String,
+ textColor: String,
+ customStyle: String,
+ },
+});
diff --git a/wxcomponents/vant/dist/divider/index.json b/wxcomponents/vant/dist/divider/index.json
new file mode 100644
index 0000000..a89ef4d
--- /dev/null
+++ b/wxcomponents/vant/dist/divider/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
diff --git a/wxcomponents/vant/dist/divider/index.vue b/wxcomponents/vant/dist/divider/index.vue
new file mode 100644
index 0000000..c173fdb
--- /dev/null
+++ b/wxcomponents/vant/dist/divider/index.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/divider/index.wxml b/wxcomponents/vant/dist/divider/index.wxml
new file mode 100644
index 0000000..f6a5a45
--- /dev/null
+++ b/wxcomponents/vant/dist/divider/index.wxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/divider/index.wxs b/wxcomponents/vant/dist/divider/index.wxs
new file mode 100644
index 0000000..215b14f
--- /dev/null
+++ b/wxcomponents/vant/dist/divider/index.wxs
@@ -0,0 +1,18 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function rootStyle(data) {
+ return style([
+ {
+ 'border-color': data.borderColor,
+ color: data.textColor,
+ 'font-size': addUnit(data.fontSize),
+ },
+ data.customStyle,
+ ]);
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+};
diff --git a/wxcomponents/vant/dist/divider/index.wxss b/wxcomponents/vant/dist/divider/index.wxss
new file mode 100644
index 0000000..e91dc44
--- /dev/null
+++ b/wxcomponents/vant/dist/divider/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-divider{align-items:center;border:0 solid var(--divider-border-color,#ebedf0);color:var(--divider-text-color,#969799);display:flex;font-size:var(--divider-font-size,14px);line-height:var(--divider-line-height,24px);margin:var(--divider-margin,16px 0)}.van-divider:after,.van-divider:before{border-color:inherit;border-style:inherit;border-width:1px 0 0;box-sizing:border-box;display:block;flex:1;height:1px}.van-divider:before{content:""}.van-divider--hairline:after,.van-divider--hairline:before{transform:scaleY(.5)}.van-divider--dashed{border-style:dashed}.van-divider--center:before,.van-divider--left:before,.van-divider--right:before{margin-right:var(--divider-content-padding,16px)}.van-divider--center:after,.van-divider--left:after,.van-divider--right:after{content:"";margin-left:var(--divider-content-padding,16px)}.van-divider--left:before{max-width:var(--divider-content-left-width,10%)}.van-divider--right:after{max-width:var(--divider-content-right-width,10%)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/dropdown-item/index.d.ts b/wxcomponents/vant/dist/dropdown-item/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-item/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/dropdown-item/index.js b/wxcomponents/vant/dist/dropdown-item/index.js
new file mode 100644
index 0000000..fd61a47
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-item/index.js
@@ -0,0 +1,130 @@
+import { useParent } from '../common/relation';
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: ['item-title-class'],
+ field: true,
+ relation: useParent('dropdown-menu', function () {
+ this.updateDataFromParent();
+ }),
+ props: {
+ value: {
+ type: null,
+ observer: 'rerender',
+ },
+ title: {
+ type: String,
+ observer: 'rerender',
+ },
+ disabled: Boolean,
+ titleClass: {
+ type: String,
+ observer: 'rerender',
+ },
+ options: {
+ type: Array,
+ value: [],
+ observer: 'rerender',
+ },
+ popupStyle: String,
+ useBeforeToggle: {
+ type: Boolean,
+ value: false,
+ },
+ rootPortal: {
+ type: Boolean,
+ value: false,
+ },
+ },
+ data: {
+ transition: true,
+ showPopup: false,
+ showWrapper: false,
+ displayTitle: '',
+ safeAreaTabBar: false,
+ },
+ methods: {
+ rerender() {
+ wx.nextTick(() => {
+ var _a;
+ (_a = this.parent) === null || _a === void 0 ? void 0 : _a.updateItemListData();
+ });
+ },
+ updateDataFromParent() {
+ if (this.parent) {
+ const { overlay, duration, activeColor, closeOnClickOverlay, direction, safeAreaTabBar, } = this.parent.data;
+ this.setData({
+ overlay,
+ duration,
+ activeColor,
+ closeOnClickOverlay,
+ direction,
+ safeAreaTabBar,
+ });
+ }
+ },
+ onOpen() {
+ this.$emit('open');
+ },
+ onOpened() {
+ this.$emit('opened');
+ },
+ onClose() {
+ this.$emit('close');
+ },
+ onClosed() {
+ this.$emit('closed');
+ this.setData({ showWrapper: false });
+ },
+ onOptionTap(event) {
+ const { option } = event.currentTarget.dataset;
+ const { value } = option;
+ const shouldEmitChange = this.data.value !== value;
+ this.setData({ showPopup: false, value });
+ this.$emit('close');
+ this.rerender();
+ if (shouldEmitChange) {
+ this.$emit('change', value);
+ }
+ },
+ toggle(show, options = {}) {
+ const { showPopup } = this.data;
+ if (typeof show !== 'boolean') {
+ show = !showPopup;
+ }
+ if (show === showPopup) {
+ return;
+ }
+ this.onBeforeToggle(show).then((status) => {
+ var _a;
+ if (!status) {
+ return;
+ }
+ this.setData({
+ transition: !options.immediate,
+ showPopup: show,
+ });
+ if (show) {
+ (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getChildWrapperStyle().then((wrapperStyle) => {
+ this.setData({ wrapperStyle, showWrapper: true });
+ this.rerender();
+ });
+ }
+ else {
+ this.rerender();
+ }
+ });
+ },
+ onBeforeToggle(status) {
+ const { useBeforeToggle } = this.data;
+ if (!useBeforeToggle) {
+ return Promise.resolve(true);
+ }
+ return new Promise((resolve) => {
+ this.$emit('before-toggle', {
+ status,
+ callback: (value) => resolve(value),
+ });
+ });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/dropdown-item/index.json b/wxcomponents/vant/dist/dropdown-item/index.json
new file mode 100644
index 0000000..88d5409
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-item/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-popup": "../popup/index",
+ "van-cell": "../cell/index",
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/dropdown-item/index.vue b/wxcomponents/vant/dist/dropdown-item/index.vue
new file mode 100644
index 0000000..4d62a69
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-item/index.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/dropdown-item/index.wxml b/wxcomponents/vant/dist/dropdown-item/index.wxml
new file mode 100644
index 0000000..63904f4
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-item/index.wxml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/dropdown-item/index.wxss b/wxcomponents/vant/dist/dropdown-item/index.wxss
new file mode 100644
index 0000000..80505e9
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-item/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-dropdown-item{left:0;overflow:hidden;position:fixed;right:0}.van-dropdown-item__option{text-align:left}.van-dropdown-item__option--active .van-dropdown-item__icon,.van-dropdown-item__option--active .van-dropdown-item__title{color:var(--dropdown-menu-option-active-color,#ee0a24)}.van-dropdown-item--up{top:0}.van-dropdown-item--down{bottom:0}.van-dropdown-item__icon{display:block;line-height:inherit}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/dropdown-item/shared.d.ts b/wxcomponents/vant/dist/dropdown-item/shared.d.ts
new file mode 100644
index 0000000..774eb4c
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-item/shared.d.ts
@@ -0,0 +1,5 @@
+export interface Option {
+ text: string;
+ value: string | number;
+ icon: string;
+}
diff --git a/wxcomponents/vant/dist/dropdown-item/shared.js b/wxcomponents/vant/dist/dropdown-item/shared.js
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-item/shared.js
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/dropdown-menu/index.d.ts b/wxcomponents/vant/dist/dropdown-menu/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-menu/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/dropdown-menu/index.js b/wxcomponents/vant/dist/dropdown-menu/index.js
new file mode 100644
index 0000000..9858ab3
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-menu/index.js
@@ -0,0 +1,117 @@
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+import { addUnit, getRect, getSystemInfoSync } from '../common/utils';
+let ARRAY = [];
+VantComponent({
+ field: true,
+ classes: ['title-class'],
+ relation: useChildren('dropdown-item', function () {
+ this.updateItemListData();
+ }),
+ props: {
+ activeColor: {
+ type: String,
+ observer: 'updateChildrenData',
+ },
+ overlay: {
+ type: Boolean,
+ value: true,
+ observer: 'updateChildrenData',
+ },
+ zIndex: {
+ type: Number,
+ value: 10,
+ },
+ duration: {
+ type: Number,
+ value: 200,
+ observer: 'updateChildrenData',
+ },
+ direction: {
+ type: String,
+ value: 'down',
+ observer: 'updateChildrenData',
+ },
+ safeAreaTabBar: {
+ type: Boolean,
+ value: false,
+ },
+ closeOnClickOverlay: {
+ type: Boolean,
+ value: true,
+ observer: 'updateChildrenData',
+ },
+ closeOnClickOutside: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ data: {
+ itemListData: [],
+ },
+ beforeCreate() {
+ const { windowHeight } = getSystemInfoSync();
+ this.windowHeight = windowHeight;
+ ARRAY.push(this);
+ },
+ destroyed() {
+ ARRAY = ARRAY.filter((item) => item !== this);
+ },
+ methods: {
+ updateItemListData() {
+ this.setData({
+ itemListData: this.children.map((child) => child.data),
+ });
+ },
+ updateChildrenData() {
+ this.children.forEach((child) => {
+ child.updateDataFromParent();
+ });
+ },
+ toggleItem(active) {
+ this.children.forEach((item, index) => {
+ const { showPopup } = item.data;
+ if (index === active) {
+ item.toggle();
+ }
+ else if (showPopup) {
+ item.toggle(false, { immediate: true });
+ }
+ });
+ },
+ close() {
+ this.children.forEach((child) => {
+ child.toggle(false, { immediate: true });
+ });
+ },
+ getChildWrapperStyle() {
+ const { zIndex, direction } = this.data;
+ return getRect(this, '.van-dropdown-menu').then((rect) => {
+ const { top = 0, bottom = 0 } = rect;
+ const offset = direction === 'down' ? bottom : this.windowHeight - top;
+ let wrapperStyle = `z-index: ${zIndex};`;
+ if (direction === 'down') {
+ wrapperStyle += `top: ${addUnit(offset)};`;
+ }
+ else {
+ wrapperStyle += `bottom: ${addUnit(offset)};`;
+ }
+ return wrapperStyle;
+ });
+ },
+ onTitleTap(event) {
+ const { index } = event.currentTarget.dataset;
+ const child = this.children[index];
+ if (!child.data.disabled) {
+ ARRAY.forEach((menuItem) => {
+ if (menuItem &&
+ menuItem.data.closeOnClickOutside &&
+ menuItem !== this) {
+ menuItem.close();
+ }
+ });
+ this.toggleItem(index);
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/dropdown-menu/index.json b/wxcomponents/vant/dist/dropdown-menu/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-menu/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/dropdown-menu/index.vue b/wxcomponents/vant/dist/dropdown-menu/index.vue
new file mode 100644
index 0000000..fdbeac2
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-menu/index.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/dropdown-menu/index.wxml b/wxcomponents/vant/dist/dropdown-menu/index.wxml
new file mode 100644
index 0000000..ec165a9
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-menu/index.wxml
@@ -0,0 +1,23 @@
+
+
+
+
diff --git a/wxcomponents/vant/dist/dropdown-menu/index.wxs b/wxcomponents/vant/dist/dropdown-menu/index.wxs
new file mode 100644
index 0000000..6538854
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-menu/index.wxs
@@ -0,0 +1,16 @@
+/* eslint-disable */
+function displayTitle(item) {
+ if (item.title) {
+ return item.title;
+ }
+
+ var match = item.options.filter(function(option) {
+ return option.value === item.value;
+ });
+ var displayTitle = match.length ? match[0].text : '';
+ return displayTitle;
+}
+
+module.exports = {
+ displayTitle: displayTitle
+};
diff --git a/wxcomponents/vant/dist/dropdown-menu/index.wxss b/wxcomponents/vant/dist/dropdown-menu/index.wxss
new file mode 100644
index 0000000..dba000e
--- /dev/null
+++ b/wxcomponents/vant/dist/dropdown-menu/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-dropdown-menu{background-color:var(--dropdown-menu-background-color,#fff);box-shadow:var(--dropdown-menu-box-shadow,0 2px 12px hsla(210,1%,40%,.12));display:flex;height:var(--dropdown-menu-height,50px);-webkit-user-select:none;user-select:none}.van-dropdown-menu__item{align-items:center;display:flex;flex:1;justify-content:center;min-width:0}.van-dropdown-menu__item:active{opacity:.7}.van-dropdown-menu__item--disabled:active{opacity:1}.van-dropdown-menu__item--disabled .van-dropdown-menu__title{color:var(--dropdown-menu-title-disabled-text-color,#969799)}.van-dropdown-menu__title{box-sizing:border-box;color:var(--dropdown-menu-title-text-color,#323233);font-size:var(--dropdown-menu-title-font-size,15px);line-height:var(--dropdown-menu-title-line-height,18px);max-width:100%;padding:var(--dropdown-menu-title-padding,0 24px 0 8px);position:relative}.van-dropdown-menu__title:after{border-color:transparent transparent currentcolor currentcolor;border-style:solid;border-width:3px;content:"";margin-top:-5px;opacity:.8;position:absolute;right:11px;top:50%;transform:rotate(-45deg)}.van-dropdown-menu__title--active{color:var(--dropdown-menu-title-active-text-color,#ee0a24)}.van-dropdown-menu__title--down:after{margin-top:-1px;transform:rotate(135deg)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/empty/index.d.ts b/wxcomponents/vant/dist/empty/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/empty/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/empty/index.js b/wxcomponents/vant/dist/empty/index.js
new file mode 100644
index 0000000..842e1bb
--- /dev/null
+++ b/wxcomponents/vant/dist/empty/index.js
@@ -0,0 +1,10 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ description: String,
+ image: {
+ type: String,
+ value: 'default',
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/empty/index.json b/wxcomponents/vant/dist/empty/index.json
new file mode 100644
index 0000000..a89ef4d
--- /dev/null
+++ b/wxcomponents/vant/dist/empty/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
diff --git a/wxcomponents/vant/dist/empty/index.vue b/wxcomponents/vant/dist/empty/index.vue
new file mode 100644
index 0000000..de2e513
--- /dev/null
+++ b/wxcomponents/vant/dist/empty/index.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ description }}
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/empty/index.wxml b/wxcomponents/vant/dist/empty/index.wxml
new file mode 100644
index 0000000..9c7b719
--- /dev/null
+++ b/wxcomponents/vant/dist/empty/index.wxml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ description }}
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/empty/index.wxs b/wxcomponents/vant/dist/empty/index.wxs
new file mode 100644
index 0000000..cf92ece
--- /dev/null
+++ b/wxcomponents/vant/dist/empty/index.wxs
@@ -0,0 +1,15 @@
+/* eslint-disable */
+var PRESETS = ['error', 'search', 'default', 'network'];
+
+function imageUrl(image) {
+ if (PRESETS.indexOf(image) !== -1) {
+ return 'https://img.yzcdn.cn/vant/empty-image-' + image + '.png';
+ }
+
+ return image;
+}
+
+module.exports = {
+ imageUrl: imageUrl,
+};
+
diff --git a/wxcomponents/vant/dist/empty/index.wxss b/wxcomponents/vant/dist/empty/index.wxss
new file mode 100644
index 0000000..0fb74fe
--- /dev/null
+++ b/wxcomponents/vant/dist/empty/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-empty{align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:32px 0}.van-empty__image{height:160px;width:160px}.van-empty__image:empty{display:none}.van-empty__image__img{height:100%;width:100%}.van-empty__image:not(:empty)+.van-empty__image{display:none}.van-empty__description{color:#969799;font-size:14px;line-height:20px;margin-top:16px;padding:0 60px}.van-empty__description:empty,.van-empty__description:not(:empty)+.van-empty__description{display:none}.van-empty__bottom{margin-top:24px}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/field/index.d.ts b/wxcomponents/vant/dist/field/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/field/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/field/index.js b/wxcomponents/vant/dist/field/index.js
new file mode 100644
index 0000000..7d98207
--- /dev/null
+++ b/wxcomponents/vant/dist/field/index.js
@@ -0,0 +1,112 @@
+import { nextTick } from '../common/utils';
+import { VantComponent } from '../common/component';
+import { commonProps, inputProps, textareaProps } from './props';
+VantComponent({
+ field: true,
+ classes: ['input-class', 'right-icon-class', 'label-class'],
+ props: Object.assign(Object.assign(Object.assign(Object.assign({}, commonProps), inputProps), textareaProps), { size: String, icon: String, label: String, error: Boolean, center: Boolean, isLink: Boolean, leftIcon: String, rightIcon: String, autosize: null, required: Boolean, iconClass: String, clickable: Boolean, inputAlign: String, customStyle: String, errorMessage: String, arrowDirection: String, showWordLimit: Boolean, errorMessageAlign: String, readonly: {
+ type: Boolean,
+ observer: 'setShowClear',
+ }, clearable: {
+ type: Boolean,
+ observer: 'setShowClear',
+ }, clearTrigger: {
+ type: String,
+ value: 'focus',
+ }, border: {
+ type: Boolean,
+ value: true,
+ }, titleWidth: {
+ type: String,
+ value: '6.2em',
+ }, clearIcon: {
+ type: String,
+ value: 'clear',
+ }, extraEventParams: {
+ type: Boolean,
+ value: false,
+ } }),
+ data: {
+ focused: false,
+ innerValue: '',
+ showClear: false,
+ },
+ created() {
+ this.value = this.data.value;
+ this.setData({ innerValue: this.value });
+ },
+ methods: {
+ onInput(event) {
+ const { value = '' } = event.detail || {};
+ this.value = value;
+ this.setShowClear();
+ this.emitChange(event.detail);
+ },
+ onFocus(event) {
+ this.focused = true;
+ this.setShowClear();
+ this.$emit('focus', event.detail);
+ },
+ onBlur(event) {
+ this.focused = false;
+ this.setShowClear();
+ this.$emit('blur', event.detail);
+ },
+ onClickIcon() {
+ this.$emit('click-icon');
+ },
+ onClickInput(event) {
+ this.$emit('click-input', event.detail);
+ },
+ onClear() {
+ this.setData({ innerValue: '' });
+ this.value = '';
+ this.setShowClear();
+ nextTick(() => {
+ this.emitChange({ value: '' });
+ this.$emit('clear', '');
+ });
+ },
+ onConfirm(event) {
+ const { value = '' } = event.detail || {};
+ this.value = value;
+ this.setShowClear();
+ this.$emit('confirm', value);
+ },
+ setValue(value) {
+ this.value = value;
+ this.setShowClear();
+ if (value === '') {
+ this.setData({ innerValue: '' });
+ }
+ this.emitChange({ value });
+ },
+ onLineChange(event) {
+ this.$emit('linechange', event.detail);
+ },
+ onKeyboardHeightChange(event) {
+ this.$emit('keyboardheightchange', event.detail);
+ },
+ emitChange(detail) {
+ const { extraEventParams } = this.data;
+ this.setData({ value: detail.value });
+ nextTick(() => {
+ const data = extraEventParams ? detail : detail.value;
+ this.$emit('input', data);
+ this.$emit('change', data);
+ });
+ },
+ setShowClear() {
+ const { clearable, readonly, clearTrigger } = this.data;
+ const { focused, value } = this;
+ let showClear = false;
+ if (clearable && !readonly) {
+ const hasValue = !!value;
+ const trigger = clearTrigger === 'always' || (clearTrigger === 'focus' && focused);
+ showClear = hasValue && trigger;
+ }
+ this.setData({ showClear });
+ },
+ noop() { },
+ },
+});
diff --git a/wxcomponents/vant/dist/field/index.json b/wxcomponents/vant/dist/field/index.json
new file mode 100644
index 0000000..5906c50
--- /dev/null
+++ b/wxcomponents/vant/dist/field/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-cell": "../cell/index",
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/field/index.vue b/wxcomponents/vant/dist/field/index.vue
new file mode 100644
index 0000000..0ba592d
--- /dev/null
+++ b/wxcomponents/vant/dist/field/index.vue
@@ -0,0 +1,156 @@
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ value.length >= maxlength ? maxlength : value.length }}/{{ maxlength }}
+
+
+ {{ errorMessage }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/field/index.wxml b/wxcomponents/vant/dist/field/index.wxml
new file mode 100644
index 0000000..ec2e0ea
--- /dev/null
+++ b/wxcomponents/vant/dist/field/index.wxml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ value.length >= maxlength ? maxlength : value.length }}/{{ maxlength }}
+
+
+ {{ errorMessage }}
+
+
diff --git a/wxcomponents/vant/dist/field/index.wxs b/wxcomponents/vant/dist/field/index.wxs
new file mode 100644
index 0000000..78575b9
--- /dev/null
+++ b/wxcomponents/vant/dist/field/index.wxs
@@ -0,0 +1,18 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function inputStyle(autosize) {
+ if (autosize && autosize.constructor === 'Object') {
+ return style({
+ 'min-height': addUnit(autosize.minHeight),
+ 'max-height': addUnit(autosize.maxHeight),
+ });
+ }
+
+ return '';
+}
+
+module.exports = {
+ inputStyle: inputStyle,
+};
diff --git a/wxcomponents/vant/dist/field/index.wxss b/wxcomponents/vant/dist/field/index.wxss
new file mode 100644
index 0000000..7571fe6
--- /dev/null
+++ b/wxcomponents/vant/dist/field/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-field{--cell-icon-size:var(--field-icon-size,16px)}.van-field__label{color:var(--field-label-color,#646566)}.van-field__label--disabled{color:var(--field-disabled-text-color,#c8c9cc)}.van-field__body{align-items:center;display:flex}.van-field__body--textarea{box-sizing:border-box;line-height:1.2em;min-height:var(--cell-line-height,24px);padding:3.6px 0}.van-field__control:empty+.van-field__control{display:block}.van-field__control{background-color:initial;border:0;box-sizing:border-box;color:var(--field-input-text-color,#323233);display:none;height:var(--cell-line-height,24px);line-height:inherit;margin:0;min-height:var(--cell-line-height,24px);padding:0;position:relative;resize:none;text-align:left;width:100%}.van-field__control:empty{display:none}.van-field__control--textarea{height:var(--field-text-area-min-height,18px);min-height:var(--field-text-area-min-height,18px)}.van-field__control--error{color:var(--field-input-error-text-color,#ee0a24)}.van-field__control--disabled{background-color:initial;color:var(--field-input-disabled-text-color,#c8c9cc);opacity:1}.van-field__control--center{text-align:center}.van-field__control--right{text-align:right}.van-field__control--custom{align-items:center;display:flex;min-height:var(--cell-line-height,24px)}.van-field__placeholder{color:var(--field-placeholder-text-color,#c8c9cc);left:0;pointer-events:none;position:absolute;right:0;top:0}.van-field__placeholder--error{color:var(--field-error-message-color,#ee0a24)}.van-field__icon-root{align-items:center;display:flex;min-height:var(--cell-line-height,24px)}.van-field__clear-root,.van-field__icon-container{line-height:inherit;margin-right:calc(var(--padding-xs, 8px)*-1);padding:0 var(--padding-xs,8px);vertical-align:middle}.van-field__button,.van-field__clear-root,.van-field__icon-container{flex-shrink:0}.van-field__clear-root{color:var(--field-clear-icon-color,#c8c9cc);font-size:var(--field-clear-icon-size,16px)}.van-field__icon-container{color:var(--field-icon-container-color,#969799);font-size:var(--field-icon-size,16px)}.van-field__icon-container:empty{display:none}.van-field__button{padding-left:var(--padding-xs,8px)}.van-field__button:empty{display:none}.van-field__error-message{color:var(--field-error-message-color,#ee0a24);font-size:var(--field-error-message-text-font-size,12px);text-align:left}.van-field__error-message--center{text-align:center}.van-field__error-message--right{text-align:right}.van-field__word-limit{color:var(--field-word-limit-color,#646566);font-size:var(--field-word-limit-font-size,12px);line-height:var(--field-word-limit-line-height,16px);margin-top:var(--padding-base,4px);text-align:right}.van-field__word-num{display:inline}.van-field__word-num--full{color:var(--field-word-num-full-color,#ee0a24)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/field/input.vue b/wxcomponents/vant/dist/field/input.vue
new file mode 100644
index 0000000..ca849c1
--- /dev/null
+++ b/wxcomponents/vant/dist/field/input.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/field/input.wxml b/wxcomponents/vant/dist/field/input.wxml
new file mode 100644
index 0000000..efe9a08
--- /dev/null
+++ b/wxcomponents/vant/dist/field/input.wxml
@@ -0,0 +1,28 @@
+
diff --git a/wxcomponents/vant/dist/field/props.d.ts b/wxcomponents/vant/dist/field/props.d.ts
new file mode 100644
index 0000000..5cd130a
--- /dev/null
+++ b/wxcomponents/vant/dist/field/props.d.ts
@@ -0,0 +1,4 @@
+///
+export declare const commonProps: WechatMiniprogram.Component.PropertyOption;
+export declare const inputProps: WechatMiniprogram.Component.PropertyOption;
+export declare const textareaProps: WechatMiniprogram.Component.PropertyOption;
diff --git a/wxcomponents/vant/dist/field/props.js b/wxcomponents/vant/dist/field/props.js
new file mode 100644
index 0000000..ae405b3
--- /dev/null
+++ b/wxcomponents/vant/dist/field/props.js
@@ -0,0 +1,64 @@
+export const commonProps = {
+ value: {
+ type: String,
+ observer(value) {
+ if (value !== this.value) {
+ this.setData({ innerValue: value });
+ this.value = value;
+ }
+ },
+ },
+ placeholder: String,
+ placeholderStyle: String,
+ placeholderClass: String,
+ disabled: Boolean,
+ maxlength: {
+ type: Number,
+ value: -1,
+ },
+ cursorSpacing: {
+ type: Number,
+ value: 50,
+ },
+ autoFocus: Boolean,
+ focus: Boolean,
+ cursor: {
+ type: Number,
+ value: -1,
+ },
+ selectionStart: {
+ type: Number,
+ value: -1,
+ },
+ selectionEnd: {
+ type: Number,
+ value: -1,
+ },
+ adjustPosition: {
+ type: Boolean,
+ value: true,
+ },
+ holdKeyboard: Boolean,
+};
+export const inputProps = {
+ type: {
+ type: String,
+ value: 'text',
+ },
+ password: Boolean,
+ confirmType: String,
+ confirmHold: Boolean,
+ alwaysEmbed: Boolean,
+};
+export const textareaProps = {
+ autoHeight: Boolean,
+ fixed: Boolean,
+ showConfirmBar: {
+ type: Boolean,
+ value: true,
+ },
+ disableDefaultPadding: {
+ type: Boolean,
+ value: true,
+ },
+};
diff --git a/wxcomponents/vant/dist/field/textarea.vue b/wxcomponents/vant/dist/field/textarea.vue
new file mode 100644
index 0000000..65e348b
--- /dev/null
+++ b/wxcomponents/vant/dist/field/textarea.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/field/textarea.wxml b/wxcomponents/vant/dist/field/textarea.wxml
new file mode 100644
index 0000000..5015a51
--- /dev/null
+++ b/wxcomponents/vant/dist/field/textarea.wxml
@@ -0,0 +1,29 @@
+
diff --git a/wxcomponents/vant/dist/field/types.d.ts b/wxcomponents/vant/dist/field/types.d.ts
new file mode 100644
index 0000000..357ccbe
--- /dev/null
+++ b/wxcomponents/vant/dist/field/types.d.ts
@@ -0,0 +1,8 @@
+export interface InputDetails {
+ /** 输入框内容 */
+ value: string;
+ /** 光标位置 */
+ cursor?: number;
+ /** keyCode 为键值 (目前工具还不支持返回keyCode参数) `2.1.0` 起支持 */
+ keyCode?: number;
+}
diff --git a/wxcomponents/vant/dist/field/types.js b/wxcomponents/vant/dist/field/types.js
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/field/types.js
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/goods-action-button/index.d.ts b/wxcomponents/vant/dist/goods-action-button/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-button/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/goods-action-button/index.js b/wxcomponents/vant/dist/goods-action-button/index.js
new file mode 100644
index 0000000..06fa62c
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-button/index.js
@@ -0,0 +1,36 @@
+import { VantComponent } from '../common/component';
+import { useParent } from '../common/relation';
+import { button } from '../mixins/button';
+import { link } from '../mixins/link';
+VantComponent({
+ mixins: [link, button],
+ relation: useParent('goods-action'),
+ props: {
+ text: String,
+ color: String,
+ loading: Boolean,
+ disabled: Boolean,
+ plain: Boolean,
+ type: {
+ type: String,
+ value: 'danger',
+ },
+ },
+ methods: {
+ onClick(event) {
+ this.$emit('click', event.detail);
+ this.jumpLink();
+ },
+ updateStyle() {
+ if (this.parent == null) {
+ return;
+ }
+ const { index } = this;
+ const { children = [] } = this.parent;
+ this.setData({
+ isFirst: index === 0,
+ isLast: index === children.length - 1,
+ });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/goods-action-button/index.json b/wxcomponents/vant/dist/goods-action-button/index.json
new file mode 100644
index 0000000..b567686
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-button/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-button": "../button/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/goods-action-button/index.vue b/wxcomponents/vant/dist/goods-action-button/index.vue
new file mode 100644
index 0000000..adc4f5f
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-button/index.vue
@@ -0,0 +1,53 @@
+
+
+ {{ text }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/goods-action-button/index.wxml b/wxcomponents/vant/dist/goods-action-button/index.wxml
new file mode 100644
index 0000000..4505f21
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-button/index.wxml
@@ -0,0 +1,30 @@
+
+
+ {{ text }}
+
+
diff --git a/wxcomponents/vant/dist/goods-action-button/index.wxss b/wxcomponents/vant/dist/goods-action-button/index.wxss
new file mode 100644
index 0000000..759a1d9
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-button/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';:host{flex:1}.van-goods-action-button{--button-warning-background-color:var(--goods-action-button-warning-color,linear-gradient(to right,#ffd01e,#ff8917));--button-danger-background-color:var(--goods-action-button-danger-color,linear-gradient(to right,#ff6034,#ee0a24));--button-default-height:var(--goods-action-button-height,40px);--button-line-height:var(--goods-action-button-line-height,20px);--button-plain-background-color:var(--goods-action-button-plain-color,#fff);--button-border-width:0;display:block}.van-goods-action-button--first{--button-border-radius:999px 0 0 var(--goods-action-button-border-radius,999px);margin-left:5px}.van-goods-action-button--last{--button-border-radius:0 999px var(--goods-action-button-border-radius,999px) 0;margin-right:5px}.van-goods-action-button--first.van-goods-action-button--last{--button-border-radius:var(--goods-action-button-border-radius,999px)}.van-goods-action-button--plain{--button-border-width:1px}.van-goods-action-button__inner{font-weight:var(--font-weight-bold,500)!important;width:100%}@media (max-width:321px){.van-goods-action-button{font-size:13px}}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/goods-action-icon/index.d.ts b/wxcomponents/vant/dist/goods-action-icon/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-icon/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/goods-action-icon/index.js b/wxcomponents/vant/dist/goods-action-icon/index.js
new file mode 100644
index 0000000..02d5a37
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-icon/index.js
@@ -0,0 +1,25 @@
+import { VantComponent } from '../common/component';
+import { button } from '../mixins/button';
+import { link } from '../mixins/link';
+VantComponent({
+ classes: ['icon-class', 'text-class'],
+ mixins: [link, button],
+ props: {
+ text: String,
+ dot: Boolean,
+ info: String,
+ icon: String,
+ classPrefix: {
+ type: String,
+ value: 'van-icon',
+ },
+ disabled: Boolean,
+ loading: Boolean,
+ },
+ methods: {
+ onClick(event) {
+ this.$emit('click', event.detail);
+ this.jumpLink();
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/goods-action-icon/index.json b/wxcomponents/vant/dist/goods-action-icon/index.json
new file mode 100644
index 0000000..93bfe8a
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-icon/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-button": "../button/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/goods-action-icon/index.vue b/wxcomponents/vant/dist/goods-action-icon/index.vue
new file mode 100644
index 0000000..88cfcdb
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-icon/index.vue
@@ -0,0 +1,44 @@
+
+
+
+
+ {{ text }}
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/goods-action-icon/index.wxml b/wxcomponents/vant/dist/goods-action-icon/index.wxml
new file mode 100644
index 0000000..c769685
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-icon/index.wxml
@@ -0,0 +1,36 @@
+
+
+
+ {{ text }}
+
diff --git a/wxcomponents/vant/dist/goods-action-icon/index.wxss b/wxcomponents/vant/dist/goods-action-icon/index.wxss
new file mode 100644
index 0000000..6e4758d
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action-icon/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-goods-action-icon{border:none!important;color:var(--goods-action-icon-text-color,#646566)!important;display:flex!important;flex-direction:column;font-size:var(--goods-action-icon-font-size,10px)!important;height:var(--goods-action-icon-height,50px)!important;justify-content:center!important;line-height:1!important;min-width:var(--goods-action-icon-width,48px)}.van-goods-action-icon__icon{color:var(--goods-action-icon-color,#323233);display:flex;font-size:var(--goods-action-icon-size,18px);margin:0 auto 5px}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/goods-action/index.d.ts b/wxcomponents/vant/dist/goods-action/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/goods-action/index.js b/wxcomponents/vant/dist/goods-action/index.js
new file mode 100644
index 0000000..6b2ed74
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action/index.js
@@ -0,0 +1,15 @@
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+ relation: useChildren('goods-action-button', function () {
+ this.children.forEach((item) => {
+ item.updateStyle();
+ });
+ }),
+ props: {
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true,
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/goods-action/index.json b/wxcomponents/vant/dist/goods-action/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/goods-action/index.vue b/wxcomponents/vant/dist/goods-action/index.vue
new file mode 100644
index 0000000..44c1920
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action/index.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/goods-action/index.wxml b/wxcomponents/vant/dist/goods-action/index.wxml
new file mode 100644
index 0000000..569450c
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action/index.wxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/goods-action/index.wxss b/wxcomponents/vant/dist/goods-action/index.wxss
new file mode 100644
index 0000000..7793e77
--- /dev/null
+++ b/wxcomponents/vant/dist/goods-action/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-goods-action{align-items:center;background-color:var(--goods-action-background-color,#fff);bottom:0;box-sizing:initial;display:flex;height:var(--goods-action-height,50px);left:0;position:fixed;right:0}.van-goods-action--safe{padding-bottom:env(safe-area-inset-bottom)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/grid-item/index.d.ts b/wxcomponents/vant/dist/grid-item/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/grid-item/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/grid-item/index.js b/wxcomponents/vant/dist/grid-item/index.js
new file mode 100644
index 0000000..dbeb18a
--- /dev/null
+++ b/wxcomponents/vant/dist/grid-item/index.js
@@ -0,0 +1,52 @@
+import { VantComponent } from '../common/component';
+import { useParent } from '../common/relation';
+import { link } from '../mixins/link';
+VantComponent({
+ relation: useParent('grid'),
+ classes: ['content-class', 'icon-class', 'text-class'],
+ mixins: [link],
+ props: {
+ icon: String,
+ iconColor: String,
+ iconPrefix: {
+ type: String,
+ value: 'van-icon',
+ },
+ dot: Boolean,
+ info: null,
+ badge: null,
+ text: String,
+ useSlot: Boolean,
+ },
+ data: {
+ viewStyle: '',
+ },
+ mounted() {
+ this.updateStyle();
+ },
+ methods: {
+ updateStyle() {
+ if (!this.parent) {
+ return;
+ }
+ const { data, children } = this.parent;
+ const { columnNum, border, square, gutter, clickable, center, direction, reverse, iconSize, } = data;
+ this.setData({
+ center,
+ border,
+ square,
+ gutter,
+ clickable,
+ direction,
+ reverse,
+ iconSize,
+ index: children.indexOf(this),
+ columnNum,
+ });
+ },
+ onClick() {
+ this.$emit('click');
+ this.jumpLink();
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/grid-item/index.json b/wxcomponents/vant/dist/grid-item/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/wxcomponents/vant/dist/grid-item/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/grid-item/index.vue b/wxcomponents/vant/dist/grid-item/index.vue
new file mode 100644
index 0000000..55004f7
--- /dev/null
+++ b/wxcomponents/vant/dist/grid-item/index.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/grid-item/index.wxml b/wxcomponents/vant/dist/grid-item/index.wxml
new file mode 100644
index 0000000..e95087d
--- /dev/null
+++ b/wxcomponents/vant/dist/grid-item/index.wxml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/grid-item/index.wxs b/wxcomponents/vant/dist/grid-item/index.wxs
new file mode 100644
index 0000000..2cfe37d
--- /dev/null
+++ b/wxcomponents/vant/dist/grid-item/index.wxs
@@ -0,0 +1,32 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function wrapperStyle(data) {
+ var width = 100 / data.columnNum + '%';
+
+ return style({
+ width: width,
+ 'padding-top': data.square ? width : null,
+ 'padding-right': addUnit(data.gutter),
+ 'margin-top':
+ data.index >= data.columnNum && !data.square
+ ? addUnit(data.gutter)
+ : null,
+ });
+}
+
+function contentStyle(data) {
+ return data.square
+ ? style({
+ right: addUnit(data.gutter),
+ bottom: addUnit(data.gutter),
+ height: 'auto',
+ })
+ : '';
+}
+
+module.exports = {
+ wrapperStyle: wrapperStyle,
+ contentStyle: contentStyle,
+};
diff --git a/wxcomponents/vant/dist/grid-item/index.wxss b/wxcomponents/vant/dist/grid-item/index.wxss
new file mode 100644
index 0000000..acaea84
--- /dev/null
+++ b/wxcomponents/vant/dist/grid-item/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-grid-item{box-sizing:border-box;float:left;position:relative}.van-grid-item--square{height:0}.van-grid-item__content{background-color:var(--grid-item-content-background-color,#fff);box-sizing:border-box;display:flex;flex-direction:column;height:100%;padding:var(--grid-item-content-padding,16px 8px)}.van-grid-item__content:after{border-width:0 1px 1px 0;z-index:1}.van-grid-item__content--surround:after{border-width:1px}.van-grid-item__content--center{align-items:center;justify-content:center}.van-grid-item__content--square{left:0;position:absolute;right:0;top:0}.van-grid-item__content--horizontal{flex-direction:row}.van-grid-item__content--horizontal .van-grid-item__text{margin:0 0 0 8px}.van-grid-item__content--reverse{flex-direction:column-reverse}.van-grid-item__content--reverse .van-grid-item__text{margin:0 0 8px}.van-grid-item__content--horizontal.van-grid-item__content--reverse{flex-direction:row-reverse}.van-grid-item__content--horizontal.van-grid-item__content--reverse .van-grid-item__text{margin:0 8px 0 0}.van-grid-item__content--clickable:active{background-color:var(--grid-item-content-active-color,#f2f3f5)}.van-grid-item__icon{align-items:center;display:flex;font-size:var(--grid-item-icon-size,26px);height:var(--grid-item-icon-size,26px)}.van-grid-item__text{word-wrap:break-word;color:var(--grid-item-text-color,#646566);font-size:var(--grid-item-text-font-size,12px)}.van-grid-item__icon+.van-grid-item__text{margin-top:8px}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/grid/index.d.ts b/wxcomponents/vant/dist/grid/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/grid/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/grid/index.js b/wxcomponents/vant/dist/grid/index.js
new file mode 100644
index 0000000..41dfa4c
--- /dev/null
+++ b/wxcomponents/vant/dist/grid/index.js
@@ -0,0 +1,55 @@
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+ relation: useChildren('grid-item'),
+ props: {
+ square: {
+ type: Boolean,
+ observer: 'updateChildren',
+ },
+ gutter: {
+ type: null,
+ value: 0,
+ observer: 'updateChildren',
+ },
+ clickable: {
+ type: Boolean,
+ observer: 'updateChildren',
+ },
+ columnNum: {
+ type: Number,
+ value: 4,
+ observer: 'updateChildren',
+ },
+ center: {
+ type: Boolean,
+ value: true,
+ observer: 'updateChildren',
+ },
+ border: {
+ type: Boolean,
+ value: true,
+ observer: 'updateChildren',
+ },
+ direction: {
+ type: String,
+ observer: 'updateChildren',
+ },
+ iconSize: {
+ type: String,
+ observer: 'updateChildren',
+ },
+ reverse: {
+ type: Boolean,
+ value: false,
+ observer: 'updateChildren',
+ },
+ },
+ methods: {
+ updateChildren() {
+ this.children.forEach((child) => {
+ child.updateStyle();
+ });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/grid/index.json b/wxcomponents/vant/dist/grid/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/grid/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/grid/index.vue b/wxcomponents/vant/dist/grid/index.vue
new file mode 100644
index 0000000..44549c0
--- /dev/null
+++ b/wxcomponents/vant/dist/grid/index.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/grid/index.wxml b/wxcomponents/vant/dist/grid/index.wxml
new file mode 100644
index 0000000..2e4118f
--- /dev/null
+++ b/wxcomponents/vant/dist/grid/index.wxml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/grid/index.wxs b/wxcomponents/vant/dist/grid/index.wxs
new file mode 100644
index 0000000..cd3b1bd
--- /dev/null
+++ b/wxcomponents/vant/dist/grid/index.wxs
@@ -0,0 +1,13 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function rootStyle(data) {
+ return style({
+ 'padding-left': addUnit(data.gutter),
+ });
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+};
diff --git a/wxcomponents/vant/dist/grid/index.wxss b/wxcomponents/vant/dist/grid/index.wxss
new file mode 100644
index 0000000..e347440
--- /dev/null
+++ b/wxcomponents/vant/dist/grid/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-grid{box-sizing:border-box;overflow:hidden;position:relative}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/icon/index.d.ts b/wxcomponents/vant/dist/icon/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/icon/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/icon/index.js b/wxcomponents/vant/dist/icon/index.js
new file mode 100644
index 0000000..34fee33
--- /dev/null
+++ b/wxcomponents/vant/dist/icon/index.js
@@ -0,0 +1,20 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ dot: Boolean,
+ info: null,
+ size: null,
+ color: String,
+ customStyle: String,
+ classPrefix: {
+ type: String,
+ value: 'van-icon',
+ },
+ name: String,
+ },
+ methods: {
+ onClick() {
+ this.$emit('click');
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/icon/index.json b/wxcomponents/vant/dist/icon/index.json
new file mode 100644
index 0000000..bf0ebe0
--- /dev/null
+++ b/wxcomponents/vant/dist/icon/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-info": "../info/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/icon/index.vue b/wxcomponents/vant/dist/icon/index.vue
new file mode 100644
index 0000000..bc3c091
--- /dev/null
+++ b/wxcomponents/vant/dist/icon/index.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/icon/index.wxml b/wxcomponents/vant/dist/icon/index.wxml
new file mode 100644
index 0000000..3c70174
--- /dev/null
+++ b/wxcomponents/vant/dist/icon/index.wxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/icon/index.wxs b/wxcomponents/vant/dist/icon/index.wxs
new file mode 100644
index 0000000..e29ecd0
--- /dev/null
+++ b/wxcomponents/vant/dist/icon/index.wxs
@@ -0,0 +1,43 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function isImage(name) {
+ return name.indexOf('/') !== -1;
+}
+
+function rootClass(data) {
+ var classes = ['custom-class'];
+
+ if (data.classPrefix != null) {
+ classes.push(data.classPrefix);
+ }
+
+ if (data.classPrefix !== 'van-icon') {
+ classes.push('van-icon')
+ }
+
+ if (isImage(data.name)) {
+ classes.push('van-icon--image');
+ } else if (data.classPrefix != null) {
+ classes.push(data.classPrefix + '-' + data.name);
+ }
+
+ return classes.join(' ');
+}
+
+function rootStyle(data) {
+ return style([
+ {
+ color: data.color,
+ 'font-size': addUnit(data.size),
+ },
+ data.customStyle,
+ ]);
+}
+
+module.exports = {
+ isImage: isImage,
+ rootClass: rootClass,
+ rootStyle: rootStyle,
+};
diff --git a/wxcomponents/vant/dist/icon/index.wxss b/wxcomponents/vant/dist/icon/index.wxss
new file mode 100644
index 0000000..61a7d68
--- /dev/null
+++ b/wxcomponents/vant/dist/icon/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-icon{text-rendering:auto;-webkit-font-smoothing:antialiased;font:normal normal normal 14px/1 vant-icon;font-size:inherit;position:relative}.van-icon,.van-icon:before{display:inline-block}.van-icon-exchange:before{content:"\e6af"}.van-icon-eye:before{content:"\e6b0"}.van-icon-enlarge:before{content:"\e6b1"}.van-icon-expand-o:before{content:"\e6b2"}.van-icon-eye-o:before{content:"\e6b3"}.van-icon-expand:before{content:"\e6b4"}.van-icon-filter-o:before{content:"\e6b5"}.van-icon-fire:before{content:"\e6b6"}.van-icon-fail:before{content:"\e6b7"}.van-icon-failure:before{content:"\e6b8"}.van-icon-fire-o:before{content:"\e6b9"}.van-icon-flag-o:before{content:"\e6ba"}.van-icon-font:before{content:"\e6bb"}.van-icon-font-o:before{content:"\e6bc"}.van-icon-gem-o:before{content:"\e6bd"}.van-icon-flower-o:before{content:"\e6be"}.van-icon-gem:before{content:"\e6bf"}.van-icon-gift-card:before{content:"\e6c0"}.van-icon-friends:before{content:"\e6c1"}.van-icon-friends-o:before{content:"\e6c2"}.van-icon-gold-coin:before{content:"\e6c3"}.van-icon-gold-coin-o:before{content:"\e6c4"}.van-icon-good-job-o:before{content:"\e6c5"}.van-icon-gift:before{content:"\e6c6"}.van-icon-gift-o:before{content:"\e6c7"}.van-icon-gift-card-o:before{content:"\e6c8"}.van-icon-good-job:before{content:"\e6c9"}.van-icon-home-o:before{content:"\e6ca"}.van-icon-goods-collect:before{content:"\e6cb"}.van-icon-graphic:before{content:"\e6cc"}.van-icon-goods-collect-o:before{content:"\e6cd"}.van-icon-hot-o:before{content:"\e6ce"}.van-icon-info:before{content:"\e6cf"}.van-icon-hotel-o:before{content:"\e6d0"}.van-icon-info-o:before{content:"\e6d1"}.van-icon-hot-sale-o:before{content:"\e6d2"}.van-icon-hot:before{content:"\e6d3"}.van-icon-like:before{content:"\e6d4"}.van-icon-idcard:before{content:"\e6d5"}.van-icon-invitation:before{content:"\e6d6"}.van-icon-like-o:before{content:"\e6d7"}.van-icon-hot-sale:before{content:"\e6d8"}.van-icon-location-o:before{content:"\e6d9"}.van-icon-location:before{content:"\e6da"}.van-icon-label:before{content:"\e6db"}.van-icon-lock:before{content:"\e6dc"}.van-icon-label-o:before{content:"\e6dd"}.van-icon-map-marked:before{content:"\e6de"}.van-icon-logistics:before{content:"\e6df"}.van-icon-manager:before{content:"\e6e0"}.van-icon-more:before{content:"\e6e1"}.van-icon-live:before{content:"\e6e2"}.van-icon-manager-o:before{content:"\e6e3"}.van-icon-medal:before{content:"\e6e4"}.van-icon-more-o:before{content:"\e6e5"}.van-icon-music-o:before{content:"\e6e6"}.van-icon-music:before{content:"\e6e7"}.van-icon-new-arrival-o:before{content:"\e6e8"}.van-icon-medal-o:before{content:"\e6e9"}.van-icon-new-o:before{content:"\e6ea"}.van-icon-free-postage:before{content:"\e6eb"}.van-icon-newspaper-o:before{content:"\e6ec"}.van-icon-new-arrival:before{content:"\e6ed"}.van-icon-minus:before{content:"\e6ee"}.van-icon-orders-o:before{content:"\e6ef"}.van-icon-new:before{content:"\e6f0"}.van-icon-paid:before{content:"\e6f1"}.van-icon-notes-o:before{content:"\e6f2"}.van-icon-other-pay:before{content:"\e6f3"}.van-icon-pause-circle:before{content:"\e6f4"}.van-icon-pause:before{content:"\e6f5"}.van-icon-pause-circle-o:before{content:"\e6f6"}.van-icon-peer-pay:before{content:"\e6f7"}.van-icon-pending-payment:before{content:"\e6f8"}.van-icon-passed:before{content:"\e6f9"}.van-icon-plus:before{content:"\e6fa"}.van-icon-phone-circle-o:before{content:"\e6fb"}.van-icon-phone-o:before{content:"\e6fc"}.van-icon-printer:before{content:"\e6fd"}.van-icon-photo-fail:before{content:"\e6fe"}.van-icon-phone:before{content:"\e6ff"}.van-icon-photo-o:before{content:"\e700"}.van-icon-play-circle:before{content:"\e701"}.van-icon-play:before{content:"\e702"}.van-icon-phone-circle:before{content:"\e703"}.van-icon-point-gift-o:before{content:"\e704"}.van-icon-point-gift:before{content:"\e705"}.van-icon-play-circle-o:before{content:"\e706"}.van-icon-shrink:before{content:"\e707"}.van-icon-photo:before{content:"\e708"}.van-icon-qr:before{content:"\e709"}.van-icon-qr-invalid:before{content:"\e70a"}.van-icon-question-o:before{content:"\e70b"}.van-icon-revoke:before{content:"\e70c"}.van-icon-replay:before{content:"\e70d"}.van-icon-service:before{content:"\e70e"}.van-icon-question:before{content:"\e70f"}.van-icon-search:before{content:"\e710"}.van-icon-refund-o:before{content:"\e711"}.van-icon-service-o:before{content:"\e712"}.van-icon-scan:before{content:"\e713"}.van-icon-share:before{content:"\e714"}.van-icon-send-gift-o:before{content:"\e715"}.van-icon-share-o:before{content:"\e716"}.van-icon-setting:before{content:"\e717"}.van-icon-points:before{content:"\e718"}.van-icon-photograph:before{content:"\e719"}.van-icon-shop:before{content:"\e71a"}.van-icon-shop-o:before{content:"\e71b"}.van-icon-shop-collect-o:before{content:"\e71c"}.van-icon-shop-collect:before{content:"\e71d"}.van-icon-smile:before{content:"\e71e"}.van-icon-shopping-cart-o:before{content:"\e71f"}.van-icon-sign:before{content:"\e720"}.van-icon-sort:before{content:"\e721"}.van-icon-star-o:before{content:"\e722"}.van-icon-smile-comment-o:before{content:"\e723"}.van-icon-stop:before{content:"\e724"}.van-icon-stop-circle-o:before{content:"\e725"}.van-icon-smile-o:before{content:"\e726"}.van-icon-star:before{content:"\e727"}.van-icon-success:before{content:"\e728"}.van-icon-stop-circle:before{content:"\e729"}.van-icon-records:before{content:"\e72a"}.van-icon-shopping-cart:before{content:"\e72b"}.van-icon-tosend:before{content:"\e72c"}.van-icon-todo-list:before{content:"\e72d"}.van-icon-thumb-circle-o:before{content:"\e72e"}.van-icon-thumb-circle:before{content:"\e72f"}.van-icon-umbrella-circle:before{content:"\e730"}.van-icon-underway:before{content:"\e731"}.van-icon-upgrade:before{content:"\e732"}.van-icon-todo-list-o:before{content:"\e733"}.van-icon-tv-o:before{content:"\e734"}.van-icon-underway-o:before{content:"\e735"}.van-icon-user-o:before{content:"\e736"}.van-icon-vip-card-o:before{content:"\e737"}.van-icon-vip-card:before{content:"\e738"}.van-icon-send-gift:before{content:"\e739"}.van-icon-wap-home:before{content:"\e73a"}.van-icon-wap-nav:before{content:"\e73b"}.van-icon-volume-o:before{content:"\e73c"}.van-icon-video:before{content:"\e73d"}.van-icon-wap-home-o:before{content:"\e73e"}.van-icon-volume:before{content:"\e73f"}.van-icon-warning:before{content:"\e740"}.van-icon-weapp-nav:before{content:"\e741"}.van-icon-wechat-pay:before{content:"\e742"}.van-icon-warning-o:before{content:"\e743"}.van-icon-wechat:before{content:"\e744"}.van-icon-setting-o:before{content:"\e745"}.van-icon-youzan-shield:before{content:"\e746"}.van-icon-warn-o:before{content:"\e747"}.van-icon-smile-comment:before{content:"\e748"}.van-icon-user-circle-o:before{content:"\e749"}.van-icon-video-o:before{content:"\e74a"}.van-icon-add-square:before{content:"\e65c"}.van-icon-add:before{content:"\e65d"}.van-icon-arrow-down:before{content:"\e65e"}.van-icon-arrow-up:before{content:"\e65f"}.van-icon-arrow:before{content:"\e660"}.van-icon-after-sale:before{content:"\e661"}.van-icon-add-o:before{content:"\e662"}.van-icon-alipay:before{content:"\e663"}.van-icon-ascending:before{content:"\e664"}.van-icon-apps-o:before{content:"\e665"}.van-icon-aim:before{content:"\e666"}.van-icon-award:before{content:"\e667"}.van-icon-arrow-left:before{content:"\e668"}.van-icon-award-o:before{content:"\e669"}.van-icon-audio:before{content:"\e66a"}.van-icon-bag-o:before{content:"\e66b"}.van-icon-balance-list:before{content:"\e66c"}.van-icon-back-top:before{content:"\e66d"}.van-icon-bag:before{content:"\e66e"}.van-icon-balance-pay:before{content:"\e66f"}.van-icon-balance-o:before{content:"\e670"}.van-icon-bar-chart-o:before{content:"\e671"}.van-icon-bars:before{content:"\e672"}.van-icon-balance-list-o:before{content:"\e673"}.van-icon-birthday-cake-o:before{content:"\e674"}.van-icon-bookmark:before{content:"\e675"}.van-icon-bill:before{content:"\e676"}.van-icon-bell:before{content:"\e677"}.van-icon-browsing-history-o:before{content:"\e678"}.van-icon-browsing-history:before{content:"\e679"}.van-icon-bookmark-o:before{content:"\e67a"}.van-icon-bulb-o:before{content:"\e67b"}.van-icon-bullhorn-o:before{content:"\e67c"}.van-icon-bill-o:before{content:"\e67d"}.van-icon-calendar-o:before{content:"\e67e"}.van-icon-brush-o:before{content:"\e67f"}.van-icon-card:before{content:"\e680"}.van-icon-cart-o:before{content:"\e681"}.van-icon-cart-circle:before{content:"\e682"}.van-icon-cart-circle-o:before{content:"\e683"}.van-icon-cart:before{content:"\e684"}.van-icon-cash-on-deliver:before{content:"\e685"}.van-icon-cash-back-record:before{content:"\e686"}.van-icon-cashier-o:before{content:"\e687"}.van-icon-chart-trending-o:before{content:"\e688"}.van-icon-certificate:before{content:"\e689"}.van-icon-chat:before{content:"\e68a"}.van-icon-clear:before{content:"\e68b"}.van-icon-chat-o:before{content:"\e68c"}.van-icon-checked:before{content:"\e68d"}.van-icon-clock:before{content:"\e68e"}.van-icon-clock-o:before{content:"\e68f"}.van-icon-close:before{content:"\e690"}.van-icon-closed-eye:before{content:"\e691"}.van-icon-circle:before{content:"\e692"}.van-icon-cluster-o:before{content:"\e693"}.van-icon-column:before{content:"\e694"}.van-icon-comment-circle-o:before{content:"\e695"}.van-icon-cluster:before{content:"\e696"}.van-icon-comment:before{content:"\e697"}.van-icon-comment-o:before{content:"\e698"}.van-icon-comment-circle:before{content:"\e699"}.van-icon-completed:before{content:"\e69a"}.van-icon-credit-pay:before{content:"\e69b"}.van-icon-coupon:before{content:"\e69c"}.van-icon-debit-pay:before{content:"\e69d"}.van-icon-coupon-o:before{content:"\e69e"}.van-icon-contact:before{content:"\e69f"}.van-icon-descending:before{content:"\e6a0"}.van-icon-desktop-o:before{content:"\e6a1"}.van-icon-diamond-o:before{content:"\e6a2"}.van-icon-description:before{content:"\e6a3"}.van-icon-delete:before{content:"\e6a4"}.van-icon-diamond:before{content:"\e6a5"}.van-icon-delete-o:before{content:"\e6a6"}.van-icon-cross:before{content:"\e6a7"}.van-icon-edit:before{content:"\e6a8"}.van-icon-ellipsis:before{content:"\e6a9"}.van-icon-down:before{content:"\e6aa"}.van-icon-discount:before{content:"\e6ab"}.van-icon-ecard-pay:before{content:"\e6ac"}.van-icon-envelop-o:before{content:"\e6ae"}.van-icon-shield-o:before{content:"\e74b"}.van-icon-guide-o:before{content:"\e74c"}.van-icon-cash-o:before{content:"\e74d"}.van-icon-qq:before{content:"\e74e"}.van-icon-wechat-moments:before{content:"\e74f"}.van-icon-weibo:before{content:"\e750"}.van-icon-link-o:before{content:"\e751"}.van-icon-miniprogram-o:before{content:"\e752"}@font-face{font-display:auto;font-family:vant-icon;font-style:normal;font-weight:400;src:url(https://at.alicdn.com/t/font_2553510_iv4v8nulyz.woff2?t=1649083952952) format("woff2"),url(https://at.alicdn.com/t/font_2553510_iv4v8nulyz.woff?t=1649083952952) format("woff"),url(https://at.alicdn.com/t/font_2553510_iv4v8nulyz.ttf?t=1649083952952) format("truetype")}:host{align-items:center;display:inline-flex;justify-content:center}.van-icon--image{height:1em;width:1em}.van-icon__image{height:100%;width:100%}.van-icon__info{z-index:1}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/image/index.d.ts b/wxcomponents/vant/dist/image/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/image/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/image/index.js b/wxcomponents/vant/dist/image/index.js
new file mode 100644
index 0000000..a9d007e
--- /dev/null
+++ b/wxcomponents/vant/dist/image/index.js
@@ -0,0 +1,64 @@
+import { VantComponent } from '../common/component';
+import { button } from '../mixins/button';
+VantComponent({
+ mixins: [button],
+ classes: ['custom-class', 'loading-class', 'error-class', 'image-class'],
+ props: {
+ src: {
+ type: String,
+ observer() {
+ this.setData({
+ error: false,
+ loading: true,
+ });
+ },
+ },
+ round: Boolean,
+ width: null,
+ height: null,
+ radius: null,
+ lazyLoad: Boolean,
+ useErrorSlot: Boolean,
+ useLoadingSlot: Boolean,
+ showMenuByLongpress: Boolean,
+ fit: {
+ type: String,
+ value: 'fill',
+ },
+ webp: {
+ type: Boolean,
+ value: false,
+ },
+ showError: {
+ type: Boolean,
+ value: true,
+ },
+ showLoading: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ data: {
+ error: false,
+ loading: true,
+ viewStyle: '',
+ },
+ methods: {
+ onLoad(event) {
+ this.setData({
+ loading: false,
+ });
+ this.$emit('load', event.detail);
+ },
+ onError(event) {
+ this.setData({
+ loading: false,
+ error: true,
+ });
+ this.$emit('error', event.detail);
+ },
+ onClick(event) {
+ this.$emit('click', event.detail);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/image/index.json b/wxcomponents/vant/dist/image/index.json
new file mode 100644
index 0000000..e00a588
--- /dev/null
+++ b/wxcomponents/vant/dist/image/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-loading": "../loading/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/image/index.vue b/wxcomponents/vant/dist/image/index.vue
new file mode 100644
index 0000000..e62d996
--- /dev/null
+++ b/wxcomponents/vant/dist/image/index.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/image/index.wxml b/wxcomponents/vant/dist/image/index.wxml
new file mode 100644
index 0000000..a6f573c
--- /dev/null
+++ b/wxcomponents/vant/dist/image/index.wxml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/image/index.wxs b/wxcomponents/vant/dist/image/index.wxs
new file mode 100644
index 0000000..cec14b8
--- /dev/null
+++ b/wxcomponents/vant/dist/image/index.wxs
@@ -0,0 +1,32 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function rootStyle(data) {
+ return style([
+ {
+ width: addUnit(data.width),
+ height: addUnit(data.height),
+ 'border-radius': addUnit(data.radius),
+ },
+ data.radius ? 'overflow: hidden' : null,
+ ]);
+}
+
+var FIT_MODE_MAP = {
+ none: 'center',
+ fill: 'scaleToFill',
+ cover: 'aspectFill',
+ contain: 'aspectFit',
+ widthFix: 'widthFix',
+ heightFix: 'heightFix',
+};
+
+function mode(fit) {
+ return FIT_MODE_MAP[fit];
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+ mode: mode,
+};
diff --git a/wxcomponents/vant/dist/image/index.wxss b/wxcomponents/vant/dist/image/index.wxss
new file mode 100644
index 0000000..a9c6ebb
--- /dev/null
+++ b/wxcomponents/vant/dist/image/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-image{display:inline-block;position:relative}.van-image--round{border-radius:50%;overflow:hidden}.van-image--round .van-image__img{border-radius:inherit}.van-image__error,.van-image__img,.van-image__loading{display:block;height:100%;width:100%}.van-image__error,.van-image__loading{align-items:center;background-color:var(--image-placeholder-background-color,#f7f8fa);color:var(--image-placeholder-text-color,#969799);display:flex;flex-direction:column;font-size:var(--image-placeholder-font-size,14px);justify-content:center;left:0;position:absolute;top:0}.van-image__loading-icon{color:var(--image-loading-icon-color,#dcdee0);font-size:var(--image-loading-icon-size,32px)!important}.van-image__error-icon{color:var(--image-error-icon-color,#dcdee0);font-size:var(--image-error-icon-size,32px)!important}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/index-anchor/index.d.ts b/wxcomponents/vant/dist/index-anchor/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/index-anchor/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/index-anchor/index.js b/wxcomponents/vant/dist/index-anchor/index.js
new file mode 100644
index 0000000..85265e9
--- /dev/null
+++ b/wxcomponents/vant/dist/index-anchor/index.js
@@ -0,0 +1,25 @@
+import { getRect } from '../common/utils';
+import { VantComponent } from '../common/component';
+import { useParent } from '../common/relation';
+VantComponent({
+ relation: useParent('index-bar'),
+ props: {
+ useSlot: Boolean,
+ index: null,
+ },
+ data: {
+ active: false,
+ wrapperStyle: '',
+ anchorStyle: '',
+ },
+ methods: {
+ scrollIntoView(scrollTop) {
+ getRect(this, '.van-index-anchor-wrapper').then((rect) => {
+ wx.pageScrollTo({
+ duration: 0,
+ scrollTop: scrollTop + rect.top - this.parent.data.stickyOffsetTop,
+ });
+ });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/index-anchor/index.json b/wxcomponents/vant/dist/index-anchor/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/index-anchor/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/index-anchor/index.vue b/wxcomponents/vant/dist/index-anchor/index.vue
new file mode 100644
index 0000000..25711a3
--- /dev/null
+++ b/wxcomponents/vant/dist/index-anchor/index.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+ {{ index }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/index-anchor/index.wxml b/wxcomponents/vant/dist/index-anchor/index.wxml
new file mode 100644
index 0000000..49affa7
--- /dev/null
+++ b/wxcomponents/vant/dist/index-anchor/index.wxml
@@ -0,0 +1,14 @@
+
+
+
+
+ {{ index }}
+
+
+
diff --git a/wxcomponents/vant/dist/index-anchor/index.wxss b/wxcomponents/vant/dist/index-anchor/index.wxss
new file mode 100644
index 0000000..4b91560
--- /dev/null
+++ b/wxcomponents/vant/dist/index-anchor/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-index-anchor{background-color:var(--index-anchor-background-color,transparent);color:var(--index-anchor-text-color,#323233);font-size:var(--index-anchor-font-size,14px);font-weight:var(--index-anchor-font-weight,500);line-height:var(--index-anchor-line-height,32px);padding:var(--index-anchor-padding,0 16px)}.van-index-anchor--active{background-color:var(--index-anchor-active-background-color,#fff);color:var(--index-anchor-active-text-color,#07c160);left:0;right:0}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/index-bar/index.d.ts b/wxcomponents/vant/dist/index-bar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/index-bar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/index-bar/index.js b/wxcomponents/vant/dist/index-bar/index.js
new file mode 100644
index 0000000..c541b89
--- /dev/null
+++ b/wxcomponents/vant/dist/index-bar/index.js
@@ -0,0 +1,246 @@
+import { GREEN } from '../common/color';
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+import { getRect, isDef } from '../common/utils';
+import { pageScrollMixin } from '../mixins/page-scroll';
+const indexList = () => {
+ const indexList = [];
+ const charCodeOfA = 'A'.charCodeAt(0);
+ for (let i = 0; i < 26; i++) {
+ indexList.push(String.fromCharCode(charCodeOfA + i));
+ }
+ return indexList;
+};
+VantComponent({
+ relation: useChildren('index-anchor', function () {
+ this.updateData();
+ }),
+ props: {
+ sticky: {
+ type: Boolean,
+ value: true,
+ },
+ zIndex: {
+ type: Number,
+ value: 1,
+ },
+ highlightColor: {
+ type: String,
+ value: GREEN,
+ },
+ stickyOffsetTop: {
+ type: Number,
+ value: 0,
+ },
+ indexList: {
+ type: Array,
+ value: indexList(),
+ },
+ },
+ mixins: [
+ pageScrollMixin(function (event) {
+ this.scrollTop = (event === null || event === void 0 ? void 0 : event.scrollTop) || 0;
+ this.onScroll();
+ }),
+ ],
+ data: {
+ activeAnchorIndex: null,
+ showSidebar: false,
+ },
+ created() {
+ this.scrollTop = 0;
+ },
+ methods: {
+ updateData() {
+ wx.nextTick(() => {
+ if (this.timer != null) {
+ clearTimeout(this.timer);
+ }
+ this.timer = setTimeout(() => {
+ this.setData({
+ showSidebar: !!this.children.length,
+ });
+ this.setRect().then(() => {
+ this.onScroll();
+ });
+ }, 0);
+ });
+ },
+ setRect() {
+ return Promise.all([
+ this.setAnchorsRect(),
+ this.setListRect(),
+ this.setSiderbarRect(),
+ ]);
+ },
+ setAnchorsRect() {
+ return Promise.all(this.children.map((anchor) => getRect(anchor, '.van-index-anchor-wrapper').then((rect) => {
+ Object.assign(anchor, {
+ height: rect.height,
+ top: rect.top + this.scrollTop,
+ });
+ })));
+ },
+ setListRect() {
+ return getRect(this, '.van-index-bar').then((rect) => {
+ if (!isDef(rect)) {
+ return;
+ }
+ Object.assign(this, {
+ height: rect.height,
+ top: rect.top + this.scrollTop,
+ });
+ });
+ },
+ setSiderbarRect() {
+ return getRect(this, '.van-index-bar__sidebar').then((res) => {
+ if (!isDef(res)) {
+ return;
+ }
+ this.sidebar = {
+ height: res.height,
+ top: res.top,
+ };
+ });
+ },
+ setDiffData({ target, data }) {
+ const diffData = {};
+ Object.keys(data).forEach((key) => {
+ if (target.data[key] !== data[key]) {
+ diffData[key] = data[key];
+ }
+ });
+ if (Object.keys(diffData).length) {
+ target.setData(diffData);
+ }
+ },
+ getAnchorRect(anchor) {
+ return getRect(anchor, '.van-index-anchor-wrapper').then((rect) => ({
+ height: rect.height,
+ top: rect.top,
+ }));
+ },
+ getActiveAnchorIndex() {
+ const { children, scrollTop } = this;
+ const { sticky, stickyOffsetTop } = this.data;
+ for (let i = this.children.length - 1; i >= 0; i--) {
+ const preAnchorHeight = i > 0 ? children[i - 1].height : 0;
+ const reachTop = sticky ? preAnchorHeight + stickyOffsetTop : 0;
+ if (reachTop + scrollTop >= children[i].top) {
+ return i;
+ }
+ }
+ return -1;
+ },
+ onScroll() {
+ const { children = [], scrollTop } = this;
+ if (!children.length) {
+ return;
+ }
+ const { sticky, stickyOffsetTop, zIndex, highlightColor } = this.data;
+ const active = this.getActiveAnchorIndex();
+ this.setDiffData({
+ target: this,
+ data: {
+ activeAnchorIndex: active,
+ },
+ });
+ if (sticky) {
+ let isActiveAnchorSticky = false;
+ if (active !== -1) {
+ isActiveAnchorSticky =
+ children[active].top <= stickyOffsetTop + scrollTop;
+ }
+ children.forEach((item, index) => {
+ if (index === active) {
+ let wrapperStyle = '';
+ let anchorStyle = `
+ color: ${highlightColor};
+ `;
+ if (isActiveAnchorSticky) {
+ wrapperStyle = `
+ height: ${children[index].height}px;
+ `;
+ anchorStyle = `
+ position: fixed;
+ top: ${stickyOffsetTop}px;
+ z-index: ${zIndex};
+ color: ${highlightColor};
+ `;
+ }
+ this.setDiffData({
+ target: item,
+ data: {
+ active: true,
+ anchorStyle,
+ wrapperStyle,
+ },
+ });
+ }
+ else if (index === active - 1) {
+ const currentAnchor = children[index];
+ const currentOffsetTop = currentAnchor.top;
+ const targetOffsetTop = index === children.length - 1
+ ? this.top
+ : children[index + 1].top;
+ const parentOffsetHeight = targetOffsetTop - currentOffsetTop;
+ const translateY = parentOffsetHeight - currentAnchor.height;
+ const anchorStyle = `
+ position: relative;
+ transform: translate3d(0, ${translateY}px, 0);
+ z-index: ${zIndex};
+ color: ${highlightColor};
+ `;
+ this.setDiffData({
+ target: item,
+ data: {
+ active: true,
+ anchorStyle,
+ },
+ });
+ }
+ else {
+ this.setDiffData({
+ target: item,
+ data: {
+ active: false,
+ anchorStyle: '',
+ wrapperStyle: '',
+ },
+ });
+ }
+ });
+ }
+ },
+ onClick(event) {
+ this.scrollToAnchor(event.target.dataset.index);
+ },
+ onTouchMove(event) {
+ const sidebarLength = this.children.length;
+ const touch = event.touches[0];
+ const itemHeight = this.sidebar.height / sidebarLength;
+ let index = Math.floor((touch.clientY - this.sidebar.top) / itemHeight);
+ if (index < 0) {
+ index = 0;
+ }
+ else if (index > sidebarLength - 1) {
+ index = sidebarLength - 1;
+ }
+ this.scrollToAnchor(index);
+ },
+ onTouchStop() {
+ this.scrollToAnchorIndex = null;
+ },
+ scrollToAnchor(index) {
+ if (typeof index !== 'number' || this.scrollToAnchorIndex === index) {
+ return;
+ }
+ this.scrollToAnchorIndex = index;
+ const anchor = this.children.find((item) => item.data.index === this.data.indexList[index]);
+ if (anchor) {
+ anchor.scrollIntoView(this.scrollTop);
+ this.$emit('select', anchor.data.index);
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/index-bar/index.json b/wxcomponents/vant/dist/index-bar/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/index-bar/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/index-bar/index.vue b/wxcomponents/vant/dist/index-bar/index.vue
new file mode 100644
index 0000000..54620dd
--- /dev/null
+++ b/wxcomponents/vant/dist/index-bar/index.vue
@@ -0,0 +1,266 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/index-bar/index.wxml b/wxcomponents/vant/dist/index-bar/index.wxml
new file mode 100644
index 0000000..19a59cf
--- /dev/null
+++ b/wxcomponents/vant/dist/index-bar/index.wxml
@@ -0,0 +1,22 @@
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/index-bar/index.wxss b/wxcomponents/vant/dist/index-bar/index.wxss
new file mode 100644
index 0000000..8568801
--- /dev/null
+++ b/wxcomponents/vant/dist/index-bar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-index-bar{position:relative}.van-index-bar__sidebar{display:flex;flex-direction:column;position:fixed;right:0;text-align:center;top:50%;transform:translateY(-50%);-webkit-user-select:none;user-select:none}.van-index-bar__index{font-size:var(--index-bar-index-font-size,10px);font-weight:500;line-height:var(--index-bar-index-line-height,14px);padding:0 var(--padding-base,4px) 0 var(--padding-md,16px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/info/index.d.ts b/wxcomponents/vant/dist/info/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/info/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/info/index.js b/wxcomponents/vant/dist/info/index.js
new file mode 100644
index 0000000..6eac8f8
--- /dev/null
+++ b/wxcomponents/vant/dist/info/index.js
@@ -0,0 +1,8 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ dot: Boolean,
+ info: null,
+ customStyle: String,
+ },
+});
diff --git a/wxcomponents/vant/dist/info/index.json b/wxcomponents/vant/dist/info/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/info/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/info/index.vue b/wxcomponents/vant/dist/info/index.vue
new file mode 100644
index 0000000..751664e
--- /dev/null
+++ b/wxcomponents/vant/dist/info/index.vue
@@ -0,0 +1,20 @@
+
+{{ dot ? '' : info }}
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/info/index.wxml b/wxcomponents/vant/dist/info/index.wxml
new file mode 100644
index 0000000..b39b524
--- /dev/null
+++ b/wxcomponents/vant/dist/info/index.wxml
@@ -0,0 +1,7 @@
+
+
+{{ dot ? '' : info }}
diff --git a/wxcomponents/vant/dist/info/index.wxss b/wxcomponents/vant/dist/info/index.wxss
new file mode 100644
index 0000000..375ed5a
--- /dev/null
+++ b/wxcomponents/vant/dist/info/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-info{align-items:center;background-color:var(--info-background-color,#ee0a24);border:var(--info-border-width,1px) solid #fff;border-radius:var(--info-size,16px);box-sizing:border-box;color:var(--info-color,#fff);display:inline-flex;font-family:var(--info-font-family,-apple-system-font,Helvetica Neue,Arial,sans-serif);font-size:var(--info-font-size,12px);font-weight:var(--info-font-weight,500);height:var(--info-size,16px);justify-content:center;min-width:var(--info-size,16px);padding:var(--info-padding,0 3px);position:absolute;right:0;top:0;transform:translate(50%,-50%);transform-origin:100%;white-space:nowrap}.van-info--dot{background-color:var(--info-dot-color,#ee0a24);border-radius:100%;height:var(--info-dot-size,8px);min-width:0;width:var(--info-dot-size,8px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/loading/index.d.ts b/wxcomponents/vant/dist/loading/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/loading/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/loading/index.js b/wxcomponents/vant/dist/loading/index.js
new file mode 100644
index 0000000..f5f96ba
--- /dev/null
+++ b/wxcomponents/vant/dist/loading/index.js
@@ -0,0 +1,16 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ color: String,
+ vertical: Boolean,
+ type: {
+ type: String,
+ value: 'circular',
+ },
+ size: String,
+ textSize: String,
+ },
+ data: {
+ array12: Array.from({ length: 12 }),
+ },
+});
diff --git a/wxcomponents/vant/dist/loading/index.json b/wxcomponents/vant/dist/loading/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/loading/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/loading/index.vue b/wxcomponents/vant/dist/loading/index.vue
new file mode 100644
index 0000000..f926f81
--- /dev/null
+++ b/wxcomponents/vant/dist/loading/index.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/loading/index.wxml b/wxcomponents/vant/dist/loading/index.wxml
new file mode 100644
index 0000000..7d4a539
--- /dev/null
+++ b/wxcomponents/vant/dist/loading/index.wxml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/loading/index.wxs b/wxcomponents/vant/dist/loading/index.wxs
new file mode 100644
index 0000000..02a0b80
--- /dev/null
+++ b/wxcomponents/vant/dist/loading/index.wxs
@@ -0,0 +1,22 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function spinnerStyle(data) {
+ return style({
+ color: data.color,
+ width: addUnit(data.size),
+ height: addUnit(data.size),
+ });
+}
+
+function textStyle(data) {
+ return style({
+ 'font-size': addUnit(data.textSize),
+ });
+}
+
+module.exports = {
+ spinnerStyle: spinnerStyle,
+ textStyle: textStyle,
+};
diff --git a/wxcomponents/vant/dist/loading/index.wxss b/wxcomponents/vant/dist/loading/index.wxss
new file mode 100644
index 0000000..fc84e84
--- /dev/null
+++ b/wxcomponents/vant/dist/loading/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';:host{font-size:0;line-height:1}.van-loading{align-items:center;color:var(--loading-spinner-color,#c8c9cc);display:inline-flex;justify-content:center}.van-loading__spinner{animation:van-rotate var(--loading-spinner-animation-duration,.8s) linear infinite;box-sizing:border-box;height:var(--loading-spinner-size,30px);max-height:100%;max-width:100%;position:relative;width:var(--loading-spinner-size,30px)}.van-loading__spinner--spinner{animation-timing-function:steps(12)}.van-loading__spinner--circular{border:1px solid transparent;border-radius:100%;border-top-color:initial}.van-loading__text{color:var(--loading-text-color,#969799);font-size:var(--loading-text-font-size,14px);line-height:var(--loading-text-line-height,20px);margin-left:var(--padding-xs,8px)}.van-loading__text:empty{display:none}.van-loading--vertical{flex-direction:column}.van-loading--vertical .van-loading__text{margin:var(--padding-xs,8px) 0 0}.van-loading__dot{height:100%;left:0;position:absolute;top:0;width:100%}.van-loading__dot:before{background-color:currentColor;border-radius:40%;content:" ";display:block;height:25%;margin:0 auto;width:2px}.van-loading__dot:first-of-type{opacity:1;transform:rotate(30deg)}.van-loading__dot:nth-of-type(2){opacity:.9375;transform:rotate(60deg)}.van-loading__dot:nth-of-type(3){opacity:.875;transform:rotate(90deg)}.van-loading__dot:nth-of-type(4){opacity:.8125;transform:rotate(120deg)}.van-loading__dot:nth-of-type(5){opacity:.75;transform:rotate(150deg)}.van-loading__dot:nth-of-type(6){opacity:.6875;transform:rotate(180deg)}.van-loading__dot:nth-of-type(7){opacity:.625;transform:rotate(210deg)}.van-loading__dot:nth-of-type(8){opacity:.5625;transform:rotate(240deg)}.van-loading__dot:nth-of-type(9){opacity:.5;transform:rotate(270deg)}.van-loading__dot:nth-of-type(10){opacity:.4375;transform:rotate(300deg)}.van-loading__dot:nth-of-type(11){opacity:.375;transform:rotate(330deg)}.van-loading__dot:nth-of-type(12){opacity:.3125;transform:rotate(1turn)}@keyframes van-rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/mixins/basic.d.ts b/wxcomponents/vant/dist/mixins/basic.d.ts
new file mode 100644
index 0000000..b273369
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/basic.d.ts
@@ -0,0 +1 @@
+export declare const basic: string;
diff --git a/wxcomponents/vant/dist/mixins/basic.js b/wxcomponents/vant/dist/mixins/basic.js
new file mode 100644
index 0000000..617cc07
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/basic.js
@@ -0,0 +1,11 @@
+export const basic = Behavior({
+ methods: {
+ $emit(name, detail, options) {
+ this.triggerEvent(name, detail, options);
+ },
+ set(data) {
+ this.setData(data);
+ return new Promise((resolve) => wx.nextTick(resolve));
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/mixins/button.d.ts b/wxcomponents/vant/dist/mixins/button.d.ts
new file mode 100644
index 0000000..b51db87
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/button.d.ts
@@ -0,0 +1 @@
+export declare const button: string;
diff --git a/wxcomponents/vant/dist/mixins/button.js b/wxcomponents/vant/dist/mixins/button.js
new file mode 100644
index 0000000..bc48768
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/button.js
@@ -0,0 +1,44 @@
+import { canIUseGetUserProfile } from '../common/version';
+export const button = Behavior({
+ externalClasses: ['hover-class'],
+ properties: {
+ id: String,
+ lang: String,
+ businessId: Number,
+ sessionFrom: String,
+ sendMessageTitle: String,
+ sendMessagePath: String,
+ sendMessageImg: String,
+ showMessageCard: Boolean,
+ appParameter: String,
+ ariaLabel: String,
+ openType: String,
+ getUserProfileDesc: String,
+ },
+ data: {
+ canIUseGetUserProfile: canIUseGetUserProfile(),
+ },
+ methods: {
+ onGetUserInfo(event) {
+ this.triggerEvent('getuserinfo', event.detail);
+ },
+ onContact(event) {
+ this.triggerEvent('contact', event.detail);
+ },
+ onGetPhoneNumber(event) {
+ this.triggerEvent('getphonenumber', event.detail);
+ },
+ onError(event) {
+ this.triggerEvent('error', event.detail);
+ },
+ onLaunchApp(event) {
+ this.triggerEvent('launchapp', event.detail);
+ },
+ onOpenSetting(event) {
+ this.triggerEvent('opensetting', event.detail);
+ },
+ onChooseAvatar(event) {
+ this.triggerEvent('chooseavatar', event.detail);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/mixins/link.d.ts b/wxcomponents/vant/dist/mixins/link.d.ts
new file mode 100644
index 0000000..d58043b
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/link.d.ts
@@ -0,0 +1 @@
+export declare const link: string;
diff --git a/wxcomponents/vant/dist/mixins/link.js b/wxcomponents/vant/dist/mixins/link.js
new file mode 100644
index 0000000..8c274e1
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/link.js
@@ -0,0 +1,23 @@
+export const link = Behavior({
+ properties: {
+ url: String,
+ linkType: {
+ type: String,
+ value: 'navigateTo',
+ },
+ },
+ methods: {
+ jumpLink(urlKey = 'url') {
+ const url = this.data[urlKey];
+ if (url) {
+ if (this.data.linkType === 'navigateTo' &&
+ getCurrentPages().length > 9) {
+ wx.redirectTo({ url });
+ }
+ else {
+ wx[this.data.linkType]({ url });
+ }
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/mixins/page-scroll.d.ts b/wxcomponents/vant/dist/mixins/page-scroll.d.ts
new file mode 100644
index 0000000..4625447
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/page-scroll.d.ts
@@ -0,0 +1,6 @@
+///
+///
+type IPageScrollOption = WechatMiniprogram.Page.IPageScrollOption;
+type Scroller = (this: WechatMiniprogram.Component.TrivialInstance, event?: IPageScrollOption) => void;
+export declare function pageScrollMixin(scroller: Scroller): string;
+export {};
diff --git a/wxcomponents/vant/dist/mixins/page-scroll.js b/wxcomponents/vant/dist/mixins/page-scroll.js
new file mode 100644
index 0000000..e08fb6e
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/page-scroll.js
@@ -0,0 +1,42 @@
+import { isFunction } from '../common/validator';
+import { getCurrentPage, isDef } from '../common/utils';
+function onPageScroll(event) {
+ const { vanPageScroller = [] } = getCurrentPage();
+ vanPageScroller.forEach((scroller) => {
+ if (typeof scroller === 'function') {
+ // @ts-ignore
+ scroller(event);
+ }
+ });
+}
+export function pageScrollMixin(scroller) {
+ return Behavior({
+ attached() {
+ const page = getCurrentPage();
+ if (!isDef(page)) {
+ return;
+ }
+ const _scroller = scroller.bind(this);
+ const { vanPageScroller = [] } = page;
+ if (isFunction(page.onPageScroll) && page.onPageScroll !== onPageScroll) {
+ vanPageScroller.push(page.onPageScroll.bind(page));
+ }
+ vanPageScroller.push(_scroller);
+ page.vanPageScroller = vanPageScroller;
+ page.onPageScroll = onPageScroll;
+ this._scroller = _scroller;
+ },
+ detached() {
+ const page = getCurrentPage();
+ if (!isDef(page) || !isDef(page.vanPageScroller)) {
+ return;
+ }
+ const { vanPageScroller } = page;
+ const index = vanPageScroller.findIndex((v) => v === this._scroller);
+ if (index > -1) {
+ page.vanPageScroller.splice(index, 1);
+ }
+ this._scroller = undefined;
+ },
+ });
+}
diff --git a/wxcomponents/vant/dist/mixins/touch.d.ts b/wxcomponents/vant/dist/mixins/touch.d.ts
new file mode 100644
index 0000000..35ee831
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/touch.d.ts
@@ -0,0 +1 @@
+export declare const touch: string;
diff --git a/wxcomponents/vant/dist/mixins/touch.js b/wxcomponents/vant/dist/mixins/touch.js
new file mode 100644
index 0000000..ecefae8
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/touch.js
@@ -0,0 +1,37 @@
+// @ts-nocheck
+const MIN_DISTANCE = 10;
+function getDirection(x, y) {
+ if (x > y && x > MIN_DISTANCE) {
+ return 'horizontal';
+ }
+ if (y > x && y > MIN_DISTANCE) {
+ return 'vertical';
+ }
+ return '';
+}
+export const touch = Behavior({
+ methods: {
+ resetTouchStatus() {
+ this.direction = '';
+ this.deltaX = 0;
+ this.deltaY = 0;
+ this.offsetX = 0;
+ this.offsetY = 0;
+ },
+ touchStart(event) {
+ this.resetTouchStatus();
+ const touch = event.touches[0];
+ this.startX = touch.clientX;
+ this.startY = touch.clientY;
+ },
+ touchMove(event) {
+ const touch = event.touches[0];
+ this.deltaX = touch.clientX - this.startX;
+ this.deltaY = touch.clientY - this.startY;
+ this.offsetX = Math.abs(this.deltaX);
+ this.offsetY = Math.abs(this.deltaY);
+ this.direction =
+ this.direction || getDirection(this.offsetX, this.offsetY);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/mixins/transition.d.ts b/wxcomponents/vant/dist/mixins/transition.d.ts
new file mode 100644
index 0000000..dd829e5
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/transition.d.ts
@@ -0,0 +1 @@
+export declare function transition(showDefaultValue: boolean): string;
diff --git a/wxcomponents/vant/dist/mixins/transition.js b/wxcomponents/vant/dist/mixins/transition.js
new file mode 100644
index 0000000..ef6fdd2
--- /dev/null
+++ b/wxcomponents/vant/dist/mixins/transition.js
@@ -0,0 +1,118 @@
+// @ts-nocheck
+import { requestAnimationFrame } from '../common/utils';
+import { isObj } from '../common/validator';
+const getClassNames = (name) => ({
+ enter: `van-${name}-enter van-${name}-enter-active enter-class enter-active-class`,
+ 'enter-to': `van-${name}-enter-to van-${name}-enter-active enter-to-class enter-active-class`,
+ leave: `van-${name}-leave van-${name}-leave-active leave-class leave-active-class`,
+ 'leave-to': `van-${name}-leave-to van-${name}-leave-active leave-to-class leave-active-class`,
+});
+export function transition(showDefaultValue) {
+ return Behavior({
+ properties: {
+ customStyle: String,
+ // @ts-ignore
+ show: {
+ type: Boolean,
+ value: showDefaultValue,
+ observer: 'observeShow',
+ },
+ // @ts-ignore
+ duration: {
+ type: null,
+ value: 300,
+ observer: 'observeDuration',
+ },
+ name: {
+ type: String,
+ value: 'fade',
+ },
+ },
+ data: {
+ type: '',
+ inited: false,
+ display: false,
+ },
+ ready() {
+ if (this.data.show === true) {
+ this.observeShow(true, false);
+ }
+ },
+ methods: {
+ observeShow(value, old) {
+ if (value === old) {
+ return;
+ }
+ value ? this.enter() : this.leave();
+ },
+ enter() {
+ const { duration, name } = this.data;
+ const classNames = getClassNames(name);
+ const currentDuration = isObj(duration) ? duration.enter : duration;
+ if (this.status === 'enter') {
+ return;
+ }
+ this.status = 'enter';
+ this.$emit('before-enter');
+ requestAnimationFrame(() => {
+ if (this.status !== 'enter') {
+ return;
+ }
+ this.$emit('enter');
+ this.setData({
+ inited: true,
+ display: true,
+ classes: classNames.enter,
+ currentDuration,
+ });
+ requestAnimationFrame(() => {
+ if (this.status !== 'enter') {
+ return;
+ }
+ this.transitionEnded = false;
+ this.setData({ classes: classNames['enter-to'] });
+ });
+ });
+ },
+ leave() {
+ if (!this.data.display) {
+ return;
+ }
+ const { duration, name } = this.data;
+ const classNames = getClassNames(name);
+ const currentDuration = isObj(duration) ? duration.leave : duration;
+ this.status = 'leave';
+ this.$emit('before-leave');
+ requestAnimationFrame(() => {
+ if (this.status !== 'leave') {
+ return;
+ }
+ this.$emit('leave');
+ this.setData({
+ classes: classNames.leave,
+ currentDuration,
+ });
+ requestAnimationFrame(() => {
+ if (this.status !== 'leave') {
+ return;
+ }
+ this.transitionEnded = false;
+ setTimeout(() => this.onTransitionEnd(), currentDuration);
+ this.setData({ classes: classNames['leave-to'] });
+ });
+ });
+ },
+ onTransitionEnd() {
+ if (this.transitionEnded) {
+ return;
+ }
+ this.transitionEnded = true;
+ this.$emit(`after-${this.status}`);
+ const { show, display } = this.data;
+ if (!show && display) {
+ this.setData({ display: false });
+ }
+ },
+ },
+ });
+}
diff --git a/wxcomponents/vant/dist/nav-bar/index.d.ts b/wxcomponents/vant/dist/nav-bar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/nav-bar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/nav-bar/index.js b/wxcomponents/vant/dist/nav-bar/index.js
new file mode 100644
index 0000000..30fc5aa
--- /dev/null
+++ b/wxcomponents/vant/dist/nav-bar/index.js
@@ -0,0 +1,65 @@
+import { VantComponent } from '../common/component';
+import { getRect, getSystemInfoSync } from '../common/utils';
+VantComponent({
+ classes: ['title-class'],
+ props: {
+ title: String,
+ fixed: {
+ type: Boolean,
+ observer: 'setHeight',
+ },
+ placeholder: {
+ type: Boolean,
+ observer: 'setHeight',
+ },
+ leftText: String,
+ rightText: String,
+ customStyle: String,
+ leftArrow: Boolean,
+ border: {
+ type: Boolean,
+ value: true,
+ },
+ zIndex: {
+ type: Number,
+ value: 1,
+ },
+ safeAreaInsetTop: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ data: {
+ height: 46,
+ },
+ created() {
+ const { statusBarHeight } = getSystemInfoSync();
+ this.setData({
+ statusBarHeight,
+ height: 46 + statusBarHeight,
+ });
+ },
+ mounted() {
+ this.setHeight();
+ },
+ methods: {
+ onClickLeft() {
+ this.$emit('click-left');
+ },
+ onClickRight() {
+ this.$emit('click-right');
+ },
+ setHeight() {
+ if (!this.data.fixed || !this.data.placeholder) {
+ return;
+ }
+ wx.nextTick(() => {
+ getRect(this, '.van-nav-bar').then((res) => {
+ if (res && 'height' in res) {
+ this.setData({ height: res.height });
+ }
+ });
+ });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/nav-bar/index.json b/wxcomponents/vant/dist/nav-bar/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/wxcomponents/vant/dist/nav-bar/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/nav-bar/index.vue b/wxcomponents/vant/dist/nav-bar/index.vue
new file mode 100644
index 0000000..1c9409a
--- /dev/null
+++ b/wxcomponents/vant/dist/nav-bar/index.vue
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+ {{ leftText }}
+
+
+
+
+ {{ title }}
+
+
+
+ {{ rightText }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/nav-bar/index.wxml b/wxcomponents/vant/dist/nav-bar/index.wxml
new file mode 100644
index 0000000..b6405fd
--- /dev/null
+++ b/wxcomponents/vant/dist/nav-bar/index.wxml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+ {{ leftText }}
+
+
+
+
+ {{ title }}
+
+
+
+ {{ rightText }}
+
+
+
+
diff --git a/wxcomponents/vant/dist/nav-bar/index.wxs b/wxcomponents/vant/dist/nav-bar/index.wxs
new file mode 100644
index 0000000..55b4158
--- /dev/null
+++ b/wxcomponents/vant/dist/nav-bar/index.wxs
@@ -0,0 +1,13 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+
+function barStyle(data) {
+ return style({
+ 'z-index': data.zIndex,
+ 'padding-top': data.safeAreaInsetTop ? data.statusBarHeight + 'px' : 0,
+ });
+}
+
+module.exports = {
+ barStyle: barStyle,
+};
diff --git a/wxcomponents/vant/dist/nav-bar/index.wxss b/wxcomponents/vant/dist/nav-bar/index.wxss
new file mode 100644
index 0000000..d11c31e
--- /dev/null
+++ b/wxcomponents/vant/dist/nav-bar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-nav-bar{background-color:var(--nav-bar-background-color,#fff);box-sizing:initial;height:var(--nav-bar-height,46px);line-height:var(--nav-bar-height,46px);position:relative;text-align:center;-webkit-user-select:none;user-select:none}.van-nav-bar__content{height:100%;position:relative}.van-nav-bar__text{color:var(--nav-bar-text-color,#1989fa);display:inline-block;margin:0 calc(var(--padding-md, 16px)*-1);padding:0 var(--padding-md,16px);vertical-align:middle}.van-nav-bar__text--hover{background-color:#f2f3f5}.van-nav-bar__arrow{color:var(--nav-bar-icon-color,#1989fa)!important;font-size:var(--nav-bar-arrow-size,16px)!important;vertical-align:middle}.van-nav-bar__arrow+.van-nav-bar__text{margin-left:-20px;padding-left:25px}.van-nav-bar--fixed{left:0;position:fixed;top:0;width:100%}.van-nav-bar__title{color:var(--nav-bar-title-text-color,#323233);font-size:var(--nav-bar-title-font-size,16px);font-weight:var(--font-weight-bold,500);margin:0 auto;max-width:60%}.van-nav-bar__left,.van-nav-bar__right{align-items:center;bottom:0;display:flex;font-size:var(--font-size-md,14px);position:absolute;top:0}.van-nav-bar__left{left:var(--padding-md,16px)}.van-nav-bar__right{right:var(--padding-md,16px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/notice-bar/index.d.ts b/wxcomponents/vant/dist/notice-bar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/notice-bar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/notice-bar/index.js b/wxcomponents/vant/dist/notice-bar/index.js
new file mode 100644
index 0000000..cf26a17
--- /dev/null
+++ b/wxcomponents/vant/dist/notice-bar/index.js
@@ -0,0 +1,120 @@
+import { VantComponent } from '../common/component';
+import { getRect, requestAnimationFrame } from '../common/utils';
+VantComponent({
+ props: {
+ text: {
+ type: String,
+ value: '',
+ observer: 'init',
+ },
+ mode: {
+ type: String,
+ value: '',
+ },
+ url: {
+ type: String,
+ value: '',
+ },
+ openType: {
+ type: String,
+ value: 'navigate',
+ },
+ delay: {
+ type: Number,
+ value: 1,
+ },
+ speed: {
+ type: Number,
+ value: 60,
+ observer: 'init',
+ },
+ scrollable: null,
+ leftIcon: {
+ type: String,
+ value: '',
+ },
+ color: String,
+ backgroundColor: String,
+ background: String,
+ wrapable: Boolean,
+ },
+ data: {
+ show: true,
+ },
+ created() {
+ this.resetAnimation = wx.createAnimation({
+ duration: 0,
+ timingFunction: 'linear',
+ });
+ },
+ destroyed() {
+ this.timer && clearTimeout(this.timer);
+ },
+ mounted() {
+ this.init();
+ },
+ methods: {
+ init() {
+ requestAnimationFrame(() => {
+ Promise.all([
+ getRect(this, '.van-notice-bar__content'),
+ getRect(this, '.van-notice-bar__wrap'),
+ ]).then((rects) => {
+ const [contentRect, wrapRect] = rects;
+ const { speed, scrollable, delay } = this.data;
+ if (contentRect == null ||
+ wrapRect == null ||
+ !contentRect.width ||
+ !wrapRect.width ||
+ scrollable === false) {
+ return;
+ }
+ if (scrollable || wrapRect.width < contentRect.width) {
+ const duration = ((wrapRect.width + contentRect.width) / speed) * 1000;
+ this.wrapWidth = wrapRect.width;
+ this.contentWidth = contentRect.width;
+ this.duration = duration;
+ this.animation = wx.createAnimation({
+ duration,
+ timingFunction: 'linear',
+ delay,
+ });
+ this.scroll(true);
+ }
+ });
+ });
+ },
+ scroll(isInit = false) {
+ this.timer && clearTimeout(this.timer);
+ this.timer = null;
+ this.setData({
+ animationData: this.resetAnimation
+ .translateX(isInit ? 0 : this.wrapWidth)
+ .step()
+ .export(),
+ });
+ requestAnimationFrame(() => {
+ this.setData({
+ animationData: this.animation
+ .translateX(-this.contentWidth)
+ .step()
+ .export(),
+ });
+ });
+ this.timer = setTimeout(() => {
+ this.scroll();
+ }, this.duration);
+ },
+ onClickIcon(event) {
+ if (this.data.mode === 'closeable') {
+ this.timer && clearTimeout(this.timer);
+ this.timer = null;
+ this.setData({ show: false });
+ this.$emit('close', event.detail);
+ }
+ },
+ onClick(event) {
+ this.$emit('click', event);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/notice-bar/index.json b/wxcomponents/vant/dist/notice-bar/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/wxcomponents/vant/dist/notice-bar/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/notice-bar/index.vue b/wxcomponents/vant/dist/notice-bar/index.vue
new file mode 100644
index 0000000..89a87fc
--- /dev/null
+++ b/wxcomponents/vant/dist/notice-bar/index.vue
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/notice-bar/index.wxml b/wxcomponents/vant/dist/notice-bar/index.wxml
new file mode 100644
index 0000000..21b0973
--- /dev/null
+++ b/wxcomponents/vant/dist/notice-bar/index.wxml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+ {{ text }}
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/notice-bar/index.wxs b/wxcomponents/vant/dist/notice-bar/index.wxs
new file mode 100644
index 0000000..11e6456
--- /dev/null
+++ b/wxcomponents/vant/dist/notice-bar/index.wxs
@@ -0,0 +1,15 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function rootStyle(data) {
+ return style({
+ color: data.color,
+ 'background-color': data.backgroundColor,
+ background: data.background,
+ });
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+};
diff --git a/wxcomponents/vant/dist/notice-bar/index.wxss b/wxcomponents/vant/dist/notice-bar/index.wxss
new file mode 100644
index 0000000..497636c
--- /dev/null
+++ b/wxcomponents/vant/dist/notice-bar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-notice-bar{align-items:center;background-color:var(--notice-bar-background-color,#fffbe8);color:var(--notice-bar-text-color,#ed6a0c);display:flex;font-size:var(--notice-bar-font-size,14px);height:var(--notice-bar-height,40px);line-height:var(--notice-bar-line-height,24px);padding:var(--notice-bar-padding,0 16px)}.van-notice-bar--withicon{padding-right:40px;position:relative}.van-notice-bar--wrapable{height:auto;padding:var(--notice-bar-wrapable-padding,8px 16px)}.van-notice-bar--wrapable .van-notice-bar__wrap{height:auto}.van-notice-bar--wrapable .van-notice-bar__content{position:relative;white-space:normal}.van-notice-bar__left-icon{align-items:center;display:flex;margin-right:4px;vertical-align:middle}.van-notice-bar__left-icon,.van-notice-bar__right-icon{font-size:var(--notice-bar-icon-size,16px);min-width:var(--notice-bar-icon-min-width,22px)}.van-notice-bar__right-icon{position:absolute;right:15px;top:10px}.van-notice-bar__wrap{flex:1;height:var(--notice-bar-line-height,24px);overflow:hidden;position:relative}.van-notice-bar__content{position:absolute;white-space:nowrap}.van-notice-bar__content.van-ellipsis{max-width:100%}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/notify/index.d.ts b/wxcomponents/vant/dist/notify/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/notify/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/notify/index.js b/wxcomponents/vant/dist/notify/index.js
new file mode 100644
index 0000000..d4aba2d
--- /dev/null
+++ b/wxcomponents/vant/dist/notify/index.js
@@ -0,0 +1,65 @@
+import { VantComponent } from '../common/component';
+import { WHITE } from '../common/color';
+import { getSystemInfoSync } from '../common/utils';
+VantComponent({
+ props: {
+ message: String,
+ background: String,
+ type: {
+ type: String,
+ value: 'danger',
+ },
+ color: {
+ type: String,
+ value: WHITE,
+ },
+ duration: {
+ type: Number,
+ value: 3000,
+ },
+ zIndex: {
+ type: Number,
+ value: 110,
+ },
+ safeAreaInsetTop: {
+ type: Boolean,
+ value: false,
+ },
+ top: null,
+ },
+ data: {
+ show: false,
+ onOpened: null,
+ onClose: null,
+ onClick: null,
+ },
+ created() {
+ const { statusBarHeight } = getSystemInfoSync();
+ this.setData({ statusBarHeight });
+ },
+ methods: {
+ show() {
+ const { duration, onOpened } = this.data;
+ clearTimeout(this.timer);
+ this.setData({ show: true });
+ wx.nextTick(onOpened);
+ if (duration > 0 && duration !== Infinity) {
+ this.timer = setTimeout(() => {
+ this.hide();
+ }, duration);
+ }
+ },
+ hide() {
+ const { onClose } = this.data;
+ clearTimeout(this.timer);
+ this.setData({ show: false });
+ wx.nextTick(onClose);
+ },
+ onTap(event) {
+ const { onClick } = this.data;
+ if (onClick) {
+ onClick(event.detail);
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/notify/index.json b/wxcomponents/vant/dist/notify/index.json
new file mode 100644
index 0000000..c14a65f
--- /dev/null
+++ b/wxcomponents/vant/dist/notify/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-transition": "../transition/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/notify/index.vue b/wxcomponents/vant/dist/notify/index.vue
new file mode 100644
index 0000000..307a0e2
--- /dev/null
+++ b/wxcomponents/vant/dist/notify/index.vue
@@ -0,0 +1,84 @@
+
+
+
+
+ {{ message }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/notify/index.wxml b/wxcomponents/vant/dist/notify/index.wxml
new file mode 100644
index 0000000..42d913e
--- /dev/null
+++ b/wxcomponents/vant/dist/notify/index.wxml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+ {{ message }}
+
+
diff --git a/wxcomponents/vant/dist/notify/index.wxs b/wxcomponents/vant/dist/notify/index.wxs
new file mode 100644
index 0000000..bbb94c2
--- /dev/null
+++ b/wxcomponents/vant/dist/notify/index.wxs
@@ -0,0 +1,22 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function rootStyle(data) {
+ return style({
+ 'z-index': data.zIndex,
+ top: addUnit(data.top),
+ });
+}
+
+function notifyStyle(data) {
+ return style({
+ background: data.background,
+ color: data.color,
+ });
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+ notifyStyle: notifyStyle,
+};
diff --git a/wxcomponents/vant/dist/notify/index.wxss b/wxcomponents/vant/dist/notify/index.wxss
new file mode 100644
index 0000000..c030e9b
--- /dev/null
+++ b/wxcomponents/vant/dist/notify/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-notify{word-wrap:break-word;font-size:var(--notify-font-size,14px);line-height:var(--notify-line-height,20px);padding:var(--notify-padding,6px 15px);text-align:center}.van-notify__container{box-sizing:border-box;left:0;position:fixed;top:0;width:100%}.van-notify--primary{background-color:var(--notify-primary-background-color,#1989fa)}.van-notify--success{background-color:var(--notify-success-background-color,#07c160)}.van-notify--danger{background-color:var(--notify-danger-background-color,#ee0a24)}.van-notify--warning{background-color:var(--notify-warning-background-color,#ff976a)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/notify/notify.d.ts b/wxcomponents/vant/dist/notify/notify.d.ts
new file mode 100644
index 0000000..d5213cb
--- /dev/null
+++ b/wxcomponents/vant/dist/notify/notify.d.ts
@@ -0,0 +1,22 @@
+interface NotifyOptions {
+ type?: 'primary' | 'success' | 'danger' | 'warning';
+ color?: string;
+ zIndex?: number;
+ top?: number;
+ message: string;
+ context?: any;
+ duration?: number;
+ selector?: string;
+ background?: string;
+ safeAreaInsetTop?: boolean;
+ onClick?: () => void;
+ onOpened?: () => void;
+ onClose?: () => void;
+}
+declare function Notify(options: NotifyOptions | string): any;
+declare namespace Notify {
+ var clear: (options?: NotifyOptions | undefined) => void;
+ var setDefaultOptions: (options: NotifyOptions) => void;
+ var resetDefaultOptions: () => void;
+}
+export default Notify;
diff --git a/wxcomponents/vant/dist/notify/notify.js b/wxcomponents/vant/dist/notify/notify.js
new file mode 100644
index 0000000..ac27600
--- /dev/null
+++ b/wxcomponents/vant/dist/notify/notify.js
@@ -0,0 +1,53 @@
+import { WHITE } from '../common/color';
+const defaultOptions = {
+ selector: '#van-notify',
+ type: 'danger',
+ message: '',
+ background: '',
+ duration: 3000,
+ zIndex: 110,
+ top: 0,
+ color: WHITE,
+ safeAreaInsetTop: false,
+ onClick: () => { },
+ onOpened: () => { },
+ onClose: () => { },
+};
+let currentOptions = Object.assign({}, defaultOptions);
+function parseOptions(message) {
+ if (message == null) {
+ return {};
+ }
+ return typeof message === 'string' ? { message } : message;
+}
+function getContext() {
+ const pages = getCurrentPages();
+ return pages[pages.length - 1];
+}
+export default function Notify(options) {
+ options = Object.assign(Object.assign({}, currentOptions), parseOptions(options));
+ const context = options.context || getContext();
+ const notify = context.selectComponent(options.selector);
+ delete options.context;
+ delete options.selector;
+ if (notify) {
+ notify.setData(options);
+ notify.showNotify();
+ return notify;
+ }
+ console.warn('未找到 van-notify 节点,请确认 selector 及 context 是否正确');
+}
+Notify.clear = function (options) {
+ options = Object.assign(Object.assign({}, defaultOptions), parseOptions(options));
+ const context = options.context || getContext();
+ const notify = context.selectComponent(options.selector);
+ if (notify) {
+ notify.hide();
+ }
+};
+Notify.setDefaultOptions = (options) => {
+ Object.assign(currentOptions, options);
+};
+Notify.resetDefaultOptions = () => {
+ currentOptions = Object.assign({}, defaultOptions);
+};
diff --git a/wxcomponents/vant/dist/overlay/index.d.ts b/wxcomponents/vant/dist/overlay/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/overlay/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/overlay/index.js b/wxcomponents/vant/dist/overlay/index.js
new file mode 100644
index 0000000..d6647dd
--- /dev/null
+++ b/wxcomponents/vant/dist/overlay/index.js
@@ -0,0 +1,30 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ show: Boolean,
+ customStyle: String,
+ duration: {
+ type: null,
+ value: 300,
+ },
+ zIndex: {
+ type: Number,
+ value: 1,
+ },
+ lockScroll: {
+ type: Boolean,
+ value: true,
+ },
+ rootPortal: {
+ type: Boolean,
+ value: false,
+ },
+ },
+ methods: {
+ onClick() {
+ this.$emit('click');
+ },
+ // for prevent touchmove
+ noop() { },
+ },
+});
diff --git a/wxcomponents/vant/dist/overlay/index.json b/wxcomponents/vant/dist/overlay/index.json
new file mode 100644
index 0000000..c14a65f
--- /dev/null
+++ b/wxcomponents/vant/dist/overlay/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-transition": "../transition/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/overlay/index.vue b/wxcomponents/vant/dist/overlay/index.vue
new file mode 100644
index 0000000..487725e
--- /dev/null
+++ b/wxcomponents/vant/dist/overlay/index.vue
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/overlay/index.wxml b/wxcomponents/vant/dist/overlay/index.wxml
new file mode 100644
index 0000000..17fc56f
--- /dev/null
+++ b/wxcomponents/vant/dist/overlay/index.wxml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/overlay/index.wxss b/wxcomponents/vant/dist/overlay/index.wxss
new file mode 100644
index 0000000..d1ad81a
--- /dev/null
+++ b/wxcomponents/vant/dist/overlay/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-overlay{background-color:var(--overlay-background-color,rgba(0,0,0,.7));height:100%;left:0;position:fixed;top:0;width:100%}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/overlay/overlay.vue b/wxcomponents/vant/dist/overlay/overlay.vue
new file mode 100644
index 0000000..5998024
--- /dev/null
+++ b/wxcomponents/vant/dist/overlay/overlay.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/overlay/overlay.wxml b/wxcomponents/vant/dist/overlay/overlay.wxml
new file mode 100644
index 0000000..017e801
--- /dev/null
+++ b/wxcomponents/vant/dist/overlay/overlay.wxml
@@ -0,0 +1,10 @@
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/panel/index.d.ts b/wxcomponents/vant/dist/panel/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/panel/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/panel/index.js b/wxcomponents/vant/dist/panel/index.js
new file mode 100644
index 0000000..7b6a99a
--- /dev/null
+++ b/wxcomponents/vant/dist/panel/index.js
@@ -0,0 +1,9 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: ['header-class', 'footer-class'],
+ props: {
+ desc: String,
+ title: String,
+ status: String,
+ },
+});
diff --git a/wxcomponents/vant/dist/panel/index.json b/wxcomponents/vant/dist/panel/index.json
new file mode 100644
index 0000000..0e5425c
--- /dev/null
+++ b/wxcomponents/vant/dist/panel/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-cell": "../cell/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/panel/index.vue b/wxcomponents/vant/dist/panel/index.vue
new file mode 100644
index 0000000..229e227
--- /dev/null
+++ b/wxcomponents/vant/dist/panel/index.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/panel/index.wxml b/wxcomponents/vant/dist/panel/index.wxml
new file mode 100644
index 0000000..1843703
--- /dev/null
+++ b/wxcomponents/vant/dist/panel/index.wxml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/panel/index.wxss b/wxcomponents/vant/dist/panel/index.wxss
new file mode 100644
index 0000000..485edcd
--- /dev/null
+++ b/wxcomponents/vant/dist/panel/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-panel{background:var(--panel-background-color,#fff)}.van-panel__header-value{color:var(--panel-header-value-color,#ee0a24)}.van-panel__footer{padding:var(--panel-footer-padding,8px 16px)}.van-panel__footer:empty{display:none}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/picker-column/index.d.ts b/wxcomponents/vant/dist/picker-column/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/picker-column/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/picker-column/index.js b/wxcomponents/vant/dist/picker-column/index.js
new file mode 100644
index 0000000..abcc520
--- /dev/null
+++ b/wxcomponents/vant/dist/picker-column/index.js
@@ -0,0 +1,118 @@
+import { VantComponent } from '../common/component';
+import { range } from '../common/utils';
+import { isObj } from '../common/validator';
+const DEFAULT_DURATION = 200;
+VantComponent({
+ classes: ['active-class'],
+ props: {
+ valueKey: String,
+ className: String,
+ itemHeight: Number,
+ visibleItemCount: Number,
+ initialOptions: {
+ type: Array,
+ value: [],
+ },
+ defaultIndex: {
+ type: Number,
+ value: 0,
+ observer(value) {
+ this.setIndex(value);
+ },
+ },
+ },
+ data: {
+ startY: 0,
+ offset: 0,
+ duration: 0,
+ startOffset: 0,
+ options: [],
+ currentIndex: 0,
+ },
+ created() {
+ const { defaultIndex, initialOptions } = this.data;
+ this.set({
+ currentIndex: defaultIndex,
+ options: initialOptions,
+ }).then(() => {
+ this.setIndex(defaultIndex);
+ });
+ },
+ methods: {
+ getCount() {
+ return this.data.options.length;
+ },
+ onTouchStart(event) {
+ this.setData({
+ startY: event.touches[0].clientY,
+ startOffset: this.data.offset,
+ duration: 0,
+ });
+ },
+ onTouchMove(event) {
+ const { data } = this;
+ const deltaY = event.touches[0].clientY - data.startY;
+ this.setData({
+ offset: range(data.startOffset + deltaY, -(this.getCount() * data.itemHeight), data.itemHeight),
+ });
+ },
+ onTouchEnd() {
+ const { data } = this;
+ if (data.offset !== data.startOffset) {
+ this.setData({ duration: DEFAULT_DURATION });
+ const index = range(Math.round(-data.offset / data.itemHeight), 0, this.getCount() - 1);
+ this.setIndex(index, true);
+ }
+ },
+ onClickItem(event) {
+ const { index } = event.currentTarget.dataset;
+ this.setIndex(index, true);
+ },
+ adjustIndex(index) {
+ const { data } = this;
+ const count = this.getCount();
+ index = range(index, 0, count);
+ for (let i = index; i < count; i++) {
+ if (!this.isDisabled(data.options[i]))
+ return i;
+ }
+ for (let i = index - 1; i >= 0; i--) {
+ if (!this.isDisabled(data.options[i]))
+ return i;
+ }
+ },
+ isDisabled(option) {
+ return isObj(option) && option.disabled;
+ },
+ getOptionText(option) {
+ const { data } = this;
+ return isObj(option) && data.valueKey in option
+ ? option[data.valueKey]
+ : option;
+ },
+ setIndex(index, userAction) {
+ const { data } = this;
+ index = this.adjustIndex(index) || 0;
+ const offset = -index * data.itemHeight;
+ if (index !== data.currentIndex) {
+ return this.set({ offset, currentIndex: index }).then(() => {
+ userAction && this.$emit('change', index);
+ });
+ }
+ return this.set({ offset });
+ },
+ setValue(value) {
+ const { options } = this.data;
+ for (let i = 0; i < options.length; i++) {
+ if (this.getOptionText(options[i]) === value) {
+ return this.setIndex(i);
+ }
+ }
+ return Promise.resolve();
+ },
+ getValue() {
+ const { data } = this;
+ return data.options[data.currentIndex];
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/picker-column/index.json b/wxcomponents/vant/dist/picker-column/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/picker-column/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/picker-column/index.vue b/wxcomponents/vant/dist/picker-column/index.vue
new file mode 100644
index 0000000..7d10164
--- /dev/null
+++ b/wxcomponents/vant/dist/picker-column/index.vue
@@ -0,0 +1,134 @@
+
+
+
+ {{ computed.optionText(option, valueKey) }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/picker-column/index.wxml b/wxcomponents/vant/dist/picker-column/index.wxml
new file mode 100644
index 0000000..f2c8da2
--- /dev/null
+++ b/wxcomponents/vant/dist/picker-column/index.wxml
@@ -0,0 +1,23 @@
+
+
+
+
+
+ {{ computed.optionText(option, valueKey) }}
+
+
diff --git a/wxcomponents/vant/dist/picker-column/index.wxs b/wxcomponents/vant/dist/picker-column/index.wxs
new file mode 100644
index 0000000..2d5a611
--- /dev/null
+++ b/wxcomponents/vant/dist/picker-column/index.wxs
@@ -0,0 +1,36 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function isObj(x) {
+ var type = typeof x;
+ return x !== null && (type === 'object' || type === 'function');
+}
+
+function optionText(option, valueKey) {
+ return isObj(option) && option[valueKey] != null ? option[valueKey] : option;
+}
+
+function rootStyle(data) {
+ return style({
+ height: addUnit(data.itemHeight * data.visibleItemCount),
+ });
+}
+
+function wrapperStyle(data) {
+ var offset = addUnit(
+ data.offset + (data.itemHeight * (data.visibleItemCount - 1)) / 2
+ );
+
+ return style({
+ transition: 'transform ' + data.duration + 'ms',
+ 'line-height': addUnit(data.itemHeight),
+ transform: 'translate3d(0, ' + offset + ', 0)',
+ });
+}
+
+module.exports = {
+ optionText: optionText,
+ rootStyle: rootStyle,
+ wrapperStyle: wrapperStyle,
+};
diff --git a/wxcomponents/vant/dist/picker-column/index.wxss b/wxcomponents/vant/dist/picker-column/index.wxss
new file mode 100644
index 0000000..519a438
--- /dev/null
+++ b/wxcomponents/vant/dist/picker-column/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-picker-column{color:var(--picker-option-text-color,#000);font-size:var(--picker-option-font-size,16px);overflow:hidden;text-align:center}.van-picker-column__item{padding:0 5px}.van-picker-column__item--selected{color:var(--picker-option-selected-text-color,#323233);font-weight:var(--font-weight-bold,500)}.van-picker-column__item--disabled{opacity:var(--picker-option-disabled-opacity,.3)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/picker/index.d.ts b/wxcomponents/vant/dist/picker/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/picker/index.js b/wxcomponents/vant/dist/picker/index.js
new file mode 100644
index 0000000..cef057d
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/index.js
@@ -0,0 +1,136 @@
+import { VantComponent } from '../common/component';
+import { pickerProps } from './shared';
+VantComponent({
+ classes: ['active-class', 'toolbar-class', 'column-class'],
+ props: Object.assign(Object.assign({}, pickerProps), { valueKey: {
+ type: String,
+ value: 'text',
+ }, toolbarPosition: {
+ type: String,
+ value: 'top',
+ }, defaultIndex: {
+ type: Number,
+ value: 0,
+ }, columns: {
+ type: Array,
+ value: [],
+ observer(columns = []) {
+ this.simple = columns.length && !columns[0].values;
+ if (Array.isArray(this.children) && this.children.length) {
+ this.setColumns().catch(() => { });
+ }
+ },
+ } }),
+ beforeCreate() {
+ Object.defineProperty(this, 'children', {
+ get: () => this.selectAllComponents('.van-picker__column') || [],
+ });
+ },
+ methods: {
+ noop() { },
+ setColumns() {
+ const { data } = this;
+ const columns = this.simple ? [{ values: data.columns }] : data.columns;
+ const stack = columns.map((column, index) => this.setColumnValues(index, column.values));
+ return Promise.all(stack);
+ },
+ emit(event) {
+ const { type } = event.currentTarget.dataset;
+ if (this.simple) {
+ this.$emit(type, {
+ value: this.getColumnValue(0),
+ index: this.getColumnIndex(0),
+ });
+ }
+ else {
+ this.$emit(type, {
+ value: this.getValues(),
+ index: this.getIndexes(),
+ });
+ }
+ },
+ onChange(event) {
+ if (this.simple) {
+ this.$emit('change', {
+ picker: this,
+ value: this.getColumnValue(0),
+ index: this.getColumnIndex(0),
+ });
+ }
+ else {
+ this.$emit('change', {
+ picker: this,
+ value: this.getValues(),
+ index: event.currentTarget.dataset.index,
+ });
+ }
+ },
+ // get column instance by index
+ getColumn(index) {
+ return this.children[index];
+ },
+ // get column value by index
+ getColumnValue(index) {
+ const column = this.getColumn(index);
+ return column && column.getValue();
+ },
+ // set column value by index
+ setColumnValue(index, value) {
+ const column = this.getColumn(index);
+ if (column == null) {
+ return Promise.reject(new Error('setColumnValue: 对应列不存在'));
+ }
+ return column.setValue(value);
+ },
+ // get column option index by column index
+ getColumnIndex(columnIndex) {
+ return (this.getColumn(columnIndex) || {}).data.currentIndex;
+ },
+ // set column option index by column index
+ setColumnIndex(columnIndex, optionIndex) {
+ const column = this.getColumn(columnIndex);
+ if (column == null) {
+ return Promise.reject(new Error('setColumnIndex: 对应列不存在'));
+ }
+ return column.setIndex(optionIndex);
+ },
+ // get options of column by index
+ getColumnValues(index) {
+ return (this.children[index] || {}).data.options;
+ },
+ // set options of column by index
+ setColumnValues(index, options, needReset = true) {
+ const column = this.children[index];
+ if (column == null) {
+ return Promise.reject(new Error('setColumnValues: 对应列不存在'));
+ }
+ const isSame = JSON.stringify(column.data.options) === JSON.stringify(options);
+ if (isSame) {
+ return Promise.resolve();
+ }
+ return column.set({ options }).then(() => {
+ if (needReset) {
+ column.setIndex(0);
+ }
+ });
+ },
+ // get values of all columns
+ getValues() {
+ return this.children.map((child) => child.getValue());
+ },
+ // set values of all columns
+ setValues(values) {
+ const stack = values.map((value, index) => this.setColumnValue(index, value));
+ return Promise.all(stack);
+ },
+ // get indexes of all columns
+ getIndexes() {
+ return this.children.map((child) => child.data.currentIndex);
+ },
+ // set indexes of all columns
+ setIndexes(indexes) {
+ const stack = indexes.map((optionIndex, columnIndex) => this.setColumnIndex(columnIndex, optionIndex));
+ return Promise.all(stack);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/picker/index.json b/wxcomponents/vant/dist/picker/index.json
new file mode 100644
index 0000000..2fcec89
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "picker-column": "../picker-column/index",
+ "loading": "../loading/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/picker/index.vue b/wxcomponents/vant/dist/picker/index.vue
new file mode 100644
index 0000000..de59e4d
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/index.vue
@@ -0,0 +1,165 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/picker/index.wxml b/wxcomponents/vant/dist/picker/index.wxml
new file mode 100644
index 0000000..8564ccc
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/index.wxml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/picker/index.wxs b/wxcomponents/vant/dist/picker/index.wxs
new file mode 100644
index 0000000..0abbd10
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/index.wxs
@@ -0,0 +1,42 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+var array = require('../wxs/array.wxs');
+
+function columnsStyle(data) {
+ return style({
+ height: addUnit(data.itemHeight * data.visibleItemCount),
+ });
+}
+
+function maskStyle(data) {
+ return style({
+ 'background-size':
+ '100% ' + addUnit((data.itemHeight * (data.visibleItemCount - 1)) / 2),
+ });
+}
+
+function frameStyle(data) {
+ return style({
+ height: addUnit(data.itemHeight),
+ });
+}
+
+function columns(columns) {
+ if (!array.isArray(columns)) {
+ return [];
+ }
+
+ if (columns.length && !columns[0].values) {
+ return [{ values: columns }];
+ }
+
+ return columns;
+}
+
+module.exports = {
+ columnsStyle: columnsStyle,
+ frameStyle: frameStyle,
+ maskStyle: maskStyle,
+ columns: columns,
+};
diff --git a/wxcomponents/vant/dist/picker/index.wxss b/wxcomponents/vant/dist/picker/index.wxss
new file mode 100644
index 0000000..d924abb
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-picker{-webkit-text-size-adjust:100%;background-color:var(--picker-background-color,#fff);overflow:hidden;position:relative;-webkit-user-select:none;user-select:none}.van-picker__toolbar{display:flex;height:var(--picker-toolbar-height,44px);justify-content:space-between;line-height:var(--picker-toolbar-height,44px)}.van-picker__cancel,.van-picker__confirm{font-size:var(--picker-action-font-size,14px);padding:var(--picker-action-padding,0 16px)}.van-picker__cancel--hover,.van-picker__confirm--hover{opacity:.7}.van-picker__confirm{color:var(--picker-confirm-action-color,#576b95)}.van-picker__cancel{color:var(--picker-cancel-action-color,#969799)}.van-picker__title{font-size:var(--picker-option-font-size,16px);font-weight:var(--font-weight-bold,500);max-width:50%;text-align:center}.van-picker__columns{display:flex;position:relative}.van-picker__column{flex:1 1;width:0}.van-picker__loading{align-items:center;background-color:var(--picker-loading-mask-color,hsla(0,0%,100%,.9));bottom:0;display:flex;justify-content:center;left:0;position:absolute;right:0;top:0;z-index:4}.van-picker__mask{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-image:linear-gradient(180deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.4)),linear-gradient(0deg,hsla(0,0%,100%,.9),hsla(0,0%,100%,.4));background-position:top,bottom;background-repeat:no-repeat;height:100%;left:0;top:0;width:100%;z-index:2}.van-picker__frame,.van-picker__mask{pointer-events:none;position:absolute}.van-picker__frame{left:16px;right:16px;top:50%;transform:translateY(-50%);z-index:1}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/picker/shared.d.ts b/wxcomponents/vant/dist/picker/shared.d.ts
new file mode 100644
index 0000000..c548045
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/shared.d.ts
@@ -0,0 +1,21 @@
+export declare const pickerProps: {
+ title: StringConstructor;
+ loading: BooleanConstructor;
+ showToolbar: BooleanConstructor;
+ cancelButtonText: {
+ type: StringConstructor;
+ value: string;
+ };
+ confirmButtonText: {
+ type: StringConstructor;
+ value: string;
+ };
+ visibleItemCount: {
+ type: NumberConstructor;
+ value: number;
+ };
+ itemHeight: {
+ type: NumberConstructor;
+ value: number;
+ };
+};
diff --git a/wxcomponents/vant/dist/picker/shared.js b/wxcomponents/vant/dist/picker/shared.js
new file mode 100644
index 0000000..5f21f32
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/shared.js
@@ -0,0 +1,21 @@
+export const pickerProps = {
+ title: String,
+ loading: Boolean,
+ showToolbar: Boolean,
+ cancelButtonText: {
+ type: String,
+ value: '取消',
+ },
+ confirmButtonText: {
+ type: String,
+ value: '确认',
+ },
+ visibleItemCount: {
+ type: Number,
+ value: 6,
+ },
+ itemHeight: {
+ type: Number,
+ value: 44,
+ },
+};
diff --git a/wxcomponents/vant/dist/picker/toolbar.vue b/wxcomponents/vant/dist/picker/toolbar.vue
new file mode 100644
index 0000000..5dd106b
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/toolbar.vue
@@ -0,0 +1,25 @@
+
+
+
+ {{ cancelButtonText }}
+
+ {{
+ title
+ }}
+
+ {{ confirmButtonText }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/picker/toolbar.wxml b/wxcomponents/vant/dist/picker/toolbar.wxml
new file mode 100644
index 0000000..414f612
--- /dev/null
+++ b/wxcomponents/vant/dist/picker/toolbar.wxml
@@ -0,0 +1,23 @@
+
+
+ {{ cancelButtonText }}
+
+ {{
+ title
+ }}
+
+ {{ confirmButtonText }}
+
+
diff --git a/wxcomponents/vant/dist/popup/index.d.ts b/wxcomponents/vant/dist/popup/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/popup/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/popup/index.js b/wxcomponents/vant/dist/popup/index.js
new file mode 100644
index 0000000..fd3dd8e
--- /dev/null
+++ b/wxcomponents/vant/dist/popup/index.js
@@ -0,0 +1,97 @@
+import { VantComponent } from '../common/component';
+import { transition } from '../mixins/transition';
+VantComponent({
+ classes: [
+ 'enter-class',
+ 'enter-active-class',
+ 'enter-to-class',
+ 'leave-class',
+ 'leave-active-class',
+ 'leave-to-class',
+ 'close-icon-class',
+ ],
+ mixins: [transition(false)],
+ props: {
+ round: Boolean,
+ closeable: Boolean,
+ customStyle: String,
+ overlayStyle: String,
+ transition: {
+ type: String,
+ observer: 'observeClass',
+ },
+ zIndex: {
+ type: Number,
+ value: 100,
+ },
+ overlay: {
+ type: Boolean,
+ value: true,
+ },
+ closeIcon: {
+ type: String,
+ value: 'cross',
+ },
+ closeIconPosition: {
+ type: String,
+ value: 'top-right',
+ },
+ closeOnClickOverlay: {
+ type: Boolean,
+ value: true,
+ },
+ position: {
+ type: String,
+ value: 'center',
+ observer: 'observeClass',
+ },
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true,
+ },
+ safeAreaInsetTop: {
+ type: Boolean,
+ value: false,
+ },
+ safeAreaTabBar: {
+ type: Boolean,
+ value: false,
+ },
+ lockScroll: {
+ type: Boolean,
+ value: true,
+ },
+ rootPortal: {
+ type: Boolean,
+ value: false,
+ },
+ },
+ created() {
+ this.observeClass();
+ },
+ methods: {
+ onClickCloseIcon() {
+ this.$emit('close');
+ },
+ onClickOverlay() {
+ this.$emit('click-overlay');
+ if (this.data.closeOnClickOverlay) {
+ this.$emit('close');
+ }
+ },
+ observeClass() {
+ const { transition, position, duration } = this.data;
+ const updateData = {
+ name: transition || position,
+ };
+ if (transition === 'none') {
+ updateData.duration = 0;
+ this.originDuration = duration;
+ }
+ else if (this.originDuration != null) {
+ updateData.duration = this.originDuration;
+ }
+ this.setData(updateData);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/popup/index.json b/wxcomponents/vant/dist/popup/index.json
new file mode 100644
index 0000000..88a6eab
--- /dev/null
+++ b/wxcomponents/vant/dist/popup/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-overlay": "../overlay/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/popup/index.vue b/wxcomponents/vant/dist/popup/index.vue
new file mode 100644
index 0000000..6116ea3
--- /dev/null
+++ b/wxcomponents/vant/dist/popup/index.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/popup/index.wxml b/wxcomponents/vant/dist/popup/index.wxml
new file mode 100644
index 0000000..ab824b1
--- /dev/null
+++ b/wxcomponents/vant/dist/popup/index.wxml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/popup/index.wxs b/wxcomponents/vant/dist/popup/index.wxs
new file mode 100644
index 0000000..8d59f24
--- /dev/null
+++ b/wxcomponents/vant/dist/popup/index.wxs
@@ -0,0 +1,18 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+
+function popupStyle(data) {
+ return style([
+ {
+ 'z-index': data.zIndex,
+ '-webkit-transition-duration': data.currentDuration + 'ms',
+ 'transition-duration': data.currentDuration + 'ms',
+ },
+ data.display ? null : 'display: none',
+ data.customStyle,
+ ]);
+}
+
+module.exports = {
+ popupStyle: popupStyle,
+};
diff --git a/wxcomponents/vant/dist/popup/index.wxss b/wxcomponents/vant/dist/popup/index.wxss
new file mode 100644
index 0000000..91983b4
--- /dev/null
+++ b/wxcomponents/vant/dist/popup/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-popup{-webkit-overflow-scrolling:touch;animation:ease both;background-color:var(--popup-background-color,#fff);box-sizing:border-box;max-height:100%;overflow-y:auto;position:fixed;transition-timing-function:ease}.van-popup--center{left:50%;top:50%;transform:translate3d(-50%,-50%,0)}.van-popup--center.van-popup--round{border-radius:var(--popup-round-border-radius,16px)}.van-popup--top{left:0;top:0;width:100%}.van-popup--top.van-popup--round{border-radius:0 0 var(--popup-round-border-radius,var(--popup-round-border-radius,16px)) var(--popup-round-border-radius,var(--popup-round-border-radius,16px))}.van-popup--right{right:0;top:50%;transform:translate3d(0,-50%,0)}.van-popup--right.van-popup--round{border-radius:var(--popup-round-border-radius,var(--popup-round-border-radius,16px)) 0 0 var(--popup-round-border-radius,var(--popup-round-border-radius,16px))}.van-popup--bottom{bottom:0;left:0;width:100%}.van-popup--bottom.van-popup--round{border-radius:var(--popup-round-border-radius,var(--popup-round-border-radius,16px)) var(--popup-round-border-radius,var(--popup-round-border-radius,16px)) 0 0}.van-popup--left{left:0;top:50%;transform:translate3d(0,-50%,0)}.van-popup--left.van-popup--round{border-radius:0 var(--popup-round-border-radius,var(--popup-round-border-radius,16px)) var(--popup-round-border-radius,var(--popup-round-border-radius,16px)) 0}.van-popup--bottom.van-popup--safe{padding-bottom:env(safe-area-inset-bottom)}.van-popup--bottom.van-popup--safeTabBar,.van-popup--top.van-popup--safeTabBar{bottom:var(--tabbar-height,50px)}.van-popup--safeTop{padding-top:env(safe-area-inset-top)}.van-popup__close-icon{color:var(--popup-close-icon-color,#969799);font-size:var(--popup-close-icon-size,18px);position:absolute;z-index:var(--popup-close-icon-z-index,1)}.van-popup__close-icon--top-left{left:var(--popup-close-icon-margin,16px);top:var(--popup-close-icon-margin,16px)}.van-popup__close-icon--top-right{right:var(--popup-close-icon-margin,16px);top:var(--popup-close-icon-margin,16px)}.van-popup__close-icon--bottom-left{bottom:var(--popup-close-icon-margin,16px);left:var(--popup-close-icon-margin,16px)}.van-popup__close-icon--bottom-right{bottom:var(--popup-close-icon-margin,16px);right:var(--popup-close-icon-margin,16px)}.van-popup__close-icon:active{opacity:.6}.van-scale-enter-active,.van-scale-leave-active{transition-property:opacity,transform}.van-scale-enter,.van-scale-leave-to{opacity:0;transform:translate3d(-50%,-50%,0) scale(.7)}.van-fade-enter-active,.van-fade-leave-active{transition-property:opacity}.van-fade-enter,.van-fade-leave-to{opacity:0}.van-center-enter-active,.van-center-leave-active{transition-property:opacity}.van-center-enter,.van-center-leave-to{opacity:0}.van-bottom-enter-active,.van-bottom-leave-active,.van-left-enter-active,.van-left-leave-active,.van-right-enter-active,.van-right-leave-active,.van-top-enter-active,.van-top-leave-active{transition-property:transform}.van-bottom-enter,.van-bottom-leave-to{transform:translate3d(0,100%,0)}.van-top-enter,.van-top-leave-to{transform:translate3d(0,-100%,0)}.van-left-enter,.van-left-leave-to{transform:translate3d(-100%,-50%,0)}.van-right-enter,.van-right-leave-to{transform:translate3d(100%,-50%,0)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/popup/popup.vue b/wxcomponents/vant/dist/popup/popup.vue
new file mode 100644
index 0000000..adb8105
--- /dev/null
+++ b/wxcomponents/vant/dist/popup/popup.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/popup/popup.wxml b/wxcomponents/vant/dist/popup/popup.wxml
new file mode 100644
index 0000000..25b57fe
--- /dev/null
+++ b/wxcomponents/vant/dist/popup/popup.wxml
@@ -0,0 +1,14 @@
+
diff --git a/wxcomponents/vant/dist/progress/index.d.ts b/wxcomponents/vant/dist/progress/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/progress/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/progress/index.js b/wxcomponents/vant/dist/progress/index.js
new file mode 100644
index 0000000..0780c43
--- /dev/null
+++ b/wxcomponents/vant/dist/progress/index.js
@@ -0,0 +1,51 @@
+import { VantComponent } from '../common/component';
+import { BLUE } from '../common/color';
+import { getRect } from '../common/utils';
+VantComponent({
+ props: {
+ inactive: Boolean,
+ percentage: {
+ type: Number,
+ observer: 'setLeft',
+ },
+ pivotText: String,
+ pivotColor: String,
+ trackColor: String,
+ showPivot: {
+ type: Boolean,
+ value: true,
+ },
+ color: {
+ type: String,
+ value: BLUE,
+ },
+ textColor: {
+ type: String,
+ value: '#fff',
+ },
+ strokeWidth: {
+ type: null,
+ value: 4,
+ },
+ },
+ data: {
+ right: 0,
+ },
+ mounted() {
+ this.setLeft();
+ },
+ methods: {
+ setLeft() {
+ Promise.all([
+ getRect(this, '.van-progress'),
+ getRect(this, '.van-progress__pivot'),
+ ]).then(([portion, pivot]) => {
+ if (portion && pivot) {
+ this.setData({
+ right: (pivot.width * (this.data.percentage - 100)) / 100,
+ });
+ }
+ });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/progress/index.json b/wxcomponents/vant/dist/progress/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/progress/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/progress/index.vue b/wxcomponents/vant/dist/progress/index.vue
new file mode 100644
index 0000000..c1792de
--- /dev/null
+++ b/wxcomponents/vant/dist/progress/index.vue
@@ -0,0 +1,69 @@
+
+
+
+
+ {{ computed.pivotText(pivotText, percentage) }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/progress/index.wxml b/wxcomponents/vant/dist/progress/index.wxml
new file mode 100644
index 0000000..e81514d
--- /dev/null
+++ b/wxcomponents/vant/dist/progress/index.wxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+ {{ computed.pivotText(pivotText, percentage) }}
+
+
+
diff --git a/wxcomponents/vant/dist/progress/index.wxs b/wxcomponents/vant/dist/progress/index.wxs
new file mode 100644
index 0000000..5b1e8e6
--- /dev/null
+++ b/wxcomponents/vant/dist/progress/index.wxs
@@ -0,0 +1,36 @@
+/* eslint-disable */
+var utils = require('../wxs/utils.wxs');
+var style = require('../wxs/style.wxs');
+
+function pivotText(pivotText, percentage) {
+ return pivotText || percentage + '%';
+}
+
+function rootStyle(data) {
+ return style({
+ 'height': data.strokeWidth ? utils.addUnit(data.strokeWidth) : '',
+ 'background': data.trackColor,
+ });
+}
+
+function portionStyle(data) {
+ return style({
+ background: data.inactive ? '#cacaca' : data.color,
+ width: data.percentage ? data.percentage + '%' : '',
+ });
+}
+
+function pivotStyle(data) {
+ return style({
+ color: data.textColor,
+ right: data.right + 'px',
+ background: data.pivotColor ? data.pivotColor : data.inactive ? '#cacaca' : data.color,
+ });
+}
+
+module.exports = {
+ pivotText: pivotText,
+ rootStyle: rootStyle,
+ portionStyle: portionStyle,
+ pivotStyle: pivotStyle,
+};
diff --git a/wxcomponents/vant/dist/progress/index.wxss b/wxcomponents/vant/dist/progress/index.wxss
new file mode 100644
index 0000000..a08972a
--- /dev/null
+++ b/wxcomponents/vant/dist/progress/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-progress{background:var(--progress-background-color,#ebedf0);border-radius:var(--progress-height,4px);height:var(--progress-height,4px);position:relative}.van-progress__portion{background:var(--progress-color,#1989fa);border-radius:inherit;height:100%;left:0;position:absolute}.van-progress__pivot{background-color:var(--progress-pivot-background-color,#1989fa);border-radius:1em;box-sizing:border-box;color:var(--progress-pivot-text-color,#fff);font-size:var(--progress-pivot-font-size,10px);line-height:var(--progress-pivot-line-height,1.6);min-width:3.6em;padding:var(--progress-pivot-padding,0 5px);position:absolute;text-align:center;top:50%;transform:translateY(-50%);word-break:keep-all}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/radio-group/index.d.ts b/wxcomponents/vant/dist/radio-group/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/radio-group/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/radio-group/index.js b/wxcomponents/vant/dist/radio-group/index.js
new file mode 100644
index 0000000..2846fdd
--- /dev/null
+++ b/wxcomponents/vant/dist/radio-group/index.js
@@ -0,0 +1,22 @@
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+ field: true,
+ relation: useChildren('radio'),
+ props: {
+ value: {
+ type: null,
+ observer: 'updateChildren',
+ },
+ direction: String,
+ disabled: {
+ type: Boolean,
+ observer: 'updateChildren',
+ },
+ },
+ methods: {
+ updateChildren() {
+ this.children.forEach((child) => child.updateFromParent());
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/radio-group/index.json b/wxcomponents/vant/dist/radio-group/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/radio-group/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/radio-group/index.vue b/wxcomponents/vant/dist/radio-group/index.vue
new file mode 100644
index 0000000..80c48a4
--- /dev/null
+++ b/wxcomponents/vant/dist/radio-group/index.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/radio-group/index.wxml b/wxcomponents/vant/dist/radio-group/index.wxml
new file mode 100644
index 0000000..0ab17af
--- /dev/null
+++ b/wxcomponents/vant/dist/radio-group/index.wxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/radio-group/index.wxss b/wxcomponents/vant/dist/radio-group/index.wxss
new file mode 100644
index 0000000..4e3b5d4
--- /dev/null
+++ b/wxcomponents/vant/dist/radio-group/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-radio-group--horizontal{display:flex;flex-wrap:wrap}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/radio/index.d.ts b/wxcomponents/vant/dist/radio/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/radio/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/radio/index.js b/wxcomponents/vant/dist/radio/index.js
new file mode 100644
index 0000000..9eb1258
--- /dev/null
+++ b/wxcomponents/vant/dist/radio/index.js
@@ -0,0 +1,66 @@
+import { canIUseModel } from '../common/version';
+import { VantComponent } from '../common/component';
+import { useParent } from '../common/relation';
+VantComponent({
+ field: true,
+ relation: useParent('radio-group', function () {
+ this.updateFromParent();
+ }),
+ classes: ['icon-class', 'label-class'],
+ props: {
+ name: null,
+ value: null,
+ disabled: Boolean,
+ useIconSlot: Boolean,
+ checkedColor: String,
+ labelPosition: {
+ type: String,
+ value: 'right',
+ },
+ labelDisabled: Boolean,
+ shape: {
+ type: String,
+ value: 'round',
+ },
+ iconSize: {
+ type: null,
+ value: 20,
+ },
+ },
+ data: {
+ direction: '',
+ parentDisabled: false,
+ },
+ methods: {
+ updateFromParent() {
+ if (!this.parent) {
+ return;
+ }
+ const { value, disabled: parentDisabled, direction } = this.parent.data;
+ this.setData({
+ value,
+ direction,
+ parentDisabled,
+ });
+ },
+ emitChange(value) {
+ const instance = this.parent || this;
+ instance.$emit('input', value);
+ instance.$emit('change', value);
+ if (canIUseModel()) {
+ instance.setData({ value });
+ }
+ },
+ onChange() {
+ if (!this.data.disabled && !this.data.parentDisabled) {
+ this.emitChange(this.data.name);
+ }
+ },
+ onClickLabel() {
+ const { disabled, parentDisabled, labelDisabled, name } = this.data;
+ if (!(disabled || parentDisabled) && !labelDisabled) {
+ this.emitChange(name);
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/radio/index.json b/wxcomponents/vant/dist/radio/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/wxcomponents/vant/dist/radio/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/radio/index.vue b/wxcomponents/vant/dist/radio/index.vue
new file mode 100644
index 0000000..4a27045
--- /dev/null
+++ b/wxcomponents/vant/dist/radio/index.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/radio/index.wxml b/wxcomponents/vant/dist/radio/index.wxml
new file mode 100644
index 0000000..5f898c0
--- /dev/null
+++ b/wxcomponents/vant/dist/radio/index.wxml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/radio/index.wxs b/wxcomponents/vant/dist/radio/index.wxs
new file mode 100644
index 0000000..a428aad
--- /dev/null
+++ b/wxcomponents/vant/dist/radio/index.wxs
@@ -0,0 +1,33 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function iconStyle(data) {
+ var styles = {
+ 'font-size': addUnit(data.iconSize),
+ };
+
+ if (
+ data.checkedColor &&
+ !(data.disabled || data.parentDisabled) &&
+ data.value === data.name
+ ) {
+ styles['border-color'] = data.checkedColor;
+ styles['background-color'] = data.checkedColor;
+ }
+
+ return style(styles);
+}
+
+function iconCustomStyle(data) {
+ return style({
+ 'line-height': addUnit(data.iconSize),
+ 'font-size': '.8em',
+ display: 'block',
+ });
+}
+
+module.exports = {
+ iconStyle: iconStyle,
+ iconCustomStyle: iconCustomStyle,
+};
diff --git a/wxcomponents/vant/dist/radio/index.wxss b/wxcomponents/vant/dist/radio/index.wxss
new file mode 100644
index 0000000..257b0c7
--- /dev/null
+++ b/wxcomponents/vant/dist/radio/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-radio{align-items:center;display:flex;overflow:hidden;-webkit-user-select:none;user-select:none}.van-radio__icon-wrap{flex:none}.van-radio--horizontal{margin-right:var(--padding-sm,12px)}.van-radio__icon{align-items:center;border:1px solid var(--radio-border-color,#c8c9cc);box-sizing:border-box;color:transparent;display:flex;font-size:var(--radio-size,20px);height:1em;justify-content:center;text-align:center;transition-duration:var(--radio-transition-duration,.2s);transition-property:color,border-color,background-color;width:1em}.van-radio__icon--round{border-radius:100%}.van-radio__icon--checked{background-color:var(--radio-checked-icon-color,#1989fa);border-color:var(--radio-checked-icon-color,#1989fa);color:#fff}.van-radio__icon--disabled{background-color:var(--radio-disabled-background-color,#ebedf0);border-color:var(--radio-disabled-icon-color,#c8c9cc)}.van-radio__icon--disabled.van-radio__icon--checked{color:var(--radio-disabled-icon-color,#c8c9cc)}.van-radio__label{word-wrap:break-word;color:var(--radio-label-color,#323233);line-height:var(--radio-size,20px);padding-left:var(--radio-label-margin,10px)}.van-radio__label--left{float:left;margin:0 var(--radio-label-margin,10px) 0 0}.van-radio__label--disabled{color:var(--radio-disabled-label-color,#c8c9cc)}.van-radio__label:empty{margin:0}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/rate/index.d.ts b/wxcomponents/vant/dist/rate/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/rate/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/rate/index.js b/wxcomponents/vant/dist/rate/index.js
new file mode 100644
index 0000000..23b7345
--- /dev/null
+++ b/wxcomponents/vant/dist/rate/index.js
@@ -0,0 +1,78 @@
+import { getAllRect } from '../common/utils';
+import { VantComponent } from '../common/component';
+import { canIUseModel } from '../common/version';
+VantComponent({
+ field: true,
+ classes: ['icon-class'],
+ props: {
+ value: {
+ type: Number,
+ observer(value) {
+ if (value !== this.data.innerValue) {
+ this.setData({ innerValue: value });
+ }
+ },
+ },
+ readonly: Boolean,
+ disabled: Boolean,
+ allowHalf: Boolean,
+ size: null,
+ icon: {
+ type: String,
+ value: 'star',
+ },
+ voidIcon: {
+ type: String,
+ value: 'star-o',
+ },
+ color: String,
+ voidColor: String,
+ disabledColor: String,
+ count: {
+ type: Number,
+ value: 5,
+ observer(value) {
+ this.setData({ innerCountArray: Array.from({ length: value }) });
+ },
+ },
+ gutter: null,
+ touchable: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ data: {
+ innerValue: 0,
+ innerCountArray: Array.from({ length: 5 }),
+ },
+ methods: {
+ onSelect(event) {
+ const { data } = this;
+ const { score } = event.currentTarget.dataset;
+ if (!data.disabled && !data.readonly) {
+ this.setData({ innerValue: score + 1 });
+ if (canIUseModel()) {
+ this.setData({ value: score + 1 });
+ }
+ wx.nextTick(() => {
+ this.$emit('input', score + 1);
+ this.$emit('change', score + 1);
+ });
+ }
+ },
+ onTouchMove(event) {
+ const { touchable } = this.data;
+ if (!touchable)
+ return;
+ const { clientX } = event.touches[0];
+ getAllRect(this, '.van-rate__icon').then((list) => {
+ const target = list
+ .sort((cur, next) => cur.dataset.score - next.dataset.score)
+ .find((item) => clientX >= item.left && clientX <= item.right);
+ if (target != null) {
+ this.onSelect(Object.assign(Object.assign({}, event), { currentTarget: target }));
+ }
+ });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/rate/index.json b/wxcomponents/vant/dist/rate/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/wxcomponents/vant/dist/rate/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/rate/index.vue b/wxcomponents/vant/dist/rate/index.vue
new file mode 100644
index 0000000..3972be1
--- /dev/null
+++ b/wxcomponents/vant/dist/rate/index.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/rate/index.wxml b/wxcomponents/vant/dist/rate/index.wxml
new file mode 100644
index 0000000..049714c
--- /dev/null
+++ b/wxcomponents/vant/dist/rate/index.wxml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/rate/index.wxss b/wxcomponents/vant/dist/rate/index.wxss
new file mode 100644
index 0000000..e2a517e
--- /dev/null
+++ b/wxcomponents/vant/dist/rate/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-rate{display:inline-flex;-webkit-user-select:none;user-select:none}.van-rate__item{padding:0 var(--rate-horizontal-padding,2px);position:relative}.van-rate__item:not(:last-child){padding-right:var(--rate-icon-gutter,4px)}.van-rate__icon{color:var(--rate-icon-void-color,#c8c9cc);display:block;font-size:var(--rate-icon-size,20px);height:1em}.van-rate__icon--half{left:var(--rate-horizontal-padding,2px);overflow:hidden;position:absolute;top:0;width:.5em}.van-rate__icon--full,.van-rate__icon--half{color:var(--rate-icon-full-color,#ee0a24)}.van-rate__icon--disabled{color:var(--rate-icon-disabled-color,#c8c9cc)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/row/index.d.ts b/wxcomponents/vant/dist/row/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/row/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/row/index.js b/wxcomponents/vant/dist/row/index.js
new file mode 100644
index 0000000..cc844f8
--- /dev/null
+++ b/wxcomponents/vant/dist/row/index.js
@@ -0,0 +1,23 @@
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+ relation: useChildren('col', function (target) {
+ const { gutter } = this.data;
+ if (gutter) {
+ target.setData({ gutter });
+ }
+ }),
+ props: {
+ gutter: {
+ type: Number,
+ observer: 'setGutter',
+ },
+ },
+ methods: {
+ setGutter() {
+ this.children.forEach((col) => {
+ col.setData(this.data);
+ });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/row/index.json b/wxcomponents/vant/dist/row/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/row/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/row/index.vue b/wxcomponents/vant/dist/row/index.vue
new file mode 100644
index 0000000..6527855
--- /dev/null
+++ b/wxcomponents/vant/dist/row/index.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/row/index.wxml b/wxcomponents/vant/dist/row/index.wxml
new file mode 100644
index 0000000..69a4359
--- /dev/null
+++ b/wxcomponents/vant/dist/row/index.wxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/row/index.wxs b/wxcomponents/vant/dist/row/index.wxs
new file mode 100644
index 0000000..f5c5958
--- /dev/null
+++ b/wxcomponents/vant/dist/row/index.wxs
@@ -0,0 +1,18 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function rootStyle(data) {
+ if (!data.gutter) {
+ return '';
+ }
+
+ return style({
+ 'margin-right': addUnit(-data.gutter / 2),
+ 'margin-left': addUnit(-data.gutter / 2),
+ });
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+};
diff --git a/wxcomponents/vant/dist/row/index.wxss b/wxcomponents/vant/dist/row/index.wxss
new file mode 100644
index 0000000..bb8946b
--- /dev/null
+++ b/wxcomponents/vant/dist/row/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-row:after{clear:both;content:"";display:table}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/search/index.d.ts b/wxcomponents/vant/dist/search/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/search/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/search/index.js b/wxcomponents/vant/dist/search/index.js
new file mode 100644
index 0000000..158396c
--- /dev/null
+++ b/wxcomponents/vant/dist/search/index.js
@@ -0,0 +1,93 @@
+import { VantComponent } from '../common/component';
+import { canIUseModel } from '../common/version';
+VantComponent({
+ field: true,
+ classes: ['field-class', 'input-class', 'cancel-class'],
+ props: {
+ value: {
+ type: String,
+ value: '',
+ },
+ label: String,
+ focus: Boolean,
+ error: Boolean,
+ disabled: Boolean,
+ readonly: Boolean,
+ inputAlign: String,
+ showAction: Boolean,
+ useActionSlot: Boolean,
+ useLeftIconSlot: Boolean,
+ useRightIconSlot: Boolean,
+ leftIcon: {
+ type: String,
+ value: 'search',
+ },
+ rightIcon: String,
+ placeholder: String,
+ placeholderStyle: String,
+ actionText: {
+ type: String,
+ value: '取消',
+ },
+ background: {
+ type: String,
+ value: '#ffffff',
+ },
+ maxlength: {
+ type: Number,
+ value: -1,
+ },
+ shape: {
+ type: String,
+ value: 'square',
+ },
+ clearable: {
+ type: Boolean,
+ value: true,
+ },
+ clearTrigger: {
+ type: String,
+ value: 'focus',
+ },
+ clearIcon: {
+ type: String,
+ value: 'clear',
+ },
+ },
+ methods: {
+ onChange(event) {
+ if (canIUseModel()) {
+ this.setData({ value: event.detail });
+ }
+ this.$emit('change', event.detail);
+ },
+ onCancel() {
+ /**
+ * 修复修改输入框值时,输入框失焦和赋值同时触发,赋值失效
+ * https://github.com/youzan/vant-weapp/issues/1768
+ */
+ setTimeout(() => {
+ if (canIUseModel()) {
+ this.setData({ value: '' });
+ }
+ this.$emit('cancel');
+ this.$emit('change', '');
+ }, 200);
+ },
+ onSearch(event) {
+ this.$emit('search', event.detail);
+ },
+ onFocus(event) {
+ this.$emit('focus', event.detail);
+ },
+ onBlur(event) {
+ this.$emit('blur', event.detail);
+ },
+ onClear(event) {
+ this.$emit('clear', event.detail);
+ },
+ onClickInput(event) {
+ this.$emit('click-input', event.detail);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/search/index.json b/wxcomponents/vant/dist/search/index.json
new file mode 100644
index 0000000..b4cfe91
--- /dev/null
+++ b/wxcomponents/vant/dist/search/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-field": "../field/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/search/index.vue b/wxcomponents/vant/dist/search/index.vue
new file mode 100644
index 0000000..cad585c
--- /dev/null
+++ b/wxcomponents/vant/dist/search/index.vue
@@ -0,0 +1,122 @@
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
+
+ {{ actionText }}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/search/index.wxml b/wxcomponents/vant/dist/search/index.wxml
new file mode 100644
index 0000000..e772ee4
--- /dev/null
+++ b/wxcomponents/vant/dist/search/index.wxml
@@ -0,0 +1,53 @@
+
+
+
+
+ {{ label }}
+
+
+
+
+
+
+
+
+
+
+ {{ actionText }}
+
+
diff --git a/wxcomponents/vant/dist/search/index.wxss b/wxcomponents/vant/dist/search/index.wxss
new file mode 100644
index 0000000..4f306b0
--- /dev/null
+++ b/wxcomponents/vant/dist/search/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-search{align-items:center;box-sizing:border-box;display:flex;padding:var(--search-padding,10px 12px)}.van-search__content{background-color:var(--search-background-color,#f7f8fa);border-radius:2px;display:flex;flex:1;padding-left:var(--padding-sm,12px)}.van-search__content--round{border-radius:999px}.van-search__label{color:var(--search-label-color,#323233);font-size:var(--search-label-font-size,14px);line-height:var(--search-input-height,34px);padding:var(--search-label-padding,0 5px)}.van-search__field{flex:1}.van-search__field__left-icon{color:var(--search-left-icon-color,#969799)}.van-search--withaction{padding-right:0}.van-search__action{color:var(--search-action-text-color,#323233);font-size:var(--search-action-font-size,14px);line-height:var(--search-input-height,34px)}.van-search__action--hover{background-color:#f2f3f5}.van-search__action-button{padding:var(--search-action-padding,0 8px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/share-sheet/index.d.ts b/wxcomponents/vant/dist/share-sheet/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/share-sheet/index.js b/wxcomponents/vant/dist/share-sheet/index.js
new file mode 100644
index 0000000..a6ce016
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/index.js
@@ -0,0 +1,55 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ // whether to show popup
+ show: Boolean,
+ // overlay custom style
+ overlayStyle: String,
+ // z-index
+ zIndex: {
+ type: Number,
+ value: 100,
+ },
+ title: String,
+ cancelText: {
+ type: String,
+ value: '取消',
+ },
+ description: String,
+ options: {
+ type: Array,
+ value: [],
+ },
+ overlay: {
+ type: Boolean,
+ value: true,
+ },
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true,
+ },
+ closeOnClickOverlay: {
+ type: Boolean,
+ value: true,
+ },
+ duration: {
+ type: null,
+ value: 300,
+ },
+ },
+ methods: {
+ onClickOverlay() {
+ this.$emit('click-overlay');
+ },
+ onCancel() {
+ this.onClose();
+ this.$emit('cancel');
+ },
+ onSelect(event) {
+ this.$emit('select', event.detail);
+ },
+ onClose() {
+ this.$emit('close');
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/share-sheet/index.json b/wxcomponents/vant/dist/share-sheet/index.json
new file mode 100644
index 0000000..15a7c22
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-popup": "../popup/index",
+ "options": "./options"
+ }
+}
diff --git a/wxcomponents/vant/dist/share-sheet/index.vue b/wxcomponents/vant/dist/share-sheet/index.vue
new file mode 100644
index 0000000..9182f30
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/index.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/share-sheet/index.wxml b/wxcomponents/vant/dist/share-sheet/index.wxml
new file mode 100644
index 0000000..cefc3af
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/index.wxml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/share-sheet/index.wxs b/wxcomponents/vant/dist/share-sheet/index.wxs
new file mode 100644
index 0000000..2149ee9
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/index.wxs
@@ -0,0 +1,12 @@
+/* eslint-disable */
+function isMulti(options) {
+ if (options == null || options[0] == null) {
+ return false;
+ }
+
+ return "Array" === options.constructor && "Array" === options[0].constructor;
+}
+
+module.exports = {
+ isMulti: isMulti
+};
diff --git a/wxcomponents/vant/dist/share-sheet/index.wxss b/wxcomponents/vant/dist/share-sheet/index.wxss
new file mode 100644
index 0000000..e8d8dae
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-share-sheet__header{padding:12px 16px 4px;text-align:center}.van-share-sheet__title{color:#323233;font-size:14px;font-weight:400;line-height:20px;margin-top:8px}.van-share-sheet__title:empty,.van-share-sheet__title:not(:empty)+.van-share-sheet__title{display:none}.van-share-sheet__description{color:#969799;display:block;font-size:12px;line-height:16px;margin-top:8px}.van-share-sheet__description:empty,.van-share-sheet__description:not(:empty)+.van-share-sheet__description{display:none}.van-share-sheet__cancel{background:#fff;border:none;box-sizing:initial;display:block;font-size:16px;height:auto;line-height:48px;padding:0;text-align:center;width:100%}.van-share-sheet__cancel:before{background-color:#f7f8fa;content:" ";display:block;height:8px}.van-share-sheet__cancel:after{display:none}.van-share-sheet__cancel:active{background-color:#f2f3f5}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/share-sheet/options.d.ts b/wxcomponents/vant/dist/share-sheet/options.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/options.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/share-sheet/options.js b/wxcomponents/vant/dist/share-sheet/options.js
new file mode 100644
index 0000000..5a29ad7
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/options.js
@@ -0,0 +1,14 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ options: Array,
+ showBorder: Boolean,
+ },
+ methods: {
+ onSelect(event) {
+ const { index } = event.currentTarget.dataset;
+ const option = this.data.options[index];
+ this.$emit('select', Object.assign(Object.assign({}, option), { index }));
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/share-sheet/options.json b/wxcomponents/vant/dist/share-sheet/options.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/options.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/share-sheet/options.vue b/wxcomponents/vant/dist/share-sheet/options.vue
new file mode 100644
index 0000000..68eb5a2
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/options.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/share-sheet/options.wxml b/wxcomponents/vant/dist/share-sheet/options.wxml
new file mode 100644
index 0000000..2983ebb
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/options.wxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/share-sheet/options.wxs b/wxcomponents/vant/dist/share-sheet/options.wxs
new file mode 100644
index 0000000..a116d32
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/options.wxs
@@ -0,0 +1,14 @@
+/* eslint-disable */
+var PRESET_ICONS = ['qq', 'link', 'weibo', 'wechat', 'poster', 'qrcode', 'weapp-qrcode', 'wechat-moments'];
+
+function getIconURL(icon) {
+ if (PRESET_ICONS.indexOf(icon) !== -1) {
+ return 'https://img.yzcdn.cn/vant/share-sheet-' + icon + '.png';
+ }
+
+ return icon;
+}
+
+module.exports = {
+ getIconURL: getIconURL,
+};
diff --git a/wxcomponents/vant/dist/share-sheet/options.wxss b/wxcomponents/vant/dist/share-sheet/options.wxss
new file mode 100644
index 0000000..b7f5455
--- /dev/null
+++ b/wxcomponents/vant/dist/share-sheet/options.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-share-sheet__options{-webkit-overflow-scrolling:touch;display:flex;overflow-x:auto;overflow-y:visible;padding:16px 0 16px 8px;position:relative}.van-share-sheet__options--border:before{border-top:1px solid #ebedf0;box-sizing:border-box;content:" ";left:16px;pointer-events:none;position:absolute;right:0;top:0;transform:scaleY(.5);transform-origin:center}.van-share-sheet__options::-webkit-scrollbar{height:0}.van-share-sheet__option{align-items:center;display:flex;flex-direction:column;-webkit-user-select:none;user-select:none}.van-share-sheet__option:active{opacity:.7}.van-share-sheet__button{background-color:initial;border:0;height:auto;line-height:inherit;padding:0}.van-share-sheet__button:after{border:0}.van-share-sheet__icon{height:48px;margin:0 16px;width:48px}.van-share-sheet__name{color:#646566;font-size:12px;margin-top:8px;padding:0 4px}.van-share-sheet__option-description{color:#c8c9cc;font-size:12px;padding:0 4px}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/sidebar-item/index.d.ts b/wxcomponents/vant/dist/sidebar-item/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar-item/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/sidebar-item/index.js b/wxcomponents/vant/dist/sidebar-item/index.js
new file mode 100644
index 0000000..63ea57d
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar-item/index.js
@@ -0,0 +1,29 @@
+import { VantComponent } from '../common/component';
+import { useParent } from '../common/relation';
+VantComponent({
+ classes: ['active-class', 'disabled-class'],
+ relation: useParent('sidebar'),
+ props: {
+ dot: Boolean,
+ badge: null,
+ info: null,
+ title: String,
+ disabled: Boolean,
+ },
+ methods: {
+ onClick() {
+ const { parent } = this;
+ if (!parent || this.data.disabled) {
+ return;
+ }
+ const index = parent.children.indexOf(this);
+ parent.setActive(index).then(() => {
+ this.$emit('click', index);
+ parent.$emit('change', index);
+ });
+ },
+ setActive(selected) {
+ return this.setData({ selected });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/sidebar-item/index.json b/wxcomponents/vant/dist/sidebar-item/index.json
new file mode 100644
index 0000000..bf0ebe0
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar-item/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-info": "../info/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/sidebar-item/index.vue b/wxcomponents/vant/dist/sidebar-item/index.vue
new file mode 100644
index 0000000..c2e39e3
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar-item/index.vue
@@ -0,0 +1,49 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/sidebar-item/index.wxml b/wxcomponents/vant/dist/sidebar-item/index.wxml
new file mode 100644
index 0000000..c5c08a6
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar-item/index.wxml
@@ -0,0 +1,18 @@
+
+
+
diff --git a/wxcomponents/vant/dist/sidebar-item/index.wxss b/wxcomponents/vant/dist/sidebar-item/index.wxss
new file mode 100644
index 0000000..f1ce421
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar-item/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-sidebar-item{background-color:var(--sidebar-background-color,#f7f8fa);border-left:3px solid transparent;box-sizing:border-box;color:var(--sidebar-text-color,#323233);display:block;font-size:var(--sidebar-font-size,14px);line-height:var(--sidebar-line-height,20px);overflow:hidden;padding:var(--sidebar-padding,20px 12px 20px 8px);-webkit-user-select:none;user-select:none}.van-sidebar-item__text{display:inline-block;position:relative;word-break:break-all}.van-sidebar-item--hover:not(.van-sidebar-item--disabled){background-color:var(--sidebar-active-color,#f2f3f5)}.van-sidebar-item:after{border-bottom-width:1px}.van-sidebar-item--selected{border-color:var(--sidebar-selected-border-color,#ee0a24);color:var(--sidebar-selected-text-color,#323233);font-weight:var(--sidebar-selected-font-weight,500)}.van-sidebar-item--selected:after{border-right-width:1px}.van-sidebar-item--selected,.van-sidebar-item--selected.van-sidebar-item--hover{background-color:var(--sidebar-selected-background-color,#fff)}.van-sidebar-item--disabled{color:var(--sidebar-disabled-text-color,#c8c9cc)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/sidebar/index.d.ts b/wxcomponents/vant/dist/sidebar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/sidebar/index.js b/wxcomponents/vant/dist/sidebar/index.js
new file mode 100644
index 0000000..d763e06
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar/index.js
@@ -0,0 +1,34 @@
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+VantComponent({
+ relation: useChildren('sidebar-item', function () {
+ this.setActive(this.data.activeKey);
+ }),
+ props: {
+ activeKey: {
+ type: Number,
+ value: 0,
+ observer: 'setActive',
+ },
+ },
+ beforeCreate() {
+ this.currentActive = -1;
+ },
+ methods: {
+ setActive(activeKey) {
+ const { children, currentActive } = this;
+ if (!children.length) {
+ return Promise.resolve();
+ }
+ this.currentActive = activeKey;
+ const stack = [];
+ if (currentActive !== activeKey && children[currentActive]) {
+ stack.push(children[currentActive].setActive(false));
+ }
+ if (children[activeKey]) {
+ stack.push(children[activeKey].setActive(true));
+ }
+ return Promise.all(stack);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/sidebar/index.json b/wxcomponents/vant/dist/sidebar/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/sidebar/index.vue b/wxcomponents/vant/dist/sidebar/index.vue
new file mode 100644
index 0000000..58a6417
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar/index.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/sidebar/index.wxml b/wxcomponents/vant/dist/sidebar/index.wxml
new file mode 100644
index 0000000..96b11c7
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar/index.wxml
@@ -0,0 +1,3 @@
+
diff --git a/wxcomponents/vant/dist/sidebar/index.wxss b/wxcomponents/vant/dist/sidebar/index.wxss
new file mode 100644
index 0000000..5a2d44f
--- /dev/null
+++ b/wxcomponents/vant/dist/sidebar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-sidebar{width:var(--sidebar-width,80px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/skeleton/index.d.ts b/wxcomponents/vant/dist/skeleton/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/skeleton/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/skeleton/index.js b/wxcomponents/vant/dist/skeleton/index.js
new file mode 100644
index 0000000..33b1141
--- /dev/null
+++ b/wxcomponents/vant/dist/skeleton/index.js
@@ -0,0 +1,46 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: ['avatar-class', 'title-class', 'row-class'],
+ props: {
+ row: {
+ type: Number,
+ value: 0,
+ observer(value) {
+ this.setData({ rowArray: Array.from({ length: value }) });
+ },
+ },
+ title: Boolean,
+ avatar: Boolean,
+ loading: {
+ type: Boolean,
+ value: true,
+ },
+ animate: {
+ type: Boolean,
+ value: true,
+ },
+ avatarSize: {
+ type: String,
+ value: '32px',
+ },
+ avatarShape: {
+ type: String,
+ value: 'round',
+ },
+ titleWidth: {
+ type: String,
+ value: '40%',
+ },
+ rowWidth: {
+ type: null,
+ value: '100%',
+ observer(val) {
+ this.setData({ isArray: val instanceof Array });
+ },
+ },
+ },
+ data: {
+ isArray: false,
+ rowArray: [],
+ },
+});
diff --git a/wxcomponents/vant/dist/skeleton/index.json b/wxcomponents/vant/dist/skeleton/index.json
new file mode 100644
index 0000000..a89ef4d
--- /dev/null
+++ b/wxcomponents/vant/dist/skeleton/index.json
@@ -0,0 +1,4 @@
+{
+ "component": true,
+ "usingComponents": {}
+}
diff --git a/wxcomponents/vant/dist/skeleton/index.vue b/wxcomponents/vant/dist/skeleton/index.vue
new file mode 100644
index 0000000..2f04e63
--- /dev/null
+++ b/wxcomponents/vant/dist/skeleton/index.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/skeleton/index.wxml b/wxcomponents/vant/dist/skeleton/index.wxml
new file mode 100644
index 0000000..058e2ef
--- /dev/null
+++ b/wxcomponents/vant/dist/skeleton/index.wxml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/skeleton/index.wxss b/wxcomponents/vant/dist/skeleton/index.wxss
new file mode 100644
index 0000000..d59a5ed
--- /dev/null
+++ b/wxcomponents/vant/dist/skeleton/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-skeleton{box-sizing:border-box;display:flex;padding:var(--skeleton-padding,0 16px);width:100%}.van-skeleton__avatar{background-color:var(--skeleton-avatar-background-color,#f2f3f5);flex-shrink:0;margin-right:var(--padding-md,16px)}.van-skeleton__avatar--round{border-radius:100%}.van-skeleton__content{flex:1}.van-skeleton__avatar+.van-skeleton__content{padding-top:var(--padding-xs,8px)}.van-skeleton__row,.van-skeleton__title{background-color:var(--skeleton-row-background-color,#f2f3f5);height:var(--skeleton-row-height,16px)}.van-skeleton__title{margin:0}.van-skeleton__row:not(:first-child){margin-top:var(--skeleton-row-margin-top,12px)}.van-skeleton__title+.van-skeleton__row{margin-top:20px}.van-skeleton--animate{animation:van-skeleton-blink 1.2s ease-in-out infinite}@keyframes van-skeleton-blink{50%{opacity:.6}}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/slider/index.d.ts b/wxcomponents/vant/dist/slider/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/slider/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/slider/index.js b/wxcomponents/vant/dist/slider/index.js
new file mode 100644
index 0000000..3f5fdf7
--- /dev/null
+++ b/wxcomponents/vant/dist/slider/index.js
@@ -0,0 +1,203 @@
+import { VantComponent } from '../common/component';
+import { touch } from '../mixins/touch';
+import { canIUseModel } from '../common/version';
+import { getRect, addUnit, nextTick } from '../common/utils';
+const DRAG_STATUS = {
+ START: 'start',
+ MOVING: 'moving',
+ END: 'end',
+};
+VantComponent({
+ mixins: [touch],
+ props: {
+ range: Boolean,
+ disabled: Boolean,
+ useButtonSlot: Boolean,
+ activeColor: String,
+ inactiveColor: String,
+ max: {
+ type: Number,
+ value: 100,
+ },
+ min: {
+ type: Number,
+ value: 0,
+ },
+ step: {
+ type: Number,
+ value: 1,
+ },
+ value: {
+ type: null,
+ value: 0,
+ observer(val) {
+ if (val !== this.value) {
+ this.updateValue(val);
+ }
+ },
+ },
+ vertical: Boolean,
+ barHeight: null,
+ },
+ created() {
+ this.updateValue(this.data.value);
+ },
+ methods: {
+ onTouchStart(event) {
+ if (this.data.disabled)
+ return;
+ const { index } = event.currentTarget.dataset;
+ if (typeof index === 'number') {
+ this.buttonIndex = index;
+ }
+ this.touchStart(event);
+ this.startValue = this.format(this.value);
+ this.newValue = this.value;
+ if (this.isRange(this.newValue)) {
+ this.startValue = this.newValue.map((val) => this.format(val));
+ }
+ else {
+ this.startValue = this.format(this.newValue);
+ }
+ this.dragStatus = DRAG_STATUS.START;
+ },
+ onTouchMove(event) {
+ if (this.data.disabled)
+ return;
+ if (this.dragStatus === DRAG_STATUS.START) {
+ this.$emit('drag-start');
+ }
+ this.touchMove(event);
+ this.dragStatus = DRAG_STATUS.MOVING;
+ getRect(this, '.van-slider').then((rect) => {
+ const { vertical } = this.data;
+ const delta = vertical ? this.deltaY : this.deltaX;
+ const total = vertical ? rect.height : rect.width;
+ const diff = (delta / total) * this.getRange();
+ if (this.isRange(this.startValue)) {
+ this.newValue[this.buttonIndex] =
+ this.startValue[this.buttonIndex] + diff;
+ }
+ else {
+ this.newValue = this.startValue + diff;
+ }
+ this.updateValue(this.newValue, false, true);
+ });
+ },
+ onTouchEnd() {
+ if (this.data.disabled)
+ return;
+ if (this.dragStatus === DRAG_STATUS.MOVING) {
+ this.dragStatus = DRAG_STATUS.END;
+ nextTick(() => {
+ this.updateValue(this.newValue, true);
+ this.$emit('drag-end');
+ });
+ }
+ },
+ onClick(event) {
+ if (this.data.disabled)
+ return;
+ const { min } = this.data;
+ getRect(this, '.van-slider').then((rect) => {
+ const { vertical } = this.data;
+ const touch = event.touches[0];
+ const delta = vertical
+ ? touch.clientY - rect.top
+ : touch.clientX - rect.left;
+ const total = vertical ? rect.height : rect.width;
+ const value = Number(min) + (delta / total) * this.getRange();
+ if (this.isRange(this.value)) {
+ const [left, right] = this.value;
+ const middle = (left + right) / 2;
+ if (value <= middle) {
+ this.updateValue([value, right], true);
+ }
+ else {
+ this.updateValue([left, value], true);
+ }
+ }
+ else {
+ this.updateValue(value, true);
+ }
+ });
+ },
+ isRange(val) {
+ const { range } = this.data;
+ return range && Array.isArray(val);
+ },
+ handleOverlap(value) {
+ if (value[0] > value[1]) {
+ return value.slice(0).reverse();
+ }
+ return value;
+ },
+ updateValue(value, end, drag) {
+ if (this.isRange(value)) {
+ value = this.handleOverlap(value).map((val) => this.format(val));
+ }
+ else {
+ value = this.format(value);
+ }
+ this.value = value;
+ const { vertical } = this.data;
+ const mainAxis = vertical ? 'height' : 'width';
+ this.setData({
+ wrapperStyle: `
+ background: ${this.data.inactiveColor || ''};
+ ${vertical ? 'width' : 'height'}: ${addUnit(this.data.barHeight) || ''};
+ `,
+ barStyle: `
+ ${mainAxis}: ${this.calcMainAxis()};
+ left: ${vertical ? 0 : this.calcOffset()};
+ top: ${vertical ? this.calcOffset() : 0};
+ ${drag ? 'transition: none;' : ''}
+ `,
+ });
+ if (drag) {
+ this.$emit('drag', { value });
+ }
+ if (end) {
+ this.$emit('change', value);
+ }
+ if ((drag || end) && canIUseModel()) {
+ this.setData({ value });
+ }
+ },
+ getScope() {
+ return Number(this.data.max) - Number(this.data.min);
+ },
+ getRange() {
+ const { max, min } = this.data;
+ return max - min;
+ },
+ getOffsetWidth(current, min) {
+ const scope = this.getScope();
+ // 避免最小值小于最小step时出现负数情况
+ return `${Math.max(((current - min) * 100) / scope, 0)}%`;
+ },
+ // 计算选中条的长度百分比
+ calcMainAxis() {
+ const { value } = this;
+ const { min } = this.data;
+ if (this.isRange(value)) {
+ return this.getOffsetWidth(value[1], value[0]);
+ }
+ return this.getOffsetWidth(value, Number(min));
+ },
+ // 计算选中条的开始位置的偏移量
+ calcOffset() {
+ const { value } = this;
+ const { min } = this.data;
+ const scope = this.getScope();
+ if (this.isRange(value)) {
+ return `${((value[0] - Number(min)) * 100) / scope}%`;
+ }
+ return '0%';
+ },
+ format(value) {
+ const { max, min, step } = this.data;
+ return Math.round(Math.max(min, Math.min(value, max)) / step) * step;
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/slider/index.json b/wxcomponents/vant/dist/slider/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/slider/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/slider/index.vue b/wxcomponents/vant/dist/slider/index.vue
new file mode 100644
index 0000000..f62d844
--- /dev/null
+++ b/wxcomponents/vant/dist/slider/index.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/slider/index.wxml b/wxcomponents/vant/dist/slider/index.wxml
new file mode 100644
index 0000000..7c0184f
--- /dev/null
+++ b/wxcomponents/vant/dist/slider/index.wxml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/slider/index.wxs b/wxcomponents/vant/dist/slider/index.wxs
new file mode 100644
index 0000000..7c43e6e
--- /dev/null
+++ b/wxcomponents/vant/dist/slider/index.wxs
@@ -0,0 +1,14 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function barStyle(barHeight, activeColor) {
+ return style({
+ height: addUnit(barHeight),
+ background: activeColor,
+ });
+}
+
+module.exports = {
+ barStyle: barStyle,
+};
diff --git a/wxcomponents/vant/dist/slider/index.wxss b/wxcomponents/vant/dist/slider/index.wxss
new file mode 100644
index 0000000..d1587de
--- /dev/null
+++ b/wxcomponents/vant/dist/slider/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-slider{background-color:var(--slider-inactive-background-color,#ebedf0);border-radius:999px;height:var(--slider-bar-height,2px);position:relative}.van-slider:before{bottom:calc(var(--padding-xs, 8px)*-1);content:"";left:0;position:absolute;right:0;top:calc(var(--padding-xs, 8px)*-1)}.van-slider__bar{background-color:var(--slider-active-background-color,#1989fa);border-radius:inherit;height:100%;position:relative;transition:all .2s;width:100%}.van-slider__button{background-color:var(--slider-button-background-color,#fff);border-radius:var(--slider-button-border-radius,50%);box-shadow:var(--slider-button-box-shadow,0 1px 2px rgba(0,0,0,.5));height:var(--slider-button-height,24px);width:var(--slider-button-width,24px)}.van-slider__button-wrapper,.van-slider__button-wrapper-right{position:absolute;right:0;top:50%;transform:translate3d(50%,-50%,0)}.van-slider__button-wrapper-left{left:0;position:absolute;top:50%;transform:translate3d(-50%,-50%,0)}.van-slider--disabled{opacity:var(--slider-disabled-opacity,.5)}.van-slider--vertical{display:inline-block;height:100%;width:var(--slider-bar-height,2px)}.van-slider--vertical .van-slider__button-wrapper,.van-slider--vertical .van-slider__button-wrapper-right{bottom:0;right:50%;top:auto;transform:translate3d(50%,50%,0)}.van-slider--vertical .van-slider__button-wrapper-left{left:auto;right:50%;top:0;transform:translate3d(50%,-50%,0)}.van-slider--vertical:before{bottom:0;left:-8px;right:-8px;top:0}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/stepper/index.d.ts b/wxcomponents/vant/dist/stepper/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/stepper/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/stepper/index.js b/wxcomponents/vant/dist/stepper/index.js
new file mode 100644
index 0000000..ff19615
--- /dev/null
+++ b/wxcomponents/vant/dist/stepper/index.js
@@ -0,0 +1,188 @@
+import { VantComponent } from '../common/component';
+import { isDef } from '../common/validator';
+const LONG_PRESS_START_TIME = 600;
+const LONG_PRESS_INTERVAL = 200;
+// add num and avoid float number
+function add(num1, num2) {
+ const cardinal = Math.pow(10, 10);
+ return Math.round((num1 + num2) * cardinal) / cardinal;
+}
+function equal(value1, value2) {
+ return String(value1) === String(value2);
+}
+VantComponent({
+ field: true,
+ classes: ['input-class', 'plus-class', 'minus-class'],
+ props: {
+ value: {
+ type: null,
+ },
+ integer: {
+ type: Boolean,
+ observer: 'check',
+ },
+ disabled: Boolean,
+ inputWidth: String,
+ buttonSize: String,
+ asyncChange: Boolean,
+ disableInput: Boolean,
+ decimalLength: {
+ type: Number,
+ value: null,
+ observer: 'check',
+ },
+ min: {
+ type: null,
+ value: 1,
+ observer: 'check',
+ },
+ max: {
+ type: null,
+ value: Number.MAX_SAFE_INTEGER,
+ observer: 'check',
+ },
+ step: {
+ type: null,
+ value: 1,
+ },
+ showPlus: {
+ type: Boolean,
+ value: true,
+ },
+ showMinus: {
+ type: Boolean,
+ value: true,
+ },
+ disablePlus: Boolean,
+ disableMinus: Boolean,
+ longPress: {
+ type: Boolean,
+ value: true,
+ },
+ theme: String,
+ alwaysEmbed: Boolean,
+ },
+ data: {
+ currentValue: '',
+ },
+ watch: {
+ value() {
+ this.observeValue();
+ },
+ },
+ created() {
+ this.setData({
+ currentValue: this.format(this.data.value),
+ });
+ },
+ methods: {
+ observeValue() {
+ const { value } = this.data;
+ this.setData({ currentValue: this.format(value) });
+ },
+ check() {
+ const val = this.format(this.data.currentValue);
+ if (!equal(val, this.data.currentValue)) {
+ this.setData({ currentValue: val });
+ }
+ },
+ isDisabled(type) {
+ const { disabled, disablePlus, disableMinus, currentValue, max, min } = this.data;
+ if (type === 'plus') {
+ return disabled || disablePlus || currentValue >= max;
+ }
+ return disabled || disableMinus || currentValue <= min;
+ },
+ onFocus(event) {
+ this.$emit('focus', event.detail);
+ },
+ onBlur(event) {
+ const value = this.format(event.detail.value);
+ this.setData({ currentValue: value });
+ this.emitChange(value);
+ this.$emit('blur', Object.assign(Object.assign({}, event.detail), { value }));
+ },
+ // filter illegal characters
+ filter(value) {
+ value = String(value).replace(/[^0-9.-]/g, '');
+ if (this.data.integer && value.indexOf('.') !== -1) {
+ value = value.split('.')[0];
+ }
+ return value;
+ },
+ // limit value range
+ format(value) {
+ value = this.filter(value);
+ // format range
+ value = value === '' ? 0 : +value;
+ value = Math.max(Math.min(this.data.max, value), this.data.min);
+ // format decimal
+ if (isDef(this.data.decimalLength)) {
+ value = value.toFixed(this.data.decimalLength);
+ }
+ return value;
+ },
+ onInput(event) {
+ const { value = '' } = event.detail || {};
+ // allow input to be empty
+ if (value === '') {
+ return;
+ }
+ let formatted = this.filter(value);
+ // limit max decimal length
+ if (isDef(this.data.decimalLength) && formatted.indexOf('.') !== -1) {
+ const pair = formatted.split('.');
+ formatted = `${pair[0]}.${pair[1].slice(0, this.data.decimalLength)}`;
+ }
+ this.emitChange(formatted);
+ },
+ emitChange(value) {
+ if (!this.data.asyncChange) {
+ this.setData({ currentValue: value });
+ }
+ this.$emit('change', value);
+ },
+ onChange() {
+ const { type } = this;
+ if (this.isDisabled(type)) {
+ this.$emit('overlimit', type);
+ return;
+ }
+ const diff = type === 'minus' ? -this.data.step : +this.data.step;
+ const value = this.format(add(+this.data.currentValue, diff));
+ this.emitChange(value);
+ this.$emit(type);
+ },
+ longPressStep() {
+ this.longPressTimer = setTimeout(() => {
+ this.onChange();
+ this.longPressStep();
+ }, LONG_PRESS_INTERVAL);
+ },
+ onTap(event) {
+ const { type } = event.currentTarget.dataset;
+ this.type = type;
+ this.onChange();
+ },
+ onTouchStart(event) {
+ if (!this.data.longPress) {
+ return;
+ }
+ clearTimeout(this.longPressTimer);
+ const { type } = event.currentTarget.dataset;
+ this.type = type;
+ this.isLongPress = false;
+ this.longPressTimer = setTimeout(() => {
+ this.isLongPress = true;
+ this.onChange();
+ this.longPressStep();
+ }, LONG_PRESS_START_TIME);
+ },
+ onTouchEnd() {
+ if (!this.data.longPress) {
+ return;
+ }
+ clearTimeout(this.longPressTimer);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/stepper/index.json b/wxcomponents/vant/dist/stepper/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/stepper/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/stepper/index.vue b/wxcomponents/vant/dist/stepper/index.vue
new file mode 100644
index 0000000..6d8e176
--- /dev/null
+++ b/wxcomponents/vant/dist/stepper/index.vue
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/stepper/index.wxml b/wxcomponents/vant/dist/stepper/index.wxml
new file mode 100644
index 0000000..6dd44bc
--- /dev/null
+++ b/wxcomponents/vant/dist/stepper/index.wxml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/stepper/index.wxs b/wxcomponents/vant/dist/stepper/index.wxs
new file mode 100644
index 0000000..a13e818
--- /dev/null
+++ b/wxcomponents/vant/dist/stepper/index.wxs
@@ -0,0 +1,22 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function buttonStyle(data) {
+ return style({
+ width: addUnit(data.buttonSize),
+ height: addUnit(data.buttonSize),
+ });
+}
+
+function inputStyle(data) {
+ return style({
+ width: addUnit(data.inputWidth),
+ height: addUnit(data.buttonSize),
+ });
+}
+
+module.exports = {
+ buttonStyle: buttonStyle,
+ inputStyle: inputStyle,
+};
diff --git a/wxcomponents/vant/dist/stepper/index.wxss b/wxcomponents/vant/dist/stepper/index.wxss
new file mode 100644
index 0000000..2561a7e
--- /dev/null
+++ b/wxcomponents/vant/dist/stepper/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-stepper{font-size:0}.van-stepper__minus,.van-stepper__plus{background-color:var(--stepper-background-color,#f2f3f5);border:0;box-sizing:border-box;color:var(--stepper-button-icon-color,#323233);display:inline-block;height:var(--stepper-input-height,28px);margin:1px;padding:var(--padding-base,4px);position:relative;vertical-align:middle;width:var(--stepper-input-height,28px)}.van-stepper__minus:before,.van-stepper__plus:before{height:1px;width:9px}.van-stepper__minus:after,.van-stepper__plus:after{height:9px;width:1px}.van-stepper__minus:empty.van-stepper__minus:after,.van-stepper__minus:empty.van-stepper__minus:before,.van-stepper__minus:empty.van-stepper__plus:after,.van-stepper__minus:empty.van-stepper__plus:before,.van-stepper__plus:empty.van-stepper__minus:after,.van-stepper__plus:empty.van-stepper__minus:before,.van-stepper__plus:empty.van-stepper__plus:after,.van-stepper__plus:empty.van-stepper__plus:before{background-color:currentColor;bottom:0;content:"";left:0;margin:auto;position:absolute;right:0;top:0}.van-stepper__minus--hover,.van-stepper__plus--hover{background-color:var(--stepper-active-color,#e8e8e8)}.van-stepper__minus--disabled,.van-stepper__plus--disabled{color:var(--stepper-button-disabled-icon-color,#c8c9cc)}.van-stepper__minus--disabled,.van-stepper__minus--disabled.van-stepper__minus--hover,.van-stepper__minus--disabled.van-stepper__plus--hover,.van-stepper__plus--disabled,.van-stepper__plus--disabled.van-stepper__minus--hover,.van-stepper__plus--disabled.van-stepper__plus--hover{background-color:var(--stepper-button-disabled-color,#f7f8fa)}.van-stepper__minus{border-radius:var(--stepper-border-radius,var(--stepper-border-radius,4px)) 0 0 var(--stepper-border-radius,var(--stepper-border-radius,4px))}.van-stepper__minus:after{display:none}.van-stepper__plus{border-radius:0 var(--stepper-border-radius,var(--stepper-border-radius,4px)) var(--stepper-border-radius,var(--stepper-border-radius,4px)) 0}.van-stepper--round .van-stepper__input{background-color:initial!important}.van-stepper--round .van-stepper__minus,.van-stepper--round .van-stepper__plus{border-radius:100%}.van-stepper--round .van-stepper__minus:active,.van-stepper--round .van-stepper__plus:active{opacity:.7}.van-stepper--round .van-stepper__minus--disabled,.van-stepper--round .van-stepper__minus--disabled:active,.van-stepper--round .van-stepper__plus--disabled,.van-stepper--round .van-stepper__plus--disabled:active{opacity:.3}.van-stepper--round .van-stepper__plus{background-color:#ee0a24;color:#fff}.van-stepper--round .van-stepper__minus{background-color:#fff;border:1px solid #ee0a24;color:#ee0a24}.van-stepper__input{-webkit-appearance:none;background-color:var(--stepper-background-color,#f2f3f5);border:0;border-radius:0;border-width:1px 0;box-sizing:border-box;color:var(--stepper-input-text-color,#323233);display:inline-block;font-size:var(--stepper-input-font-size,14px);height:var(--stepper-input-height,28px);margin:1px;min-height:0;padding:1px;text-align:center;vertical-align:middle;width:var(--stepper-input-width,32px)}.van-stepper__input--disabled{background-color:var(--stepper-input-disabled-background-color,#f2f3f5);color:var(--stepper-input-disabled-text-color,#c8c9cc)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/steps/index-status.wxs b/wxcomponents/vant/dist/steps/index-status.wxs
new file mode 100644
index 0000000..5713a5e
--- /dev/null
+++ b/wxcomponents/vant/dist/steps/index-status.wxs
@@ -0,0 +1,12 @@
+
+function get(index, active) {
+ if (index < active) {
+ return 'finish';
+ } else if (index === active) {
+ return 'process';
+ }
+
+ return 'inactive';
+}
+
+module.exports = get;
diff --git a/wxcomponents/vant/dist/steps/index.d.ts b/wxcomponents/vant/dist/steps/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/steps/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/steps/index.js b/wxcomponents/vant/dist/steps/index.js
new file mode 100644
index 0000000..b47be76
--- /dev/null
+++ b/wxcomponents/vant/dist/steps/index.js
@@ -0,0 +1,33 @@
+import { VantComponent } from '../common/component';
+import { GREEN, GRAY_DARK } from '../common/color';
+VantComponent({
+ classes: ['desc-class'],
+ props: {
+ icon: String,
+ steps: Array,
+ active: Number,
+ direction: {
+ type: String,
+ value: 'horizontal',
+ },
+ activeColor: {
+ type: String,
+ value: GREEN,
+ },
+ inactiveColor: {
+ type: String,
+ value: GRAY_DARK,
+ },
+ activeIcon: {
+ type: String,
+ value: 'checked',
+ },
+ inactiveIcon: String,
+ },
+ methods: {
+ onClick(event) {
+ const { index } = event.currentTarget.dataset;
+ this.$emit('click-step', index);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/steps/index.json b/wxcomponents/vant/dist/steps/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/wxcomponents/vant/dist/steps/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/steps/index.vue b/wxcomponents/vant/dist/steps/index.vue
new file mode 100644
index 0000000..0cce207
--- /dev/null
+++ b/wxcomponents/vant/dist/steps/index.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+ {{ item.text }}
+ {{ item.desc }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/steps/index.wxml b/wxcomponents/vant/dist/steps/index.wxml
new file mode 100644
index 0000000..00c8e10
--- /dev/null
+++ b/wxcomponents/vant/dist/steps/index.wxml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+ {{ item.text }}
+ {{ item.desc }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+function get(index, active) {
+ if (index < active) {
+ return 'finish';
+ } else if (index === active) {
+ return 'process';
+ }
+
+ return 'inactive';
+}
+
+module.exports = get;
+
diff --git a/wxcomponents/vant/dist/steps/index.wxss b/wxcomponents/vant/dist/steps/index.wxss
new file mode 100644
index 0000000..48b7665
--- /dev/null
+++ b/wxcomponents/vant/dist/steps/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-steps{background-color:var(--steps-background-color,#fff);overflow:hidden}.van-steps--horizontal{padding:10px}.van-steps--horizontal .van-step__wrapper{display:flex;overflow:hidden;position:relative}.van-steps--vertical{padding-left:10px}.van-steps--vertical .van-step__wrapper{padding:0 0 0 20px}.van-step{color:var(--step-text-color,#969799);flex:1;font-size:var(--step-font-size,14px);position:relative}.van-step--finish{color:var(--step-finish-text-color,#323233)}.van-step__circle{background-color:var(--step-circle-color,#969799);border-radius:50%;height:var(--step-circle-size,5px);width:var(--step-circle-size,5px)}.van-step--horizontal{padding-bottom:14px}.van-step--horizontal:first-child .van-step__title{transform:none}.van-step--horizontal:first-child .van-step__circle-container{padding:0 8px 0 0;transform:translate3d(0,50%,0)}.van-step--horizontal:last-child{position:absolute;right:0;width:auto}.van-step--horizontal:last-child .van-step__title{text-align:right;transform:none}.van-step--horizontal:last-child .van-step__circle-container{padding:0 0 0 8px;right:0;transform:translate3d(0,50%,0)}.van-step--horizontal .van-step__circle-container{background-color:#fff;bottom:6px;padding:0 var(--padding-xs,8px);position:absolute;transform:translate3d(-50%,50%,0);z-index:1}.van-step--horizontal .van-step__title{display:inline-block;font-size:var(--step-horizontal-title-font-size,12px);transform:translate3d(-50%,0,0)}.van-step--horizontal .van-step__line{background-color:var(--step-line-color,#ebedf0);bottom:6px;height:1px;left:0;position:absolute;right:0;transform:translate3d(0,50%,0)}.van-step--horizontal.van-step--process{color:var(--step-process-text-color,#323233)}.van-step--horizontal.van-step--process .van-step__icon{display:block;font-size:var(--step-icon-size,12px);line-height:1}.van-step--vertical{line-height:18px;padding:10px 10px 10px 0}.van-step--vertical:after{border-bottom-width:1px}.van-step--vertical:last-child:after{border-bottom-width:none}.van-step--vertical:first-child:before{background-color:#fff;content:"";height:20px;left:-15px;position:absolute;top:0;width:1px;z-index:1}.van-step--vertical .van-step__circle,.van-step--vertical .van-step__icon,.van-step--vertical .van-step__line{left:-14px;position:absolute;top:19px;transform:translate3d(-50%,-50%,0);z-index:2}.van-step--vertical .van-step__icon{font-size:var(--step-icon-size,12px);line-height:1}.van-step--vertical .van-step__line{background-color:var(--step-line-color,#ebedf0);height:100%;transform:translate3d(-50%,0,0);width:1px;z-index:1}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/sticky/index.d.ts b/wxcomponents/vant/dist/sticky/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/sticky/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/sticky/index.js b/wxcomponents/vant/dist/sticky/index.js
new file mode 100644
index 0000000..e1ae6df
--- /dev/null
+++ b/wxcomponents/vant/dist/sticky/index.js
@@ -0,0 +1,118 @@
+import { getRect } from '../common/utils';
+import { VantComponent } from '../common/component';
+import { isDef } from '../common/validator';
+import { pageScrollMixin } from '../mixins/page-scroll';
+const ROOT_ELEMENT = '.van-sticky';
+VantComponent({
+ props: {
+ zIndex: {
+ type: Number,
+ value: 99,
+ },
+ offsetTop: {
+ type: Number,
+ value: 0,
+ observer: 'onScroll',
+ },
+ disabled: {
+ type: Boolean,
+ observer: 'onScroll',
+ },
+ container: {
+ type: null,
+ observer: 'onScroll',
+ },
+ scrollTop: {
+ type: null,
+ observer(val) {
+ this.onScroll({ scrollTop: val });
+ },
+ },
+ },
+ mixins: [
+ pageScrollMixin(function (event) {
+ if (this.data.scrollTop != null) {
+ return;
+ }
+ this.onScroll(event);
+ }),
+ ],
+ data: {
+ height: 0,
+ fixed: false,
+ transform: 0,
+ },
+ mounted() {
+ this.onScroll();
+ },
+ methods: {
+ onScroll({ scrollTop } = {}) {
+ const { container, offsetTop, disabled } = this.data;
+ if (disabled) {
+ this.setDataAfterDiff({
+ fixed: false,
+ transform: 0,
+ });
+ return;
+ }
+ this.scrollTop = scrollTop || this.scrollTop;
+ if (typeof container === 'function') {
+ Promise.all([
+ getRect(this, ROOT_ELEMENT),
+ this.getContainerRect(),
+ ]).then(([root, container]) => {
+ if (offsetTop + root.height > container.height + container.top) {
+ this.setDataAfterDiff({
+ fixed: false,
+ transform: container.height - root.height,
+ });
+ }
+ else if (offsetTop >= root.top) {
+ this.setDataAfterDiff({
+ fixed: true,
+ height: root.height,
+ transform: 0,
+ });
+ }
+ else {
+ this.setDataAfterDiff({ fixed: false, transform: 0 });
+ }
+ });
+ return;
+ }
+ getRect(this, ROOT_ELEMENT).then((root) => {
+ if (!isDef(root)) {
+ return;
+ }
+ if (offsetTop >= root.top) {
+ this.setDataAfterDiff({ fixed: true, height: root.height });
+ this.transform = 0;
+ }
+ else {
+ this.setDataAfterDiff({ fixed: false });
+ }
+ });
+ },
+ setDataAfterDiff(data) {
+ wx.nextTick(() => {
+ const diff = Object.keys(data).reduce((prev, key) => {
+ if (data[key] !== this.data[key]) {
+ prev[key] = data[key];
+ }
+ return prev;
+ }, {});
+ if (Object.keys(diff).length > 0) {
+ this.setData(diff);
+ }
+ this.$emit('scroll', {
+ scrollTop: this.scrollTop,
+ isFixed: data.fixed || this.data.fixed,
+ });
+ });
+ },
+ getContainerRect() {
+ const nodesRef = this.data.container();
+ return new Promise((resolve) => nodesRef.boundingClientRect(resolve).exec());
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/sticky/index.json b/wxcomponents/vant/dist/sticky/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/sticky/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/sticky/index.vue b/wxcomponents/vant/dist/sticky/index.vue
new file mode 100644
index 0000000..218f0e8
--- /dev/null
+++ b/wxcomponents/vant/dist/sticky/index.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/sticky/index.wxml b/wxcomponents/vant/dist/sticky/index.wxml
new file mode 100644
index 0000000..15e9f4a
--- /dev/null
+++ b/wxcomponents/vant/dist/sticky/index.wxml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/sticky/index.wxs b/wxcomponents/vant/dist/sticky/index.wxs
new file mode 100644
index 0000000..be99d89
--- /dev/null
+++ b/wxcomponents/vant/dist/sticky/index.wxs
@@ -0,0 +1,25 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function wrapStyle(data) {
+ return style({
+ transform: data.transform
+ ? 'translate3d(0, ' + data.transform + 'px, 0)'
+ : '',
+ top: data.fixed ? addUnit(data.offsetTop) : '',
+ 'z-index': data.zIndex,
+ });
+}
+
+function containerStyle(data) {
+ return style({
+ height: data.fixed ? addUnit(data.height) : '',
+ 'z-index': data.zIndex,
+ });
+}
+
+module.exports = {
+ wrapStyle: wrapStyle,
+ containerStyle: containerStyle,
+};
diff --git a/wxcomponents/vant/dist/sticky/index.wxss b/wxcomponents/vant/dist/sticky/index.wxss
new file mode 100644
index 0000000..34d76aa
--- /dev/null
+++ b/wxcomponents/vant/dist/sticky/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-sticky{position:relative}.van-sticky-wrap--fixed{left:0;position:fixed;right:0}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/submit-bar/index.d.ts b/wxcomponents/vant/dist/submit-bar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/submit-bar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/submit-bar/index.js b/wxcomponents/vant/dist/submit-bar/index.js
new file mode 100644
index 0000000..decf459
--- /dev/null
+++ b/wxcomponents/vant/dist/submit-bar/index.js
@@ -0,0 +1,56 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: ['bar-class', 'price-class', 'button-class'],
+ props: {
+ tip: {
+ type: null,
+ observer: 'updateTip',
+ },
+ tipIcon: String,
+ type: Number,
+ price: {
+ type: null,
+ observer: 'updatePrice',
+ },
+ label: String,
+ loading: Boolean,
+ disabled: Boolean,
+ buttonText: String,
+ currency: {
+ type: String,
+ value: '¥',
+ },
+ buttonType: {
+ type: String,
+ value: 'danger',
+ },
+ decimalLength: {
+ type: Number,
+ value: 2,
+ observer: 'updatePrice',
+ },
+ suffixLabel: String,
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ methods: {
+ updatePrice() {
+ const { price, decimalLength } = this.data;
+ const priceStrArr = typeof price === 'number' &&
+ (price / 100).toFixed(decimalLength).split('.');
+ this.setData({
+ hasPrice: typeof price === 'number',
+ integerStr: priceStrArr && priceStrArr[0],
+ decimalStr: decimalLength && priceStrArr ? `.${priceStrArr[1]}` : '',
+ });
+ },
+ updateTip() {
+ this.setData({ hasTip: typeof this.data.tip === 'string' });
+ },
+ onSubmit(event) {
+ this.$emit('submit', event.detail);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/submit-bar/index.json b/wxcomponents/vant/dist/submit-bar/index.json
new file mode 100644
index 0000000..bda9b8d
--- /dev/null
+++ b/wxcomponents/vant/dist/submit-bar/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-button": "../button/index",
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/submit-bar/index.vue b/wxcomponents/vant/dist/submit-bar/index.vue
new file mode 100644
index 0000000..73df0a5
--- /dev/null
+++ b/wxcomponents/vant/dist/submit-bar/index.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+ {{ tip }}
+
+
+
+
+
+
+
+ {{ label || '合计:' }}
+
+ {{ currency }}
+ {{ integerStr }}{{decimalStr}}
+
+ {{ suffixLabel }}
+
+
+ {{ loading ? '' : buttonText }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/submit-bar/index.wxml b/wxcomponents/vant/dist/submit-bar/index.wxml
new file mode 100644
index 0000000..a56dd46
--- /dev/null
+++ b/wxcomponents/vant/dist/submit-bar/index.wxml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+ {{ tip }}
+
+
+
+
+
+
+
+ {{ label || '合计:' }}
+
+ {{ currency }}
+ {{ integerStr }}{{decimalStr}}
+
+ {{ suffixLabel }}
+
+
+ {{ loading ? '' : buttonText }}
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/submit-bar/index.wxss b/wxcomponents/vant/dist/submit-bar/index.wxss
new file mode 100644
index 0000000..8379a30
--- /dev/null
+++ b/wxcomponents/vant/dist/submit-bar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-submit-bar{background-color:var(--submit-bar-background-color,#fff);bottom:0;left:0;position:fixed;-webkit-user-select:none;user-select:none;width:100%;z-index:var(--submit-bar-z-index,100)}.van-submit-bar__tip{background-color:var(--submit-bar-tip-background-color,#fff7cc);color:var(--submit-bar-tip-color,#f56723);font-size:var(--submit-bar-tip-font-size,12px);line-height:var(--submit-bar-tip-line-height,1.5);padding:var(--submit-bar-tip-padding,10px)}.van-submit-bar__tip:empty{display:none}.van-submit-bar__tip-icon{margin-right:4px;vertical-align:middle}.van-submit-bar__tip-text{display:inline;vertical-align:middle}.van-submit-bar__bar{align-items:center;background-color:var(--submit-bar-background-color,#fff);display:flex;font-size:var(--submit-bar-text-font-size,14px);height:var(--submit-bar-height,50px);justify-content:flex-end;padding:var(--submit-bar-padding,0 16px)}.van-submit-bar__safe{height:constant(safe-area-inset-bottom);height:env(safe-area-inset-bottom)}.van-submit-bar__text{color:var(--submit-bar-text-color,#323233);flex:1;font-weight:var(--font-weight-bold,500);padding-right:var(--padding-sm,12px);text-align:right}.van-submit-bar__price{color:var(--submit-bar-price-color,#ee0a24);font-size:var(--submit-bar-price-font-size,12px);font-weight:var(--font-weight-bold,500)}.van-submit-bar__price-integer{font-family:Avenir-Heavy,PingFang SC,Helvetica Neue,Arial,sans-serif;font-size:20px}.van-submit-bar__currency{font-size:var(--submit-bar-currency-font-size,12px)}.van-submit-bar__suffix-label{margin-left:5px}.van-submit-bar__button{--button-default-height:var(--submit-bar-button-height,40px)!important;--button-line-height:var(--submit-bar-button-height,40px)!important;font-weight:var(--font-weight-bold,500);width:var(--submit-bar-button-width,110px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/swipe-cell/index.d.ts b/wxcomponents/vant/dist/swipe-cell/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/swipe-cell/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/swipe-cell/index.js b/wxcomponents/vant/dist/swipe-cell/index.js
new file mode 100644
index 0000000..501088f
--- /dev/null
+++ b/wxcomponents/vant/dist/swipe-cell/index.js
@@ -0,0 +1,133 @@
+import { VantComponent } from '../common/component';
+import { touch } from '../mixins/touch';
+import { range } from '../common/utils';
+const THRESHOLD = 0.3;
+let ARRAY = [];
+VantComponent({
+ props: {
+ disabled: Boolean,
+ leftWidth: {
+ type: Number,
+ value: 0,
+ observer(leftWidth = 0) {
+ if (this.offset > 0) {
+ this.swipeMove(leftWidth);
+ }
+ },
+ },
+ rightWidth: {
+ type: Number,
+ value: 0,
+ observer(rightWidth = 0) {
+ if (this.offset < 0) {
+ this.swipeMove(-rightWidth);
+ }
+ },
+ },
+ asyncClose: Boolean,
+ name: {
+ type: null,
+ value: '',
+ },
+ },
+ mixins: [touch],
+ data: {
+ catchMove: false,
+ wrapperStyle: '',
+ },
+ created() {
+ this.offset = 0;
+ ARRAY.push(this);
+ },
+ destroyed() {
+ ARRAY = ARRAY.filter((item) => item !== this);
+ },
+ methods: {
+ open(position) {
+ const { leftWidth, rightWidth } = this.data;
+ const offset = position === 'left' ? leftWidth : -rightWidth;
+ this.swipeMove(offset);
+ this.$emit('open', {
+ position,
+ name: this.data.name,
+ });
+ },
+ close() {
+ this.swipeMove(0);
+ },
+ swipeMove(offset = 0) {
+ this.offset = range(offset, -this.data.rightWidth, this.data.leftWidth);
+ const transform = `translate3d(${this.offset}px, 0, 0)`;
+ const transition = this.dragging
+ ? 'none'
+ : 'transform .6s cubic-bezier(0.18, 0.89, 0.32, 1)';
+ this.setData({
+ wrapperStyle: `
+ -webkit-transform: ${transform};
+ -webkit-transition: ${transition};
+ transform: ${transform};
+ transition: ${transition};
+ `,
+ });
+ },
+ swipeLeaveTransition() {
+ const { leftWidth, rightWidth } = this.data;
+ const { offset } = this;
+ if (rightWidth > 0 && -offset > rightWidth * THRESHOLD) {
+ this.open('right');
+ }
+ else if (leftWidth > 0 && offset > leftWidth * THRESHOLD) {
+ this.open('left');
+ }
+ else {
+ this.swipeMove(0);
+ }
+ this.setData({ catchMove: false });
+ },
+ startDrag(event) {
+ if (this.data.disabled) {
+ return;
+ }
+ this.startOffset = this.offset;
+ this.touchStart(event);
+ },
+ noop() { },
+ onDrag(event) {
+ if (this.data.disabled) {
+ return;
+ }
+ this.touchMove(event);
+ if (this.direction !== 'horizontal') {
+ return;
+ }
+ this.dragging = true;
+ ARRAY.filter((item) => item !== this && item.offset !== 0).forEach((item) => item.close());
+ this.setData({ catchMove: true });
+ this.swipeMove(this.startOffset + this.deltaX);
+ },
+ endDrag() {
+ if (this.data.disabled) {
+ return;
+ }
+ this.dragging = false;
+ this.swipeLeaveTransition();
+ },
+ onClick(event) {
+ const { key: position = 'outside' } = event.currentTarget.dataset;
+ this.$emit('click', position);
+ if (!this.offset) {
+ return;
+ }
+ if (this.data.asyncClose) {
+ this.$emit('close', {
+ position,
+ instance: this,
+ name: this.data.name,
+ });
+ }
+ else {
+ this.swipeMove(0);
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/swipe-cell/index.json b/wxcomponents/vant/dist/swipe-cell/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/swipe-cell/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/swipe-cell/index.vue b/wxcomponents/vant/dist/swipe-cell/index.vue
new file mode 100644
index 0000000..f854171
--- /dev/null
+++ b/wxcomponents/vant/dist/swipe-cell/index.vue
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/swipe-cell/index.wxml b/wxcomponents/vant/dist/swipe-cell/index.wxml
new file mode 100644
index 0000000..3f7f726
--- /dev/null
+++ b/wxcomponents/vant/dist/swipe-cell/index.wxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/swipe-cell/index.wxss b/wxcomponents/vant/dist/swipe-cell/index.wxss
new file mode 100644
index 0000000..3a265bf
--- /dev/null
+++ b/wxcomponents/vant/dist/swipe-cell/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-swipe-cell{overflow:hidden;position:relative}.van-swipe-cell__left,.van-swipe-cell__right{height:100%;position:absolute;top:0}.van-swipe-cell__left{left:0;transform:translate3d(-100%,0,0)}.van-swipe-cell__right{right:0;transform:translate3d(100%,0,0)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/switch/index.d.ts b/wxcomponents/vant/dist/switch/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/switch/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/switch/index.js b/wxcomponents/vant/dist/switch/index.js
new file mode 100644
index 0000000..4cad09c
--- /dev/null
+++ b/wxcomponents/vant/dist/switch/index.js
@@ -0,0 +1,36 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ field: true,
+ classes: ['node-class'],
+ props: {
+ checked: null,
+ loading: Boolean,
+ disabled: Boolean,
+ activeColor: String,
+ inactiveColor: String,
+ size: {
+ type: String,
+ value: '30',
+ },
+ activeValue: {
+ type: null,
+ value: true,
+ },
+ inactiveValue: {
+ type: null,
+ value: false,
+ },
+ },
+ methods: {
+ onClick() {
+ const { activeValue, inactiveValue, disabled, loading } = this.data;
+ if (disabled || loading) {
+ return;
+ }
+ const checked = this.data.checked === activeValue;
+ const value = checked ? inactiveValue : activeValue;
+ this.$emit('input', value);
+ this.$emit('change', value);
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/switch/index.json b/wxcomponents/vant/dist/switch/index.json
new file mode 100644
index 0000000..01077f5
--- /dev/null
+++ b/wxcomponents/vant/dist/switch/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-loading": "../loading/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/switch/index.vue b/wxcomponents/vant/dist/switch/index.vue
new file mode 100644
index 0000000..2937896
--- /dev/null
+++ b/wxcomponents/vant/dist/switch/index.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/switch/index.wxml b/wxcomponents/vant/dist/switch/index.wxml
new file mode 100644
index 0000000..4e9789b
--- /dev/null
+++ b/wxcomponents/vant/dist/switch/index.wxml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/switch/index.wxs b/wxcomponents/vant/dist/switch/index.wxs
new file mode 100644
index 0000000..3ae387a
--- /dev/null
+++ b/wxcomponents/vant/dist/switch/index.wxs
@@ -0,0 +1,26 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function rootStyle(data) {
+ var currentColor = data.checked === data.activeValue ? data.activeColor : data.inactiveColor;
+
+ return style({
+ 'font-size': addUnit(data.size),
+ 'background-color': currentColor,
+ });
+}
+
+var BLUE = '#1989fa';
+var GRAY_DARK = '#969799';
+
+function loadingColor(data) {
+ return data.checked === data.activeValue
+ ? data.activeColor || BLUE
+ : data.inactiveColor || GRAY_DARK;
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+ loadingColor: loadingColor,
+};
diff --git a/wxcomponents/vant/dist/switch/index.wxss b/wxcomponents/vant/dist/switch/index.wxss
new file mode 100644
index 0000000..35929de
--- /dev/null
+++ b/wxcomponents/vant/dist/switch/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-switch{background-color:var(--switch-background-color,#fff);border:var(--switch-border,1px solid rgba(0,0,0,.1));border-radius:var(--switch-node-size,1em);box-sizing:initial;display:inline-block;height:var(--switch-height,1em);position:relative;transition:background-color var(--switch-transition-duration,.3s);width:var(--switch-width,2em)}.van-switch__node{background-color:var(--switch-node-background-color,#fff);border-radius:100%;box-shadow:var(--switch-node-box-shadow,0 3px 1px 0 rgba(0,0,0,.05),0 2px 2px 0 rgba(0,0,0,.1),0 3px 3px 0 rgba(0,0,0,.05));height:var(--switch-node-size,1em);left:0;position:absolute;top:0;transition:var(--switch-transition-duration,.3s) cubic-bezier(.3,1.05,.4,1.05);width:var(--switch-node-size,1em);z-index:var(--switch-node-z-index,1)}.van-switch__loading{height:50%;left:25%;position:absolute!important;top:25%;width:50%}.van-switch--on{background-color:var(--switch-on-background-color,#1989fa)}.van-switch--on .van-switch__node{transform:translateX(calc(var(--switch-width, 2em) - var(--switch-node-size, 1em)))}.van-switch--disabled{opacity:var(--switch-disabled-opacity,.4)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tab/index.d.ts b/wxcomponents/vant/dist/tab/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/tab/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/tab/index.js b/wxcomponents/vant/dist/tab/index.js
new file mode 100644
index 0000000..9ada62e
--- /dev/null
+++ b/wxcomponents/vant/dist/tab/index.js
@@ -0,0 +1,56 @@
+import { useParent } from '../common/relation';
+import { VantComponent } from '../common/component';
+VantComponent({
+ relation: useParent('tabs'),
+ props: {
+ dot: {
+ type: Boolean,
+ observer: 'update',
+ },
+ info: {
+ type: null,
+ observer: 'update',
+ },
+ title: {
+ type: String,
+ observer: 'update',
+ },
+ disabled: {
+ type: Boolean,
+ observer: 'update',
+ },
+ titleStyle: {
+ type: String,
+ observer: 'update',
+ },
+ name: {
+ type: null,
+ value: '',
+ },
+ },
+ data: {
+ active: false,
+ },
+ methods: {
+ getComputedName() {
+ if (this.data.name !== '') {
+ return this.data.name;
+ }
+ return this.index;
+ },
+ updateRender(active, parent) {
+ const { data: parentData } = parent;
+ this.inited = this.inited || active;
+ this.setData({
+ active,
+ shouldRender: this.inited || !parentData.lazyRender,
+ shouldShow: active || parentData.animated,
+ });
+ },
+ update() {
+ if (this.parent) {
+ this.parent.updateTabs();
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/tab/index.json b/wxcomponents/vant/dist/tab/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/tab/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/tab/index.vue b/wxcomponents/vant/dist/tab/index.vue
new file mode 100644
index 0000000..7936426
--- /dev/null
+++ b/wxcomponents/vant/dist/tab/index.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tab/index.wxml b/wxcomponents/vant/dist/tab/index.wxml
new file mode 100644
index 0000000..f5e99f2
--- /dev/null
+++ b/wxcomponents/vant/dist/tab/index.wxml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/tab/index.wxss b/wxcomponents/vant/dist/tab/index.wxss
new file mode 100644
index 0000000..1c90c88
--- /dev/null
+++ b/wxcomponents/vant/dist/tab/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';:host{box-sizing:border-box;flex-shrink:0;width:100%}.van-tab__pane{-webkit-overflow-scrolling:touch;box-sizing:border-box;overflow-y:auto}.van-tab__pane--active{height:auto}.van-tab__pane--inactive{height:0;overflow:visible}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tabbar-item/index.d.ts b/wxcomponents/vant/dist/tabbar-item/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar-item/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/tabbar-item/index.js b/wxcomponents/vant/dist/tabbar-item/index.js
new file mode 100644
index 0000000..64275ea
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar-item/index.js
@@ -0,0 +1,68 @@
+import { VantComponent } from '../common/component';
+import { useParent } from '../common/relation';
+VantComponent({
+ props: {
+ info: null,
+ name: null,
+ icon: String,
+ dot: Boolean,
+ url: {
+ type: String,
+ value: '',
+ },
+ linkType: {
+ type: String,
+ value: 'redirectTo',
+ },
+ iconPrefix: {
+ type: String,
+ value: 'van-icon',
+ },
+ },
+ relation: useParent('tabbar'),
+ data: {
+ active: false,
+ activeColor: '',
+ inactiveColor: '',
+ },
+ methods: {
+ onClick() {
+ const { parent } = this;
+ if (parent) {
+ const index = parent.children.indexOf(this);
+ const active = this.data.name || index;
+ if (active !== this.data.active) {
+ parent.$emit('change', active);
+ }
+ }
+ const { url, linkType } = this.data;
+ if (url && wx[linkType]) {
+ return wx[linkType]({ url });
+ }
+ this.$emit('click');
+ },
+ updateFromParent() {
+ const { parent } = this;
+ if (!parent) {
+ return;
+ }
+ const index = parent.children.indexOf(this);
+ const parentData = parent.data;
+ const { data } = this;
+ const active = (data.name || index) === parentData.active;
+ const patch = {};
+ if (active !== data.active) {
+ patch.active = active;
+ }
+ if (parentData.activeColor !== data.activeColor) {
+ patch.activeColor = parentData.activeColor;
+ }
+ if (parentData.inactiveColor !== data.inactiveColor) {
+ patch.inactiveColor = parentData.inactiveColor;
+ }
+ if (Object.keys(patch).length > 0) {
+ this.setData(patch);
+ }
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/tabbar-item/index.json b/wxcomponents/vant/dist/tabbar-item/index.json
new file mode 100644
index 0000000..16f174c
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar-item/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-info": "../info/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/tabbar-item/index.vue b/wxcomponents/vant/dist/tabbar-item/index.vue
new file mode 100644
index 0000000..3e29a46
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar-item/index.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tabbar-item/index.wxml b/wxcomponents/vant/dist/tabbar-item/index.wxml
new file mode 100644
index 0000000..524728f
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar-item/index.wxml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/tabbar-item/index.wxss b/wxcomponents/vant/dist/tabbar-item/index.wxss
new file mode 100644
index 0000000..21ee224
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar-item/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';:host{flex:1}.van-tabbar-item{align-items:center;color:var(--tabbar-item-text-color,#646566);display:flex;flex-direction:column;font-size:var(--tabbar-item-font-size,12px);height:100%;justify-content:center;line-height:var(--tabbar-item-line-height,1)}.van-tabbar-item__icon{font-size:var(--tabbar-item-icon-size,22px);margin-bottom:var(--tabbar-item-margin-bottom,4px);position:relative}.van-tabbar-item__icon__inner{display:block;min-width:1em}.van-tabbar-item--active{color:var(--tabbar-item-active-color,#1989fa)}.van-tabbar-item__info{margin-top:2px}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tabbar/index.d.ts b/wxcomponents/vant/dist/tabbar/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/tabbar/index.js b/wxcomponents/vant/dist/tabbar/index.js
new file mode 100644
index 0000000..05a39d6
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar/index.js
@@ -0,0 +1,65 @@
+import { VantComponent } from '../common/component';
+import { useChildren } from '../common/relation';
+import { getRect } from '../common/utils';
+VantComponent({
+ relation: useChildren('tabbar-item', function () {
+ this.updateChildren();
+ }),
+ props: {
+ active: {
+ type: null,
+ observer: 'updateChildren',
+ },
+ activeColor: {
+ type: String,
+ observer: 'updateChildren',
+ },
+ inactiveColor: {
+ type: String,
+ observer: 'updateChildren',
+ },
+ fixed: {
+ type: Boolean,
+ value: true,
+ observer: 'setHeight',
+ },
+ placeholder: {
+ type: Boolean,
+ observer: 'setHeight',
+ },
+ border: {
+ type: Boolean,
+ value: true,
+ },
+ zIndex: {
+ type: Number,
+ value: 1,
+ },
+ safeAreaInsetBottom: {
+ type: Boolean,
+ value: true,
+ },
+ },
+ data: {
+ height: 50,
+ },
+ methods: {
+ updateChildren() {
+ const { children } = this;
+ if (!Array.isArray(children) || !children.length) {
+ return;
+ }
+ children.forEach((child) => child.updateFromParent());
+ },
+ setHeight() {
+ if (!this.data.fixed || !this.data.placeholder) {
+ return;
+ }
+ wx.nextTick(() => {
+ getRect(this, '.van-tabbar').then((res) => {
+ this.setData({ height: res.height });
+ });
+ });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/tabbar/index.json b/wxcomponents/vant/dist/tabbar/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/tabbar/index.vue b/wxcomponents/vant/dist/tabbar/index.vue
new file mode 100644
index 0000000..36e4566
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar/index.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tabbar/index.wxml b/wxcomponents/vant/dist/tabbar/index.wxml
new file mode 100644
index 0000000..43bb111
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar/index.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/tabbar/index.wxss b/wxcomponents/vant/dist/tabbar/index.wxss
new file mode 100644
index 0000000..42b6c1e
--- /dev/null
+++ b/wxcomponents/vant/dist/tabbar/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-tabbar{background-color:var(--tabbar-background-color,#fff);box-sizing:initial;display:flex;height:var(--tabbar-height,50px);width:100%}.van-tabbar--fixed{bottom:0;left:0;position:fixed}.van-tabbar--safe{padding-bottom:env(safe-area-inset-bottom)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tabs/index.d.ts b/wxcomponents/vant/dist/tabs/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/tabs/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/tabs/index.js b/wxcomponents/vant/dist/tabs/index.js
new file mode 100644
index 0000000..b602278
--- /dev/null
+++ b/wxcomponents/vant/dist/tabs/index.js
@@ -0,0 +1,299 @@
+import { VantComponent } from '../common/component';
+import { touch } from '../mixins/touch';
+import { getAllRect, getRect, groupSetData, nextTick, requestAnimationFrame, } from '../common/utils';
+import { isDef } from '../common/validator';
+import { useChildren } from '../common/relation';
+VantComponent({
+ mixins: [touch],
+ classes: [
+ 'nav-class',
+ 'tab-class',
+ 'tab-active-class',
+ 'line-class',
+ 'wrap-class',
+ ],
+ relation: useChildren('tab', function () {
+ this.updateTabs();
+ }),
+ props: {
+ sticky: Boolean,
+ border: Boolean,
+ swipeable: Boolean,
+ titleActiveColor: String,
+ titleInactiveColor: String,
+ color: String,
+ animated: {
+ type: Boolean,
+ observer() {
+ this.children.forEach((child, index) => child.updateRender(index === this.data.currentIndex, this));
+ },
+ },
+ lineWidth: {
+ type: null,
+ value: 40,
+ observer: 'resize',
+ },
+ lineHeight: {
+ type: null,
+ value: -1,
+ },
+ active: {
+ type: null,
+ value: 0,
+ observer(name) {
+ if (name !== this.getCurrentName()) {
+ this.setCurrentIndexByName(name);
+ }
+ },
+ },
+ type: {
+ type: String,
+ value: 'line',
+ },
+ ellipsis: {
+ type: Boolean,
+ value: true,
+ },
+ duration: {
+ type: Number,
+ value: 0.3,
+ },
+ zIndex: {
+ type: Number,
+ value: 1,
+ },
+ swipeThreshold: {
+ type: Number,
+ value: 5,
+ observer(value) {
+ this.setData({
+ scrollable: this.children.length > value || !this.data.ellipsis,
+ });
+ },
+ },
+ offsetTop: {
+ type: Number,
+ value: 0,
+ },
+ lazyRender: {
+ type: Boolean,
+ value: true,
+ },
+ useBeforeChange: {
+ type: Boolean,
+ value: false,
+ },
+ },
+ data: {
+ tabs: [],
+ scrollLeft: 0,
+ scrollable: false,
+ currentIndex: 0,
+ container: null,
+ skipTransition: true,
+ scrollWithAnimation: false,
+ lineOffsetLeft: 0,
+ inited: false,
+ },
+ mounted() {
+ requestAnimationFrame(() => {
+ this.swiping = true;
+ this.setData({
+ container: () => this.createSelectorQuery().select('.van-tabs'),
+ });
+ this.resize();
+ this.scrollIntoView();
+ });
+ },
+ methods: {
+ updateTabs() {
+ const { children = [], data } = this;
+ this.setData({
+ tabs: children.map((child) => child.data),
+ scrollable: this.children.length > data.swipeThreshold || !data.ellipsis,
+ });
+ this.setCurrentIndexByName(data.active || this.getCurrentName());
+ },
+ trigger(eventName, child) {
+ const { currentIndex } = this.data;
+ const data = this.getChildData(currentIndex, child);
+ if (!isDef(data)) {
+ return;
+ }
+ this.$emit(eventName, data);
+ },
+ onTap(event) {
+ const { index } = event.currentTarget.dataset;
+ const child = this.children[index];
+ if (child.data.disabled) {
+ this.trigger('disabled', child);
+ return;
+ }
+ this.onBeforeChange(index).then(() => {
+ this.setCurrentIndex(index);
+ nextTick(() => {
+ this.trigger('click');
+ });
+ });
+ },
+ // correct the index of active tab
+ setCurrentIndexByName(name) {
+ const { children = [] } = this;
+ const matched = children.filter((child) => child.getComputedName() === name);
+ if (matched.length) {
+ this.setCurrentIndex(matched[0].index);
+ }
+ },
+ setCurrentIndex(currentIndex) {
+ const { data, children = [] } = this;
+ if (!isDef(currentIndex) ||
+ currentIndex >= children.length ||
+ currentIndex < 0) {
+ return;
+ }
+ groupSetData(this, () => {
+ children.forEach((item, index) => {
+ const active = index === currentIndex;
+ if (active !== item.data.active || !item.inited) {
+ item.updateRender(active, this);
+ }
+ });
+ });
+ if (currentIndex === data.currentIndex) {
+ return;
+ }
+ const shouldEmitChange = data.currentIndex !== null;
+ this.setData({ currentIndex });
+ requestAnimationFrame(() => {
+ this.resize();
+ this.scrollIntoView();
+ });
+ nextTick(() => {
+ this.trigger('input');
+ if (shouldEmitChange) {
+ this.trigger('change');
+ }
+ });
+ },
+ getCurrentName() {
+ const activeTab = this.children[this.data.currentIndex];
+ if (activeTab) {
+ return activeTab.getComputedName();
+ }
+ },
+ resize() {
+ if (this.data.type !== 'line') {
+ return;
+ }
+ const { currentIndex, ellipsis, skipTransition } = this.data;
+ Promise.all([
+ getAllRect(this, '.van-tab'),
+ getRect(this, '.van-tabs__line'),
+ ]).then(([rects = [], lineRect]) => {
+ const rect = rects[currentIndex];
+ if (rect == null) {
+ return;
+ }
+ let lineOffsetLeft = rects
+ .slice(0, currentIndex)
+ .reduce((prev, curr) => prev + curr.width, 0);
+ lineOffsetLeft +=
+ (rect.width - lineRect.width) / 2 + (ellipsis ? 0 : 8);
+ this.setData({ lineOffsetLeft, inited: true });
+ this.swiping = true;
+ if (skipTransition) {
+ // waiting transition end
+ setTimeout(() => {
+ this.setData({ skipTransition: false });
+ }, this.data.duration);
+ }
+ });
+ },
+ // scroll active tab into view
+ scrollIntoView() {
+ const { currentIndex, scrollable, scrollWithAnimation } = this.data;
+ if (!scrollable) {
+ return;
+ }
+ Promise.all([
+ getAllRect(this, '.van-tab'),
+ getRect(this, '.van-tabs__nav'),
+ ]).then(([tabRects, navRect]) => {
+ const tabRect = tabRects[currentIndex];
+ const offsetLeft = tabRects
+ .slice(0, currentIndex)
+ .reduce((prev, curr) => prev + curr.width, 0);
+ this.setData({
+ scrollLeft: offsetLeft - (navRect.width - tabRect.width) / 2,
+ });
+ if (!scrollWithAnimation) {
+ nextTick(() => {
+ this.setData({ scrollWithAnimation: true });
+ });
+ }
+ });
+ },
+ onTouchScroll(event) {
+ this.$emit('scroll', event.detail);
+ },
+ onTouchStart(event) {
+ if (!this.data.swipeable)
+ return;
+ this.swiping = true;
+ this.touchStart(event);
+ },
+ onTouchMove(event) {
+ if (!this.data.swipeable || !this.swiping)
+ return;
+ this.touchMove(event);
+ },
+ // watch swipe touch end
+ onTouchEnd() {
+ if (!this.data.swipeable || !this.swiping)
+ return;
+ const { direction, deltaX, offsetX } = this;
+ const minSwipeDistance = 50;
+ if (direction === 'horizontal' && offsetX >= minSwipeDistance) {
+ const index = this.getAvaiableTab(deltaX);
+ if (index !== -1) {
+ this.onBeforeChange(index).then(() => this.setCurrentIndex(index));
+ }
+ }
+ this.swiping = false;
+ },
+ getAvaiableTab(direction) {
+ const { tabs, currentIndex } = this.data;
+ const step = direction > 0 ? -1 : 1;
+ for (let i = step; currentIndex + i < tabs.length && currentIndex + i >= 0; i += step) {
+ const index = currentIndex + i;
+ if (index >= 0 &&
+ index < tabs.length &&
+ tabs[index] &&
+ !tabs[index].disabled) {
+ return index;
+ }
+ }
+ return -1;
+ },
+ onBeforeChange(index) {
+ const { useBeforeChange } = this.data;
+ if (!useBeforeChange) {
+ return Promise.resolve();
+ }
+ return new Promise((resolve, reject) => {
+ this.$emit('before-change', Object.assign(Object.assign({}, this.getChildData(index)), { callback: (status) => (status ? resolve() : reject()) }));
+ });
+ },
+ getChildData(index, child) {
+ const currentChild = child || this.children[index];
+ if (!isDef(currentChild)) {
+ return;
+ }
+ return {
+ index: currentChild.index,
+ name: currentChild.getComputedName(),
+ title: currentChild.data.title,
+ };
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/tabs/index.json b/wxcomponents/vant/dist/tabs/index.json
new file mode 100644
index 0000000..19c0bc3
--- /dev/null
+++ b/wxcomponents/vant/dist/tabs/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-info": "../info/index",
+ "van-sticky": "../sticky/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/tabs/index.vue b/wxcomponents/vant/dist/tabs/index.vue
new file mode 100644
index 0000000..089f366
--- /dev/null
+++ b/wxcomponents/vant/dist/tabs/index.vue
@@ -0,0 +1,340 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tabs/index.wxml b/wxcomponents/vant/dist/tabs/index.wxml
new file mode 100644
index 0000000..f0a01bb
--- /dev/null
+++ b/wxcomponents/vant/dist/tabs/index.wxml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/tabs/index.wxs b/wxcomponents/vant/dist/tabs/index.wxs
new file mode 100644
index 0000000..4059c7f
--- /dev/null
+++ b/wxcomponents/vant/dist/tabs/index.wxs
@@ -0,0 +1,83 @@
+/* eslint-disable */
+var utils = require('../wxs/utils.wxs');
+var style = require('../wxs/style.wxs');
+
+function tabClass(active, ellipsis) {
+ var classes = ['tab-class'];
+
+ if (active) {
+ classes.push('tab-active-class');
+ }
+
+ if (ellipsis) {
+ classes.push('van-ellipsis');
+ }
+
+ return classes.join(' ');
+}
+
+function tabStyle(data) {
+ var titleColor = data.active
+ ? data.titleActiveColor
+ : data.titleInactiveColor;
+
+ var ellipsis = data.scrollable && data.ellipsis;
+
+ // card theme color
+ if (data.type === 'card') {
+ return style({
+ 'border-color': data.color,
+ 'background-color': !data.disabled && data.active ? data.color : null,
+ color: titleColor || (!data.disabled && !data.active ? data.color : null),
+ 'flex-basis': ellipsis ? 88 / data.swipeThreshold + '%' : null,
+ });
+ }
+
+ return style({
+ color: titleColor,
+ 'flex-basis': ellipsis ? 88 / data.swipeThreshold + '%' : null,
+ });
+}
+
+function navStyle(color, type) {
+ return style({
+ 'border-color': type === 'card' && color ? color : null,
+ });
+}
+
+function trackStyle(data) {
+ if (!data.animated) {
+ return '';
+ }
+
+ return style({
+ left: -100 * data.currentIndex + '%',
+ 'transition-duration': data.duration + 's',
+ '-webkit-transition-duration': data.duration + 's',
+ });
+}
+
+function lineStyle(data) {
+ return style({
+ width: utils.addUnit(data.lineWidth),
+ opacity: data.inited ? 1 : 0,
+ transform: 'translateX(' + data.lineOffsetLeft + 'px)',
+ '-webkit-transform': 'translateX(' + data.lineOffsetLeft + 'px)',
+ 'background-color': data.color,
+ height: data.lineHeight !== -1 ? utils.addUnit(data.lineHeight) : null,
+ 'border-radius':
+ data.lineHeight !== -1 ? utils.addUnit(data.lineHeight) : null,
+ 'transition-duration': !data.skipTransition ? data.duration + 's' : null,
+ '-webkit-transition-duration': !data.skipTransition
+ ? data.duration + 's'
+ : null,
+ });
+}
+
+module.exports = {
+ tabClass: tabClass,
+ tabStyle: tabStyle,
+ trackStyle: trackStyle,
+ lineStyle: lineStyle,
+ navStyle: navStyle,
+};
diff --git a/wxcomponents/vant/dist/tabs/index.wxss b/wxcomponents/vant/dist/tabs/index.wxss
new file mode 100644
index 0000000..c14379e
--- /dev/null
+++ b/wxcomponents/vant/dist/tabs/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-tabs{-webkit-tap-highlight-color:transparent;position:relative}.van-tabs__wrap{display:flex;overflow:hidden}.van-tabs__wrap--scrollable .van-tab{flex:0 0 22%}.van-tabs__wrap--scrollable .van-tab--complete{flex:1 0 auto!important;padding:0 12px}.van-tabs__wrap--scrollable .van-tabs__nav--complete{padding-left:8px;padding-right:8px}.van-tabs__scroll{background-color:var(--tabs-nav-background-color,#fff)}.van-tabs__scroll--line{box-sizing:initial;height:calc(100% + 15px)}.van-tabs__scroll--card{border:1px solid var(--tabs-default-color,#ee0a24);border-radius:2px;box-sizing:border-box;margin:0 var(--padding-md,16px);width:calc(100% - var(--padding-md, 16px)*2)}.van-tabs__scroll::-webkit-scrollbar{display:none}.van-tabs__nav{display:flex;position:relative;-webkit-user-select:none;user-select:none}.van-tabs__nav--card{box-sizing:border-box;height:var(--tabs-card-height,30px)}.van-tabs__nav--card .van-tab{border-right:1px solid var(--tabs-default-color,#ee0a24);color:var(--tabs-default-color,#ee0a24);line-height:calc(var(--tabs-card-height, 30px) - 2px)}.van-tabs__nav--card .van-tab:last-child{border-right:none}.van-tabs__nav--card .van-tab.van-tab--active{background-color:var(--tabs-default-color,#ee0a24);color:#fff}.van-tabs__nav--card .van-tab--disabled{color:var(--tab-disabled-text-color,#c8c9cc)}.van-tabs__line{background-color:var(--tabs-bottom-bar-color,#ee0a24);border-radius:var(--tabs-bottom-bar-height,3px);bottom:0;height:var(--tabs-bottom-bar-height,3px);left:0;opacity:0;position:absolute;z-index:1}.van-tabs__track{height:100%;position:relative;width:100%}.van-tabs__track--animated{display:flex;transition-property:left}.van-tabs__content{overflow:hidden}.van-tabs--line .van-tabs__wrap{height:var(--tabs-line-height,44px)}.van-tabs--card .van-tabs__wrap{height:var(--tabs-card-height,30px)}.van-tab{box-sizing:border-box;color:var(--tab-text-color,#646566);cursor:pointer;flex:1;font-size:var(--tab-font-size,14px);line-height:var(--tabs-line-height,44px);min-width:0;padding:0 5px;position:relative;text-align:center}.van-tab--active{color:var(--tab-active-text-color,#323233);font-weight:var(--font-weight-bold,500)}.van-tab--disabled{color:var(--tab-disabled-text-color,#c8c9cc)}.van-tab__title__info{display:inline-block;position:relative!important;top:-1px!important;transform:translateX(0)!important}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tag/index.d.ts b/wxcomponents/vant/dist/tag/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/tag/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/tag/index.js b/wxcomponents/vant/dist/tag/index.js
new file mode 100644
index 0000000..9704ef0
--- /dev/null
+++ b/wxcomponents/vant/dist/tag/index.js
@@ -0,0 +1,21 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ size: String,
+ mark: Boolean,
+ color: String,
+ plain: Boolean,
+ round: Boolean,
+ textColor: String,
+ type: {
+ type: String,
+ value: 'default',
+ },
+ closeable: Boolean,
+ },
+ methods: {
+ onClose() {
+ this.$emit('close');
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/tag/index.json b/wxcomponents/vant/dist/tag/index.json
new file mode 100644
index 0000000..0a336c0
--- /dev/null
+++ b/wxcomponents/vant/dist/tag/index.json
@@ -0,0 +1,6 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/tag/index.vue b/wxcomponents/vant/dist/tag/index.vue
new file mode 100644
index 0000000..b54d3b5
--- /dev/null
+++ b/wxcomponents/vant/dist/tag/index.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tag/index.wxml b/wxcomponents/vant/dist/tag/index.wxml
new file mode 100644
index 0000000..59352dd
--- /dev/null
+++ b/wxcomponents/vant/dist/tag/index.wxml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/tag/index.wxs b/wxcomponents/vant/dist/tag/index.wxs
new file mode 100644
index 0000000..12d1668
--- /dev/null
+++ b/wxcomponents/vant/dist/tag/index.wxs
@@ -0,0 +1,13 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+
+function rootStyle(data) {
+ return style({
+ 'background-color': data.plain ? '' : data.color,
+ color: data.textColor || data.plain ? data.textColor || data.color : '',
+ });
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+};
diff --git a/wxcomponents/vant/dist/tag/index.wxss b/wxcomponents/vant/dist/tag/index.wxss
new file mode 100644
index 0000000..0f0cbae
--- /dev/null
+++ b/wxcomponents/vant/dist/tag/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-tag{align-items:center;border-radius:var(--tag-border-radius,2px);color:var(--tag-text-color,#fff);display:inline-flex;font-size:var(--tag-font-size,12px);line-height:var(--tag-line-height,16px);padding:var(--tag-padding,0 4px);position:relative}.van-tag--default{background-color:var(--tag-default-color,#969799)}.van-tag--default.van-tag--plain{color:var(--tag-default-color,#969799)}.van-tag--danger{background-color:var(--tag-danger-color,#ee0a24)}.van-tag--danger.van-tag--plain{color:var(--tag-danger-color,#ee0a24)}.van-tag--primary{background-color:var(--tag-primary-color,#1989fa)}.van-tag--primary.van-tag--plain{color:var(--tag-primary-color,#1989fa)}.van-tag--success{background-color:var(--tag-success-color,#07c160)}.van-tag--success.van-tag--plain{color:var(--tag-success-color,#07c160)}.van-tag--warning{background-color:var(--tag-warning-color,#ff976a)}.van-tag--warning.van-tag--plain{color:var(--tag-warning-color,#ff976a)}.van-tag--plain{background-color:var(--tag-plain-background-color,#fff)}.van-tag--plain:before{border:1px solid;border-radius:inherit;bottom:0;content:"";left:0;pointer-events:none;position:absolute;right:0;top:0}.van-tag--medium{padding:var(--tag-medium-padding,2px 6px)}.van-tag--large{border-radius:var(--tag-large-border-radius,4px);font-size:var(--tag-large-font-size,14px);padding:var(--tag-large-padding,4px 8px)}.van-tag--mark{border-radius:0 var(--tag-round-border-radius,var(--tag-round-border-radius,999px)) var(--tag-round-border-radius,var(--tag-round-border-radius,999px)) 0}.van-tag--mark:after{content:"";display:block;width:2px}.van-tag--round{border-radius:var(--tag-round-border-radius,999px)}.van-tag__close{margin-left:2px;min-width:1em}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/toast/index.d.ts b/wxcomponents/vant/dist/toast/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/toast/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/toast/index.js b/wxcomponents/vant/dist/toast/index.js
new file mode 100644
index 0000000..414e746
--- /dev/null
+++ b/wxcomponents/vant/dist/toast/index.js
@@ -0,0 +1,29 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ props: {
+ show: Boolean,
+ mask: Boolean,
+ message: String,
+ forbidClick: Boolean,
+ zIndex: {
+ type: Number,
+ value: 1000,
+ },
+ type: {
+ type: String,
+ value: 'text',
+ },
+ loadingType: {
+ type: String,
+ value: 'circular',
+ },
+ position: {
+ type: String,
+ value: 'middle',
+ },
+ },
+ methods: {
+ // for prevent touchmove
+ noop() { },
+ },
+});
diff --git a/wxcomponents/vant/dist/toast/index.json b/wxcomponents/vant/dist/toast/index.json
new file mode 100644
index 0000000..9b1b78c
--- /dev/null
+++ b/wxcomponents/vant/dist/toast/index.json
@@ -0,0 +1,9 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-loading": "../loading/index",
+ "van-overlay": "../overlay/index",
+ "van-transition": "../transition/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/toast/index.vue b/wxcomponents/vant/dist/toast/index.vue
new file mode 100644
index 0000000..8f60f74
--- /dev/null
+++ b/wxcomponents/vant/dist/toast/index.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+ {{ message }}
+
+
+
+
+
+
+
+
+ {{ message }}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/toast/index.wxml b/wxcomponents/vant/dist/toast/index.wxml
new file mode 100644
index 0000000..69f143e
--- /dev/null
+++ b/wxcomponents/vant/dist/toast/index.wxml
@@ -0,0 +1,36 @@
+
+
+
+
+ {{ message }}
+
+
+
+
+
+
+
+
+ {{ message }}
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/toast/index.wxss b/wxcomponents/vant/dist/toast/index.wxss
new file mode 100644
index 0000000..3b7a34e
--- /dev/null
+++ b/wxcomponents/vant/dist/toast/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-toast{word-wrap:break-word;align-items:center;background-color:var(--toast-background-color,rgba(0,0,0,.7));border-radius:var(--toast-border-radius,8px);box-sizing:initial;color:var(--toast-text-color,#fff);display:flex;flex-direction:column;font-size:var(--toast-font-size,14px);justify-content:center;line-height:var(--toast-line-height,20px);white-space:pre-wrap}.van-toast__container{left:50%;max-width:var(--toast-max-width,70%);position:fixed;top:50%;transform:translate(-50%,-50%);width:-webkit-fit-content;width:fit-content}.van-toast--text{min-width:var(--toast-text-min-width,96px);padding:var(--toast-text-padding,8px 12px)}.van-toast--icon{min-height:var(--toast-default-min-height,88px);padding:var(--toast-default-padding,16px);width:var(--toast-default-width,88px)}.van-toast--icon .van-toast__icon{font-size:var(--toast-icon-size,36px)}.van-toast--icon .van-toast__text{padding-top:8px}.van-toast__loading{margin:10px 0}.van-toast--top{transform:translateY(-30vh)}.van-toast--bottom{transform:translateY(30vh)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/toast/toast.d.ts b/wxcomponents/vant/dist/toast/toast.d.ts
new file mode 100644
index 0000000..de2a4a2
--- /dev/null
+++ b/wxcomponents/vant/dist/toast/toast.d.ts
@@ -0,0 +1,28 @@
+///
+///
+type ToastMessage = string | number;
+type ToastContext = WechatMiniprogram.Component.TrivialInstance | WechatMiniprogram.Page.TrivialInstance;
+interface ToastOptions {
+ show?: boolean;
+ type?: string;
+ mask?: boolean;
+ zIndex?: number;
+ context?: (() => ToastContext) | ToastContext;
+ position?: string;
+ duration?: number;
+ selector?: string;
+ forbidClick?: boolean;
+ loadingType?: string;
+ message?: ToastMessage;
+ onClose?: () => void;
+}
+declare function Toast(toastOptions: ToastOptions | ToastMessage): WechatMiniprogram.Component.TrivialInstance | undefined;
+declare namespace Toast {
+ var loading: (options: ToastMessage | ToastOptions) => WechatMiniprogram.Component.TrivialInstance | undefined;
+ var success: (options: ToastMessage | ToastOptions) => WechatMiniprogram.Component.TrivialInstance | undefined;
+ var fail: (options: ToastMessage | ToastOptions) => WechatMiniprogram.Component.TrivialInstance | undefined;
+ var clear: () => void;
+ var setDefaultOptions: (options: ToastOptions) => void;
+ var resetDefaultOptions: () => void;
+}
+export default Toast;
diff --git a/wxcomponents/vant/dist/toast/toast.js b/wxcomponents/vant/dist/toast/toast.js
new file mode 100644
index 0000000..51d1426
--- /dev/null
+++ b/wxcomponents/vant/dist/toast/toast.js
@@ -0,0 +1,68 @@
+import { isObj } from '../common/validator';
+const defaultOptions = {
+ type: 'text',
+ mask: false,
+ message: '',
+ show: true,
+ zIndex: 1000,
+ duration: 2000,
+ position: 'middle',
+ forbidClick: false,
+ loadingType: 'circular',
+ selector: '#van-toast',
+};
+let queue = [];
+let currentOptions = Object.assign({}, defaultOptions);
+function parseOptions(message) {
+ return isObj(message) ? message : { message };
+}
+function getContext() {
+ const pages = getCurrentPages();
+ return pages[pages.length - 1];
+}
+function Toast(toastOptions) {
+ const options = Object.assign(Object.assign({}, currentOptions), parseOptions(toastOptions));
+ const context = (typeof options.context === 'function'
+ ? options.context()
+ : options.context) || getContext();
+ const toast = context.selectComponent(options.selector);
+ if (!toast) {
+ console.warn('未找到 van-toast 节点,请确认 selector 及 context 是否正确');
+ return;
+ }
+ delete options.context;
+ delete options.selector;
+ toast.clear = () => {
+ toast.setData({ show: false });
+ if (options.onClose) {
+ options.onClose();
+ }
+ };
+ queue.push(toast);
+ toast.setData(options);
+ clearTimeout(toast.timer);
+ if (options.duration != null && options.duration > 0) {
+ toast.timer = setTimeout(() => {
+ toast.clear();
+ queue = queue.filter((item) => item !== toast);
+ }, options.duration);
+ }
+ return toast;
+}
+const createMethod = (type) => (options) => Toast(Object.assign({ type }, parseOptions(options)));
+Toast.loading = createMethod('loading');
+Toast.success = createMethod('success');
+Toast.fail = createMethod('fail');
+Toast.clear = () => {
+ queue.forEach((toast) => {
+ toast.clear();
+ });
+ queue = [];
+};
+Toast.setDefaultOptions = (options) => {
+ Object.assign(currentOptions, options);
+};
+Toast.resetDefaultOptions = () => {
+ currentOptions = Object.assign({}, defaultOptions);
+};
+export default Toast;
diff --git a/wxcomponents/vant/dist/transition/index.d.ts b/wxcomponents/vant/dist/transition/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/transition/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/transition/index.js b/wxcomponents/vant/dist/transition/index.js
new file mode 100644
index 0000000..59bb984
--- /dev/null
+++ b/wxcomponents/vant/dist/transition/index.js
@@ -0,0 +1,13 @@
+import { VantComponent } from '../common/component';
+import { transition } from '../mixins/transition';
+VantComponent({
+ classes: [
+ 'enter-class',
+ 'enter-active-class',
+ 'enter-to-class',
+ 'leave-class',
+ 'leave-active-class',
+ 'leave-to-class',
+ ],
+ mixins: [transition(true)],
+});
diff --git a/wxcomponents/vant/dist/transition/index.json b/wxcomponents/vant/dist/transition/index.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/wxcomponents/vant/dist/transition/index.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
diff --git a/wxcomponents/vant/dist/transition/index.vue b/wxcomponents/vant/dist/transition/index.vue
new file mode 100644
index 0000000..cbfba0c
--- /dev/null
+++ b/wxcomponents/vant/dist/transition/index.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/transition/index.wxml b/wxcomponents/vant/dist/transition/index.wxml
new file mode 100644
index 0000000..2743785
--- /dev/null
+++ b/wxcomponents/vant/dist/transition/index.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+
diff --git a/wxcomponents/vant/dist/transition/index.wxs b/wxcomponents/vant/dist/transition/index.wxs
new file mode 100644
index 0000000..e0babf6
--- /dev/null
+++ b/wxcomponents/vant/dist/transition/index.wxs
@@ -0,0 +1,17 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+
+function rootStyle(data) {
+ return style([
+ {
+ '-webkit-transition-duration': data.currentDuration + 'ms',
+ 'transition-duration': data.currentDuration + 'ms',
+ },
+ data.display ? null : 'display: none',
+ data.customStyle,
+ ]);
+}
+
+module.exports = {
+ rootStyle: rootStyle,
+};
diff --git a/wxcomponents/vant/dist/transition/index.wxss b/wxcomponents/vant/dist/transition/index.wxss
new file mode 100644
index 0000000..3a3d37f
--- /dev/null
+++ b/wxcomponents/vant/dist/transition/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-transition{transition-timing-function:ease}.van-fade-enter-active,.van-fade-leave-active{transition-property:opacity}.van-fade-enter,.van-fade-leave-to{opacity:0}.van-fade-down-enter-active,.van-fade-down-leave-active,.van-fade-left-enter-active,.van-fade-left-leave-active,.van-fade-right-enter-active,.van-fade-right-leave-active,.van-fade-up-enter-active,.van-fade-up-leave-active{transition-property:opacity,transform}.van-fade-up-enter,.van-fade-up-leave-to{opacity:0;transform:translate3d(0,100%,0)}.van-fade-down-enter,.van-fade-down-leave-to{opacity:0;transform:translate3d(0,-100%,0)}.van-fade-left-enter,.van-fade-left-leave-to{opacity:0;transform:translate3d(-100%,0,0)}.van-fade-right-enter,.van-fade-right-leave-to{opacity:0;transform:translate3d(100%,0,0)}.van-slide-down-enter-active,.van-slide-down-leave-active,.van-slide-left-enter-active,.van-slide-left-leave-active,.van-slide-right-enter-active,.van-slide-right-leave-active,.van-slide-up-enter-active,.van-slide-up-leave-active{transition-property:transform}.van-slide-up-enter,.van-slide-up-leave-to{transform:translate3d(0,100%,0)}.van-slide-down-enter,.van-slide-down-leave-to{transform:translate3d(0,-100%,0)}.van-slide-left-enter,.van-slide-left-leave-to{transform:translate3d(-100%,0,0)}.van-slide-right-enter,.van-slide-right-leave-to{transform:translate3d(100%,0,0)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tree-select/index.d.ts b/wxcomponents/vant/dist/tree-select/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/tree-select/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/tree-select/index.js b/wxcomponents/vant/dist/tree-select/index.js
new file mode 100644
index 0000000..a850ed6
--- /dev/null
+++ b/wxcomponents/vant/dist/tree-select/index.js
@@ -0,0 +1,68 @@
+import { VantComponent } from '../common/component';
+VantComponent({
+ classes: [
+ 'main-item-class',
+ 'content-item-class',
+ 'main-active-class',
+ 'content-active-class',
+ 'main-disabled-class',
+ 'content-disabled-class',
+ ],
+ props: {
+ items: {
+ type: Array,
+ observer: 'updateSubItems',
+ },
+ activeId: null,
+ mainActiveIndex: {
+ type: Number,
+ value: 0,
+ observer: 'updateSubItems',
+ },
+ height: {
+ type: null,
+ value: 300,
+ },
+ max: {
+ type: Number,
+ value: Infinity,
+ },
+ selectedIcon: {
+ type: String,
+ value: 'success',
+ },
+ },
+ data: {
+ subItems: [],
+ },
+ methods: {
+ // 当一个子项被选择时
+ onSelectItem(event) {
+ const { item } = event.currentTarget.dataset;
+ const isArray = Array.isArray(this.data.activeId);
+ // 判断有没有超出右侧选择的最大数
+ const isOverMax = isArray && this.data.activeId.length >= this.data.max;
+ // 判断该项有没有被选中, 如果有被选中,则忽视是否超出的条件
+ const isSelected = isArray
+ ? this.data.activeId.indexOf(item.id) > -1
+ : this.data.activeId === item.id;
+ if (!item.disabled && (!isOverMax || isSelected)) {
+ this.$emit('click-item', item);
+ }
+ },
+ // 当一个导航被点击时
+ onClickNav(event) {
+ const index = event.detail;
+ const item = this.data.items[index];
+ if (!item.disabled) {
+ this.$emit('click-nav', { index });
+ }
+ },
+ // 更新子项列表
+ updateSubItems() {
+ const { items, mainActiveIndex } = this.data;
+ const { children = [] } = items[mainActiveIndex] || {};
+ this.setData({ subItems: children });
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/tree-select/index.json b/wxcomponents/vant/dist/tree-select/index.json
new file mode 100644
index 0000000..42991a2
--- /dev/null
+++ b/wxcomponents/vant/dist/tree-select/index.json
@@ -0,0 +1,8 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-sidebar": "../sidebar/index",
+ "van-sidebar-item": "../sidebar-item/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/tree-select/index.vue b/wxcomponents/vant/dist/tree-select/index.vue
new file mode 100644
index 0000000..cf5b83e
--- /dev/null
+++ b/wxcomponents/vant/dist/tree-select/index.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/tree-select/index.wxml b/wxcomponents/vant/dist/tree-select/index.wxml
new file mode 100644
index 0000000..2663e52
--- /dev/null
+++ b/wxcomponents/vant/dist/tree-select/index.wxml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.text }}
+
+
+
+
diff --git a/wxcomponents/vant/dist/tree-select/index.wxs b/wxcomponents/vant/dist/tree-select/index.wxs
new file mode 100644
index 0000000..b1cbb39
--- /dev/null
+++ b/wxcomponents/vant/dist/tree-select/index.wxs
@@ -0,0 +1,12 @@
+/* eslint-disable */
+var array = require('../wxs/array.wxs');
+
+function isActive (activeList, itemId) {
+ if (array.isArray(activeList)) {
+ return activeList.indexOf(itemId) > -1;
+ }
+
+ return activeList === itemId;
+}
+
+module.exports.isActive = isActive;
diff --git a/wxcomponents/vant/dist/tree-select/index.wxss b/wxcomponents/vant/dist/tree-select/index.wxss
new file mode 100644
index 0000000..5bef0ac
--- /dev/null
+++ b/wxcomponents/vant/dist/tree-select/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-tree-select{display:flex;font-size:var(--tree-select-font-size,14px);position:relative;-webkit-user-select:none;user-select:none}.van-tree-select__nav{--sidebar-padding:12px 8px 12px 12px;background-color:var(--tree-select-nav-background-color,#f7f8fa);flex:1}.van-tree-select__nav__inner{height:100%;width:100%!important}.van-tree-select__content{background-color:var(--tree-select-content-background-color,#fff);flex:2}.van-tree-select__item{font-weight:700;line-height:var(--tree-select-item-height,44px);padding:0 32px 0 var(--padding-md,16px);position:relative}.van-tree-select__item--active{color:var(--tree-select-item-active-color,#ee0a24)}.van-tree-select__item--disabled{color:var(--tree-select-item-disabled-color,#c8c9cc)}.van-tree-select__selected{position:absolute;right:var(--padding-md,16px);top:50%;transform:translateY(-50%)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/uploader/index.d.ts b/wxcomponents/vant/dist/uploader/index.d.ts
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/index.d.ts
@@ -0,0 +1 @@
+export {};
diff --git a/wxcomponents/vant/dist/uploader/index.js b/wxcomponents/vant/dist/uploader/index.js
new file mode 100644
index 0000000..007bc38
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/index.js
@@ -0,0 +1,165 @@
+import { VantComponent } from '../common/component';
+import { isImageFile, chooseFile, isVideoFile } from './utils';
+import { imageProps, videoProps, mediaProps, messageFileProps } from './shared';
+import { isBoolean, isPromise } from '../common/validator';
+VantComponent({
+ props: Object.assign(Object.assign(Object.assign(Object.assign({ disabled: Boolean, multiple: Boolean, uploadText: String, useBeforeRead: Boolean, afterRead: null, beforeRead: null, previewSize: {
+ type: null,
+ value: 80,
+ }, name: {
+ type: null,
+ value: '',
+ }, accept: {
+ type: String,
+ value: 'image',
+ }, fileList: {
+ type: Array,
+ value: [],
+ observer: 'formatFileList',
+ }, maxSize: {
+ type: Number,
+ value: Number.MAX_VALUE,
+ }, maxCount: {
+ type: Number,
+ value: 100,
+ }, deletable: {
+ type: Boolean,
+ value: true,
+ }, showUpload: {
+ type: Boolean,
+ value: true,
+ }, previewImage: {
+ type: Boolean,
+ value: true,
+ }, previewFullImage: {
+ type: Boolean,
+ value: true,
+ }, imageFit: {
+ type: String,
+ value: 'scaleToFill',
+ }, uploadIcon: {
+ type: String,
+ value: 'photograph',
+ } }, imageProps), videoProps), mediaProps), messageFileProps),
+ data: {
+ lists: [],
+ isInCount: true,
+ },
+ methods: {
+ formatFileList() {
+ const { fileList = [], maxCount } = this.data;
+ const lists = fileList.map((item) => (Object.assign(Object.assign({}, item), { isImage: isImageFile(item), isVideo: isVideoFile(item), deletable: isBoolean(item.deletable) ? item.deletable : true })));
+ this.setData({ lists, isInCount: lists.length < maxCount });
+ },
+ getDetail(index) {
+ return {
+ name: this.data.name,
+ index: index == null ? this.data.fileList.length : index,
+ };
+ },
+ startUpload() {
+ const { maxCount, multiple, lists, disabled } = this.data;
+ if (disabled)
+ return;
+ chooseFile(Object.assign(Object.assign({}, this.data), { maxCount: maxCount - lists.length }))
+ .then((res) => {
+ this.onBeforeRead(multiple ? res : res[0]);
+ })
+ .catch((error) => {
+ this.$emit('error', error);
+ });
+ },
+ onBeforeRead(file) {
+ const { beforeRead, useBeforeRead } = this.data;
+ let res = true;
+ if (typeof beforeRead === 'function') {
+ res = beforeRead(file, this.getDetail());
+ }
+ if (useBeforeRead) {
+ res = new Promise((resolve, reject) => {
+ this.$emit('before-read', Object.assign(Object.assign({ file }, this.getDetail()), { callback: (ok) => {
+ ok ? resolve() : reject();
+ } }));
+ });
+ }
+ if (!res) {
+ return;
+ }
+ if (isPromise(res)) {
+ res.then((data) => this.onAfterRead(data || file));
+ }
+ else {
+ this.onAfterRead(file);
+ }
+ },
+ onAfterRead(file) {
+ const { maxSize, afterRead } = this.data;
+ const oversize = Array.isArray(file)
+ ? file.some((item) => item.size > maxSize)
+ : file.size > maxSize;
+ if (oversize) {
+ this.$emit('oversize', Object.assign({ file }, this.getDetail()));
+ return;
+ }
+ if (typeof afterRead === 'function') {
+ afterRead(file, this.getDetail());
+ }
+ this.$emit('after-read', Object.assign({ file }, this.getDetail()));
+ },
+ deleteItem(event) {
+ const { index } = event.currentTarget.dataset;
+ this.$emit('delete', Object.assign(Object.assign({}, this.getDetail(index)), { file: this.data.fileList[index] }));
+ },
+ onPreviewImage(event) {
+ if (!this.data.previewFullImage)
+ return;
+ const { index } = event.currentTarget.dataset;
+ const { lists, showmenu } = this.data;
+ const item = lists[index];
+ wx.previewImage({
+ urls: lists.filter((item) => isImageFile(item)).map((item) => item.url),
+ current: item.url,
+ showmenu,
+ fail() {
+ wx.showToast({ title: '预览图片失败', icon: 'none' });
+ },
+ });
+ },
+ onPreviewVideo(event) {
+ if (!this.data.previewFullImage)
+ return;
+ const { index } = event.currentTarget.dataset;
+ const { lists } = this.data;
+ const sources = [];
+ const current = lists.reduce((sum, cur, curIndex) => {
+ if (!isVideoFile(cur)) {
+ return sum;
+ }
+ sources.push(Object.assign(Object.assign({}, cur), { type: 'video' }));
+ if (curIndex < index) {
+ sum++;
+ }
+ return sum;
+ }, 0);
+ wx.previewMedia({
+ sources,
+ current,
+ fail() {
+ wx.showToast({ title: '预览视频失败', icon: 'none' });
+ },
+ });
+ },
+ onPreviewFile(event) {
+ const { index } = event.currentTarget.dataset;
+ wx.openDocument({
+ filePath: this.data.lists[index].url,
+ showMenu: true,
+ });
+ },
+ onClickPreview(event) {
+ const { index } = event.currentTarget.dataset;
+ const item = this.data.lists[index];
+ this.$emit('click-preview', Object.assign(Object.assign({}, item), this.getDetail(index)));
+ },
+ },
+});
diff --git a/wxcomponents/vant/dist/uploader/index.json b/wxcomponents/vant/dist/uploader/index.json
new file mode 100644
index 0000000..e00a588
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/index.json
@@ -0,0 +1,7 @@
+{
+ "component": true,
+ "usingComponents": {
+ "van-icon": "../icon/index",
+ "van-loading": "../loading/index"
+ }
+}
diff --git a/wxcomponents/vant/dist/uploader/index.vue b/wxcomponents/vant/dist/uploader/index.vue
new file mode 100644
index 0000000..9352c38
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/index.vue
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
+
+
+ {{ item.name || item.url }}
+
+
+
+
+ {{ item.message }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ uploadText }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/uploader/index.wxml b/wxcomponents/vant/dist/uploader/index.wxml
new file mode 100644
index 0000000..50fb0c8
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/index.wxml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.name || item.url }}
+
+
+
+
+ {{ item.message }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ uploadText }}
+
+
+
+
diff --git a/wxcomponents/vant/dist/uploader/index.wxs b/wxcomponents/vant/dist/uploader/index.wxs
new file mode 100644
index 0000000..c567ec2
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/index.wxs
@@ -0,0 +1,17 @@
+/* eslint-disable */
+var style = require('../wxs/style.wxs');
+var addUnit = require('../wxs/add-unit.wxs');
+
+function sizeStyle(data) {
+ return "Array" === data.previewSize.constructor ? style({
+ width: addUnit(data.previewSize[0]),
+ height: addUnit(data.previewSize[1]),
+ }) : style({
+ width: addUnit(data.previewSize),
+ height: addUnit(data.previewSize),
+ });
+}
+
+module.exports = {
+ sizeStyle: sizeStyle,
+};
diff --git a/wxcomponents/vant/dist/uploader/index.wxss b/wxcomponents/vant/dist/uploader/index.wxss
new file mode 100644
index 0000000..11f8696
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/index.wxss
@@ -0,0 +1 @@
+@import '../common/index.wxss';.van-uploader{display:inline-block;position:relative}.van-uploader__wrapper{display:flex;flex-wrap:wrap}.van-uploader__slot:empty{display:none}.van-uploader__slot:not(:empty)+.van-uploader__upload{display:none!important}.van-uploader__upload{align-items:center;background-color:var(--uploader-upload-background-color,#f7f8fa);box-sizing:border-box;display:flex;flex-direction:column;height:var(--uploader-size,80px);justify-content:center;margin:0 8px 8px 0;position:relative;width:var(--uploader-size,80px)}.van-uploader__upload:active{background-color:var(--uploader-upload-active-color,#f2f3f5)}.van-uploader__upload-icon{color:var(--uploader-icon-color,#dcdee0);font-size:var(--uploader-icon-size,24px)}.van-uploader__upload-text{color:var(--uploader-text-color,#969799);font-size:var(--uploader-text-font-size,12px);margin-top:var(--padding-xs,8px)}.van-uploader__upload--disabled{opacity:var(--uploader-disabled-opacity,.5)}.van-uploader__preview{cursor:pointer;margin:0 8px 8px 0;position:relative}.van-uploader__preview-image{display:block;height:var(--uploader-size,80px);overflow:hidden;width:var(--uploader-size,80px)}.van-uploader__preview-delete,.van-uploader__preview-delete:after{height:var(--uploader-delete-icon-size,14px);position:absolute;right:0;top:0;width:var(--uploader-delete-icon-size,14px)}.van-uploader__preview-delete:after{background-color:var(--uploader-delete-background-color,rgba(0,0,0,.7));border-radius:0 0 0 12px;content:""}.van-uploader__preview-delete-icon{color:var(--uploader-delete-color,#fff);font-size:var(--uploader-delete-icon-size,14px);position:absolute;right:0;top:0;transform:scale(.7) translate(10%,-10%);z-index:1}.van-uploader__file{align-items:center;background-color:var(--uploader-file-background-color,#f7f8fa);display:flex;flex-direction:column;height:var(--uploader-size,80px);justify-content:center;width:var(--uploader-size,80px)}.van-uploader__file-icon{color:var(--uploader-file-icon-color,#646566);font-size:var(--uploader-file-icon-size,20px)}.van-uploader__file-name{box-sizing:border-box;color:var(--uploader-file-name-text-color,#646566);font-size:var(--uploader-file-name-font-size,12px);margin-top:var(--uploader-file-name-margin-top,8px);padding:var(--uploader-file-name-padding,0 4px);text-align:center;width:100%}.van-uploader__mask{align-items:center;background-color:var(--uploader-mask-background-color,rgba(50,50,51,.88));bottom:0;color:#fff;display:flex;flex-direction:column;justify-content:center;left:0;position:absolute;right:0;top:0}.van-uploader__mask-icon{font-size:var(--uploader-mask-icon-size,22px)}.van-uploader__mask-message{font-size:var(--uploader-mask-message-font-size,12px);line-height:var(--uploader-mask-message-line-height,14px);margin-top:6px;padding:0 var(--padding-base,4px)}.van-uploader__loading{color:var(--uploader-loading-icon-color,#fff)!important;height:var(--uploader-loading-icon-size,22px);width:var(--uploader-loading-icon-size,22px)}
\ No newline at end of file
diff --git a/wxcomponents/vant/dist/uploader/shared.d.ts b/wxcomponents/vant/dist/uploader/shared.d.ts
new file mode 100644
index 0000000..e0a0d7e
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/shared.d.ts
@@ -0,0 +1,53 @@
+export declare const imageProps: {
+ sizeType: {
+ type: ArrayConstructor;
+ value: string[];
+ };
+ capture: {
+ type: ArrayConstructor;
+ value: string[];
+ };
+ showmenu: {
+ type: BooleanConstructor;
+ value: boolean;
+ };
+};
+export declare const videoProps: {
+ capture: {
+ type: ArrayConstructor;
+ value: string[];
+ };
+ compressed: {
+ type: BooleanConstructor;
+ value: boolean;
+ };
+ maxDuration: {
+ type: NumberConstructor;
+ value: number;
+ };
+ camera: {
+ type: StringConstructor;
+ value: string;
+ };
+};
+export declare const mediaProps: {
+ capture: {
+ type: ArrayConstructor;
+ value: string[];
+ };
+ mediaType: {
+ type: ArrayConstructor;
+ value: string[];
+ };
+ maxDuration: {
+ type: NumberConstructor;
+ value: number;
+ };
+ camera: {
+ type: StringConstructor;
+ value: string;
+ };
+};
+export declare const messageFileProps: {
+ extension: null;
+};
diff --git a/wxcomponents/vant/dist/uploader/shared.js b/wxcomponents/vant/dist/uploader/shared.js
new file mode 100644
index 0000000..3ac6f8a
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/shared.js
@@ -0,0 +1,57 @@
+// props for image
+export const imageProps = {
+ sizeType: {
+ type: Array,
+ value: ['original', 'compressed'],
+ },
+ capture: {
+ type: Array,
+ value: ['album', 'camera'],
+ },
+ showmenu: {
+ type: Boolean,
+ value: true,
+ },
+};
+// props for video
+export const videoProps = {
+ capture: {
+ type: Array,
+ value: ['album', 'camera'],
+ },
+ compressed: {
+ type: Boolean,
+ value: true,
+ },
+ maxDuration: {
+ type: Number,
+ value: 60,
+ },
+ camera: {
+ type: String,
+ value: 'back',
+ },
+};
+// props for media
+export const mediaProps = {
+ capture: {
+ type: Array,
+ value: ['album', 'camera'],
+ },
+ mediaType: {
+ type: Array,
+ value: ['image', 'video'],
+ },
+ maxDuration: {
+ type: Number,
+ value: 60,
+ },
+ camera: {
+ type: String,
+ value: 'back',
+ },
+};
+// props for file
+export const messageFileProps = {
+ extension: null,
+};
diff --git a/wxcomponents/vant/dist/uploader/utils.d.ts b/wxcomponents/vant/dist/uploader/utils.d.ts
new file mode 100644
index 0000000..1e76ee6
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/utils.d.ts
@@ -0,0 +1,24 @@
+export interface File {
+ url: string;
+ size?: number;
+ name?: string;
+ type: string;
+ duration?: number;
+ time?: number;
+ isImage?: boolean;
+ isVideo?: boolean;
+}
+export declare function isImageFile(item: File): boolean;
+export declare function isVideoFile(item: File): boolean;
+export declare function chooseFile({ accept, multiple, capture, compressed, maxDuration, sizeType, camera, maxCount, mediaType, extension, }: {
+ accept: any;
+ multiple: any;
+ capture: any;
+ compressed: any;
+ maxDuration: any;
+ sizeType: any;
+ camera: any;
+ maxCount: any;
+ mediaType: any;
+ extension: any;
+}): Promise;
diff --git a/wxcomponents/vant/dist/uploader/utils.js b/wxcomponents/vant/dist/uploader/utils.js
new file mode 100644
index 0000000..62451e4
--- /dev/null
+++ b/wxcomponents/vant/dist/uploader/utils.js
@@ -0,0 +1,80 @@
+import { pickExclude } from '../common/utils';
+import { isImageUrl, isVideoUrl } from '../common/validator';
+export function isImageFile(item) {
+ if (item.isImage != null) {
+ return item.isImage;
+ }
+ if (item.type) {
+ return item.type === 'image';
+ }
+ if (item.url) {
+ return isImageUrl(item.url);
+ }
+ return false;
+}
+export function isVideoFile(item) {
+ if (item.isVideo != null) {
+ return item.isVideo;
+ }
+ if (item.type) {
+ return item.type === 'video';
+ }
+ if (item.url) {
+ return isVideoUrl(item.url);
+ }
+ return false;
+}
+function formatImage(res) {
+ return res.tempFiles.map((item) => (Object.assign(Object.assign({}, pickExclude(item, ['path'])), { type: 'image', url: item.path, thumb: item.path })));
+}
+function formatVideo(res) {
+ return [
+ Object.assign(Object.assign({}, pickExclude(res, ['tempFilePath', 'thumbTempFilePath', 'errMsg'])), { type: 'video', url: res.tempFilePath, thumb: res.thumbTempFilePath }),
+ ];
+}
+function formatMedia(res) {
+ return res.tempFiles.map((item) => (Object.assign(Object.assign({}, pickExclude(item, ['fileType', 'thumbTempFilePath', 'tempFilePath'])), { type: res.type, url: item.tempFilePath, thumb: res.type === 'video' ? item.thumbTempFilePath : item.tempFilePath })));
+}
+function formatFile(res) {
+ return res.tempFiles.map((item) => (Object.assign(Object.assign({}, pickExclude(item, ['path'])), { url: item.path })));
+}
+export function chooseFile({ accept, multiple, capture, compressed, maxDuration, sizeType, camera, maxCount, mediaType, extension, }) {
+ return new Promise((resolve, reject) => {
+ switch (accept) {
+ case 'image':
+ wx.chooseImage({
+ count: multiple ? Math.min(maxCount, 9) : 1,
+ sourceType: capture,
+ sizeType,
+ success: (res) => resolve(formatImage(res)),
+ fail: reject,
+ });
+ break;
+ case 'media':
+ wx.chooseMedia({
+ count: multiple ? Math.min(maxCount, 9) : 1,
+ mediaType,
+ sourceType: capture,
+ maxDuration,
+ sizeType,
+ camera,
+ success: (res) => resolve(formatMedia(res)),
+ fail: reject,
+ });
+ break;
+ case 'video':
+ wx.chooseVideo({
+ sourceType: capture,
+ compressed,
+ maxDuration,
+ camera,
+ success: (res) => resolve(formatVideo(res)),
+ fail: reject,
+ });
+ break;
+ default:
+ wx.chooseMessageFile(Object.assign(Object.assign({ count: multiple ? maxCount : 1, type: accept }, (extension ? { extension } : {})), { success: (res) => resolve(formatFile(res)), fail: reject }));
+ break;
+ }
+ });
+}
diff --git a/wxcomponents/vant/dist/wxs/add-unit.wxs b/wxcomponents/vant/dist/wxs/add-unit.wxs
new file mode 100644
index 0000000..4f33462
--- /dev/null
+++ b/wxcomponents/vant/dist/wxs/add-unit.wxs
@@ -0,0 +1,12 @@
+/* eslint-disable */
+var REGEXP = getRegExp('^-?\d+(\.\d+)?$');
+
+function addUnit(value) {
+ if (value == null) {
+ return undefined;
+ }
+
+ return REGEXP.test('' + value) ? value + 'px' : value;
+}
+
+module.exports = addUnit;
diff --git a/wxcomponents/vant/dist/wxs/array.wxs b/wxcomponents/vant/dist/wxs/array.wxs
new file mode 100644
index 0000000..7832416
--- /dev/null
+++ b/wxcomponents/vant/dist/wxs/array.wxs
@@ -0,0 +1,5 @@
+function isArray(array) {
+ return array && (array.constructor === 'Array' || (typeof Array !== 'undefined' && Array.isArray(array)));
+}
+
+module.exports.isArray = isArray;
diff --git a/wxcomponents/vant/dist/wxs/bem.wxs b/wxcomponents/vant/dist/wxs/bem.wxs
new file mode 100644
index 0000000..1efa129
--- /dev/null
+++ b/wxcomponents/vant/dist/wxs/bem.wxs
@@ -0,0 +1,39 @@
+/* eslint-disable */
+var array = require('./array.wxs');
+var object = require('./object.wxs');
+var PREFIX = 'van-';
+
+function join(name, mods) {
+ name = PREFIX + name;
+ mods = mods.map(function(mod) {
+ return name + '--' + mod;
+ });
+ mods.unshift(name);
+ return mods.join(' ');
+}
+
+function traversing(mods, conf) {
+ if (!conf) {
+ return;
+ }
+
+ if (typeof conf === 'string' || typeof conf === 'number') {
+ mods.push(conf);
+ } else if (array.isArray(conf)) {
+ conf.forEach(function(item) {
+ traversing(mods, item);
+ });
+ } else if (typeof conf === 'object') {
+ object.keys(conf).forEach(function(key) {
+ conf[key] && mods.push(key);
+ });
+ }
+}
+
+function bem(name, conf) {
+ var mods = [];
+ traversing(mods, conf);
+ return join(name, mods);
+}
+
+module.exports = bem;
diff --git a/wxcomponents/vant/dist/wxs/memoize.wxs b/wxcomponents/vant/dist/wxs/memoize.wxs
new file mode 100644
index 0000000..8f7f46d
--- /dev/null
+++ b/wxcomponents/vant/dist/wxs/memoize.wxs
@@ -0,0 +1,55 @@
+/**
+ * Simple memoize
+ * wxs doesn't support fn.apply, so this memoize only support up to 2 args
+ */
+/* eslint-disable */
+
+function isPrimitive(value) {
+ var type = typeof value;
+ return (
+ type === 'boolean' ||
+ type === 'number' ||
+ type === 'string' ||
+ type === 'undefined' ||
+ value === null
+ );
+}
+
+// mock simple fn.call in wxs
+function call(fn, args) {
+ if (args.length === 2) {
+ return fn(args[0], args[1]);
+ }
+
+ if (args.length === 1) {
+ return fn(args[0]);
+ }
+
+ return fn();
+}
+
+function serializer(args) {
+ if (args.length === 1 && isPrimitive(args[0])) {
+ return args[0];
+ }
+ var obj = {};
+ for (var i = 0; i < args.length; i++) {
+ obj['key' + i] = args[i];
+ }
+ return JSON.stringify(obj);
+}
+
+function memoize(fn) {
+ var cache = {};
+
+ return function() {
+ var key = serializer(arguments);
+ if (cache[key] === undefined) {
+ cache[key] = call(fn, arguments);
+ }
+
+ return cache[key];
+ };
+}
+
+module.exports = memoize;
diff --git a/wxcomponents/vant/dist/wxs/object.wxs b/wxcomponents/vant/dist/wxs/object.wxs
new file mode 100644
index 0000000..e077107
--- /dev/null
+++ b/wxcomponents/vant/dist/wxs/object.wxs
@@ -0,0 +1,13 @@
+/* eslint-disable */
+var REGEXP = getRegExp('{|}|"', 'g');
+
+function keys(obj) {
+ return JSON.stringify(obj)
+ .replace(REGEXP, '')
+ .split(',')
+ .map(function(item) {
+ return item.split(':')[0];
+ });
+}
+
+module.exports.keys = keys;
diff --git a/wxcomponents/vant/dist/wxs/style.wxs b/wxcomponents/vant/dist/wxs/style.wxs
new file mode 100644
index 0000000..d88ca7c
--- /dev/null
+++ b/wxcomponents/vant/dist/wxs/style.wxs
@@ -0,0 +1,42 @@
+/* eslint-disable */
+var object = require('./object.wxs');
+var array = require('./array.wxs');
+
+function kebabCase(word) {
+ var newWord = word
+ .replace(getRegExp("[A-Z]", 'g'), function (i) {
+ return '-' + i;
+ })
+ .toLowerCase()
+
+ return newWord;
+}
+
+function style(styles) {
+ if (array.isArray(styles)) {
+ return styles
+ .filter(function (item) {
+ return item != null && item !== '';
+ })
+ .map(function (item) {
+ return style(item);
+ })
+ .join(';');
+ }
+
+ if ('Object' === styles.constructor) {
+ return object
+ .keys(styles)
+ .filter(function (key) {
+ return styles[key] != null && styles[key] !== '';
+ })
+ .map(function (key) {
+ return [kebabCase(key), [styles[key]]].join(':');
+ })
+ .join(';');
+ }
+
+ return styles;
+}
+
+module.exports = style;
diff --git a/wxcomponents/vant/dist/wxs/utils.wxs b/wxcomponents/vant/dist/wxs/utils.wxs
new file mode 100644
index 0000000..f66d33a
--- /dev/null
+++ b/wxcomponents/vant/dist/wxs/utils.wxs
@@ -0,0 +1,10 @@
+/* eslint-disable */
+var bem = require('./bem.wxs');
+var memoize = require('./memoize.wxs');
+var addUnit = require('./add-unit.wxs');
+
+module.exports = {
+ bem: memoize(bem),
+ memoize: memoize,
+ addUnit: addUnit
+};